From a7f3726a0a7f16bccb664871fe35e8d2f2572f00 Mon Sep 17 00:00:00 2001
From: Dennis Friis <peavey@placid.dk>
Date: Mon, 3 Nov 2008 07:00:17 +0000
Subject: Do a bit of cleanup I never got around to do, before moving from my
 repo to sf.net

---
 data/new_1-1.wlk                               |   Bin 40004 -> 0 bytes
 data/new_10-1.wlk                              |   Bin 16388 -> 0 bytes
 data/new_2-1.wlk                               |   Bin 16388 -> 0 bytes
 data/new_3-1.wlk                               |   Bin 40004 -> 0 bytes
 data/new_4-1.wlk                               |   Bin 3604 -> 0 bytes
 data/new_5-1.wlk                               |   Bin 16388 -> 0 bytes
 data/new_6-1.wlk                               |   Bin 16388 -> 0 bytes
 data/new_7-1.wlk                               |   Bin 40004 -> 0 bytes
 data/new_8-1.wlk                               |   Bin 16004 -> 0 bytes
 data/new_9-1.wlk                               |   Bin 19100 -> 0 bytes
 data/resnametable.txt                          |   607 --
 misc/src/Makefile                              |   126 -
 misc/src/Makefile-optimized                    |    49 -
 misc/src/char/GNUmakefile                      |    17 -
 misc/src/char/Makefile                         |    17 -
 misc/src/char/char.c                           |  3149 -------
 misc/src/char/char.h                           |    31 -
 misc/src/char/diff.diff                        |  4242 ---------
 misc/src/char/int_guild.c                      |  1441 ---
 misc/src/char/int_guild.h                      |    16 -
 misc/src/char/int_party.c                      |   595 --
 misc/src/char/int_party.h                      |    14 -
 misc/src/char/int_pet.c                        |   364 -
 misc/src/char/int_pet.h                        |    13 -
 misc/src/char/int_storage.c                    |   504 --
 misc/src/char/int_storage.h                    |    16 -
 misc/src/char/inter.c                          |   561 --
 misc/src/char/inter.h                          |    19 -
 misc/src/char_sql/GNUmakefile                  |    20 -
 misc/src/char_sql/Makefile                     |    20 -
 misc/src/char_sql/char.c                       |  2917 -------
 misc/src/char_sql/char.h                       |    82 -
 misc/src/char_sql/int_guild.c                  |  1604 ----
 misc/src/char_sql/int_guild.h                  |    10 -
 misc/src/char_sql/int_party.c                  |   755 --
 misc/src/char_sql/int_party.h                  |     8 -
 misc/src/char_sql/int_pet.c                    |   324 -
 misc/src/char_sql/int_pet.h                    |    12 -
 misc/src/char_sql/int_storage.c                |   366 -
 misc/src/char_sql/int_storage.h                |    13 -
 misc/src/char_sql/inter.c                      |   573 --
 misc/src/char_sql/inter.h                      |    44 -
 misc/src/char_sql/itemdb.c                     |   247 -
 misc/src/char_sql/itemdb.h                     |    34 -
 misc/src/char_sql/make.sh                      |    11 -
 misc/src/char_sql/readme.txt                   |   250 -
 misc/src/char_sql/strlib.c                     |    79 -
 misc/src/char_sql/strlib.h                     |    10 -
 misc/src/common/GNUmakefile                    |    13 -
 misc/src/common/Makefile                       |    13 -
 misc/src/common/core.c                         |   152 -
 misc/src/common/core.h                         |    12 -
 misc/src/common/db.c                           |   500 --
 misc/src/common/db.h                           |    47 -
 misc/src/common/grfio.c                        |   948 --
 misc/src/common/grfio.h                        |    16 -
 misc/src/common/lock.c                         |    37 -
 misc/src/common/lock.h                         |     8 -
 misc/src/common/malloc.c                       |    44 -
 misc/src/common/malloc.h                       |    25 -
 misc/src/common/mmo.h                          |   304 -
 misc/src/common/nullpo.c                       |    90 -
 misc/src/common/nullpo.h                       |   222 -
 misc/src/common/socket.c                       |   439 -
 misc/src/common/socket.h                       |    96 -
 misc/src/common/timer.c                        |   312 -
 misc/src/common/timer.h                        |    45 -
 misc/src/common/utils.c                        |   108 -
 misc/src/common/utils.h                        |    33 -
 misc/src/common/version.h                      |    27 -
 misc/src/ladmin/GNUmakefile                    |    14 -
 misc/src/ladmin/Makefile                       |    14 -
 misc/src/ladmin/ladmin.c                       |  4385 ----------
 misc/src/ladmin/ladmin.h                       |    11 -
 misc/src/ladmin/md5calc.c                      |   237 -
 misc/src/ladmin/md5calc.h                      |     8 -
 misc/src/login/GNUmakefile                     |    13 -
 misc/src/login/Makefile                        |    13 -
 misc/src/login/login.c                         |  3698 --------
 misc/src/login/login.h                         |    38 -
 misc/src/login/md5calc.c                       |   237 -
 misc/src/login/md5calc.h                       |     8 -
 misc/src/login_sql/GNUmakefile                 |    17 -
 misc/src/login_sql/Makefile                    |    17 -
 misc/src/login_sql/login.c                     |  1682 ----
 misc/src/login_sql/login.h                     |    41 -
 misc/src/login_sql/make.sh                     |     6 -
 misc/src/login_sql/md5calc.c                   |   236 -
 misc/src/login_sql/md5calc.h                   |     7 -
 misc/src/login_sql/readme.txt                  |   120 -
 misc/src/login_sql/strlib.c                    |    58 -
 misc/src/login_sql/strlib.h                    |     9 -
 misc/src/login_sql/timer.h                     |    43 -
 misc/src/map/GNUmakefile                       |    72 -
 misc/src/map/Makefile                          |    72 -
 misc/src/map/atcommand.c                       |  7753 -----------------
 misc/src/map/atcommand.h                       |   245 -
 misc/src/map/battle.c                          |  5374 ------------
 misc/src/map/battle.h                          |   342 -
 misc/src/map/chat.c                            |   373 -
 misc/src/map/chat.h                            |    22 -
 misc/src/map/chrif.c                           |  1016 ---
 misc/src/map/chrif.h                           |    29 -
 misc/src/map/clif.c                            |  9826 ---------------------
 misc/src/map/clif.h                            |   280 -
 misc/src/map/guild.c                           |  1543 ----
 misc/src/map/guild.h                           |    87 -
 misc/src/map/intif.c                           |  1042 ---
 misc/src/map/intif.h                           |    56 -
 misc/src/map/itemdb.c                          |   882 --
 misc/src/map/itemdb.h                          |    84 -
 misc/src/map/mail.c                            |   324 -
 misc/src/map/mail.h                            |     9 -
 misc/src/map/map.c                             |  2009 -----
 misc/src/map/map.h                             |   705 --
 misc/src/map/mob.c                             |  4216 ---------
 misc/src/map/mob.h                             |   137 -
 misc/src/map/npc.c                             |  2035 -----
 misc/src/map/npc.h                             |    48 -
 misc/src/map/party.c                           |   644 --
 misc/src/map/party.h                           |    47 -
 misc/src/map/path.c                            |   404 -
 misc/src/map/pc.c                              |  7485 ----------------
 misc/src/map/pc.h                              |   186 -
 misc/src/map/pet.c                             |  1651 ----
 misc/src/map/pet.h                             |    69 -
 misc/src/map/script.c                          |  6700 --------------
 misc/src/map/script.h                          |    39 -
 misc/src/map/skill.c                           | 10637 -----------------------
 misc/src/map/skill.h                           |   842 --
 misc/src/map/storage.c                         |   576 --
 misc/src/map/storage.h                         |    38 -
 misc/src/map/trade.c                           |   255 -
 misc/src/map/trade.h                           |    13 -
 misc/src/map/vending.c                         |   163 -
 misc/src/map/vending.h                         |    12 -
 misc/src/mra.patch                             |    69 -
 misc/src/tmw-server.dev                        |   169 -
 misc/src/tmw-server.layout                     |    43 -
 misc/src/tool/Makefile                         |     6 -
 misc/src/tool/adduser.c                        |    96 -
 misc/src/tool/backup                           |   100 -
 misc/src/tool/cgi/addaccount.cgi               |   204 -
 misc/src/tool/checkversion                     |    85 -
 misc/src/tool/convert.c                        |   296 -
 misc/src/tool/getlogincount                    |   122 -
 misc/src/tool/ladmin                           |  3793 --------
 misc/src/tool/mapcheck.sh                      |    34 -
 misc/src/tool/mapchecker.sh                    |    56 -
 misc/src/txt-converter/char/GNUmakefile        |    13 -
 misc/src/txt-converter/char/Makefile           |    13 -
 misc/src/txt-converter/char/char-converter.c   |   842 --
 misc/src/txt-converter/char/char.h             |    38 -
 misc/src/txt-converter/char/int_guild.h        |    10 -
 misc/src/txt-converter/char/int_party.h        |    11 -
 misc/src/txt-converter/char/int_pet.h          |    12 -
 misc/src/txt-converter/char/int_storage.h      |    11 -
 misc/src/txt-converter/char/inter.h            |    28 -
 misc/src/txt-converter/char/strlib.c           |    66 -
 misc/src/txt-converter/char/strlib.h           |     9 -
 misc/src/txt-converter/common/mmo.h            |   280 -
 misc/src/txt-converter/login/GNUmakefile       |    11 -
 misc/src/txt-converter/login/Makefile          |    11 -
 misc/src/txt-converter/login/login-converter.c |   252 -
 misc/src/webserver/Makefile                    |    26 -
 misc/src/webserver/doc/API.txt                 |    50 -
 misc/src/webserver/doc/README                  |    11 -
 misc/src/webserver/generate.c                  |    38 -
 misc/src/webserver/htmlstyle.c                 |    51 -
 misc/src/webserver/logs.c                      |     8 -
 misc/src/webserver/main.c                      |   142 -
 misc/src/webserver/pages/about.c               |     6 -
 misc/src/webserver/pages/notdone.c             |     5 -
 misc/src/webserver/pages/sample.c              |    24 -
 misc/src/webserver/parse.c                     |   135 -
 misc/src/xand1_1.patch                         |   132 -
 176 files changed, 109213 deletions(-)
 delete mode 100644 data/new_1-1.wlk
 delete mode 100644 data/new_10-1.wlk
 delete mode 100644 data/new_2-1.wlk
 delete mode 100644 data/new_3-1.wlk
 delete mode 100644 data/new_4-1.wlk
 delete mode 100644 data/new_5-1.wlk
 delete mode 100644 data/new_6-1.wlk
 delete mode 100644 data/new_7-1.wlk
 delete mode 100644 data/new_8-1.wlk
 delete mode 100644 data/new_9-1.wlk
 delete mode 100644 data/resnametable.txt
 delete mode 100644 misc/src/Makefile
 delete mode 100644 misc/src/Makefile-optimized
 delete mode 100644 misc/src/char/GNUmakefile
 delete mode 100644 misc/src/char/Makefile
 delete mode 100644 misc/src/char/char.c
 delete mode 100644 misc/src/char/char.h
 delete mode 100644 misc/src/char/diff.diff
 delete mode 100644 misc/src/char/int_guild.c
 delete mode 100644 misc/src/char/int_guild.h
 delete mode 100644 misc/src/char/int_party.c
 delete mode 100644 misc/src/char/int_party.h
 delete mode 100644 misc/src/char/int_pet.c
 delete mode 100644 misc/src/char/int_pet.h
 delete mode 100644 misc/src/char/int_storage.c
 delete mode 100644 misc/src/char/int_storage.h
 delete mode 100644 misc/src/char/inter.c
 delete mode 100644 misc/src/char/inter.h
 delete mode 100644 misc/src/char_sql/GNUmakefile
 delete mode 100644 misc/src/char_sql/Makefile
 delete mode 100644 misc/src/char_sql/char.c
 delete mode 100644 misc/src/char_sql/char.h
 delete mode 100644 misc/src/char_sql/int_guild.c
 delete mode 100644 misc/src/char_sql/int_guild.h
 delete mode 100644 misc/src/char_sql/int_party.c
 delete mode 100644 misc/src/char_sql/int_party.h
 delete mode 100644 misc/src/char_sql/int_pet.c
 delete mode 100644 misc/src/char_sql/int_pet.h
 delete mode 100644 misc/src/char_sql/int_storage.c
 delete mode 100644 misc/src/char_sql/int_storage.h
 delete mode 100644 misc/src/char_sql/inter.c
 delete mode 100644 misc/src/char_sql/inter.h
 delete mode 100644 misc/src/char_sql/itemdb.c
 delete mode 100644 misc/src/char_sql/itemdb.h
 delete mode 100644 misc/src/char_sql/make.sh
 delete mode 100644 misc/src/char_sql/readme.txt
 delete mode 100644 misc/src/char_sql/strlib.c
 delete mode 100644 misc/src/char_sql/strlib.h
 delete mode 100644 misc/src/common/GNUmakefile
 delete mode 100644 misc/src/common/Makefile
 delete mode 100644 misc/src/common/core.c
 delete mode 100644 misc/src/common/core.h
 delete mode 100644 misc/src/common/db.c
 delete mode 100644 misc/src/common/db.h
 delete mode 100644 misc/src/common/grfio.c
 delete mode 100644 misc/src/common/grfio.h
 delete mode 100644 misc/src/common/lock.c
 delete mode 100644 misc/src/common/lock.h
 delete mode 100644 misc/src/common/malloc.c
 delete mode 100644 misc/src/common/malloc.h
 delete mode 100644 misc/src/common/mmo.h
 delete mode 100644 misc/src/common/nullpo.c
 delete mode 100644 misc/src/common/nullpo.h
 delete mode 100644 misc/src/common/socket.c
 delete mode 100644 misc/src/common/socket.h
 delete mode 100644 misc/src/common/timer.c
 delete mode 100644 misc/src/common/timer.h
 delete mode 100644 misc/src/common/utils.c
 delete mode 100644 misc/src/common/utils.h
 delete mode 100644 misc/src/common/version.h
 delete mode 100644 misc/src/ladmin/GNUmakefile
 delete mode 100644 misc/src/ladmin/Makefile
 delete mode 100644 misc/src/ladmin/ladmin.c
 delete mode 100644 misc/src/ladmin/ladmin.h
 delete mode 100644 misc/src/ladmin/md5calc.c
 delete mode 100644 misc/src/ladmin/md5calc.h
 delete mode 100644 misc/src/login/GNUmakefile
 delete mode 100644 misc/src/login/Makefile
 delete mode 100644 misc/src/login/login.c
 delete mode 100644 misc/src/login/login.h
 delete mode 100644 misc/src/login/md5calc.c
 delete mode 100644 misc/src/login/md5calc.h
 delete mode 100644 misc/src/login_sql/GNUmakefile
 delete mode 100644 misc/src/login_sql/Makefile
 delete mode 100644 misc/src/login_sql/login.c
 delete mode 100644 misc/src/login_sql/login.h
 delete mode 100644 misc/src/login_sql/make.sh
 delete mode 100644 misc/src/login_sql/md5calc.c
 delete mode 100644 misc/src/login_sql/md5calc.h
 delete mode 100644 misc/src/login_sql/readme.txt
 delete mode 100644 misc/src/login_sql/strlib.c
 delete mode 100644 misc/src/login_sql/strlib.h
 delete mode 100644 misc/src/login_sql/timer.h
 delete mode 100644 misc/src/map/GNUmakefile
 delete mode 100644 misc/src/map/Makefile
 delete mode 100644 misc/src/map/atcommand.c
 delete mode 100644 misc/src/map/atcommand.h
 delete mode 100644 misc/src/map/battle.c
 delete mode 100644 misc/src/map/battle.h
 delete mode 100644 misc/src/map/chat.c
 delete mode 100644 misc/src/map/chat.h
 delete mode 100644 misc/src/map/chrif.c
 delete mode 100644 misc/src/map/chrif.h
 delete mode 100644 misc/src/map/clif.c
 delete mode 100644 misc/src/map/clif.h
 delete mode 100644 misc/src/map/guild.c
 delete mode 100644 misc/src/map/guild.h
 delete mode 100644 misc/src/map/intif.c
 delete mode 100644 misc/src/map/intif.h
 delete mode 100644 misc/src/map/itemdb.c
 delete mode 100644 misc/src/map/itemdb.h
 delete mode 100644 misc/src/map/mail.c
 delete mode 100644 misc/src/map/mail.h
 delete mode 100644 misc/src/map/map.c
 delete mode 100644 misc/src/map/map.h
 delete mode 100644 misc/src/map/mob.c
 delete mode 100644 misc/src/map/mob.h
 delete mode 100644 misc/src/map/npc.c
 delete mode 100644 misc/src/map/npc.h
 delete mode 100644 misc/src/map/party.c
 delete mode 100644 misc/src/map/party.h
 delete mode 100644 misc/src/map/path.c
 delete mode 100644 misc/src/map/pc.c
 delete mode 100644 misc/src/map/pc.h
 delete mode 100644 misc/src/map/pet.c
 delete mode 100644 misc/src/map/pet.h
 delete mode 100644 misc/src/map/script.c
 delete mode 100644 misc/src/map/script.h
 delete mode 100644 misc/src/map/skill.c
 delete mode 100644 misc/src/map/skill.h
 delete mode 100644 misc/src/map/storage.c
 delete mode 100644 misc/src/map/storage.h
 delete mode 100644 misc/src/map/trade.c
 delete mode 100644 misc/src/map/trade.h
 delete mode 100644 misc/src/map/vending.c
 delete mode 100644 misc/src/map/vending.h
 delete mode 100644 misc/src/mra.patch
 delete mode 100644 misc/src/tmw-server.dev
 delete mode 100644 misc/src/tmw-server.layout
 delete mode 100644 misc/src/tool/Makefile
 delete mode 100644 misc/src/tool/adduser.c
 delete mode 100644 misc/src/tool/backup
 delete mode 100644 misc/src/tool/cgi/addaccount.cgi
 delete mode 100644 misc/src/tool/checkversion
 delete mode 100644 misc/src/tool/convert.c
 delete mode 100644 misc/src/tool/getlogincount
 delete mode 100644 misc/src/tool/ladmin
 delete mode 100644 misc/src/tool/mapcheck.sh
 delete mode 100644 misc/src/tool/mapchecker.sh
 delete mode 100644 misc/src/txt-converter/char/GNUmakefile
 delete mode 100644 misc/src/txt-converter/char/Makefile
 delete mode 100644 misc/src/txt-converter/char/char-converter.c
 delete mode 100644 misc/src/txt-converter/char/char.h
 delete mode 100644 misc/src/txt-converter/char/int_guild.h
 delete mode 100644 misc/src/txt-converter/char/int_party.h
 delete mode 100644 misc/src/txt-converter/char/int_pet.h
 delete mode 100644 misc/src/txt-converter/char/int_storage.h
 delete mode 100644 misc/src/txt-converter/char/inter.h
 delete mode 100644 misc/src/txt-converter/char/strlib.c
 delete mode 100644 misc/src/txt-converter/char/strlib.h
 delete mode 100644 misc/src/txt-converter/common/mmo.h
 delete mode 100644 misc/src/txt-converter/login/GNUmakefile
 delete mode 100644 misc/src/txt-converter/login/Makefile
 delete mode 100644 misc/src/txt-converter/login/login-converter.c
 delete mode 100644 misc/src/webserver/Makefile
 delete mode 100644 misc/src/webserver/doc/API.txt
 delete mode 100644 misc/src/webserver/doc/README
 delete mode 100644 misc/src/webserver/generate.c
 delete mode 100644 misc/src/webserver/htmlstyle.c
 delete mode 100644 misc/src/webserver/logs.c
 delete mode 100644 misc/src/webserver/main.c
 delete mode 100644 misc/src/webserver/pages/about.c
 delete mode 100644 misc/src/webserver/pages/notdone.c
 delete mode 100644 misc/src/webserver/pages/sample.c
 delete mode 100644 misc/src/webserver/parse.c
 delete mode 100644 misc/src/xand1_1.patch

diff --git a/data/new_1-1.wlk b/data/new_1-1.wlk
deleted file mode 100644
index f6faa2a..0000000
Binary files a/data/new_1-1.wlk and /dev/null differ
diff --git a/data/new_10-1.wlk b/data/new_10-1.wlk
deleted file mode 100644
index 94373c3..0000000
Binary files a/data/new_10-1.wlk and /dev/null differ
diff --git a/data/new_2-1.wlk b/data/new_2-1.wlk
deleted file mode 100644
index 961e6e4..0000000
Binary files a/data/new_2-1.wlk and /dev/null differ
diff --git a/data/new_3-1.wlk b/data/new_3-1.wlk
deleted file mode 100644
index b7d006d..0000000
Binary files a/data/new_3-1.wlk and /dev/null differ
diff --git a/data/new_4-1.wlk b/data/new_4-1.wlk
deleted file mode 100644
index de55e4e..0000000
Binary files a/data/new_4-1.wlk and /dev/null differ
diff --git a/data/new_5-1.wlk b/data/new_5-1.wlk
deleted file mode 100644
index d4cd889..0000000
Binary files a/data/new_5-1.wlk and /dev/null differ
diff --git a/data/new_6-1.wlk b/data/new_6-1.wlk
deleted file mode 100644
index dcfa789..0000000
Binary files a/data/new_6-1.wlk and /dev/null differ
diff --git a/data/new_7-1.wlk b/data/new_7-1.wlk
deleted file mode 100644
index ddcfbe4..0000000
Binary files a/data/new_7-1.wlk and /dev/null differ
diff --git a/data/new_8-1.wlk b/data/new_8-1.wlk
deleted file mode 100644
index 2756267..0000000
Binary files a/data/new_8-1.wlk and /dev/null differ
diff --git a/data/new_9-1.wlk b/data/new_9-1.wlk
deleted file mode 100644
index d0e3aea..0000000
Binary files a/data/new_9-1.wlk and /dev/null differ
diff --git a/data/resnametable.txt b/data/resnametable.txt
deleted file mode 100644
index 25dbeef..0000000
--- a/data/resnametable.txt
+++ /dev/null
@@ -1,607 +0,0 @@
-new_1-1.gnd#new_zone01.gnd#
-new_2-1.gnd#new_zone01.gnd#
-new_3-1.gnd#new_zone01.gnd#
-new_4-1.gnd#new_zone01.gnd#
-new_5-1.gnd#new_zone01.gnd#
-new_1-2.gnd#new_zone02.gnd#
-new_2-2.gnd#new_zone02.gnd#
-new_3-2.gnd#new_zone02.gnd#
-new_4-2.gnd#new_zone02.gnd#
-new_5-2.gnd#new_zone02.gnd#
-new_1-3.gnd#new_zone03.gnd#
-new_2-3.gnd#new_zone03.gnd#
-new_3-3.gnd#new_zone03.gnd#
-new_4-3.gnd#new_zone03.gnd#
-new_5-3.gnd#new_zone03.gnd#
-new_1-4.gnd#new_zone04.gnd#
-new_2-4.gnd#new_zone04.gnd#
-new_3-4.gnd#new_zone04.gnd#
-new_4-4.gnd#new_zone04.gnd#
-new_5-4.gnd#new_zone04.gnd#
-force_1-1.gnd#force_map1.gnd#
-force_2-1.gnd#force_map1.gnd#
-force_3-1.gnd#force_map1.gnd#
-force_1-2.gnd#force_map2.gnd#
-force_2-2.gnd#force_map2.gnd#
-force_3-2.gnd#force_map2.gnd#
-force_1-3.gnd#force_map3.gnd#
-force_2-3.gnd#force_map3.gnd#
-force_3-3.gnd#force_map3.gnd#
-hunter_1-1.gnd#job_hunter.gnd#
-hunter_2-1.gnd#job_hunter.gnd#
-hunter_3-1.gnd#job_hunter.gnd#
-knight_1-1.gnd#job_knight.gnd#
-knight_2-1.gnd#job_knight.gnd#
-knight_3-1.gnd#job_knight.gnd#
-priest_1-1.gnd#job_priest.gnd#
-priest_2-1.gnd#job_priest.gnd#
-priest_3-1.gnd#job_priest.gnd#
-sword_1-1.gnd#job_sword1.gnd#
-sword_2-1.gnd#job_sword1.gnd#
-sword_3-1.gnd#job_sword1.gnd#
-wizard_1-1.gnd#job_wizard.gnd#
-wizard_2-1.gnd#job_wizard.gnd#
-wizard_3-1.gnd#job_wizard.gnd#
-ordeal_1-1.gnd#ordeal_a00.gnd#
-ordeal_2-1.gnd#ordeal_a00.gnd#
-ordeal_3-1.gnd#ordeal_a00.gnd#
-ordeal_1-2.gnd#ordeal_a02.gnd#
-ordeal_2-2.gnd#ordeal_a02.gnd#
-ordeal_3-2.gnd#ordeal_a02.gnd#
-ordeal_1-3.gnd#ordeal_a00.gnd#
-ordeal_2-3.gnd#ordeal_a00.gnd#
-ordeal_3-3.gnd#ordeal_a00.gnd#
-ordeal_1-4.gnd#ordeal_a02.gnd#
-ordeal_2-4.gnd#ordeal_a02.gnd#
-ordeal_3-4.gnd#ordeal_a02.gnd#
-new_1-1.gat#new_1-1.wlk#
-new_2-1.gat#new_2-1.wlk#
-new_3-1.gat#new_3-1.wlk#
-new_4-1.gat#new_4-1.wlk#
-new_5-1.gat#new_5-1.wlk#
-new_6-1.gat#new_6-1.wlk#
-new_7-1.gat#new_7-1.wlk#
-new_8-1.gat#new_8-1.wlk#
-new_9-1.gat#new_9-1.wlk#
-new_10-1.gat#new_10-1.wlk#
-new_1-2.gat#new_zone02.gat#
-new_2-2.gat#new_zone02.gat#
-new_3-2.gat#new_zone02.gat#
-new_4-2.gat#new_zone02.gat#
-new_5-2.gat#new_zone02.gat#
-new_1-3.gat#new_zone03.gat#
-new_2-3.gat#new_zone03.gat#
-new_3-3.gat#new_zone03.gat#
-new_4-3.gat#new_zone03.gat#
-new_5-3.gat#new_zone03.gat#
-new_1-4.gat#new_zone04.gat#
-new_2-4.gat#new_zone04.gat#
-new_3-4.gat#new_zone04.gat#
-new_4-4.gat#new_zone04.gat#
-new_5-4.gat#new_zone04.gat#
-force_1-1.gat#force_map1.gat#
-force_2-1.gat#force_map1.gat#
-force_3-1.gat#force_map1.gat#
-force_1-2.gat#force_map2.gat#
-force_2-2.gat#force_map2.gat#
-force_3-2.gat#force_map2.gat#
-force_1-3.gat#force_map3.gat#
-force_2-3.gat#force_map3.gat#
-force_3-3.gat#force_map3.gat#
-hunter_1-1.gat#job_hunter.gat#
-hunter_2-1.gat#job_hunter.gat#
-hunter_3-1.gat#job_hunter.gat#
-knight_1-1.gat#job_knight.gat#
-knight_2-1.gat#job_knight.gat#
-knight_3-1.gat#job_knight.gat#
-priest_1-1.gat#job_priest.gat#
-priest_2-1.gat#job_priest.gat#
-priest_3-1.gat#job_priest.gat#
-sword_1-1.gat#job_sword1.gat#
-sword_2-1.gat#job_sword1.gat#
-sword_3-1.gat#job_sword1.gat#
-wizard_1-1.gat#job_wizard.gat#
-wizard_2-1.gat#job_wizard.gat#
-wizard_3-1.gat#job_wizard.gat#
-ordeal_1-1.gat#ordeal_a00.gat#
-ordeal_2-1.gat#ordeal_a00.gat#
-ordeal_3-1.gat#ordeal_a00.gat#
-ordeal_1-2.gat#ordeal_a02.gat#
-ordeal_2-2.gat#ordeal_a02.gat#
-ordeal_3-2.gat#ordeal_a02.gat#
-ordeal_1-3.gat#ordeal_a03.gat#
-ordeal_2-3.gat#ordeal_a03.gat#
-ordeal_3-3.gat#ordeal_a03.gat#
-ordeal_1-4.gat#ordeal_a04.gat#
-ordeal_2-4.gat#ordeal_a04.gat#
-ordeal_3-4.gat#ordeal_a04.gat#
-new_1-1.rsw#new_zone01.rsw#
-new_2-1.rsw#new_zone01.rsw#
-new_3-1.rsw#new_zone01.rsw#
-new_4-1.rsw#new_zone01.rsw#
-new_5-1.rsw#new_zone01.rsw#
-new_1-2.rsw#new_zone02.rsw#
-new_2-2.rsw#new_zone02.rsw#
-new_3-2.rsw#new_zone02.rsw#
-new_4-2.rsw#new_zone02.rsw#
-new_5-2.rsw#new_zone02.rsw#
-new_1-3.rsw#new_zone03.rsw#
-new_2-3.rsw#new_zone03.rsw#
-new_3-3.rsw#new_zone03.rsw#
-new_4-3.rsw#new_zone03.rsw#
-new_5-3.rsw#new_zone03.rsw#
-new_1-4.rsw#new_zone04.rsw#
-new_2-4.rsw#new_zone04.rsw#
-new_3-4.rsw#new_zone04.rsw#
-new_4-4.rsw#new_zone04.rsw#
-new_5-4.rsw#new_zone04.rsw#
-force_1-1.rsw#force_map1.rsw#
-force_2-1.rsw#force_map1.rsw#
-force_3-1.rsw#force_map1.rsw#
-force_1-2.rsw#force_map2.rsw#
-force_2-2.rsw#force_map2.rsw#
-force_3-2.rsw#force_map2.rsw#
-force_1-3.rsw#force_map3.rsw#
-force_2-3.rsw#force_map3.rsw#
-force_3-3.rsw#force_map3.rsw#
-hunter_1-1.rsw#job_hunter.rsw#
-hunter_2-1.rsw#job_hunter.rsw#
-hunter_3-1.rsw#job_hunter.rsw#
-knight_1-1.rsw#job_knight.rsw#
-knight_2-1.rsw#job_knight.rsw#
-knight_3-1.rsw#job_knight.rsw#
-priest_1-1.rsw#job_priest.rsw#
-priest_2-1.rsw#job_priest.rsw#
-priest_3-1.rsw#job_priest.rsw#
-sword_1-1.rsw#job_sword1.rsw#
-sword_2-1.rsw#job_sword1.rsw#
-sword_3-1.rsw#job_sword1.rsw#
-thief_1-1.rsw#job_thief1.rsw#
-thief_2-1.rsw#job_thief1.rsw#
-thief_3-1.rsw#job_thief1.rsw#
-wizard_1-1.rsw#job_wizard.rsw#
-wizard_2-1.rsw#job_wizard.rsw#
-wizard_3-1.rsw#job_wizard.rsw#
-ordeal_1-1.rsw#ordeal_a00.rsw#
-ordeal_2-1.rsw#ordeal_a00.rsw#
-ordeal_3-1.rsw#ordeal_a00.rsw#
-ordeal_1-2.rsw#ordeal_a02.rsw#
-ordeal_2-2.rsw#ordeal_a02.rsw#
-ordeal_3-2.rsw#ordeal_a02.rsw#
-ordeal_1-3.rsw#ordeal_a03.rsw#
-ordeal_2-3.rsw#ordeal_a03.rsw#
-ordeal_3-3.rsw#ordeal_a03.rsw#
-ordeal_1-4.rsw#ordeal_a04.rsw#
-ordeal_2-4.rsw#ordeal_a04.rsw#
-ordeal_3-4.rsw#ordeal_a04.rsw#
-pvp_y_1-1.gat#prontera.gat#
-pvp_y_2-1.gat#prontera.gat#
-pvp_y_3-1.gat#prontera.gat#
-pvp_y_4-1.gat#prontera.gat#
-pvp_y_5-1.gat#prontera.gat#
-pvp_y_6-1.gat#prontera.gat#
-pvp_y_7-1.gat#prontera.gat#
-pvp_y_8-1.gat#prontera.gat#
-pvp_y_1-2.gat#izlude.gat#
-pvp_y_2-2.gat#izlude.gat#
-pvp_y_3-2.gat#izlude.gat#
-pvp_y_4-2.gat#izlude.gat#
-pvp_y_5-2.gat#izlude.gat#
-pvp_y_6-2.gat#izlude.gat#
-pvp_y_7-2.gat#izlude.gat#
-pvp_y_8-2.gat#izlude.gat#
-pvp_y_1-3.gat#payon.gat#
-pvp_y_2-3.gat#payon.gat#
-pvp_y_3-3.gat#payon.gat#
-pvp_y_4-3.gat#payon.gat#
-pvp_y_5-3.gat#payon.gat#
-pvp_y_6-3.gat#payon.gat#
-pvp_y_7-3.gat#payon.gat#
-pvp_y_8-3.gat#payon.gat#
-pvp_y_1-4.gat#alberta.gat#
-pvp_y_2-4.gat#alberta.gat#
-pvp_y_3-4.gat#alberta.gat#
-pvp_y_4-4.gat#alberta.gat#
-pvp_y_5-4.gat#alberta.gat#
-pvp_y_6-4.gat#alberta.gat#
-pvp_y_7-4.gat#alberta.gat#
-pvp_y_8-4.gat#alberta.gat#
-pvp_y_1-5.gat#morocc.gat#
-pvp_y_2-5.gat#morocc.gat#
-pvp_y_3-5.gat#morocc.gat#
-pvp_y_4-5.gat#morocc.gat#
-pvp_y_5-5.gat#morocc.gat#
-pvp_y_6-5.gat#morocc.gat#
-pvp_y_7-5.gat#morocc.gat#
-pvp_y_8-5.gat#morocc.gat#
-pvp_y_1-1.gnd#prontera.gnd#
-pvp_y_2-1.gnd#prontera.gnd#
-pvp_y_3-1.gnd#prontera.gnd#
-pvp_y_4-1.gnd#prontera.gnd#
-pvp_y_5-1.gnd#prontera.gnd#
-pvp_y_6-1.gnd#prontera.gnd#
-pvp_y_7-1.gnd#prontera.gnd#
-pvp_y_8-1.gnd#prontera.gnd#
-pvp_y_1-2.gnd#izlude.gnd#
-pvp_y_2-2.gnd#izlude.gnd#
-pvp_y_3-2.gnd#izlude.gnd#
-pvp_y_4-2.gnd#izlude.gnd#
-pvp_y_5-2.gnd#izlude.gnd#
-pvp_y_6-2.gnd#izlude.gnd#
-pvp_y_7-2.gnd#izlude.gnd#
-pvp_y_8-2.gnd#izlude.gnd#
-pvp_y_1-3.gnd#payon.gnd#
-pvp_y_2-3.gnd#payon.gnd#
-pvp_y_3-3.gnd#payon.gnd#
-pvp_y_4-3.gnd#payon.gnd#
-pvp_y_5-3.gnd#payon.gnd#
-pvp_y_6-3.gnd#payon.gnd#
-pvp_y_7-3.gnd#payon.gnd#
-pvp_y_8-3.gnd#payon.gnd#
-pvp_y_1-4.gnd#alberta.gnd#
-pvp_y_2-4.gnd#alberta.gnd#
-pvp_y_3-4.gnd#alberta.gnd#
-pvp_y_4-4.gnd#alberta.gnd#
-pvp_y_5-4.gnd#alberta.gnd#
-pvp_y_6-4.gnd#alberta.gnd#
-pvp_y_7-4.gnd#alberta.gnd#
-pvp_y_8-4.gnd#alberta.gnd#
-pvp_y_1-5.gnd#morocc.gnd#
-pvp_y_2-5.gnd#morocc.gnd#
-pvp_y_3-5.gnd#morocc.gnd#
-pvp_y_4-5.gnd#morocc.gnd#
-pvp_y_5-5.gnd#morocc.gnd#
-pvp_y_6-5.gnd#morocc.gnd#
-pvp_y_7-5.gnd#morocc.gnd#
-pvp_y_8-5.gnd#morocc.gnd#
-pvp_y_1-1.rsw#prontera.rsw#
-pvp_y_2-1.rsw#prontera.rsw#
-pvp_y_3-1.rsw#prontera.rsw#
-pvp_y_4-1.rsw#prontera.rsw#
-pvp_y_5-1.rsw#prontera.rsw#
-pvp_y_6-1.rsw#prontera.rsw#
-pvp_y_7-1.rsw#prontera.rsw#
-pvp_y_8-1.rsw#prontera.rsw#
-pvp_y_1-2.rsw#izlude.rsw#
-pvp_y_2-2.rsw#izlude.rsw#
-pvp_y_3-2.rsw#izlude.rsw#
-pvp_y_4-2.rsw#izlude.rsw#
-pvp_y_5-2.rsw#izlude.rsw#
-pvp_y_6-2.rsw#izlude.rsw#
-pvp_y_7-2.rsw#izlude.rsw#
-pvp_y_8-2.rsw#izlude.rsw#
-pvp_y_1-3.rsw#payon.rsw#
-pvp_y_2-3.rsw#payon.rsw#
-pvp_y_3-3.rsw#payon.rsw#
-pvp_y_4-3.rsw#payon.rsw#
-pvp_y_5-3.rsw#payon.rsw#
-pvp_y_6-3.rsw#payon.rsw#
-pvp_y_7-3.rsw#payon.rsw#
-pvp_y_8-3.rsw#payon.rsw#
-pvp_y_1-4.rsw#alberta.rsw#
-pvp_y_2-4.rsw#alberta.rsw#
-pvp_y_3-4.rsw#alberta.rsw#
-pvp_y_4-4.rsw#alberta.rsw#
-pvp_y_5-4.rsw#alberta.rsw#
-pvp_y_6-4.rsw#alberta.rsw#
-pvp_y_7-4.rsw#alberta.rsw#
-pvp_y_8-4.rsw#alberta.rsw#
-pvp_y_1-5.rsw#morocc.rsw#
-pvp_y_2-5.rsw#morocc.rsw#
-pvp_y_3-5.rsw#morocc.rsw#
-pvp_y_4-5.rsw#morocc.rsw#
-pvp_y_5-5.rsw#morocc.rsw#
-pvp_y_6-5.rsw#morocc.rsw#
-pvp_y_7-5.rsw#morocc.rsw#
-pvp_y_8-5.rsw#morocc.rsw#
-pvp_n_1-1.gnd#prt_maze02.gnd#
-pvp_n_2-1.gnd#prt_maze02.gnd#
-pvp_n_3-1.gnd#prt_maze02.gnd#
-pvp_n_4-1.gnd#prt_maze02.gnd#
-pvp_n_5-1.gnd#prt_maze02.gnd#
-pvp_n_6-1.gnd#prt_maze02.gnd#
-pvp_n_7-1.gnd#prt_maze02.gnd#
-pvp_n_8-1.gnd#prt_maze02.gnd#
-pvp_n_1-2.gnd#job_hunter.gnd#
-pvp_n_2-2.gnd#job_hunter.gnd#
-pvp_n_3-2.gnd#job_hunter.gnd#
-pvp_n_4-2.gnd#job_hunter.gnd#
-pvp_n_5-2.gnd#job_hunter.gnd#
-pvp_n_6-2.gnd#job_hunter.gnd#
-pvp_n_7-2.gnd#job_hunter.gnd#
-pvp_n_8-2.gnd#job_hunter.gnd#
-pvp_n_1-3.gnd#job_wizard.gnd#
-pvp_n_2-3.gnd#job_wizard.gnd#
-pvp_n_3-3.gnd#job_wizard.gnd#
-pvp_n_4-3.gnd#job_wizard.gnd#
-pvp_n_5-3.gnd#job_wizard.gnd#
-pvp_n_6-3.gnd#job_wizard.gnd#
-pvp_n_7-3.gnd#job_wizard.gnd#
-pvp_n_8-3.gnd#job_wizard.gnd#
-pvp_n_1-4.gnd#job_priest.gnd#
-pvp_n_2-4.gnd#job_priest.gnd#
-pvp_n_3-4.gnd#job_priest.gnd#
-pvp_n_4-4.gnd#job_priest.gnd#
-pvp_n_5-4.gnd#job_priest.gnd#
-pvp_n_6-4.gnd#job_priest.gnd#
-pvp_n_7-4.gnd#job_priest.gnd#
-pvp_n_8-4.gnd#job_priest.gnd#
-pvp_n_1-5.gnd#job_knight.gnd#
-pvp_n_2-5.gnd#job_knight.gnd#
-pvp_n_3-5.gnd#job_knight.gnd#
-pvp_n_4-5.gnd#job_knight.gnd#
-pvp_n_5-5.gnd#job_knight.gnd#
-pvp_n_6-5.gnd#job_knight.gnd#
-pvp_n_7-5.gnd#job_knight.gnd#
-pvp_n_8-5.gnd#job_knight.gnd#
-pvp_n_1-1.gat#prt_maze02.gat#
-pvp_n_2-1.gat#prt_maze02.gat#
-pvp_n_3-1.gat#prt_maze02.gat#
-pvp_n_4-1.gat#prt_maze02.gat#
-pvp_n_5-1.gat#prt_maze02.gat#
-pvp_n_6-1.gat#prt_maze02.gat#
-pvp_n_7-1.gat#prt_maze02.gat#
-pvp_n_8-1.gat#prt_maze02.gat#
-pvp_n_1-2.gat#job_hunter.gat#
-pvp_n_2-2.gat#job_hunter.gat#
-pvp_n_3-2.gat#job_hunter.gat#
-pvp_n_4-2.gat#job_hunter.gat#
-pvp_n_5-2.gat#job_hunter.gat#
-pvp_n_6-2.gat#job_hunter.gat#
-pvp_n_7-2.gat#job_hunter.gat#
-pvp_n_8-2.gat#job_hunter.gat#
-pvp_n_1-3.gat#job_wizard.gat#
-pvp_n_2-3.gat#job_wizard.gat#
-pvp_n_3-3.gat#job_wizard.gat#
-pvp_n_4-3.gat#job_wizard.gat#
-pvp_n_5-3.gat#job_wizard.gat#
-pvp_n_6-3.gat#job_wizard.gat#
-pvp_n_7-3.gat#job_wizard.gat#
-pvp_n_8-3.gat#job_wizard.gat#
-pvp_n_1-4.gat#job_priest.gat#
-pvp_n_2-4.gat#job_priest.gat#
-pvp_n_3-4.gat#job_priest.gat#
-pvp_n_4-4.gat#job_priest.gat#
-pvp_n_5-4.gat#job_priest.gat#
-pvp_n_6-4.gat#job_priest.gat#
-pvp_n_7-4.gat#job_priest.gat#
-pvp_n_8-4.gat#job_priest.gat#
-pvp_n_1-5.gat#job_knight.gat#
-pvp_n_2-5.gat#job_knight.gat#
-pvp_n_3-5.gat#job_knight.gat#
-pvp_n_4-5.gat#job_knight.gat#
-pvp_n_5-5.gat#job_knight.gat#
-pvp_n_6-5.gat#job_knight.gat#
-pvp_n_7-5.gat#job_knight.gat#
-pvp_n_8-5.gat#job_knight.gat#
-pvp_n_1-1.rsw#prt_maze02.rsw#
-pvp_n_2-1.rsw#prt_maze02.rsw#
-pvp_n_3-1.rsw#prt_maze02.rsw#
-pvp_n_4-1.rsw#prt_maze02.rsw#
-pvp_n_5-1.rsw#prt_maze02.rsw#
-pvp_n_6-1.rsw#prt_maze02.rsw#
-pvp_n_7-1.rsw#prt_maze02.rsw#
-pvp_n_8-1.rsw#prt_maze02.rsw#
-pvp_n_1-2.rsw#job_hunter.rsw#
-pvp_n_2-2.rsw#job_hunter.rsw#
-pvp_n_3-2.rsw#job_hunter.rsw#
-pvp_n_4-2.rsw#job_hunter.rsw#
-pvp_n_5-2.rsw#job_hunter.rsw#
-pvp_n_6-2.rsw#job_hunter.rsw#
-pvp_n_7-2.rsw#job_hunter.rsw#
-pvp_n_8-2.rsw#job_hunter.rsw#
-pvp_n_1-3.rsw#job_wizard.rsw#
-pvp_n_2-3.rsw#job_wizard.rsw#
-pvp_n_3-3.rsw#job_wizard.rsw#
-pvp_n_4-3.rsw#job_wizard.rsw#
-pvp_n_5-3.rsw#job_wizard.rsw#
-pvp_n_6-3.rsw#job_wizard.rsw#
-pvp_n_7-3.rsw#job_wizard.rsw#
-pvp_n_8-3.rsw#job_wizard.rsw#
-pvp_n_1-4.rsw#job_priest.rsw#
-pvp_n_2-4.rsw#job_priest.rsw#
-pvp_n_3-4.rsw#job_priest.rsw#
-pvp_n_4-4.rsw#job_priest.rsw#
-pvp_n_5-4.rsw#job_priest.rsw#
-pvp_n_6-4.rsw#job_priest.rsw#
-pvp_n_7-4.rsw#job_priest.rsw#
-pvp_n_8-4.rsw#job_priest.rsw#
-pvp_n_1-5.rsw#job_knight.rsw#
-pvp_n_2-5.rsw#job_knight.rsw#
-pvp_n_3-5.rsw#job_knight.rsw#
-pvp_n_4-5.rsw#job_knight.rsw#
-pvp_n_5-5.rsw#job_knight.rsw#
-pvp_n_6-5.rsw#job_knight.rsw#
-pvp_n_7-5.rsw#job_knight.rsw#
-pvp_n_8-5.rsw#job_knight.rsw#
-pvp_n_room.gnd#pvp_room.gnd#
-pvp_n_room.gat#pvp_room.gat#
-pvp_n_room.rsw#pvp_room.rsw#
-�����������̽�\map\pvp_n_room.bmp#�����������̽�\map\pvp_room.bmp#
-pvp_y_room.gnd#pvp_room.gnd#
-pvp_y_room.gat#pvp_room.gat#
-pvp_y_room.rsw#pvp_room.rsw#
-�����������̽�\map\pvp_y_room.bmp#�����������̽�\map\pvp_room.bmp#
-pvp_c_room.gnd#pvp_room.gnd#
-pvp_c_room.gat#pvp_room.gat#
-pvp_c_room.rsw#pvp_room.rsw#
-
-
-guild_room.gnd#quiz_01.gnd#
-guild_room.gat#quiz_01.gat#
-guild_room.rsw#quiz_01.rsw#
-�����������̽�\map\guild_room.bmp#�����������̽�\map\quiz_01.bmp#
-
-nguild_prt.rsw#prtg_cas01.rsw#
-nguild_prt.gat#prtg_cas01.gat#
-nguild_prt.gnd#prtg_cas01.gnd#
-�����������̽�\map\nguild_prt.bmp#�����������̽�\map\prtg_cas01.bmp#
-
-nguild_pay.rsw#payg_cas01.rsw#
-nguild_pay.gat#payg_cas01.gat#
-nguild_pay.gnd#payg_cas01.gnd#
-�����������̽�\map\nguild_pay.bmp#�����������̽�\map\payg_cas01.bmp#
-
-nguild_alde.rsw#aldeg_cas01.rsw#
-nguild_alde.gat#aldeg_cas01.gat#
-nguild_alde.gnd#aldeg_cas01.gnd#
-�����������̽�\map\nguild_alde.bmp#�����������̽�\map\aldeg_cas01.bmp#
-
-nguild_gef.rsw#gefg_cas01.rsw#
-nguild_gef.gat#gefg_cas01.gat#
-nguild_gef.gnd#gefg_cas01.gnd#
-�����������̽�\map\nguild_gef.bmp#�����������̽�\map\gefg_cas01.bmp#
-
-�����������̽�\map\n_castle.bmp#�����������̽�\map\gefg_cas01.bmp#
-
-
-�����������̽�\map\pvp_c_room.bmp#�����������̽�\map\pvp_room.bmp#
-�����������̽�\map\pvp_n_1-1.bmp#�����������̽�\map\prt_maze02.bmp#
-�����������̽�\map\pvp_n_2-1.bmp#�����������̽�\map\prt_maze02.bmp#
-�����������̽�\map\pvp_n_3-1.bmp#�����������̽�\map\prt_maze02.bmp#
-�����������̽�\map\pvp_n_4-1.bmp#�����������̽�\map\prt_maze02.bmp#
-�����������̽�\map\pvp_n_5-1.bmp#�����������̽�\map\prt_maze02.bmp#
-�����������̽�\map\pvp_n_6-1.bmp#�����������̽�\map\prt_maze02.bmp#
-�����������̽�\map\pvp_n_7-1.bmp#�����������̽�\map\prt_maze02.bmp#
-�����������̽�\map\pvp_n_8-1.bmp#�����������̽�\map\prt_maze02.bmp#
-�����������̽�\map\pvp_n_1-2.bmp#�����������̽�\map\job_hunter.bmp#
-�����������̽�\map\pvp_n_2-2.bmp#�����������̽�\map\job_hunter.bmp#
-�����������̽�\map\pvp_n_3-2.bmp#�����������̽�\map\job_hunter.bmp#
-�����������̽�\map\pvp_n_4-2.bmp#�����������̽�\map\job_hunter.bmp#
-�����������̽�\map\pvp_n_5-2.bmp#�����������̽�\map\job_hunter.bmp#
-�����������̽�\map\pvp_n_6-2.bmp#�����������̽�\map\job_hunter.bmp#
-�����������̽�\map\pvp_n_7-2.bmp#�����������̽�\map\job_hunter.bmp#
-�����������̽�\map\pvp_n_8-2.bmp#�����������̽�\map\job_hunter.bmp#
-�����������̽�\map\pvp_n_1-3.bmp#�����������̽�\map\job_wizard.bmp#
-�����������̽�\map\pvp_n_2-3.bmp#�����������̽�\map\job_wizard.bmp#
-�����������̽�\map\pvp_n_3-3.bmp#�����������̽�\map\job_wizard.bmp#
-�����������̽�\map\pvp_n_4-3.bmp#�����������̽�\map\job_wizard.bmp#
-�����������̽�\map\pvp_n_5-3.bmp#�����������̽�\map\job_wizard.bmp#
-�����������̽�\map\pvp_n_6-3.bmp#�����������̽�\map\job_wizard.bmp#
-�����������̽�\map\pvp_n_7-3.bmp#�����������̽�\map\job_wizard.bmp#
-�����������̽�\map\pvp_n_8-3.bmp#�����������̽�\map\job_wizard.bmp#
-�����������̽�\map\pvp_n_1-4.bmp#�����������̽�\map\job_priest.bmp#
-�����������̽�\map\pvp_n_2-4.bmp#�����������̽�\map\job_priest.bmp#
-�����������̽�\map\pvp_n_3-4.bmp#�����������̽�\map\job_priest.bmp#
-�����������̽�\map\pvp_n_4-4.bmp#�����������̽�\map\job_priest.bmp#
-�����������̽�\map\pvp_n_5-4.bmp#�����������̽�\map\job_priest.bmp#
-�����������̽�\map\pvp_n_6-4.bmp#�����������̽�\map\job_priest.bmp#
-�����������̽�\map\pvp_n_7-4.bmp#�����������̽�\map\job_priest.bmp#
-�����������̽�\map\pvp_n_8-4.bmp#�����������̽�\map\job_priest.bmp#
-�����������̽�\map\pvp_n_1-5.bmp#�����������̽�\map\job_knight.bmp#
-�����������̽�\map\pvp_n_2-5.bmp#�����������̽�\map\job_knight.bmp#
-�����������̽�\map\pvp_n_3-5.bmp#�����������̽�\map\job_knight.bmp#
-�����������̽�\map\pvp_n_4-5.bmp#�����������̽�\map\job_knight.bmp#
-�����������̽�\map\pvp_n_5-5.bmp#�����������̽�\map\job_knight.bmp#
-�����������̽�\map\pvp_n_6-5.bmp#�����������̽�\map\job_knight.bmp#
-�����������̽�\map\pvp_n_7-5.bmp#�����������̽�\map\job_knight.bmp#
-�����������̽�\map\pvp_n_8-5.bmp#�����������̽�\map\job_knight.bmp#
-�����������̽�\map\pvp_y_1-1.bmp#�����������̽�\map\prontera.bmp#
-�����������̽�\map\pvp_y_2-1.bmp#�����������̽�\map\prontera.bmp#
-�����������̽�\map\pvp_y_3-1.bmp#�����������̽�\map\prontera.bmp#
-�����������̽�\map\pvp_y_4-1.bmp#�����������̽�\map\prontera.bmp#
-�����������̽�\map\pvp_y_5-1.bmp#�����������̽�\map\prontera.bmp#
-�����������̽�\map\pvp_y_6-1.bmp#�����������̽�\map\prontera.bmp#
-�����������̽�\map\pvp_y_7-1.bmp#�����������̽�\map\prontera.bmp#
-�����������̽�\map\pvp_y_8-1.bmp#�����������̽�\map\prontera.bmp#
-�����������̽�\map\pvp_y_1-2.bmp#�����������̽�\map\izlude.bmp#
-�����������̽�\map\pvp_y_2-2.bmp#�����������̽�\map\izlude.bmp#
-�����������̽�\map\pvp_y_3-2.bmp#�����������̽�\map\izlude.bmp#
-�����������̽�\map\pvp_y_4-2.bmp#�����������̽�\map\izlude.bmp#
-�����������̽�\map\pvp_y_5-2.bmp#�����������̽�\map\izlude.bmp#
-�����������̽�\map\pvp_y_6-2.bmp#�����������̽�\map\izlude.bmp#
-�����������̽�\map\pvp_y_7-2.bmp#�����������̽�\map\izlude.bmp#
-�����������̽�\map\pvp_y_8-2.bmp#�����������̽�\map\izlude.bmp#
-�����������̽�\map\pvp_y_1-3.bmp#�����������̽�\map\payon.bmp#
-�����������̽�\map\pvp_y_2-3.bmp#�����������̽�\map\payon.bmp#
-�����������̽�\map\pvp_y_3-3.bmp#�����������̽�\map\payon.bmp#
-�����������̽�\map\pvp_y_4-3.bmp#�����������̽�\map\payon.bmp#
-�����������̽�\map\pvp_y_5-3.bmp#�����������̽�\map\payon.bmp#
-�����������̽�\map\pvp_y_6-3.bmp#�����������̽�\map\payon.bmp#
-�����������̽�\map\pvp_y_7-3.bmp#�����������̽�\map\payon.bmp#
-�����������̽�\map\pvp_y_8-3.bmp#�����������̽�\map\payon.bmp#
-�����������̽�\map\pvp_y_1-4.bmp#�����������̽�\map\alberta.bmp#
-�����������̽�\map\pvp_y_2-4.bmp#�����������̽�\map\alberta.bmp#
-�����������̽�\map\pvp_y_3-4.bmp#�����������̽�\map\alberta.bmp#
-�����������̽�\map\pvp_y_4-4.bmp#�����������̽�\map\alberta.bmp#
-�����������̽�\map\pvp_y_5-4.bmp#�����������̽�\map\alberta.bmp#
-�����������̽�\map\pvp_y_6-4.bmp#�����������̽�\map\alberta.bmp#
-�����������̽�\map\pvp_y_7-4.bmp#�����������̽�\map\alberta.bmp#
-�����������̽�\map\pvp_y_8-4.bmp#�����������̽�\map\alberta.bmp#
-�����������̽�\map\pvp_y_1-5.bmp#�����������̽�\map\morocc.bmp#
-�����������̽�\map\pvp_y_2-5.bmp#�����������̽�\map\morocc.bmp#
-�����������̽�\map\pvp_y_3-5.bmp#�����������̽�\map\morocc.bmp#
-�����������̽�\map\pvp_y_4-5.bmp#�����������̽�\map\morocc.bmp#
-�����������̽�\map\pvp_y_5-5.bmp#�����������̽�\map\morocc.bmp#
-�����������̽�\map\pvp_y_6-5.bmp#�����������̽�\map\morocc.bmp#
-�����������̽�\map\pvp_y_7-5.bmp#�����������̽�\map\morocc.bmp#
-�����������̽�\map\pvp_y_8-5.bmp#�����������̽�\map\morocc.bmp#
-�����������̽�\map\new_1-1.bmp#�����������̽�\map\new_zone01.bmp#
-�����������̽�\map\new_2-1.bmp#�����������̽�\map\new_zone01.bmp#
-�����������̽�\map\new_3-1.bmp#�����������̽�\map\new_zone01.bmp#
-�����������̽�\map\new_4-1.bmp#�����������̽�\map\new_zone01.bmp#
-�����������̽�\map\new_5-1.bmp#�����������̽�\map\new_zone01.bmp#
-�����������̽�\map\new_1-2.bmp#�����������̽�\map\new_zone02.bmp#
-�����������̽�\map\new_2-2.bmp#�����������̽�\map\new_zone02.bmp#
-�����������̽�\map\new_3-2.bmp#�����������̽�\map\new_zone02.bmp#
-�����������̽�\map\new_4-2.bmp#�����������̽�\map\new_zone02.bmp#
-�����������̽�\map\new_5-2.bmp#�����������̽�\map\new_zone02.bmp#
-�����������̽�\map\new_1-3.bmp#�����������̽�\map\new_zone03.bmp#
-�����������̽�\map\new_2-3.bmp#�����������̽�\map\new_zone03.bmp#
-�����������̽�\map\new_3-3.bmp#�����������̽�\map\new_zone03.bmp#
-�����������̽�\map\new_4-3.bmp#�����������̽�\map\new_zone03.bmp#
-�����������̽�\map\new_5-3.bmp#�����������̽�\map\new_zone03.bmp#
-�����������̽�\map\new_1-4.bmp#�����������̽�\map\new_zone04.bmp#
-�����������̽�\map\new_2-4.bmp#�����������̽�\map\new_zone04.bmp#
-�����������̽�\map\new_3-4.bmp#�����������̽�\map\new_zone04.bmp#
-�����������̽�\map\new_4-4.bmp#�����������̽�\map\new_zone04.bmp#
-�����������̽�\map\new_5-4.bmp#�����������̽�\map\new_zone04.bmp#
-�����������̽�\map\force_1-1.bmp#�����������̽�\map\force_map1.bmp#
-�����������̽�\map\force_2-1.bmp#�����������̽�\map\force_map1.bmp#
-�����������̽�\map\force_3-1.bmp#�����������̽�\map\force_map1.bmp#
-�����������̽�\map\force_1-2.bmp#�����������̽�\map\force_map2.bmp#
-�����������̽�\map\force_2-2.bmp#�����������̽�\map\force_map2.bmp#
-�����������̽�\map\force_3-2.bmp#�����������̽�\map\force_map2.bmp#
-�����������̽�\map\force_1-3.bmp#�����������̽�\map\force_map3.bmp#
-�����������̽�\map\force_2-3.bmp#�����������̽�\map\force_map3.bmp#
-�����������̽�\map\force_3-3.bmp#�����������̽�\map\force_map3.bmp#
-�����������̽�\map\hunter_1-1.bmp#�����������̽�\map\in_hunter.bmp#
-�����������̽�\map\hunter_2-1.bmp#�����������̽�\map\in_hunter.bmp#
-�����������̽�\map\hunter_3-1.bmp#�����������̽�\map\in_hunter.bmp#
-�����������̽�\map\knight_1-1.bmp#�����������̽�\map\job_knight.bmp#
-�����������̽�\map\knight_2-1.bmp#�����������̽�\map\job_knight.bmp#
-�����������̽�\map\knight_3-1.bmp#�����������̽�\map\job_knight.bmp#
-�����������̽�\map\priest_1-1.bmp#�����������̽�\map\job_priest.bmp#
-�����������̽�\map\priest_2-1.bmp#�����������̽�\map\job_priest.bmp#
-�����������̽�\map\priest_3-1.bmp#�����������̽�\map\job_priest.bmp#
-�����������̽�\map\sword_1-1.bmp#�����������̽�\map\job_sword1.bmp#
-�����������̽�\map\sword_2-1.bmp#�����������̽�\map\job_sword1.bmp#
-�����������̽�\map\sword_3-1.bmp#�����������̽�\map\job_sword1.bmp#
-�����������̽�\map\thief_1-1.bmp#�����������̽�\map\job_thief1.bmp#
-�����������̽�\map\thief_2-1.bmp#�����������̽�\map\job_thief1.bmp#
-�����������̽�\map\thief_3-1.bmp#�����������̽�\map\job_thief1.bmp#
-�����������̽�\map\wizard_1-1.bmp#�����������̽�\map\job_wizard.bmp#
-�����������̽�\map\wizard_2-1.bmp#�����������̽�\map\job_wizard.bmp#
-�����������̽�\map\wizard_3-1.bmp#�����������̽�\map\job_wizard.bmp#
-�����������̽�\map\ordeal_1-1.bmp#�����������̽�\map\ordeal_a00.bmp#
-�����������̽�\map\ordeal_2-1.bmp#�����������̽�\map\ordeal_a00.bmp#
-�����������̽�\map\ordeal_3-1.bmp#�����������̽�\map\ordeal_a00.bmp#
-�����������̽�\map\ordeal_1-2.bmp#�����������̽�\map\ordeal_a02.bmp#
-�����������̽�\map\ordeal_2-2.bmp#�����������̽�\map\ordeal_a02.bmp#
-�����������̽�\map\ordeal_3-2.bmp#�����������̽�\map\ordeal_a02.bmp#
-�����������̽�\map\ordeal_1-3.bmp#�����������̽�\map\ordeal_a03.bmp#
-�����������̽�\map\ordeal_2-3.bmp#�����������̽�\map\ordeal_a03.bmp#
-�����������̽�\map\ordeal_3-3.bmp#�����������̽�\map\ordeal_a03.bmp#
-�����������̽�\map\ordeal_1-4.bmp#�����������̽�\map\ordeal_a04.bmp#
-�����������̽�\map\ordeal_2-4.bmp#�����������̽�\map\ordeal_a04.bmp#
-�����������̽�\map\ordeal_3-4.bmp#�����������̽�\map\ordeal_a04.bmp#
-
-job_sage.rsw#job_wiz.rsw#
-job_sage.gat#job_wiz.gat#
-job_sage.gnd#job_wiz.gnd#
-�����������̽�\map\job_sage.bmp#�����������̽�\map\job_wiz.bmp#
-job_cru.rsw#job_prist.rsw#
-job_cru.gat#job_prist.gat#
-job_cru.gnd#job_prist.gnd#
-�����������̽�\map\job_cru.bmp#�����������̽�\map\job_prist.bmp#
-
diff --git a/misc/src/Makefile b/misc/src/Makefile
deleted file mode 100644
index 00ec3b9..0000000
--- a/misc/src/Makefile
+++ /dev/null
@@ -1,126 +0,0 @@
-# $Id: Makefile 158 2004-10-01 03:45:15Z PoW $
-
-CC = gcc -pipe
-PACKETDEF = -DPACKETVER=5 -DNEW_006b
-#PACKETDEF = -DPACKETVER=4 -DNEW_006b
-#PACKETDEF = -DPACKETVER=3 -DNEW_006b
-#PACKETDEF = -DPACKETVER=2 -DNEW_006b
-#PACKETDEF = -DPACKETVER=1 -DNEW_006b
-
-PLATFORM = $(shell uname)
-
-ifeq ($(findstring FreeBSD,$(PLATFORM)), FreeBSD)
-MAKE = gmake
-else
-MAKE = make
-endif
-
-OPT = -g -O2
-
-ifeq ($(findstring CYGWIN,$(PLATFORM)), CYGWIN)
-OS_TYPE = -DCYGWIN
-CFLAGS = $(OPT) -Wall -DFD_SETSIZE=4096 -I../common $(PACKETDEF) $(OS_TYPE)
-else
-OS_TYPE =
-CFLAGS = $(OPT) -Wall -I../common $(PACKETDEF) $(OS_TYPE)
-endif
-
-MYSQLFLAG_INCLUDE_DEFAULT = /usr/local/include/mysql
-
-ifdef SQLFLAG
-MYSQLFLAG_CONFIG = $(shell which mysql_config)
-ifeq ($(findstring /,$(MYSQLFLAG_CONFIG)), /)
-MYSQLFLAG_VERSION = $(shell $(MYSQLFLAG_CONFIG) --version | sed s:\\..*::) 
-endif
-
-ifeq ($(findstring 5,$(MYSQLFLAG_VERSION)), 5)
-MYSQLFLAG_CONFIG_ARGUMENT = --include
-endif
-ifeq ($(findstring 4,$(MYSQLFLAG_VERSION)), 4)
-MYSQLFLAG_CONFIG_ARGUMENT = --include
-endif
-ifndef MYSQLFLAG_CONFIG_ARGUMENT
-MYSQLFLAG_CONFIG_ARGUMENT = --cflags
-endif
-
-ifeq ($(findstring /,$(MYSQLFLAG_CONFIG)), /)
-MYSQLFLAG_INCLUDE = $(shell $(MYSQLFLAG_CONFIG) $(MYSQLFLAG_CONFIG_ARGUMENT))
-else
-MYSQLFLAG_INCLUDE = -I$(MYSQLFLAG_INCLUDE_DEFAULT)
-endif
-
-LIB_S_DEFAULT = -L/usr/local/lib/mysql -lmysqlclient -lz
-MYSQLFLAG_CONFIG = $(shell which mysql_config)
-ifeq ($(findstring /,$(MYSQLFLAG_CONFIG)), /)
-LIB_S = $(shell $(MYSQLFLAG_CONFIG) --libs)
-else
-LIB_S = $(LIB_S_DEFAULT)
-endif
-
-MYLIB = CC="$(CC)" CFLAGS="$(CFLAGS) $(MYSQLFLAG_INCLUDE)" LIB_S="$(LIB_S)"
-
-endif
-
-MKDEF = CC="$(CC)" CFLAGS="$(CFLAGS)"
-
-all: conf txt
-
-conf:
-	cp -r conf-tmpl conf
-	rm -rf conf/.svn conf/*/.svn
-
-txt : src/common/GNUmakefile src/login/GNUmakefile src/char/GNUmakefile src/map/GNUmakefile src/ladmin/GNUmakefile conf
-	cd src ; cd common ; $(MAKE) $(MKDEF) $@ ; cd ..
-	cd src ; cd login ; $(MAKE) $(MKDEF) $@ ; cd ..
-	cd src ; cd char ; $(MAKE) $(MKDEF) $@ ; cd ..
-	cd src ; cd map ; $(MAKE) $(MKDEF) $@ ; cd ..
-	cd src ; cd ladmin ; $(MAKE) $(MKDEF) $@ ; cd ..
-
-
-ifdef SQLFLAG
-sql: src/common/GNUmakefile src/login_sql/GNUmakefile src/char_sql/GNUmakefile src/map/GNUmakefile src/ladmin/GNUmakefile src/txt-converter/login/GNUmakefile src/txt-converter/char/GNUmakefile conf
-	cd src ; cd common ; $(MAKE) $(MKDEF) $@ ; cd ..
-	cd src ; cd login_sql ; $(MAKE) $(MYLIB) $@ ; cd ..
-	cd src ; cd char_sql ; $(MAKE) $(MYLIB) $@ ; cd ..
-	cd src ; cd map ; $(MAKE) $(MYLIB) $@ ; cd ..
-	cd src ; cd ladmin ; $(MAKE) $(MKDEF) $@ ; cd ..
-	cd src ; cd txt-converter ; cd login ; $(MAKE) $(MYLIB) $@ ; cd ..
-	cd src ; cd txt-converter ; cd char ; $(MAKE) $(MYLIB) $@ ; cd ..
-else
-sql:
-	$(MAKE) CC="$(CC)" OPT="$(OPT)" SQLFLAG=1 $@
-endif
-
-clean: src/common/GNUmakefile src/login/GNUmakefile src/char/GNUmakefile src/map/GNUmakefile src/ladmin/GNUmakefile src/txt-converter/login/GNUmakefile src/txt-converter/char/GNUmakefile
-	cd src ; cd common ; $(MAKE) $(MKDEF) $@ ; cd ..
-	cd src ; cd login ; $(MAKE) $(MKDEF) $@ ; cd ..
-	cd src ; cd login_sql ; $(MAKE) $(MKLIB) $@ ; cd ..
-	cd src ; cd char ; $(MAKE) $(MKDEF) $@ ; cd ..
-	cd src ; cd char_sql ; $(MAKE) $(MKLIB) $@ ; cd ..
-	cd src ; cd map ; $(MAKE) $(MKLIB) $@ ; cd ..
-	cd src ; cd ladmin ; $(MAKE) $(MKDEF) $@ ; cd ..
-	cd src ; cd txt-converter ; cd login ; $(MAKE) $(MKLIB) $@ ; cd ..
-	cd src ; cd txt-converter ; cd char ; $(MAKE) $(MKLIB) $@ ; cd ..
-
-tools:
-	cd tool && $(MAKE) $(MKDEF) && cd ..
-	$(CC) -o setupwizard setupwizard.c	
-
-src/common/GNUmakefile: src/common/Makefile
-	sed -e 's/$$>/$$^/' src/common/Makefile > src/common/GNUmakefile
-src/login/GNUmakefile: src/login/Makefile
-	sed -e 's/$$>/$$^/' src/login/Makefile > src/login/GNUmakefile
-src/login_sql/GNUmakefile: src/login_sql/Makefile
-	sed -e 's/$$>/$$^/' src/login_sql/Makefile > src/login_sql/GNUmakefile
-src/char/GNUmakefile: src/char/Makefile
-	sed -e 's/$$>/$$^/' src/char/Makefile > src/char/GNUmakefile
-src/char_sql/GNUmakefile: src/char_sql/Makefile
-	sed -e 's/$$>/$$^/' src/char_sql/Makefile > src/char_sql/GNUmakefile
-src/map/GNUmakefile: src/map/Makefile
-	sed -e 's/$$>/$$^/' src/map/Makefile > src/map/GNUmakefile
-src/ladmin/GNUmakefile: src/ladmin/Makefile
-	sed -e 's/$$>/$$^/' src/ladmin/Makefile > src/ladmin/GNUmakefile
-src/txt-converter/login/GNUmakefile: src/txt-converter/login/Makefile
-	sed -e 's/$$>/$$^/' src/txt-converter/login/Makefile > src/txt-converter/login/GNUmakefile
-src/txt-converter/char/GNUmakefile: src/txt-converter/char/Makefile
-	sed -e 's/$$>/$$^/' src/txt-converter/char/Makefile > src/txt-converter/char/GNUmakefile
diff --git a/misc/src/Makefile-optimized b/misc/src/Makefile-optimized
deleted file mode 100644
index 63dc5ff..0000000
--- a/misc/src/Makefile-optimized
+++ /dev/null
@@ -1,49 +0,0 @@
-# $Id: Makefile-optimized,v 1.7 2004/07/29 09:35:21 Yor Exp $
-
-CC = gcc -pipe
-PACKETDEF = -DPACKETVER=5 -DNEW_006b
-#PACKETDEF = -DPACKETVER=4 -DNEW_006b
-#PACKETDEF = -DPACKETVER=3 -DNEW_006b
-#PACKETDEF = -DPACKETVER=2 -DNEW_006b
-#PACKETDEF = -DPACKETVER=1 -DNEW_006b
-
-PLATFORM = $(shell uname)
-
-ifeq ($(findstring FreeBSD,$(PLATFORM)), FreeBSD)
-MAKE = gmake
-else
-MAKE = make
-endif
-
-ifeq ($(findstring CYGWIN,$(PLATFORM)), CYGWIN)
-OS_TYPE = -DCYGWIN
-CFLAGS = -O2 -Wall -DFD_SETSIZE=4096 -I../common $(PACKETDEF) $(OS_TYPE)
-else
-OS_TYPE =
-CFLAGS = -O2 -Wall -I../common $(PACKETDEF) $(OS_TYPE)
-endif
-
-MKDEF = CC="$(CC)" CFLAGS="$(CFLAGS)"
-
-
-all clean: src/common/GNUmakefile src/login/GNUmakefile src/char_unblocked/GNUmakefile src/map/GNUmakefile src/ladmin/GNUmakefile
-	cd src ; cd common ; $(MAKE) $(MKDEF) $@ ; cd ..
-	cd src ; cd login ; $(MAKE) $(MKDEF) $@ ; cd ..
-	cd src ; cd char_unblocked ; $(MAKE) $(MKDEF) $@ ; cd ..
-	cd src ; cd map ; $(MAKE) $(MKDEF) $@ ; cd ..
-	cd src ; cd ladmin ; $(MAKE) $(MKDEF) $@ ; cd ..
-
-tools:
-	cd tool && $(MAKE) $(MKDEF) && cd ..
-	$(CC) -o setupwizard setupwizard.c	
-
-src/common/GNUmakefile: src/common/Makefile
-	sed -e 's/$$>/$$^/' src/common/Makefile > src/common/GNUmakefile
-src/login/GNUmakefile: src/login/Makefile
-	sed -e 's/$$>/$$^/' src/login/Makefile > src/login/GNUmakefile
-src/char_unblocked/GNUmakefile: src/char_unblocked/Makefile
-	sed -e 's/$$>/$$^/' src/char_unblocked/Makefile > src/char_unblocked/GNUmakefile
-src/map/GNUmakefile: src/map/Makefile
-	sed -e 's/$$>/$$^/' src/map/Makefile > src/map/GNUmakefile
-src/ladmin/GNUmakefile: src/ladmin/Makefile
-	sed -e 's/$$>/$$^/' src/ladmin/Makefile > src/ladmin/GNUmakefile
diff --git a/misc/src/char/GNUmakefile b/misc/src/char/GNUmakefile
deleted file mode 100644
index dd21288..0000000
--- a/misc/src/char/GNUmakefile
+++ /dev/null
@@ -1,17 +0,0 @@
-all: char-server
-txt: char-server
-
-COMMON_OBJ = ../common/core.o ../common/socket.o ../common/timer.o ../common/db.o ../common/lock.o ../common/malloc.o
-COMMON_H = ../common/core.h ../common/socket.h ../common/timer.h ../common/mmo.h ../common/db.h ../common/lock.h ../common/timer.h ../common/malloc.h
-char-server: char.o inter.o int_party.o int_guild.o int_storage.o int_pet.o $(COMMON_OBJ)
-	$(CC) -o ../../$@ $^
-
-char.o: char.c char.h inter.h int_pet.h $(COMMON_H) ../common/version.h
-inter.o: inter.c inter.h int_party.h int_guild.h int_storage.h int_pet.h char.h $(COMMON_H)
-int_party.o: int_party.c int_party.h inter.h char.h $(COMMON_H)
-int_guild.o: int_guild.c int_guild.h int_storage.h inter.h char.h $(COMMON_H)
-int_storage.o: int_storage.c int_storage.h int_guild.h inter.h char.h $(COMMON_H)
-int_pet.o: int_pet.c int_pet.h inter.h char.h $(COMMON_H)
-
-clean:
-	rm -f *.o ../../char-server
diff --git a/misc/src/char/Makefile b/misc/src/char/Makefile
deleted file mode 100644
index 6eaae48..0000000
--- a/misc/src/char/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-all: char-server
-txt: char-server
-
-COMMON_OBJ = ../common/core.o ../common/socket.o ../common/timer.o ../common/db.o ../common/lock.o ../common/malloc.o
-COMMON_H = ../common/core.h ../common/socket.h ../common/timer.h ../common/mmo.h ../common/db.h ../common/lock.h ../common/timer.h ../common/malloc.h
-char-server: char.o inter.o int_party.o int_guild.o int_storage.o int_pet.o $(COMMON_OBJ)
-	$(CC) -o ../../$@ $>
-
-char.o: char.c char.h inter.h int_pet.h $(COMMON_H) ../common/version.h
-inter.o: inter.c inter.h int_party.h int_guild.h int_storage.h int_pet.h char.h $(COMMON_H)
-int_party.o: int_party.c int_party.h inter.h char.h $(COMMON_H)
-int_guild.o: int_guild.c int_guild.h int_storage.h inter.h char.h $(COMMON_H)
-int_storage.o: int_storage.c int_storage.h int_guild.h inter.h char.h $(COMMON_H)
-int_pet.o: int_pet.c int_pet.h inter.h char.h $(COMMON_H)
-
-clean:
-	rm -f *.o ../../char-server
diff --git a/misc/src/char/char.c b/misc/src/char/char.c
deleted file mode 100644
index c279102..0000000
--- a/misc/src/char/char.c
+++ /dev/null
@@ -1,3149 +0,0 @@
-// $Id: char.c,v 1.3 2004/09/13 16:52:16 Yor Exp $
-// original : char2.c 2003/03/14 11:58:35 Rev.1.5
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <netinet/in.h>
-#include <sys/time.h>
-#include <time.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <string.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <stdarg.h>
-
-#include "core.h"
-#include "socket.h"
-#include "timer.h"
-#include "mmo.h"
-#include "version.h"
-#include "lock.h"
-#include "char.h"
-
-#include "inter.h"
-#include "int_pet.h"
-#include "int_guild.h"
-#include "int_party.h"
-#include "int_storage.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-struct mmo_map_server server[MAX_MAP_SERVERS];
-int server_fd[MAX_MAP_SERVERS];
-int server_freezeflag[MAX_MAP_SERVERS]; // Map-server anti-freeze system. Counter. 5 ok, 4...0 freezed
-int anti_freeze_enable = 0;
-int ANTI_FREEZE_INTERVAL = 6;
-
-int login_fd, char_fd;
-char userid[24];
-char passwd[24];
-char server_name[20];
-char wisp_server_name[24] = "Server";
-char login_ip_str[16];
-int login_ip;
-int login_port = 6900;
-char char_ip_str[16];
-int char_ip;
-int char_port = 6121;
-int char_maintenance;
-int char_new;
-int email_creation = 0; // disabled by default
-char char_txt[1024];
-char backup_txt[1024]; //By zanetheinsane
-char backup_txt_flag = 0; // The backup_txt file was created because char deletion bug existed. Now it's finish and that take a lot of time to create a second file when there are a lot of characters. => option By [Yor]
-char unknown_char_name[1024] = "Unknown";
-char char_log_filename[1024] = "log/char.log";
-//Added for lan support
-char lan_map_ip[128];
-int subneti[4];
-int subnetmaski[4];
-int name_ignoring_case = 0; // Allow or not identical name for characters but with a different case by [Yor]
-int char_name_option = 0; // Option to know which letters/symbols are authorised in the name of a character (0: all, 1: only those in char_name_letters, 2: all EXCEPT those in char_name_letters) by [Yor]
-char char_name_letters[1024] = ""; // list of letters/symbols authorised (or not) in a character name. by [Yor]
-
-struct char_session_data{
-	int account_id, login_id1, login_id2, sex;
-	int found_char[9];
-	char email[40]; // e-mail (default: a@a.com) by [Yor]
-	time_t connect_until_time; // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited)
-};
-
-#define AUTH_FIFO_SIZE 256
-struct {
-	int account_id, char_id, login_id1, login_id2, ip, char_pos, delflag, sex;
-	time_t connect_until_time; // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited)
-} auth_fifo[AUTH_FIFO_SIZE];
-int auth_fifo_pos = 0;
-
-int check_ip_flag = 1; // It's to check IP of a player between char-server and other servers (part of anti-hacking system)
-
-int char_id_count = 150000;
-struct mmo_charstatus *char_dat;
-int char_num, char_max;
-int max_connect_user = 0;
-int autosave_interval = DEFAULT_AUTOSAVE_INTERVAL;
-int start_zeny = 500;
-int start_weapon = 1201;
-int start_armor = 1202;
-
-// Initial position (it's possible to set it in conf file)
-struct point start_point = {"new_1-1.gat", 53, 111};
-
-struct gm_account *gm_account = NULL;
-int GM_num = 0;
-
-// online players by [Yor]
-char online_txt_filename[1024] = "online.txt";
-char online_html_filename[1024] = "online.html";
-int online_sorting_option = 0; // sorting option to display online players in online files
-int online_display_option = 1; // display options: to know which columns must be displayed
-int online_refresh_html = 20; // refresh time (in sec) of the html file in the explorer
-int online_gm_display_min_level = 20; // minimum GM level to display 'GM' when we want to display it
-
-int *online_chars; // same size of char_dat, and id value of current server (or -1)
-time_t update_online; // to update online files when we receiving information from a server (not less than 8 seconds)
-
-//------------------------------
-// Writing function of logs file
-//------------------------------
-int char_log(char *fmt, ...) {
-	FILE *logfp;
-	va_list ap;
-	struct timeval tv;
-	char tmpstr[2048];
-
-	va_start(ap, fmt);
-
-	logfp = fopen(char_log_filename, "a");
-	if (logfp) {
-		if (fmt[0] == '\0') // jump a line if no message
-			fprintf(logfp, RETCODE);
-		else {
-			gettimeofday(&tv, NULL);
-			strftime(tmpstr, 24, "%d-%m-%Y %H:%M:%S", localtime(&(tv.tv_sec)));
-			sprintf(tmpstr + 19, ".%03d: %s", (int)tv.tv_usec / 1000, fmt);
-			vfprintf(logfp, tmpstr, ap);
-		}
-		fclose(logfp);
-	}
-
-	va_end(ap);
-	return 0;
-}
-
-//-----------------------------------------------------
-// Function to suppress control characters in a string.
-//-----------------------------------------------------
-int remove_control_chars(unsigned char *str) {
-	int i;
-	int change = 0;
-
-	for(i = 0; str[i]; i++) {
-		if (str[i] < 32) {
-			str[i] = '_';
-			change = 1;
-		}
-	}
-
-	return change;
-}
-
-//----------------------------------------------------------------------
-// Determine if an account (id) is a GM account
-// and returns its level (or 0 if it isn't a GM account or if not found)
-//----------------------------------------------------------------------
-int isGM(int account_id) {
-	int i;
-
-	for(i = 0; i < GM_num; i++)
-		if (gm_account[i].account_id == account_id)
-			return gm_account[i].level;
-	return 0;
-}
-
-//----------------------------------------------
-// Search an character id
-//   (return character index or -1 (if not found))
-//   If exact character name is not found,
-//   the function checks without case sensitive
-//   and returns index if only 1 character is found
-//   and similar to the searched name.
-//----------------------------------------------
-int search_character_index(char* character_name) {
-	int i, quantity, index;
-
-	quantity = 0;
-	index = -1;
-	for(i = 0; i < char_num; i++) {
-		// Without case sensitive check (increase the number of similar character names found)
-		if (stricmp(char_dat[i].name, character_name) == 0) {
-			// Strict comparison (if found, we finish the function immediatly with correct value)
-			if (strcmp(char_dat[i].name, character_name) == 0)
-				return i;
-			quantity++;
-			index = i;
-		}
-	}
-	// Here, the exact character name is not found
-	// We return the found index of a similar account ONLY if there is 1 similar character
-	if (quantity == 1)
-		return index;
-
-	// Exact character name is not found and 0 or more than 1 similar characters have been found ==> we say not found
-	return -1;
-}
-
-//-------------------------------------
-// Return character name with the index
-//-------------------------------------
-char * search_character_name(int index) {
-
-	if (index >= 0 && index < char_num)
-		return char_dat[index].name;
-
-	return unknown_char_name;
-}
-
-//-------------------------------------------------
-// Function to create the character line (for save)
-//-------------------------------------------------
-int mmo_char_tostr(char *str, struct mmo_charstatus *p) {
-	int i;
-	char *str_p = str;
-
-	// on multi-map server, sometimes it's posssible that last_point become void. (reason???) We check that to not lost character at restart.
-	if (p->last_point.map[0] == '\0') {
-		memcpy(p->last_point.map, "prontera.gat", 16);
-		p->last_point.x = 273;
-		p->last_point.y = 354;
-	}
-
-	str_p += sprintf(str_p, "%d\t%d,%d\t%s\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
-	  "\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d,%d"
-	  "\t%s,%d,%d\t%s,%d,%d,%d\t",
-	  p->char_id, p->account_id, p->char_num, p->name, //
-	  p->class, p->base_level, p->job_level,
-	  p->base_exp, p->job_exp, p->zeny,
-	  p->hp, p->max_hp, p->sp, p->max_sp,
-	  p->str, p->agi, p->vit, p->int_, p->dex, p->luk,
-	  p->status_point, p->skill_point,
-	  p->option, p->karma, p->manner,	//
-	  p->party_id, p->guild_id, p->pet_id,
-	  p->hair, p->hair_color, p->clothes_color,
-	  p->weapon, p->shield, p->head_top, p->head_mid, p->head_bottom,
-	  p->last_point.map, p->last_point.x, p->last_point.y, //
-	  p->save_point.map, p->save_point.x, p->save_point.y,
-	  p->partner_id);
-	for(i = 0; i < 10; i++)
-		if (p->memo_point[i].map[0]) {
-			str_p += sprintf(str_p, "%s,%d,%d", p->memo_point[i].map, p->memo_point[i].x, p->memo_point[i].y);
-		}
-	*(str_p++) = '\t';
-
-	for(i = 0; i < MAX_INVENTORY; i++)
-		if (p->inventory[i].nameid) {
-			str_p += sprintf(str_p, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d ",
-			         p->inventory[i].id, p->inventory[i].nameid, p->inventory[i].amount, p->inventory[i].equip,
-			         p->inventory[i].identify, p->inventory[i].refine, p->inventory[i].attribute,
-			         p->inventory[i].card[0], p->inventory[i].card[1], p->inventory[i].card[2], p->inventory[i].card[3],
-			         p->inventory[i].broken);
-		}
-	*(str_p++) = '\t';
-
-	for(i = 0; i < MAX_CART; i++)
-		if (p->cart[i].nameid) {
-			str_p += sprintf(str_p, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d ",
-			         p->cart[i].id, p->cart[i].nameid, p->cart[i].amount, p->cart[i].equip,
-			         p->cart[i].identify, p->cart[i].refine, p->cart[i].attribute,
-			         p->cart[i].card[0], p->cart[i].card[1], p->cart[i].card[2], p->cart[i].card[3],
-			         p->cart[i].broken);
-		}
-	*(str_p++) = '\t';
-
-	for(i = 0; i < MAX_SKILL; i++)
-		if (p->skill[i].id && p->skill[i].flag != 1) {
-			str_p += sprintf(str_p, "%d,%d ", p->skill[i].id, (p->skill[i].flag == 0) ? p->skill[i].lv : p->skill[i].flag-2);
-		}
-	*(str_p++) = '\t';
-
-	for(i = 0; i < p->global_reg_num; i++)
-		if (p->global_reg[i].str[0])
-			str_p += sprintf(str_p, "%s,%d ", p->global_reg[i].str, p->global_reg[i].value);
-	*(str_p++) = '\t';
-
-	*str_p = '\0';
-	return 0;
-}
-
-//-------------------------------------------------------------------------
-// Function to set the character from the line (at read of characters file)
-//-------------------------------------------------------------------------
-int mmo_char_fromstr(char *str, struct mmo_charstatus *p) {
-	int tmp_int[256];
-	int set, next, len, i;
-
-	// initilialise character
-	memset(p, '\0', sizeof(struct mmo_charstatus));
-
-	// If it's not char structure of version 1008 and after
-	if ((set = sscanf(str, "%d\t%d,%d\t%[^\t]\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
-	   "\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d,%d"
-	   "\t%[^,],%d,%d\t%[^,],%d,%d,%d%n",
-	   &tmp_int[0], &tmp_int[1], &tmp_int[2], p->name, //
-	   &tmp_int[3], &tmp_int[4], &tmp_int[5],
-	   &tmp_int[6], &tmp_int[7], &tmp_int[8],
-	   &tmp_int[9], &tmp_int[10], &tmp_int[11], &tmp_int[12],
-	   &tmp_int[13], &tmp_int[14], &tmp_int[15], &tmp_int[16], &tmp_int[17], &tmp_int[18],
-	   &tmp_int[19], &tmp_int[20],
-	   &tmp_int[21], &tmp_int[22], &tmp_int[23], //
-	   &tmp_int[24], &tmp_int[25], &tmp_int[26],
-	   &tmp_int[27], &tmp_int[28], &tmp_int[29],
-	   &tmp_int[30], &tmp_int[31], &tmp_int[32], &tmp_int[33], &tmp_int[34],
-	   p->last_point.map, &tmp_int[35], &tmp_int[36], //
-	   p->save_point.map, &tmp_int[37], &tmp_int[38], &tmp_int[39], &next)) != 43) {
-		tmp_int[39] = 0; // partner id
-		// If not char structure from version 384 to 1007
-		if ((set = sscanf(str, "%d\t%d,%d\t%[^\t]\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
-		   "\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d,%d"
-		   "\t%[^,],%d,%d\t%[^,],%d,%d%n",
-		   &tmp_int[0], &tmp_int[1], &tmp_int[2], p->name, //
-		   &tmp_int[3], &tmp_int[4], &tmp_int[5],
-		   &tmp_int[6], &tmp_int[7], &tmp_int[8],
-		   &tmp_int[9], &tmp_int[10], &tmp_int[11], &tmp_int[12],
-		   &tmp_int[13], &tmp_int[14], &tmp_int[15], &tmp_int[16], &tmp_int[17], &tmp_int[18],
-		   &tmp_int[19], &tmp_int[20],
-		   &tmp_int[21], &tmp_int[22], &tmp_int[23], //
-		   &tmp_int[24], &tmp_int[25], &tmp_int[26],
-		   &tmp_int[27], &tmp_int[28], &tmp_int[29],
-		   &tmp_int[30], &tmp_int[31], &tmp_int[32], &tmp_int[33], &tmp_int[34],
-		   p->last_point.map, &tmp_int[35], &tmp_int[36], //
-		   p->save_point.map, &tmp_int[37], &tmp_int[38], &next)) != 42) {
-			// It's char structure of a version before 384
-			tmp_int[26] = 0; // pet id
-			set = sscanf(str, "%d\t%d,%d\t%[^\t]\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
-			      "\t%d,%d,%d\t%d,%d\t%d,%d,%d\t%d,%d,%d,%d,%d"
-			      "\t%[^,],%d,%d\t%[^,],%d,%d%n",
-			      &tmp_int[0], &tmp_int[1], &tmp_int[2], p->name, //
-			      &tmp_int[3], &tmp_int[4], &tmp_int[5],
-			      &tmp_int[6], &tmp_int[7], &tmp_int[8],
-			      &tmp_int[9], &tmp_int[10], &tmp_int[11], &tmp_int[12],
-			      &tmp_int[13], &tmp_int[14], &tmp_int[15], &tmp_int[16], &tmp_int[17], &tmp_int[18],
-			      &tmp_int[19], &tmp_int[20],
-			      &tmp_int[21], &tmp_int[22], &tmp_int[23], //
-			      &tmp_int[24], &tmp_int[25], //
-			      &tmp_int[27], &tmp_int[28], &tmp_int[29],
-			      &tmp_int[30], &tmp_int[31], &tmp_int[32], &tmp_int[33], &tmp_int[34],
-			      p->last_point.map, &tmp_int[35], &tmp_int[36], //
-			      p->save_point.map, &tmp_int[37], &tmp_int[38], &next);
-			set += 2;
-			//printf("char: old char data ver.1\n");
-		// Char structure of version 1007 or older
-		} else {
-			set++;
-			//printf("char: old char data ver.2\n");
-		}
-	// Char structure of version 1008+
-	} else {
-		//printf("char: new char data ver.3\n");
-	}
-	if (set != 43)
-		return 0;
-
-	p->char_id = tmp_int[0];
-	p->account_id = tmp_int[1];
-	p->char_num = tmp_int[2];
-	p->class = tmp_int[3];
-	p->base_level = tmp_int[4];
-	p->job_level = tmp_int[5];
-	p->base_exp = tmp_int[6];
-	p->job_exp = tmp_int[7];
-	p->zeny = tmp_int[8];
-	p->hp = tmp_int[9];
-	p->max_hp = tmp_int[10];
-	p->sp = tmp_int[11];
-	p->max_sp = tmp_int[12];
-	p->str = tmp_int[13];
-	p->agi = tmp_int[14];
-	p->vit = tmp_int[15];
-	p->int_ = tmp_int[16];
-	p->dex = tmp_int[17];
-	p->luk = tmp_int[18];
-	p->status_point = tmp_int[19];
-	p->skill_point = tmp_int[20];
-	p->option = tmp_int[21];
-	p->karma = tmp_int[22];
-	p->manner = tmp_int[23];
-	p->party_id = tmp_int[24];
-	p->guild_id = tmp_int[25];
-	p->pet_id = tmp_int[26];
-	p->hair = tmp_int[27];
-	p->hair_color = tmp_int[28];
-	p->clothes_color = tmp_int[29];
-	p->weapon = tmp_int[30];
-	p->shield = tmp_int[31];
-	p->head_top = tmp_int[32];
-	p->head_mid = tmp_int[33];
-	p->head_bottom = tmp_int[34];
-	p->last_point.x = tmp_int[35];
-	p->last_point.y = tmp_int[36];
-	p->save_point.x = tmp_int[37];
-	p->save_point.y = tmp_int[38];
-	p->partner_id = tmp_int[39];
-
-	// Some checks
-	for(i = 0; i < char_num; i++) {
-		if (char_dat[i].char_id == p->char_id) {
-			printf("\033[1;31mmmo_auth_init: ******Error: a character has an identical id to another.\n");
-			printf("               character id #%d -> new character not readed.\n", p->char_id);
-			printf("               Character saved in log file.\033[0m\n");
-			return -1;
-		} else if (strcmp(char_dat[i].name, p->name) == 0) {
-			printf("\033[1;31mmmo_auth_init: ******Error: character name already exists.\n");
-			printf("               character name '%s' -> new character not readed.\n", p->name);
-			printf("               Character saved in log file.\033[0m\n");
-			return -2;
-		}
-	}
-
-	if (strcmpi(wisp_server_name, p->name) == 0) {
-		printf("mmo_auth_init: ******WARNING: character name has wisp server name.\n");
-		printf("               Character name '%s' = wisp server name '%s'.\n", p->name, wisp_server_name);
-		printf("               Character readed. Suggestion: change the wisp server name.\n");
-		char_log("mmo_auth_init: ******WARNING: character name has wisp server name: Character name '%s' = wisp server name '%s'." RETCODE,
-		          p->name, wisp_server_name);
-	}
-
-	if (str[next] == '\n' || str[next] == '\r')
-		return 1;	// �V�K�f�[�^
-
-	next++;
-
-	for(i = 0; str[next] && str[next] != '\t'; i++) {
-		if (sscanf(str+next, "%[^,],%d,%d%n", p->memo_point[i].map, &tmp_int[0], &tmp_int[1], &len) != 3)
-			return -3;
-		p->memo_point[i].x = tmp_int[0];
-		p->memo_point[i].y = tmp_int[1];
-		next += len;
-		if (str[next] == ' ')
-			next++;
-	}
-
-	next++;
-
-	for(i = 0; str[next] && str[next] != '\t'; i++) {
-		if (sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-		    &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
-		    &tmp_int[4], &tmp_int[5], &tmp_int[6],
-		    &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &tmp_int[11], &len) == 12) {
-			// do nothing, it's ok
-		} else if (sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-		          &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
-		          &tmp_int[4], &tmp_int[5], &tmp_int[6],
-		          &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &len) == 11) {
-			tmp_int[11] = 0; // broken doesn't exist in this version -> 0
-		} else // invalid structure
-			return -4;
-		p->inventory[i].id = tmp_int[0];
-		p->inventory[i].nameid = tmp_int[1];
-		p->inventory[i].amount = tmp_int[2];
-		p->inventory[i].equip = tmp_int[3];
-		p->inventory[i].identify = tmp_int[4];
-		p->inventory[i].refine = tmp_int[5];
-		p->inventory[i].attribute = tmp_int[6];
-		p->inventory[i].card[0] = tmp_int[7];
-		p->inventory[i].card[1] = tmp_int[8];
-		p->inventory[i].card[2] = tmp_int[9];
-		p->inventory[i].card[3] = tmp_int[10];
-		p->inventory[i].broken  = tmp_int[11];
-		next += len;
-		if (str[next] == ' ')
-			next++;
-	}
-
-	next++;
-
-	for(i = 0; str[next] && str[next] != '\t'; i++) {
-		if (sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-		    &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
-		    &tmp_int[4], &tmp_int[5], &tmp_int[6],
-		    &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &tmp_int[11], &len) == 12) {
-			// do nothing, it's ok
-		} else if (sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-		           &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
-		           &tmp_int[4], &tmp_int[5], &tmp_int[6],
-		           &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &len) == 11) {
-			tmp_int[11] = 0; // broken doesn't exist in this version -> 0
-		} else // invalid structure
-			return -5;
-		p->cart[i].id = tmp_int[0];
-		p->cart[i].nameid = tmp_int[1];
-		p->cart[i].amount = tmp_int[2];
-		p->cart[i].equip = tmp_int[3];
-		p->cart[i].identify = tmp_int[4];
-		p->cart[i].refine = tmp_int[5];
-		p->cart[i].attribute = tmp_int[6];
-		p->cart[i].card[0] = tmp_int[7];
-		p->cart[i].card[1] = tmp_int[8];
-		p->cart[i].card[2] = tmp_int[9];
-		p->cart[i].card[3] = tmp_int[10];
-		p->cart[i].broken = tmp_int[11];
-		next += len;
-		if (str[next] == ' ')
-			next++;
-	}
-
-	next++;
-
-	for(i = 0; str[next] && str[next] != '\t'; i++) {
-		if (sscanf(str + next, "%d,%d%n", &tmp_int[0], &tmp_int[1], &len) != 2)
-			return -6;
-		p->skill[tmp_int[0]].id = tmp_int[0];
-		p->skill[tmp_int[0]].lv = tmp_int[1];
-		next += len;
-		if (str[next] == ' ')
-			next++;
-	}
-
-	next++;
-
-	for(i = 0; str[next] && str[next] != '\t' && str[next] != '\n' && str[next] != '\r'; i++) { // global_reg�����ȑO��athena.txt�݊��̂��߈ꉞ'\n'�`�F�b�N
-		if (sscanf(str + next, "%[^,],%d%n", p->global_reg[i].str, &p->global_reg[i].value, &len) != 2) {
-			// because some scripts are not correct, the str can be "". So, we must check that.
-			// If it's, we must not refuse the character, but just this REG value.
-			// Character line will have something like: nov_2nd_cos,9 ,9 nov_1_2_cos_c,1 (here, ,9 is not good)
-			if (str[next] == ',' && sscanf(str + next, ",%d%n", &p->global_reg[i].value, &len) == 1)
-				i--;
-			else
-				return -7;
-		}
-		next += len;
-		if (str[next] == ' ')
-			next++;
-	}
-	p->global_reg_num = i;
-
-	return 1;
-}
-
-//---------------------------------
-// Function to read characters file
-//---------------------------------
-int mmo_char_init(void) {
-	char line[65536];
-	int i;
-	int ret, line_count;
-	FILE *fp;
-
-	char_max = 256;
-	char_dat = calloc(sizeof(struct mmo_charstatus) * 256, 1);
-	if (!char_dat) {
-		printf("out of memory: mmo_char_init (calloc of char_dat).\n");
-		exit(1);
-	}
-	online_chars = calloc(sizeof(int) * 256, 1);
-	if (!online_chars) {
-		printf("out of memory: mmo_char_init (calloc of online_chars).\n");
-		exit(1);
-	}
-	for(i = 0; i < char_max; i++)
-		online_chars[i] = -1;
-
-	char_num = 0;
-
-	fp = fopen(char_txt, "r");
-	if (fp == NULL) {
-		printf("Characters file not found: %s.\n", char_txt);
-		char_log("Characters file not found: %s." RETCODE, char_txt);
-		char_log("Id for the next created character: %d." RETCODE, char_id_count);
-		return 0;
-	}
-
-	line_count = 0;
-	while(fgets(line, sizeof(line)-1, fp)) {
-		int i, j;
-		line_count++;
-
-		if (line[0] == '/' && line[1] == '/')
-			continue;
-		line[sizeof(line)-1] = '\0';
-
-		j = 0;
-		if (sscanf(line, "%d\t%%newid%%%n", &i, &j) == 1 && j > 0) {
-			if (char_id_count < i)
-				char_id_count = i;
-			continue;
-		}
-
-		if (char_num >= char_max) {
-			char_max += 256;
-			char_dat = realloc(char_dat, sizeof(struct mmo_charstatus) * char_max);
-			if (!char_dat) {
-				printf("Out of memory: mmo_char_init (realloc of char_dat).\n");
-				char_log("Out of memory: mmo_char_init (realloc of char_dat)." RETCODE);
-				exit(1);
-			}
-			online_chars = realloc(online_chars, sizeof(int) * char_max);
-			if (!online_chars) {
-				printf("Out of memory: mmo_char_init (realloc of online_chars).\n");
-				char_log("Out of memory: mmo_char_init (realloc of online_chars)." RETCODE);
-				exit(1);
-			}
-			for(i = char_max - 256; i < char_max; i++)
-				online_chars[i] = -1;
-		}
-
-		ret = mmo_char_fromstr(line, &char_dat[char_num]);
-		if (ret > 0) { // negative value or zero for errors
-			if (char_dat[char_num].char_id >= char_id_count)
-				char_id_count = char_dat[char_num].char_id + 1;
-			char_num++;
-		} else {
-			printf("mmo_char_init: in characters file, unable to read the line #%d.\n", line_count);
-			printf("               -> Character saved in log file.\n");
-			switch (ret) {
-			case -1:
-				char_log("Duplicate character id in the next character line (character not readed):" RETCODE);
-				break;
-			case -2:
-				char_log("Duplicate character name in the next character line (character not readed):" RETCODE);
-				break;
-			case -3:
-				char_log("Invalid memo point structure in the next character line (character not readed):" RETCODE);
-				break;
-			case -4:
-				char_log("Invalid inventory item structure in the next character line (character not readed):" RETCODE);
-				break;
-			case -5:
-				char_log("Invalid cart item structure in the next character line (character not readed):" RETCODE);
-				break;
-			case -6:
-				char_log("Invalid skill structure in the next character line (character not readed):" RETCODE);
-				break;
-			case -7:
-				char_log("Invalid register structure in the next character line (character not readed):" RETCODE);
-				break;
-			default: // 0
-				char_log("Unabled to get a character in the next line - Basic structure of line (before inventory) is incorrect (character not readed):" RETCODE);
-				break;
-			}
-			char_log("%s", line);
-		}
-	}
-	fclose(fp);
-
-	if (char_num == 0) {
-		printf("mmo_char_init: No character found in %s.\n", char_txt);
-		char_log("mmo_char_init: No character found in %s." RETCODE, char_txt);
-	} else if (char_num == 1) {
-		printf("mmo_char_init: 1 character read in %s.\n", char_txt);
-		char_log("mmo_char_init: 1 character read in %s." RETCODE, char_txt);
-	} else {
-		printf("mmo_char_init: %d characters read in %s.\n", char_num, char_txt);
-		char_log("mmo_char_init: %d characters read in %s." RETCODE, char_num, char_txt);
-	}
-
-	char_log("Id for the next created character: %d." RETCODE, char_id_count);
-
-	return 0;
-}
-
-//---------------------------------------------------------
-// Function to save characters in files (speed up by [Yor])
-//---------------------------------------------------------
-void mmo_char_sync(void) {
-	char line[65536];
-	int i, j, k;
-	int lock;
-	FILE *fp;
-	int id[char_num];
-
-	// Sorting before save (by [Yor])
-	for(i = 0; i < char_num; i++) {
-		id[i] = i;
-		for(j = 0; j < i; j++) {
-			if ((char_dat[i].account_id < char_dat[id[j]].account_id) ||
-			    // if same account id, we sort by slot.
-			    (char_dat[i].account_id == char_dat[id[j]].account_id &&
-			     char_dat[i].char_num < char_dat[id[j]].char_num)) {
-				for(k = i; k > j; k--)
-					id[k] = id[k-1];
-				id[j] = i; // id[i]
-				break;
-			}
-		}
-	}
-
-	// Data save
-	fp = lock_fopen(char_txt, &lock);
-	if (fp == NULL) {
-		printf("WARNING: Server can't not save characters.\n");
-		char_log("WARNING: Server can't not save characters." RETCODE);
-	} else {
-		for(i = 0; i < char_num; i++) {
-			// create only once the line, and save it in the 2 files (it's speeder than repeat twice the loop and create twice the line)
-			mmo_char_tostr(line, &char_dat[id[i]]); // use of sorted index
-				fprintf(fp, "%s" RETCODE, line);
-		}
-		fprintf(fp, "%d\t%%newid%%" RETCODE, char_id_count);
-		lock_fclose(fp, char_txt, &lock);
-	}
-
-	// Data save (backup)
-	if (backup_txt_flag) { // The backup_txt file was created because char deletion bug existed. Now it's finish and that take a lot of time to create a second file when there are a lot of characters. => option By [Yor]
-		fp = lock_fopen(backup_txt, &lock);
-		if (fp == NULL) {
-			printf("WARNING: Server can't not create backup of characters file.\n");
-			char_log("WARNING: Server can't not create backup of characters file." RETCODE);
-			return;
-		}
-		for(i = 0; i < char_num; i++) {
-			// create only once the line, and save it in the 2 files (it's speeder than repeat twice the loop and create twice the line)
-			mmo_char_tostr(line, &char_dat[id[i]]); // use of sorted index
-				fprintf(fp, "%s" RETCODE, line);
-		}
-		fprintf(fp, "%d\t%%newid%%" RETCODE, char_id_count);
-		lock_fclose(fp, backup_txt, &lock);
-	}
-
-	return;
-}
-
-//----------------------------------------------------
-// Function to save (in a periodic way) datas in files
-//----------------------------------------------------
-int mmo_char_sync_timer(int tid, unsigned int tick, int id, int data) {
-	mmo_char_sync();
-	inter_save();
-	return 0;
-}
-
-//-----------------------------------
-// Function to create a new character
-//-----------------------------------
-int make_new_char(int fd, unsigned char *dat) {
-	int i, j;
-	struct char_session_data *sd;
-
-	sd = session[fd]->session_data;
-
-	// remove control characters from the name
-	dat[23] = '\0';
-	if (remove_control_chars(dat)) {
-		char_log("Make new char error (control char received in the name): (connection #%d, account: %d)." RETCODE,
-		         fd, sd->account_id);
-		return -1;
-	}
-
-	// check lenght of character name
-	if (strlen(dat) < 4) {
-		char_log("Make new char error (character name too small): (connection #%d, account: %d, name: '%s')." RETCODE,
-		         fd, sd->account_id, dat);
-		return -1;
-	}
-
-	// Check Authorised letters/symbols in the name of the character
-	if (char_name_option == 1) { // only letters/symbols in char_name_letters are authorised
-		for (i = 0; dat[i]; i++)
-			if (strchr(char_name_letters, dat[i]) == NULL) {
-				char_log("Make new char error (invalid letter in the name): (connection #%d, account: %d), name: %s, invalid letter: %c." RETCODE,
-				         fd, sd->account_id, dat, dat[i]);
-				return -1;
-			}
-	} else if (char_name_option == 2) { // letters/symbols in char_name_letters are forbidden
-		for (i = 0; dat[i]; i++)
-			if (strchr(char_name_letters, dat[i]) != NULL) {
-				char_log("Make new char error (invalid letter in the name): (connection #%d, account: %d), name: %s, invalid letter: %c." RETCODE,
-				         fd, sd->account_id, dat, dat[i]);
-				return -1;
-			}
-	} // else, all letters/symbols are authorised (except control char removed before)
-
-	if (dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29] != 5*6 || // stats
-	    dat[30] >= 9 || // slots (dat[30] can not be negativ)
-	    dat[33] <= 0 || dat[33] >= 20 || // hair style
-	    dat[31] >= 12) { // hair color (dat[31] can not be negativ)
-		char_log("Make new char error (invalid values): (connection #%d, account: %d) slot %d, name: %s, stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d" RETCODE,
-		         fd, sd->account_id, dat[30], dat, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
-		return -1;
-	}
-
-	// check individual stat value
-	for(i = 24; i <= 29; i++) {
-		if (dat[i] < 1 || dat[i] > 9) {
-			char_log("Make new char error (invalid stat value: not between 1 to 9): (connection #%d, account: %d) slot %d, name: %s, stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d" RETCODE,
-			         fd, sd->account_id, dat[30], dat, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
-			return -1;
-		}
-	}
-
-	for(i = 0; i < char_num; i++) {
-		if ((name_ignoring_case != 0 && strcmp(char_dat[i].name, dat) == 0) ||
-			(name_ignoring_case == 0 && strcmpi(char_dat[i].name, dat) == 0)) {
-			char_log("Make new char error (name already exists): (connection #%d, account: %d) slot %d, name: %s (actual name of other char: %d), stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d." RETCODE,
-			         fd, sd->account_id, dat[30], dat, char_dat[i].name, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
-			return -1;
-		}
-		if (char_dat[i].account_id == sd->account_id && char_dat[i].char_num == dat[30]) {
-			char_log("Make new char error (slot already used): (connection #%d, account: %d) slot %d, name: %s (actual name of other char: %d), stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d." RETCODE,
-			         fd, sd->account_id, dat[30], dat, char_dat[i].name, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
-			return -1;
-		}
-	}
-
-	if (strcmp(wisp_server_name, dat) == 0) {
-		char_log("Make new char error (name used is wisp name for server): (connection #%d, account: %d) slot %d, name: %s (actual name of other char: %d), stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d." RETCODE,
-		         fd, sd->account_id, dat[30], dat, char_dat[i].name, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
-		return -1;
-	}
-
-	if (char_num >= char_max) {
-		char_max += 256;
-		char_dat = realloc(char_dat, sizeof(struct mmo_charstatus) * char_max);
-		if (!char_dat) {
-			printf("Out of memory: make_new_char (realloc of char_dat).\n");
-			char_log("Out of memory: make_new_char (realloc of char_dat)." RETCODE);
-			exit(1);
-		}
-		online_chars = realloc(online_chars, sizeof(int) * char_max);
-		if (!online_chars) {
-			printf("Out of memory: make_new_char (realloc of online_chars).\n");
-			char_log("Out of memory: make_new_char (realloc of online_chars)." RETCODE);
-			exit(1);
-		}
-		for(j = char_max - 256; j < char_max; j++)
-			online_chars[j] = -1;
-	}
-
-	char_log("Creation of New Character: (connection #%d, account: %d) slot %d, character Name: %s, stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d." RETCODE,
-	         fd, sd->account_id, dat[30], dat, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
-
-	memset(&char_dat[i], 0, sizeof(struct mmo_charstatus));
-
-	char_dat[i].char_id = char_id_count++;
-	char_dat[i].account_id = sd->account_id;
-	char_dat[i].char_num = dat[30];
-	strcpy(char_dat[i].name, dat);
-	char_dat[i].class = 0;
-	char_dat[i].base_level = 1;
-	char_dat[i].job_level = 1;
-	char_dat[i].base_exp = 0;
-	char_dat[i].job_exp = 0;
-	char_dat[i].zeny = start_zeny;
-	char_dat[i].str = dat[24];
-	char_dat[i].agi = dat[25];
-	char_dat[i].vit = dat[26];
-	char_dat[i].int_ = dat[27];
-	char_dat[i].dex = dat[28];
-	char_dat[i].luk = dat[29];
-	char_dat[i].max_hp = 40 * (100 + char_dat[i].vit) / 100;
-	char_dat[i].max_sp = 11 * (100 + char_dat[i].int_) / 100;
-	char_dat[i].hp = char_dat[i].max_hp;
-	char_dat[i].sp = char_dat[i].max_sp;
-	char_dat[i].status_point = 0;
-	char_dat[i].skill_point = 0;
-	char_dat[i].option = 0;
-	char_dat[i].karma = 0;
-	char_dat[i].manner = 0;
-	char_dat[i].party_id = 0;
-	char_dat[i].guild_id = 0;
-	char_dat[i].hair = dat[33];
-	char_dat[i].hair_color = dat[31];
-	char_dat[i].clothes_color = 0;
-	char_dat[i].inventory[0].nameid = start_weapon; // Knife
-	char_dat[i].inventory[0].amount = 1;
-	char_dat[i].inventory[0].equip = 0x02;
-	char_dat[i].inventory[0].identify = 1;
-	char_dat[i].inventory[0].broken = 0;
-	char_dat[i].inventory[1].nameid = start_armor; // Cotton Shirt
-	char_dat[i].inventory[1].amount = 1;
-	char_dat[i].inventory[1].equip = 0x10;
-	char_dat[i].inventory[1].identify = 1;
-	char_dat[i].inventory[1].broken = 0;
-	char_dat[i].weapon = 1;
-	char_dat[i].shield = 0;
-	char_dat[i].head_top = 0;
-	char_dat[i].head_mid = 0;
-	char_dat[i].head_bottom = 0;
-	memcpy(&char_dat[i].last_point, &start_point, sizeof(start_point));
-	memcpy(&char_dat[i].save_point, &start_point, sizeof(start_point));
-	char_num++;
-
-	mmo_char_sync();
-	return i;
-}
-
-//----------------------------------------------------
-// This function return the name of the job (by [Yor])
-//----------------------------------------------------
-char * job_name(int class) {
-	switch (class) {
-	case 0:    return "Novice";
-	case 1:    return "Swordsman";
-	case 2:    return "Mage";
-	case 3:    return "Archer";
-	case 4:    return "Acolyte";
-	case 5:    return "Merchant";
-	case 6:    return "Thief";
-	case 7:    return "Knight";
-	case 8:    return "Priest";
-	case 9:    return "Wizard";
-	case 10:   return "Blacksmith";
-	case 11:   return "Hunter";
-	case 12:   return "Assassin";
-	case 13:   return "Knight 2";
-	case 14:   return "Crusader";
-	case 15:   return "Monk";
-	case 16:   return "Sage";
-	case 17:   return "Rogue";
-	case 18:   return "Alchemist";
-	case 19:   return "Bard";
-	case 20:   return "Dancer";
-	case 21:   return "Crusader 2";
-	case 22:   return "Wedding";
-	case 23:   return "Super Novice";
-	case 4001: return "Novice High";
-	case 4002: return "Swordsman High";
-	case 4003: return "Mage High";
-	case 4004: return "Archer High";
-	case 4005: return "Acolyte High";
-	case 4006: return "Merchant High";
-	case 4007: return "Thief High";
-	case 4008: return "Lord Knight";
-	case 4009: return "High Priest";
-	case 4010: return "High Wizard";
-	case 4011: return "Whitesmith";
-	case 4012: return "Sniper";
-	case 4013: return "Assassin Cross";
-	case 4014: return "Peko Knight";
-	case 4015: return "Paladin";
-	case 4016: return "Champion";
-	case 4017: return "Professor";
-	case 4018: return "Stalker";
-	case 4019: return "Creator";
-	case 4020: return "Clown";
-	case 4021: return "Gypsy";
-	case 4022: return "Peko Paladin";
-	case 4023: return "Baby Novice";
-	case 4024: return "Baby Swordsman";
-	case 4025: return "Baby Mage";
-	case 4026: return "Baby Archer";
-	case 4027: return "Baby Acolyte";
-	case 4028: return "Baby Merchant";
-	case 4029: return "Baby Thief";
-	case 4030: return "Baby Knight";
-	case 4031: return "Baby Priest";
-	case 4032: return "Baby Wizard";
-	case 4033: return "Baby Blacksmith";
-	case 4034: return "Baby Hunter";
-	case 4035: return "Baby Assassin";
-	case 4036: return "Baby Peco Knight";
-	case 4037: return "Baby Crusader";
-	case 4038: return "Baby Monk";
-	case 4039: return "Baby Sage";
-	case 4040: return "Baby Rogue";
-	case 4041: return "Baby Alchemist";
-	case 4042: return "Baby Bard";
-	case 4043: return "Baby Dancer";
-	case 4044: return "Baby Peco Crusader";
-	case 4045: return "Super Baby";
-	}
-	return "Unknown Job";
-}
-
-//-------------------------------------------------------------
-// Function to create the online files (txt and html). by [Yor]
-//-------------------------------------------------------------
-void create_online_files(void) {
-	int i, j, k, l; // for loops
-	int players;    // count the number of players
-	FILE *fp;       // for the txt file
-	FILE *fp2;      // for the html file
-	char temp[256];       // to prepare what we must display
-	time_t time_server;   // for number of seconds
-	struct tm *datetime;  // variable for time in structure ->tm_mday, ->tm_sec, ...
-	int id[char_num];
-
-	if (online_display_option == 0) // we display nothing, so return
-		return;
-
-	//char_log("Creation of online players files." RETCODE);
-
-	// Get number of online players, id of each online players
-	players = 0;
-	// sort online characters.
-	for(i = 0; i < char_num; i++) {
-		if (online_chars[i] != -1) {
-			id[players] = i;
-			// use sorting option
-			switch (online_sorting_option) {
-			case 1: // by name (without case sensitive)
-			  {
-				char *p_name = char_dat[i].name; //speed up sorting when there are a lot of players. But very rarely players have same name.
-				for(j = 0; j < players; j++)
-					if (stricmp(p_name, char_dat[id[j]].name) < 0 ||
-					   // if same name, we sort with case sensitive.
-					   (stricmp(p_name, char_dat[id[j]].name) == 0 &&
-					    strcmp(p_name, char_dat[id[j]].name) < 0)) {
-						for(k = players; k > j; k--)
-							id[k] = id[k-1];
-						id[j] = i; // id[players]
-						break;
-					}
-			  }
-				break;
-			case 2: // by zeny
-				for(j = 0; j < players; j++)
-					if (char_dat[i].zeny < char_dat[id[j]].zeny ||
-					   // if same number of zenys, we sort by name.
-					   (char_dat[i].zeny == char_dat[id[j]].zeny &&
-					    stricmp(char_dat[i].name, char_dat[id[j]].name) < 0)) {
-						for(k = players; k > j; k--)
-							id[k] = id[k-1];
-						id[j] = i; // id[players]
-						break;
-					}
-				break;
-			case 3: // by base level
-				for(j = 0; j < players; j++)
-					if (char_dat[i].base_level < char_dat[id[j]].base_level ||
-					   // if same base level, we sort by base exp.
-					   (char_dat[i].base_level == char_dat[id[j]].base_level &&
-					    char_dat[i].base_exp < char_dat[id[j]].base_exp)) {
-						for(k = players; k > j; k--)
-							id[k] = id[k-1];
-						id[j] = i; // id[players]
-						break;
-					}
-				break;
-			case 4: // by job (and job level)
-				for(j = 0; j < players; j++)
-					if (char_dat[i].class < char_dat[id[j]].class ||
-					   // if same job, we sort by job level.
-					   (char_dat[i].class == char_dat[id[j]].class &&
-					    char_dat[i].job_level < char_dat[id[j]].job_level) ||
-					   // if same job and job level, we sort by job exp.
-					   (char_dat[i].class == char_dat[id[j]].class &&
-					    char_dat[i].job_level == char_dat[id[j]].job_level &&
-					    char_dat[i].job_exp < char_dat[id[j]].job_exp)) {
-						for(k = players; k > j; k--)
-							id[k] = id[k-1];
-						id[j] = i; // id[players]
-						break;
-					}
-				break;
-			case 5: // by location map name
-			  {
-				int cpm_result; // A lot of player maps are identical. So, test if done often twice.
-				for(j = 0; j < players; j++)
-					if ((cpm_result = strcmp(char_dat[i].last_point.map, char_dat[id[j]].last_point.map)) < 0 || // no map are identical and with upper cases (not use stricmp)
-					   // if same map name, we sort by name.
-					   (cpm_result == 0 &&
-					    stricmp(char_dat[i].name, char_dat[id[j]].name) < 0)) {
-						for(k = players; k > j; k--)
-							id[k] = id[k-1];
-						id[j] = i; // id[players]
-						break;
-					}
-			  }
-				break;
-			default: // 0 or invalid value: no sorting
-				break;
-			}
-			players++;
-		}
-	}
-
-	// write files
-	fp = fopen(online_txt_filename, "w");
-	if (fp != NULL) {
-		fp2 = fopen(online_html_filename, "w");
-		if (fp2 != NULL) {
-			// get time
-			time(&time_server); // get time in seconds since 1/1/1970
-			datetime = localtime(&time_server); // convert seconds in structure
-			strftime(temp, sizeof(temp), "%d %b %Y %X", datetime); // like sprintf, but only for date/time (05 dec 2003 15:12:52)
-			// write heading
-			fprintf(fp2, "<HTML>\n");
-			fprintf(fp2, "  <META http-equiv=\"Refresh\" content=\"%d\">\n", online_refresh_html); // update on client explorer every x seconds
-			fprintf(fp2, "  <HEAD>\n");
-			fprintf(fp2, "    <TITLE>Online Players on %s</TITLE>\n", server_name);
-			fprintf(fp2, "  </HEAD>\n");
-			fprintf(fp2, "  <BODY>\n");
-			fprintf(fp2, "    <H3>Online Players on %s (%s):</H3>\n", server_name, temp);
-			fprintf(fp, "Online Players on %s (%s):\n", server_name, temp);
-			fprintf(fp, "\n");
-
-			// If we display at least 1 player
-			if (players > 0) {
-				j = 0; // count the number of characters for the txt version and to set the separate line
-				fprintf(fp2, "    <table border=\"1\" cellspacing=\"1\">\n");
-				fprintf(fp2, "      <tr>\n");
-				if ((online_display_option & 1) || (online_display_option & 64)) {
-					fprintf(fp2, "        <td><b>Name</b></td>\n");
-					if (online_display_option & 64) {
-						fprintf(fp, "Name                          "); // 30
-						j += 30;
-					} else {
-						fprintf(fp, "Name                     "); // 25
-						j += 25;
-					}
-				}
-				if ((online_display_option & 6) == 6) {
-					fprintf(fp2, "        <td><b>Job (levels)</b></td>\n");
-					fprintf(fp, "Job                 Levels "); // 27
-					j += 27;
-				} else if (online_display_option & 2) {
-					fprintf(fp2, "        <td><b>Job</b></td>\n");
-					fprintf(fp, "Job                "); // 19
-					j += 19;
-				} else if (online_display_option & 4) {
-					fprintf(fp2, "        <td><b>Levels</b></td>\n");
-					fprintf(fp, " Levels "); // 8
-					j += 8;
-				}
-				if (online_display_option & 24) { // 8 or 16
-					fprintf(fp2, "        <td><b>Location</b></td>\n");
-					if (online_display_option & 16) {
-						fprintf(fp, "Location     ( x , y ) "); // 23
-						j += 23;
-					} else {
-						fprintf(fp, "Location     "); // 13
-						j += 13;
-					}
-				}
-				if (online_display_option & 32) {
-					fprintf(fp2, "        <td ALIGN=CENTER><b>zenys</b></td>\n");
-					fprintf(fp, "          Zenys "); // 16
-					j += 16;
-				}
-				fprintf(fp2, "      </tr>\n");
-				fprintf(fp, "\n");
-				for (k = 0; k < j; k++)
-					fprintf(fp, "-");
-				fprintf(fp, "\n");
-
-				// display each player.
-				for (i = 0; i < players; i++) {
-					// get id of the character (more speed)
-					j = id[i];
-					fprintf(fp2, "      <tr>\n");
-					// displaying the character name
-					if ((online_display_option & 1) || (online_display_option & 64)) { // without/with 'GM' display
-						strcpy(temp, char_dat[j].name);
-						l = isGM(char_dat[j].account_id);
-						if (online_display_option & 64) {
-							if (l >= online_gm_display_min_level)
-								fprintf(fp, "%-24s (GM) ", temp);
-							else
-								fprintf(fp, "%-24s      ", temp);
-						} else
-							fprintf(fp, "%-24s ", temp);
-						// name of the character in the html (no < >, because that create problem in html code)
-						fprintf(fp2, "        <td>");
-						if ((online_display_option & 64) && l >= online_gm_display_min_level)
-							fprintf(fp2, "<b>");
-						for (k = 0; temp[k]; k++) {
-							switch(temp[k]) {
-							case '<': // <
-								fprintf(fp2, "&lt;");
-								break;
-							case '>': // >
-								fprintf(fp2, "&gt;");
-								break;
-							default:
-								fprintf(fp2, "%c", temp[k]);
-								break;
-							};
-						}
-						if ((online_display_option & 64) && l >= online_gm_display_min_level)
-							fprintf(fp2, "</b> (GM)");
-						fprintf(fp2, "</td>\n");
-					}
-					// displaying of the job
-					if (online_display_option & 6) {
-						char * jobname = job_name(char_dat[j].class);
-						if ((online_display_option & 6) == 6) {
-							fprintf(fp2, "        <td>%s %d/%d</td>\n", jobname, char_dat[j].base_level, char_dat[j].job_level);
-							fprintf(fp, "%-18s %3d/%3d ", jobname, char_dat[j].base_level, char_dat[j].job_level);
-						} else if (online_display_option & 2) {
-							fprintf(fp2, "        <td>%s</td>\n", jobname);
-							fprintf(fp, "%-18s ", jobname);
-						} else if (online_display_option & 4) {
-							fprintf(fp2, "        <td>%d/%d</td>\n", char_dat[j].base_level, char_dat[j].job_level);
-							fprintf(fp, "%3d/%3d ", char_dat[j].base_level, char_dat[j].job_level);
-						}
-					}
-					// displaying of the map
-					if (online_display_option & 24) { // 8 or 16
-						// prepare map name
-						memset(temp, 0, sizeof(temp));
-						strncpy(temp, char_dat[j].last_point.map, 16);
-						if (strchr(temp, '.') != NULL)
-							temp[strchr(temp, '.') - temp] = '\0'; // suppress the '.gat'
-						// write map name
-						if (online_display_option & 16) { // map-name AND coordonates
-							fprintf(fp2, "        <td>%s (%d, %d)</td>\n", temp, char_dat[j].last_point.x, char_dat[j].last_point.y);
-							fprintf(fp, "%-12s (%3d,%3d) ", temp, char_dat[j].last_point.x, char_dat[j].last_point.y);
-						} else {
-							fprintf(fp2, "        <td>%s</td>\n", temp);
-							fprintf(fp, "%-12s ", temp);
-						}
-					}
-					// displaying number of zenys
-					if (online_display_option & 32) {
-						// write number of zenys
-						if (char_dat[j].zeny == 0) { // if no zeny
-							fprintf(fp2, "        <td ALIGN=RIGHT>no zeny</td>\n");
-							fprintf(fp, "        no zeny ");
-						} else {
-							fprintf(fp2, "        <td ALIGN=RIGHT>%d z</td>\n", char_dat[j].zeny);
-							fprintf(fp, "%13d z ", char_dat[j].zeny);
-						}
-					}
-					fprintf(fp, "\n");
-					fprintf(fp2, "      </tr>\n");
-				}
-				fprintf(fp2, "    </table>\n");
-				fprintf(fp, "\n");
-			}
-
-			// Displaying number of online players
-			if (players == 0) {
-				fprintf(fp2, "    <p>No user is online.</p>\n");
-				fprintf(fp, "No user is online.\n");
-			// no display if only 1 player
-			} else if (players == 1) {
-			} else {
-				fprintf(fp2, "    <p>%d users are online.</p>\n", players);
-				fprintf(fp, "%d users are online.\n", players);
-			}
-			fprintf(fp2, "  </BODY>\n");
-			fprintf(fp2, "</HTML>\n");
-			fclose(fp2);
-		}
-		fclose(fp);
-	}
-
-	return;
-}
-
-//---------------------------------------------------------------------
-// This function return the number of online players in all map-servers
-//---------------------------------------------------------------------
-int count_users(void) {
-	int i, users;
-
-	users = 0;
-	for(i = 0; i < MAX_MAP_SERVERS; i++)
-		if (server_fd[i] >= 0)
-			users += server[i].users;
-
-	return users;
-}
-
-//----------------------------------------
-// Function to send characters to a player
-//----------------------------------------
-int mmo_char_send006b(int fd, struct char_session_data *sd) {
-	int i, j, found_num;
-	struct mmo_charstatus *p;
-#ifdef NEW_006b
-	const int offset = 24;
-#else
-	const int offset = 4;
-#endif
-
-	found_num = 0;
-	for(i = 0; i < char_num; i++) {
-		if (char_dat[i].account_id == sd->account_id) {
-			sd->found_char[found_num] = i;
-			found_num++;
-			if (found_num == 9)
-				break;
-		}
-	}
-	for(i = found_num; i < 9; i++)
-		sd->found_char[i] = -1;
-
-	memset(WFIFOP(fd,0), 0, offset + found_num * 106);
-	WFIFOW(fd,0) = 0x6b;
-	WFIFOW(fd,2) = offset + found_num * 106;
-
-	for(i = 0; i < found_num; i++) {
-		p = &char_dat[sd->found_char[i]];
-		j = offset + (i * 106); // increase speed of code
-
-		WFIFOL(fd,j) = p->char_id;
-		WFIFOL(fd,j+4) = p->base_exp;
-		WFIFOL(fd,j+8) = p->zeny;
-		WFIFOL(fd,j+12) = p->job_exp;
-		WFIFOL(fd,j+16) = p->job_level;
-
-		WFIFOL(fd,j+20) = 0;
-		WFIFOL(fd,j+24) = 0;
-		WFIFOL(fd,j+28) = p->option;
-
-		WFIFOL(fd,j+32) = p->karma;
-		WFIFOL(fd,j+36) = p->manner;
-
-		WFIFOW(fd,j+40) = p->status_point;
-		WFIFOW(fd,j+42) = (p->hp > 0x7fff) ? 0x7fff : p->hp;
-		WFIFOW(fd,j+44) = (p->max_hp > 0x7fff) ? 0x7fff : p->max_hp;
-		WFIFOW(fd,j+46) = (p->sp > 0x7fff) ? 0x7fff : p->sp;
-		WFIFOW(fd,j+48) = (p->max_sp > 0x7fff) ? 0x7fff : p->max_sp;
-		WFIFOW(fd,j+50) = DEFAULT_WALK_SPEED; // p->speed;
-		WFIFOW(fd,j+52) = p->class;
-		WFIFOW(fd,j+54) = p->hair;
-		WFIFOW(fd,j+56) = p->weapon;
-		WFIFOW(fd,j+58) = p->base_level;
-		WFIFOW(fd,j+60) = p->skill_point;
-		WFIFOW(fd,j+62) = p->head_bottom;
-		WFIFOW(fd,j+64) = p->shield;
-		WFIFOW(fd,j+66) = p->head_top;
-		WFIFOW(fd,j+68) = p->head_mid;
-		WFIFOW(fd,j+70) = p->hair_color;
-		WFIFOW(fd,j+72) = p->clothes_color;
-
-		memcpy(WFIFOP(fd,j+74), p->name, 24);
-
-		WFIFOB(fd,j+98) = (p->str > 255) ? 255 : p->str;
-		WFIFOB(fd,j+99) = (p->agi > 255) ? 255 : p->agi;
-		WFIFOB(fd,j+100) = (p->vit > 255) ? 255 : p->vit;
-		WFIFOB(fd,j+101) = (p->int_ > 255) ? 255 : p->int_;
-		WFIFOB(fd,j+102) = (p->dex > 255) ? 255 : p->dex;
-		WFIFOB(fd,j+103) = (p->luk > 255) ? 255 : p->luk;
-		WFIFOB(fd,j+104) = p->char_num;
-	}
-
-	WFIFOSET(fd,WFIFOW(fd,2));
-
-	return 0;
-}
-
-int set_account_reg2(int acc, int num, struct global_reg *reg) {
-	int i, c;
-
-	c = 0;
-	for(i = 0; i < char_num; i++) {
-		if (char_dat[i].account_id == acc) {
-			memcpy(char_dat[i].account_reg2, reg, sizeof(char_dat[i].account_reg2));
-			char_dat[i].account_reg2_num = num;
-			c++;
-		}
-	}
-	return c;
-}
-
-// ����(char�폜���Ɏg�p)
-int char_divorce(struct mmo_charstatus *cs) {
-	if (cs == NULL)
-		return 0;
-
-	if (cs->partner_id > 0){
-		int i, j;
-		for(i = 0; i < char_num; i++) {
-			if (char_dat[i].char_id == cs->partner_id && char_dat[i].partner_id == cs->char_id) {
-				cs->partner_id = 0;
-				char_dat[i].partner_id = 0;
-				for(j = 0; j < MAX_INVENTORY; j++)
-					if (char_dat[i].inventory[j].nameid == WEDDING_RING_M || char_dat[i].inventory[j].nameid == WEDDING_RING_F)
-						memset(&char_dat[i].inventory[j], 0, sizeof(char_dat[i].inventory[0]));
-					if (cs->inventory[j].nameid == WEDDING_RING_M || cs->inventory[j].nameid == WEDDING_RING_F)
-						memset(&cs->inventory[j], 0, sizeof(cs->inventory[0]));
-				return 0;
-			}
-		}
-	}
-	return 0;
-}
-
-//------------------------------------------------------------
-// E-mail check: return 0 (not correct) or 1 (valid). by [Yor]
-//------------------------------------------------------------
-int e_mail_check(unsigned char *email) {
-	char ch;
-	unsigned char* last_arobas;
-
-	// athena limits
-	if (strlen(email) < 3 || strlen(email) > 39)
-		return 0;
-
-	// part of RFC limits (official reference of e-mail description)
-	if (strchr(email, '@') == NULL || email[strlen(email)-1] == '@')
-		return 0;
-
-	if (email[strlen(email)-1] == '.')
-		return 0;
-
-	last_arobas = strrchr(email, '@');
-
-	if (strstr(last_arobas, "@.") != NULL ||
-	    strstr(last_arobas, "..") != NULL)
-		return 0;
-
-	for(ch = 1; ch < 32; ch++) {
-		if (strchr(last_arobas, ch) != NULL) {
-			return 0;
-			break;
-		}
-	}
-
-	if (strchr(last_arobas, ' ') != NULL ||
-	    strchr(last_arobas, ';') != NULL)
-		return 0;
-
-	// all correct
-	return 1;
-}
-
-//----------------------------------------------------------------------
-// Force disconnection of an online player (with account value) by [Yor]
-//----------------------------------------------------------------------
-int disconnect_player(int accound_id) {
-	int i;
-	struct char_session_data *sd;
-
-	// disconnect player if online on char-server
-	for(i = 0; i < fd_max; i++) {
-		if (session[i] && (sd = session[i]->session_data)) {
-			if (sd->account_id == accound_id) {
-				session[i]->eof = 1;
-				return 1;
-			}
-		}
-	}
-
-	return 0;
-}
-
-// �L�����폜�ɔ����f�[�^�폜
-static int char_delete(struct mmo_charstatus *cs) {
-	int j;
-
-	// �y�b�g�폜
-	if (cs->pet_id)
-		inter_pet_delete(cs->pet_id);
-	for (j = 0; j < MAX_INVENTORY; j++)
-		if (cs->inventory[j].card[0] == (short)0xff00)
-			inter_pet_delete(*((long *)(&cs->inventory[j].card[2])));
-	for (j = 0; j < MAX_CART; j++)
-		if (cs->cart[j].card[0] == (short)0xff00)
-			inter_pet_delete(*((long *)(&cs->cart[j].card[2])));
-	// �M���h�E��
-	if (cs->guild_id)
-		inter_guild_leave(cs->guild_id, cs->account_id, cs->char_id);
-	// �p�[�e�B�[�E��
-	if (cs->party_id)
-		inter_party_leave(cs->party_id, cs->account_id);
-	// ����
-	if (cs->partner_id){
-		// ��������map�ɒʒm
-		char buf[10];
-		WBUFW(buf,0) = 0x2b12;
-		WBUFL(buf,2) = cs->char_id;
-		WBUFL(buf,6) = cs->partner_id;
-		mapif_sendall(buf,10);
-		// ����
-		char_divorce(cs);
-	}
-	return 0;
-}
-
-int parse_tologin(int fd) {
-	int i;
-	struct char_session_data *sd;
-
-	// only login-server can have an access to here.
-	// so, if it isn't the login-server, we disconnect the session (fd != login_fd).
-	if (fd != login_fd || session[fd]->eof) {
-		if (fd == login_fd) {
-			printf("Char-server can't connect to login-server (connection #%d).\n", fd);
-			login_fd = -1;
-		}
-		close(fd);
-		delete_session(fd);
-		return 0;
-	}
-
-	sd = session[fd]->session_data;
-
-	while(RFIFOREST(fd) >= 2) {
-//		printf("parse_tologin: connection #%d, packet: 0x%x (with being read: %d bytes).\n", fd, RFIFOW(fd,0), RFIFOREST(fd));
-
-		switch(RFIFOW(fd,0)) {
-		case 0x2711:
-			if (RFIFOREST(fd) < 3)
-				return 0;
-			if (RFIFOB(fd,2)) {
-//				printf("connect login server error : %d\n", RFIFOB(fd,2));
-				printf("Can not connect to login-server.\n");
-				printf("The server communication passwords (default s1/p1) is probably invalid.\n");
-				printf("Also, please make sure your accounts file (default: accounts.txt) has those values present.\n");
-				printf("If you changed the communication passwords, change them back at map_athena.conf and char_athena.conf\n");
-				exit(1);
-			} else {
-				printf("Connected to login-server (connection #%d).\n", fd);
-				// if no map-server already connected, display a message...
-				for(i = 0; i < MAX_MAP_SERVERS; i++)
-					if (server_fd[i] >= 0 && server[i].map[0][0]) // if map-server online and at least 1 map
-						break;
-				if (i == MAX_MAP_SERVERS)
-					printf("Awaiting maps from map-server.\n");
-			}
-			RFIFOSKIP(fd,3);
-			break;
-
-		case 0x2713:
-			if (RFIFOREST(fd) < 51)
-				return 0;
-//			printf("parse_tologin 2713 : %d\n", RFIFOB(fd,6));
-			for(i = 0; i < fd_max; i++) {
-				if (session[i] && (sd = session[i]->session_data) && sd->account_id == RFIFOL(fd,2)) {
-					if (RFIFOB(fd,6) != 0) {
-						WFIFOW(i,0) = 0x6c;
-						WFIFOB(i,2) = 0x42;
-						WFIFOSET(i,3);
-					} else if (max_connect_user == 0 || count_users() < max_connect_user) {
-//						if (max_connect_user == 0)
-//							printf("max_connect_user (unlimited) -> accepted.\n");
-//						else
-//							printf("count_users(): %d < max_connect_user (%d) -> accepted.\n", count_users(), max_connect_user);
-						memcpy(sd->email, RFIFOP(fd, 7), 40);
-						if (e_mail_check(sd->email) == 0)
-							strncpy(sd->email, "a@a.com", 40); // default e-mail
-						sd->connect_until_time = (time_t)RFIFOL(fd,47);
-						// send characters to player
-						mmo_char_send006b(i, sd);
-					} else {
-						// refuse connection: too much online players
-//						printf("count_users(): %d < max_connect_use (%d) -> fail...\n", count_users(), max_connect_user);
-						WFIFOW(i,0) = 0x6c;
-						WFIFOW(i,2) = 0;
-						WFIFOSET(i,3);
-					}
-					break;
-				}
-			}
-			RFIFOSKIP(fd,51);
-			break;
-
-		// Receiving of an e-mail/time limit from the login-server (answer of a request because a player comes back from map-server to char-server) by [Yor]
-		case 0x2717:
-			if (RFIFOREST(fd) < 50)
-				return 0;
-			for(i = 0; i < fd_max; i++) {
-				if (session[i] && (sd = session[i]->session_data)) {
-					if (sd->account_id == RFIFOL(fd,2)) {
-						memcpy(sd->email, RFIFOP(fd,6), 40);
-						if (e_mail_check(sd->email) == 0)
-							strncpy(sd->email, "a@a.com", 40); // default e-mail
-						sd->connect_until_time = (time_t)RFIFOL(fd,46);
-						break;
-					}
-				}
-			}
-			RFIFOSKIP(fd,50);
-			break;
-
-		case 0x2721:	// gm reply
-			if (RFIFOREST(fd) < 10)
-				return 0;
-		  {
-			unsigned char buf[10];
-			WBUFW(buf,0) = 0x2b0b;
-			WBUFL(buf,2) = RFIFOL(fd,2); // account
-			WBUFL(buf,6) = RFIFOL(fd,6); // GM level
-			mapif_sendall(buf,10);
-//			printf("parse_tologin: To become GM answer: char -> map.\n");
-		  }
-			RFIFOSKIP(fd,10);
-			break;
-
-		case 0x2723:	// changesex reply (modified by [Yor])
-			if (RFIFOREST(fd) < 7)
-				return 0;
-		  {
-			int acc, sex, i, j;
-			unsigned char buf[7];
-			acc = RFIFOL(fd,2);
-			sex = RFIFOB(fd,6);
-			RFIFOSKIP(fd, 7);
-			if (acc > 0) {
-				for (i = 0; i < char_num; i++) {
-					if (char_dat[i].account_id == acc) {
-						int jobclass = char_dat[i].class;
-						char_dat[i].sex = sex;
-						auth_fifo[i].sex = sex;
-						if (jobclass == 19 || jobclass == 20 ||
-						    jobclass == 4020 || jobclass == 4021 ||
-						    jobclass == 4042 || jobclass == 4043) {
-							// job modification
-							if (jobclass == 19 || jobclass == 20) {
-								char_dat[i].class = (sex) ? 19 : 20;
-							} else if (jobclass == 4020 || jobclass == 4021) {
-								char_dat[i].class = (sex) ? 4020 : 4021;
-							} else if (jobclass == 4042 || jobclass == 4043) {
-								char_dat[i].class = (sex) ? 4042 : 4043;
-							}
-							// remove specifical skills of classes 19, 4020 and 4042
-							for(j = 315; j <= 322; j++) {
-								if (char_dat[i].skill[j].id > 0 && !char_dat[i].skill[j].flag) {
-									char_dat[i].skill_point += char_dat[i].skill[j].lv;
-									char_dat[i].skill[j].id = 0;
-									char_dat[i].skill[j].lv = 0;
-								}
-							}
-							// remove specifical skills of classes 20, 4021 and 4043
-							for(j = 323; j <= 330; j++) {
-								if (char_dat[i].skill[j].id > 0 && !char_dat[i].skill[j].flag) {
-									char_dat[i].skill_point += char_dat[i].skill[j].lv;
-									char_dat[i].skill[j].id = 0;
-									char_dat[i].skill[j].lv = 0;
-								}
-							}
-						}
-						// to avoid any problem with equipment and invalid sex, equipment is unequiped.
-						for (j = 0; j < MAX_INVENTORY; j++) {
-							if (char_dat[i].inventory[j].nameid && char_dat[i].inventory[j].equip)
-								char_dat[i].inventory[j].equip = 0;
-						}
-						char_dat[i].weapon = 0;
-						char_dat[i].shield = 0;
-						char_dat[i].head_top = 0;
-						char_dat[i].head_mid = 0;
-						char_dat[i].head_bottom = 0;
-					}
-				}
-				// disconnect player if online on char-server
-				disconnect_player(acc);
-			}
-			WBUFW(buf,0) = 0x2b0d;
-			WBUFL(buf,2) = acc;
-			WBUFB(buf,6) = sex;
-			mapif_sendall(buf, 7);
-		  }
-			break;
-
-		case 0x2726:	// Request to send a broadcast message (no answer)
-			if (RFIFOREST(fd) < 8 || RFIFOREST(fd) < (8 + RFIFOL(fd,4)))
-				return 0;
-			if (RFIFOL(fd,4) < 1)
-				char_log("Receiving a message for broadcast, but message is void." RETCODE);
-			else {
-				// at least 1 map-server
-				for(i = 0; i < MAX_MAP_SERVERS; i++)
-					if (server_fd[i] >= 0)
-						break;
-				if (i == MAX_MAP_SERVERS)
-					char_log("'ladmin': Receiving a message for broadcast, but no map-server is online." RETCODE);
-				else {
-					char buf[128];
-					char message[RFIFOL(fd,4) + 1]; // +1 to add a null terminated if not exist in the packet
-					int lp;
-					char *p;
-					memset(message, '\0', sizeof(message));
-					memcpy(message, RFIFOP(fd,8), RFIFOL(fd,4));
-					message[sizeof(message)-1] = '\0';
-					remove_control_chars(message);
-					// remove all first spaces
-					p = message;
-					while(p[0] == ' ')
-						p++;
-					// if message is only composed of spaces
-					if (p[0] == '\0')
-						char_log("Receiving a message for broadcast, but message is only a lot of spaces." RETCODE);
-					// else send message to all map-servers
-					else {
-						if (RFIFOW(fd,2) == 0) {
-							char_log("'ladmin': Receiving a message for broadcast (message (in yellow): %s)" RETCODE,
-							         message);
-							lp = 4;
-						} else {
-							char_log("'ladmin': Receiving a message for broadcast (message (in blue): %s)" RETCODE,
-							         message);
-							lp = 8;
-						}
-						// split message to max 80 char
-						while(p[0] != '\0') { // if not finish
-							if (p[0] == ' ') // jump if first char is a space
-								p++;
-							else {
-								char split[80];
-								char* last_space;
-								sscanf(p, "%79[^\t]", split); // max 79 char, any char (\t is control char and control char was removed before)
-								split[sizeof(split)-1] = '\0'; // last char always \0
-								if ((last_space = strrchr(split, ' ')) != NULL) { // searching space from end of the string
-									last_space[0] = '\0'; // replace it by NULL to have correct length of split
-									p++; // to jump the new NULL
-								}
-								p += strlen(split);
-								// send broadcast to all map-servers
-								WBUFW(buf,0) = 0x3800;
-								WBUFW(buf,2) = lp + strlen(split) + 1;
-								WBUFL(buf,4) = 0x65756c62; // only write if in blue (lp = 8)
-								memcpy(WBUFP(buf,lp), split, strlen(split) + 1);
-								mapif_sendall(buf, WBUFW(buf,2));
-							}
-						}
-					}
-				}
-			}
-			RFIFOSKIP(fd,8 + RFIFOL(fd,4));
-			break;
-
-		// account_reg2�ύX�ʒm
-		case 0x2729:
-			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-		  {
-			struct global_reg reg[ACCOUNT_REG2_NUM];
-			unsigned char buf[4096];
-			int j, p, acc;
-			acc = RFIFOL(fd,4);
-			for (p = 8, j = 0; p < RFIFOW(fd,2) && j < ACCOUNT_REG2_NUM; p += 36, j++) {
-				memcpy(reg[j].str, RFIFOP(fd,p), 32);
-				reg[j].value = RFIFOL(fd,p+32);
-			}
-			set_account_reg2(acc, j, reg);
-			// ���C���O�C�����֎~���Ă���Α���K�v�͖���
-			memcpy(buf, RFIFOP(fd,0), RFIFOW(fd,2));
-			WBUFW(buf,0) = 0x2b11;
-			mapif_sendall(buf, WBUFW(buf,2));
-			RFIFOSKIP(fd,RFIFOW(fd,2));
-//			printf("char: save_account_reg_reply\n");
-		  }
-			break;
-
-		// Account deletion notification (from login-server)
-		case 0x2730:
-			if (RFIFOREST(fd) < 6)
-				return 0;
-			// Deletion of all characters of the account
-			for(i = 0; i < char_num; i++) {
-				if (char_dat[i].account_id == RFIFOL(fd,2)) {
-					char_delete(&char_dat[i]);
-					if (i < char_num - 1) {
-						memcpy(&char_dat[i], &char_dat[char_num-1], sizeof(struct mmo_charstatus));
-						// if moved character owns to deleted account, check again it's character
-						if (char_dat[i].account_id == RFIFOL(fd,2)) {
-							i--;
-						// Correct moved character reference in the character's owner by [Yor]
-						} else {
-							int j, k;
-							struct char_session_data *sd2;
-							for (j = 0; j < fd_max; j++) {
-								if (session[j] && (sd2 = session[j]->session_data) &&
-									sd2->account_id == char_dat[char_num-1].account_id) {
-									for (k = 0; k < 9; k++) {
-										if (sd2->found_char[k] == char_num-1) {
-											sd2->found_char[k] = i;
-											break;
-										}
-									}
-									break;
-								}
-							}
-						}
-					}
-					char_num--;
-				}
-			}
-			// Deletion of the storage
-			inter_storage_delete(RFIFOL(fd,2));
-			// send to all map-servers to disconnect the player
-			{
-				unsigned char buf[6];
-				WBUFW(buf,0) = 0x2b13;
-				WBUFL(buf,2) = RFIFOL(fd,2);
-				mapif_sendall(buf, 6);
-			}
-			// disconnect player if online on char-server
-			disconnect_player(RFIFOL(fd,2));
-			RFIFOSKIP(fd,6);
-			break;
-
-		// State change of account/ban notification (from login-server) by [Yor]
-		case 0x2731:
-			if (RFIFOREST(fd) < 11)
-				return 0;
-			// send to all map-servers to disconnect the player
-			{
-				unsigned char buf[11];
-				WBUFW(buf,0) = 0x2b14;
-				WBUFL(buf,2) = RFIFOL(fd,2);
-				WBUFB(buf,6) = RFIFOB(fd,6); // 0: change of statut, 1: ban
-				WBUFL(buf,7) = RFIFOL(fd,7); // status or final date of a banishment
-				mapif_sendall(buf, 11);
-			}
-			// disconnect player if online on char-server
-			disconnect_player(RFIFOL(fd,2));
-			RFIFOSKIP(fd,11);
-			break;
-
-		// Receiving GM acounts info from login-server (by [Yor])
-		case 0x2732:
-			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-		  {
-			char buf[32000];
-			if (gm_account != NULL)
-				free(gm_account);
-			gm_account = calloc(sizeof(struct gm_account) * ((RFIFOW(fd,2) - 4) / 5), 1);
-			GM_num = 0;
-			for (i = 4; i < RFIFOW(fd,2); i = i + 5) {
-				gm_account[GM_num].account_id = RFIFOL(fd,i);
-				gm_account[GM_num].level = (int)RFIFOB(fd,i+4);
-				//printf("GM account: %d -> level %d\n", gm_account[GM_num].account_id, gm_account[GM_num].level);
-				GM_num++;
-			}
-			printf("From login-server: receiving of %d GM accounts information.\n", GM_num);
-			char_log("From login-server: receiving of %d GM accounts information." RETCODE, GM_num);
-			create_online_files(); // update online players files (perhaps some online players change of GM level)
-			// send new gm acccounts level to map-servers
-			memcpy(buf, RFIFOP(fd,0), RFIFOW(fd,2));
-			WBUFW(buf,0) = 0x2b15;
-			mapif_sendall(buf, RFIFOW(fd,2));
-		  }
-			RFIFOSKIP(fd,RFIFOW(fd,2));
-			break;
-
-		default:
-			session[fd]->eof = 1;
-			return 0;
-		}
-	}
-	RFIFOFLUSH(fd);
-
-	return 0;
-}
-
-//--------------------------------
-// Map-server anti-freeze system
-//--------------------------------
-int map_anti_freeze_system(int tid, unsigned int tick, int id, int data) {
-	int i;
-
-	//printf("Entering in map_anti_freeze_system function to check freeze of servers.\n");
-	for(i = 0; i < MAX_MAP_SERVERS; i++) {
-		if (server_fd[i] >= 0) {// if map-server is online
-			//printf("map_anti_freeze_system: server #%d, flag: %d.\n", i, server_freezeflag[i]);
-			if (server_freezeflag[i]-- < 1) { // Map-server anti-freeze system. Counter. 5 ok, 4...0 freezed
-				printf("Map-server anti-freeze system: char-server #%d is freezed -> disconnection.\n", i);
-				char_log("Map-server anti-freeze system: char-server #%d is freezed -> disconnection." RETCODE,
-				         i);
-				session[server_fd[i]]->eof = 1;
-			}
-		}
-	}
-
-	return 0;
-}
-
-int parse_frommap(int fd) {
-	int i, j;
-	int id;
-
-	for(id = 0; id < MAX_MAP_SERVERS; id++)
-		if (server_fd[id] == fd)
-			break;
-	if (id == MAX_MAP_SERVERS || session[fd]->eof) {
-		if (id < MAX_MAP_SERVERS) {
-			printf("Map-server %d (session #%d) has disconnected.\n", id, fd);
-			memset(&server[id], 0, sizeof(struct mmo_map_server));
-			server_fd[id] = -1;
-			for(j = 0; j < char_num; j++)
-				if (online_chars[j] == fd)
-					online_chars[j] = -1;
-			create_online_files(); // update online players files (to remove all online players of this server)
-		}
-		close(fd);
-		delete_session(fd);
-		return 0;
-	}
-
-	while(RFIFOREST(fd) >= 2) {
-//		printf("parse_frommap: connection #%d, packet: 0x%x (with being read: %d bytes).\n", fd, RFIFOW(fd,0), RFIFOREST(fd));
-
-		switch(RFIFOW(fd,0)) {
-		// request from map-server to reload GM accounts. Transmission to login-server (by Yor)
-		case 0x2af7:
-			if (login_fd > 0) { // don't send request if no login-server
-				WFIFOW(login_fd,0) = 0x2709;
-				WFIFOSET(login_fd, 2);
-//				printf("char : request from map-server to reload GM accounts -> login-server.\n");
-			}
-			RFIFOSKIP(fd,2);
-			break;
-
-		// Receiving map names list from the map-server
-		case 0x2afa:
-			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-			memset(server[id].map, 0, sizeof(server[id].map));
-			j = 0;
-			for(i = 4; i < RFIFOW(fd,2); i += 16) {
-				memcpy(server[id].map[j], RFIFOP(fd,i), 16);
-//				printf("set map %d.%d : %s\n", id, j, server[id].map[j]);
-				j++;
-			}
-			{
-				unsigned char *p = (unsigned char *)&server[id].ip;
-				printf("Map-Server %d connected: %d maps, from IP %d.%d.%d.%d port %d.\n",
-				       id, j, p[0], p[1], p[2], p[3], server[id].port);
-				printf("Map-server %d loading complete.\n", id);
-				char_log("Map-Server %d connected: %d maps, from IP %d.%d.%d.%d port %d. Map-server %d loading complete." RETCODE,
-				         id, j, p[0], p[1], p[2], p[3], server[id].port, id);
-			}
-			WFIFOW(fd,0) = 0x2afb;
-			WFIFOB(fd,2) = 0;
-			memcpy(WFIFOP(fd,3), wisp_server_name, 24); // name for wisp to player
-			WFIFOSET(fd,27);
-			{
-				unsigned char buf[16384];
-				int x;
-				if (j == 0) {
-					printf("WARNING: Map-Server %d have NO map.\n", id);
-					char_log("WARNING: Map-Server %d have NO map." RETCODE, id);
-				// Transmitting maps information to the other map-servers
-				} else {
-					WBUFW(buf,0) = 0x2b04;
-					WBUFW(buf,2) = j * 16 + 10;
-					WBUFL(buf,4) = server[id].ip;
-					WBUFW(buf,8) = server[id].port;
-					memcpy(WBUFP(buf,10), RFIFOP(fd,4), j * 16);
-					mapif_sendallwos(fd, buf, WBUFW(buf,2));
-				}
-				// Transmitting the maps of the other map-servers to the new map-server
-				for(x = 0; x < MAX_MAP_SERVERS; x++) {
-					if (server_fd[x] >= 0 && x != id) {
-						WFIFOW(fd,0) = 0x2b04;
-						WFIFOL(fd,4) = server[x].ip;
-						WFIFOW(fd,8) = server[x].port;
-						j = 0;
-						for(i = 0; i < MAX_MAP_PER_SERVER; i++)
-							if (server[x].map[i][0])
-								memcpy(WFIFOP(fd,10+(j++)*16), server[x].map[i], 16);
-						if (j > 0) {
-							WFIFOW(fd,2) = j * 16 + 10;
-							WFIFOSET(fd,WFIFOW(fd,2));
-						}
-					}
-				}
-			}
-			RFIFOSKIP(fd,RFIFOW(fd,2));
-			break;
-
-		// �F�ؗv��
-		case 0x2afc:
-			if (RFIFOREST(fd) < 22)
-				return 0;
-			//printf("auth_fifo search: account: %d, char: %d, secure: %08x-%08x\n", RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOL(fd,14));
-			for(i = 0; i < AUTH_FIFO_SIZE; i++) {
-				if (auth_fifo[i].account_id == RFIFOL(fd,2) &&
-				    auth_fifo[i].char_id == RFIFOL(fd,6) &&
-				    auth_fifo[i].login_id1 == RFIFOL(fd,10) &&
-#if CMP_AUTHFIFO_LOGIN2 != 0
-				// here, it's the only area where it's possible that we doesn't know login_id2 (map-server asks just after 0x72 packet, that doesn't given the value)
-				    (auth_fifo[i].login_id2 == RFIFOL(fd,14) || RFIFOL(fd,14) == 0) && // relate to the versions higher than 18
-#endif
-				    (!check_ip_flag || auth_fifo[i].ip == RFIFOL(fd,18)) &&
-				    !auth_fifo[i].delflag) {
-					auth_fifo[i].delflag = 1;
-					WFIFOW(fd,0) = 0x2afd;
-					WFIFOW(fd,2) = 16 + sizeof(struct mmo_charstatus);
-					WFIFOL(fd,4) = RFIFOL(fd,2);
-					WFIFOL(fd,8) = auth_fifo[i].login_id2;
-					WFIFOL(fd,12) = (unsigned long)auth_fifo[i].connect_until_time;
-					char_dat[auth_fifo[i].char_pos].sex = auth_fifo[i].sex;
-					memcpy(WFIFOP(fd,16), &char_dat[auth_fifo[i].char_pos], sizeof(struct mmo_charstatus));
-					WFIFOSET(fd, WFIFOW(fd,2));
-					//printf("auth_fifo search success (auth #%d, account %d, character: %d).\n", i, RFIFOL(fd,2), RFIFOL(fd,6));
-					break;
-				}
-			}
-			if (i == AUTH_FIFO_SIZE) {
-				WFIFOW(fd,0) = 0x2afe;
-				WFIFOL(fd,2) = RFIFOL(fd,2);
-				WFIFOSET(fd,6);
-				printf("auth_fifo search error! account %d not authentified.\n", RFIFOL(fd,2));
-			}
-			RFIFOSKIP(fd,22);
-			break;
-
-		// MAP�T�[�o�[��̃��[�U�[����M
-		case 0x2aff:
-			if (RFIFOREST(fd) < 6 || RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-			server[id].users = RFIFOW(fd,4);
-			if(anti_freeze_enable)
-				server_freezeflag[id] = 5; // Map anti-freeze system. Counter. 5 ok, 4...0 freezed
-			// remove all previously online players of the server
-			for(i = 0; i < char_num; i++)
-				if (online_chars[i] == id)
-					online_chars[i] = -1;
-			// add online players in the list by [Yor]
-			for(i = 0; i < server[id].users; i++) {
-				int char_id = RFIFOL(fd,6+i*4);
-				for(j = 0; j < char_num; j++)
-					if (char_dat[j].char_id == char_id) {
-						online_chars[j] = id;
-						//printf("%d\n", char_id);
-						break;
-					}
-			}
-			if (update_online < time(NULL)) { // Time is done
-				update_online = time(NULL) + 8;
-				create_online_files(); // only every 8 sec. (normally, 1 server send users every 5 sec.) Don't update every time, because that takes time, but only every 2 connection.
-				                       // it set to 8 sec because is more than 5 (sec) and if we have more than 1 map-server, informations can be received in shifted.
-			}
-			RFIFOSKIP(fd,6+i*4);
-			break;
-
-		// �L�����f�[�^�ۑ�
-		case 0x2b01:
-			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-			for(i = 0; i < char_num; i++) {
-				if (char_dat[i].account_id == RFIFOL(fd,4) &&
-				    char_dat[i].char_id == RFIFOL(fd,8))
-					break;
-			}
-			if (i != char_num)
-				memcpy(&char_dat[i], RFIFOP(fd,12), sizeof(struct mmo_charstatus));
-			RFIFOSKIP(fd,RFIFOW(fd,2));
-			break;
-
-		// �L�����Z���v��
-		case 0x2b02:
-			if (RFIFOREST(fd) < 18)
-				return 0;
-			if (auth_fifo_pos >= AUTH_FIFO_SIZE)
-				auth_fifo_pos = 0;
-			//printf("auth_fifo set (auth #%d) - account: %d, secure: %08x-%08x\n", auth_fifo_pos, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10));
-			auth_fifo[auth_fifo_pos].account_id = RFIFOL(fd,2);
-			auth_fifo[auth_fifo_pos].char_id = 0;
-			auth_fifo[auth_fifo_pos].login_id1 = RFIFOL(fd,6);
-			auth_fifo[auth_fifo_pos].login_id2 = RFIFOL(fd,10);
-			auth_fifo[auth_fifo_pos].delflag = 2;
-			auth_fifo[auth_fifo_pos].char_pos = 0;
-			auth_fifo[auth_fifo_pos].connect_until_time = 0; // unlimited/unknown time by default (not display in map-server)
-			auth_fifo[auth_fifo_pos].ip = RFIFOL(fd,14);
-			auth_fifo_pos++;
-			WFIFOW(fd,0) = 0x2b03;
-			WFIFOL(fd,2) = RFIFOL(fd,2);
-			WFIFOB(fd,6) = 0;
-			WFIFOSET(fd,7);
-			RFIFOSKIP(fd,18);
-			break;
-
-		// �}�b�v�T�[�o�[�Ԉړ��v��
-		case 0x2b05:
-			if (RFIFOREST(fd) < 49)
-				return 0;
-			if (auth_fifo_pos >= AUTH_FIFO_SIZE)
-				auth_fifo_pos = 0;
-			WFIFOW(fd,0) = 0x2b06;
-			memcpy(WFIFOP(fd,2), RFIFOP(fd,2), 42);
-			//printf("auth_fifo set (auth#%d) - account: %d, secure: 0x%08x-0x%08x\n", auth_fifo_pos, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10));
-			auth_fifo[auth_fifo_pos].account_id = RFIFOL(fd,2);
-			auth_fifo[auth_fifo_pos].char_id = RFIFOL(fd,14);
-			auth_fifo[auth_fifo_pos].login_id1 = RFIFOL(fd,6);
-			auth_fifo[auth_fifo_pos].login_id2 = RFIFOL(fd,10);
-			auth_fifo[auth_fifo_pos].delflag = 0;
-			auth_fifo[auth_fifo_pos].sex = RFIFOB(fd,44);
-			auth_fifo[auth_fifo_pos].connect_until_time = 0; // unlimited/unknown time by default (not display in map-server)
-			auth_fifo[auth_fifo_pos].ip = RFIFOL(fd,45);
-			for(i = 0; i < char_num; i++)
-				if (char_dat[i].account_id == RFIFOL(fd,2) &&
-				    char_dat[i].char_id == RFIFOL(fd,14)) {
-					auth_fifo[auth_fifo_pos].char_pos = i;
-					auth_fifo_pos++;
-					WFIFOL(fd,6) = 0;
-					break;
-				}
-			if (i == char_num)
-				WFIFOW(fd,6) = 1;
-			WFIFOSET(fd,44);
-			RFIFOSKIP(fd,49);
-			break;
-
-		// �L����������
-		case 0x2b08:
-			if (RFIFOREST(fd) < 6)
-				return 0;
-			for(i = 0; i < char_num; i++) {
-				if (char_dat[i].char_id == RFIFOL(fd,2))
-					break;
-			}
-			WFIFOW(fd,0) = 0x2b09;
-			WFIFOL(fd,2) = RFIFOL(fd,2);
-			if (i != char_num)
-				memcpy(WFIFOP(fd,6), char_dat[i].name, 24);
-			else
-				memcpy(WFIFOP(fd,6), unknown_char_name, 24);
-			WFIFOSET(fd,30);
-			RFIFOSKIP(fd,6);
-			break;
-
-		// it is a request to become GM
-		case 0x2b0a:
-			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-//			printf("parse_frommap: change gm -> login, account: %d, pass: '%s'.\n", RFIFOL(fd,4), RFIFOP(fd,8));
-			if (login_fd > 0) { // don't send request if no login-server
-				WFIFOW(login_fd,0) = 0x2720;
-				memcpy(WFIFOP(login_fd,2), RFIFOP(fd,2), RFIFOW(fd,2)-2);
-				WFIFOSET(login_fd, RFIFOW(fd,2));
-			} else {
-				WFIFOW(fd,0) = 0x2b0b;
-				WFIFOL(fd,2) = RFIFOL(fd,4);
-				WFIFOL(fd,6) = 0;
-				WFIFOSET(fd, 10);
-			}
-			RFIFOSKIP(fd, RFIFOW(fd,2));
-			break;
-
-		// Map server send information to change an email of an account -> login-server
-		case 0x2b0c:
-			if (RFIFOREST(fd) < 86)
-				return 0;
-			if (login_fd > 0) { // don't send request if no login-server
-				memcpy(WFIFOP(login_fd,0), RFIFOP(fd,0), 86); // 0x2722 <account_id>.L <actual_e-mail>.40B <new_e-mail>.40B
-				WFIFOW(login_fd,0) = 0x2722;
-				WFIFOSET(login_fd, 86);
-			}
-			RFIFOSKIP(fd, 86);
-			break;
-
-		// Map server ask char-server about a character name to do some operations (all operations are transmitted to login-server)
-		case 0x2b0e:
-			if (RFIFOREST(fd) < 44)
-				return 0;
-		  {
-			char character_name[24];
-			int acc = RFIFOL(fd,2); // account_id of who ask (-1 if nobody)
-			memcpy(character_name, RFIFOP(fd,6), 24);
-			character_name[sizeof(character_name) -1] = '\0';
-			// prepare answer
-			WFIFOW(fd,0) = 0x2b0f; // answer
-			WFIFOL(fd,2) = acc; // who want do operation
-			WFIFOW(fd,30) = RFIFOW(fd, 30); // type of operation: 1-block, 2-ban, 3-unblock, 4-unban, 5-changesex
-			// search character
-			i = search_character_index(character_name);
-			if (i >= 0) {
-				memcpy(WFIFOP(fd,6), search_character_name(i), 24); // put correct name if found
-				WFIFOW(fd,32) = 0; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-				switch(RFIFOW(fd, 30)) {
-				case 1: // block
-					if (acc == -1 || isGM(acc) >= isGM(char_dat[i].account_id)) {
-						if (login_fd > 0) { // don't send request if no login-server
-							WFIFOW(login_fd,0) = 0x2724;
-							WFIFOL(login_fd,2) = char_dat[i].account_id; // account value
-							WFIFOL(login_fd,6) = 5; // status of the account
-							WFIFOSET(login_fd, 10);
-//							printf("char : status -> login: account %d, status: %d \n", char_dat[i].account_id, 5);
-						} else
-							WFIFOW(fd,32) = 3; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-					} else
-						WFIFOW(fd,32) = 2; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-					break;
-				case 2: // ban
-					if (acc == -1 || isGM(acc) >= isGM(char_dat[i].account_id)) {
-						if (login_fd > 0) { // don't send request if no login-server
-							WFIFOW(login_fd, 0) = 0x2725;
-							WFIFOL(login_fd, 2) = char_dat[i].account_id; // account value
-							WFIFOW(login_fd, 6) = RFIFOW(fd,32); // year
-							WFIFOW(login_fd, 8) = RFIFOW(fd,34); // month
-							WFIFOW(login_fd,10) = RFIFOW(fd,36); // day
-							WFIFOW(login_fd,12) = RFIFOW(fd,38); // hour
-							WFIFOW(login_fd,14) = RFIFOW(fd,40); // minute
-							WFIFOW(login_fd,16) = RFIFOW(fd,42); // second
-							WFIFOSET(login_fd,18);
-//							printf("char : status -> login: account %d, ban: %dy %dm %dd %dh %dmn %ds\n",
-//							       char_dat[i].account_id, (short)RFIFOW(fd,32), (short)RFIFOW(fd,34), (short)RFIFOW(fd,36), (short)RFIFOW(fd,38), (short)RFIFOW(fd,40), (short)RFIFOW(fd,42));
-						} else
-							WFIFOW(fd,32) = 3; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-					} else
-						WFIFOW(fd,32) = 2; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-					break;
-				case 3: // unblock
-					if (acc == -1 || isGM(acc) >= isGM(char_dat[i].account_id)) {
-						if (login_fd > 0) { // don't send request if no login-server
-							WFIFOW(login_fd,0) = 0x2724;
-							WFIFOL(login_fd,2) = char_dat[i].account_id; // account value
-							WFIFOL(login_fd,6) = 0; // status of the account
-							WFIFOSET(login_fd, 10);
-//							printf("char : status -> login: account %d, status: %d \n", char_dat[i].account_id, 0);
-						} else
-							WFIFOW(fd,32) = 3; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-					} else
-						WFIFOW(fd,32) = 2; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-					break;
-				case 4: // unban
-					if (acc == -1 || isGM(acc) >= isGM(char_dat[i].account_id)) {
-						if (login_fd > 0) { // don't send request if no login-server
-							WFIFOW(login_fd, 0) = 0x272a;
-							WFIFOL(login_fd, 2) = char_dat[i].account_id; // account value
-							WFIFOSET(login_fd, 6);
-//							printf("char : status -> login: account %d, unban request\n", char_dat[i].account_id);
-						} else
-							WFIFOW(fd,32) = 3; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-					} else
-						WFIFOW(fd,32) = 2; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-					break;
-				case 5: // changesex
-					if (acc == -1 || isGM(acc) >= isGM(char_dat[i].account_id)) {
-						if (login_fd > 0) { // don't send request if no login-server
-							WFIFOW(login_fd, 0) = 0x2727;
-							WFIFOL(login_fd, 2) = char_dat[i].account_id; // account value
-							WFIFOSET(login_fd, 6);
-//							printf("char : status -> login: account %d, change sex request\n", char_dat[i].account_id);
-						} else
-							WFIFOW(fd,32) = 3; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-					} else
-						WFIFOW(fd,32) = 2; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-					break;
-				}
-			} else {
-				// character name not found
-				memcpy(WFIFOP(fd,6), character_name, 24);
-				WFIFOW(fd,32) = 1; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-			}
-			// send answer if a player ask, not if the server ask
-			if (acc != -1) {
-				WFIFOSET(fd, 34);
-			}
-			RFIFOSKIP(fd, 44);
-			break;
-		  }
-
-//		case 0x2b0f: not more used (available for futur usage)
-
-		// account_reg�ۑ��v��
-		case 0x2b10:
-			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-		  {
-			struct global_reg reg[ACCOUNT_REG2_NUM];
-			int p, acc;
-			acc = RFIFOL(fd,4);
-			for(p = 8, j = 0; p < RFIFOW(fd,2) && j < ACCOUNT_REG2_NUM; p += 36, j++) {
-				memcpy(reg[j].str, RFIFOP(fd,p), 32);
-				reg[j].value = RFIFOL(fd, p+32);
-			}
-			set_account_reg2(acc, j, reg);
-			// login�T�[�o�[�֑���
-			if (login_fd > 0) { // don't send request if no login-server
-				WFIFOW(login_fd, 0) = 0x2728;
-				memcpy(WFIFOP(login_fd,0), RFIFOP(fd,0), RFIFOW(fd,2));
-				WFIFOSET(login_fd, WFIFOW(login_fd,2));
-			}
-			// ���[���h�ւ̓��C���O�C�����Ȃ����map�T�[�o�[�ɑ���K�v�͂Ȃ�
-			//memcpy(buf, RFIFOP(fd,0), RFIFOW(fd,2));
-			//WBUFW(buf,0) = 0x2b11;
-			//mapif_sendall(buf, WBUFW(buf,2));
-			RFIFOSKIP(fd, RFIFOW(fd,2));
-//			printf("char: save_account_reg (from map)\n");
-			break;
-		  }
-
-		default:
-			// inter server�����ɓn��
-			{
-				int r = inter_parse_frommap(fd);
-				if (r == 1) // �����ł���
-					break;
-				if (r == 2) // �p�P�b�g��������Ȃ�
-					return 0;
-			}
-			// inter server�����ł��Ȃ��ꍇ�͐ؒf
-			printf("char: unknown packet 0x%04x (%d bytes to read in buffer)! (from map).\n", RFIFOW(fd,0), RFIFOREST(fd));
-			session[fd]->eof = 1;
-			return 0;
-		}
-	}
-	return 0;
-}
-
-int search_mapserver(char *map) {
-	int i, j;
-	char temp_map[16];
-	int temp_map_len;
-
-//	printf("Searching the map-server for map '%s'... ", map);
-	strncpy(temp_map, map, sizeof(temp_map));
-	temp_map[sizeof(temp_map)-1] = '\0';
-	if (strchr(temp_map, '.') != NULL)
-		temp_map[strchr(temp_map, '.') - temp_map + 1] = '\0'; // suppress the '.gat', but conserve the '.' to be sure of the name of the map
-
-	temp_map_len = strlen(temp_map);
-	for(i = 0; i < MAX_MAP_SERVERS; i++)
-		if (server_fd[i] >= 0)
-			for (j = 0; server[i].map[j][0]; j++)
-				//printf("%s : %s = %d\n", server[i].map[j], map, strncmp(server[i].map[j], temp_map, temp_map_len));
-				if (strncmp(server[i].map[j], temp_map, temp_map_len) == 0) {
-//					printf("found -> server #%d.\n", i);
-					return i;
-				}
-
-//	printf("not found.\n");
-	return -1;
-}
-
-// char_mapif�̏����������i���݂�inter_mapif�������̂݁j
-static int char_mapif_init(int fd) {
-	return inter_mapif_init(fd);
-}
-
-//-----------------------------------------------------
-// Test to know if an IP come from LAN or WAN. by [Yor]
-//-----------------------------------------------------
-int lan_ip_check(unsigned char *p){
-	int i;
-	int lancheck = 1;
-
-//	printf("lan_ip_check: to compare: %d.%d.%d.%d, network: %d.%d.%d.%d/%d.%d.%d.%d\n",
-//	       p[0], p[1], p[2], p[3],
-//	       subneti[0], subneti[1], subneti[2], subneti[3],
-//	       subnetmaski[0], subnetmaski[1], subnetmaski[2], subnetmaski[3]);
-	for(i = 0; i < 4; i++) {
-		if ((subneti[i] & subnetmaski[i]) != (p[i] & subnetmaski[i])) {
-			lancheck = 0;
-			break;
-		}
-	}
-	printf("LAN test (result): %s source\033[0m.\n", (lancheck) ? "\033[1;36mLAN" : "\033[1;32mWAN");
-	return lancheck;
-}
-
-int parse_char(int fd) {
-	int i, ch;
-	char email[40];
-	struct char_session_data *sd;
-	unsigned char *p = (unsigned char *) &session[fd]->client_addr.sin_addr;
-
-	if (login_fd < 0 || session[fd]->eof) { // disconnect any player (already connected to char-server or coming back from map-server) if login-server is diconnected.
-		if (fd == login_fd)
-			login_fd = -1;
-		close(fd);
-		delete_session(fd);
-		return 0;
-	}
-
-	sd = session[fd]->session_data;
-
-	while (RFIFOREST(fd) >= 2) {
-//		if (RFIFOW(fd,0) < 30000)
-//			printf("parse_char: connection #%d, packet: 0x%x (with being read: %d bytes).\n", fd, RFIFOW(fd,0), RFIFOREST(fd));
-
-		switch(RFIFOW(fd,0)) {
-		case 0x20b:	//20040622�Í���ragexe�Ή�
-			if (RFIFOREST(fd) < 19)
-				return 0;
-			RFIFOSKIP(fd,19);
-			break;
-
-		case 0x65:	// �ڑ��v��
-			if (RFIFOREST(fd) < 17)
-				return 0;
-		  {
-			int GM_value;
-			if ((GM_value = isGM(RFIFOL(fd,2))))
-				printf("Account Logged On; Account ID: %d (GM level %d).\n", RFIFOL(fd,2), GM_value);
-			else
-				printf("Account Logged On; Account ID: %d.\n", RFIFOL(fd,2));
-			if (sd == NULL) {
-				sd = session[fd]->session_data = calloc(sizeof(struct char_session_data), 1);
-				memset(sd, 0, sizeof(struct char_session_data));
-				memcpy(sd->email, "no mail", 40); // put here a mail without '@' to refuse deletion if we don't receive the e-mail
-				sd->connect_until_time = 0; // unknow or illimited (not displaying on map-server)
-			}
-			sd->account_id = RFIFOL(fd,2);
-			sd->login_id1 = RFIFOL(fd,6);
-			sd->login_id2 = RFIFOL(fd,10);
-			sd->sex = RFIFOB(fd,16);
-			// send back account_id
-			WFIFOL(fd,0) = RFIFOL(fd,2);
-			WFIFOSET(fd,4);
-			// search authentification
-			for(i = 0; i < AUTH_FIFO_SIZE; i++) {
-				if (auth_fifo[i].account_id == sd->account_id &&
-				    auth_fifo[i].login_id1 == sd->login_id1 &&
-#if CMP_AUTHFIFO_LOGIN2 != 0
-				    auth_fifo[i].login_id2 == sd->login_id2 && // relate to the versions higher than 18
-#endif
-				    (!check_ip_flag || auth_fifo[i].ip == session[fd]->client_addr.sin_addr.s_addr) &&
-				    auth_fifo[i].delflag == 2) {
-					auth_fifo[i].delflag = 1;
-					if (max_connect_user == 0 || count_users() < max_connect_user) {
-						if (login_fd > 0) { // don't send request if no login-server
-							// request to login-server to obtain e-mail/time limit
-							WFIFOW(login_fd,0) = 0x2716;
-							WFIFOL(login_fd,2) = sd->account_id;
-							WFIFOSET(login_fd,6);
-						}
-						// send characters to player
-						mmo_char_send006b(fd, sd);
-					} else {
-						// refuse connection (over populated)
-						WFIFOW(fd,0) = 0x6c;
-						WFIFOW(fd,2) = 0;
-						WFIFOSET(fd,3);
-					}
-					break;
-				}
-			}
-			// authentification not found
-			if (i == AUTH_FIFO_SIZE) {
-				if (login_fd > 0) { // don't send request if no login-server
-					WFIFOW(login_fd,0) = 0x2712; // ask login-server to authentify an account
-					WFIFOL(login_fd,2) = sd->account_id;
-					WFIFOL(login_fd,6) = sd->login_id1;
-					WFIFOL(login_fd,10) = sd->login_id2; // relate to the versions higher than 18
-					WFIFOB(login_fd,14) = sd->sex;
-					WFIFOL(login_fd,15) = session[fd]->client_addr.sin_addr.s_addr;
-					WFIFOSET(login_fd,19);
-				} else { // if no login-server, we must refuse connection
-					WFIFOW(fd,0) = 0x6c;
-					WFIFOW(fd,2) = 0;
-					WFIFOSET(fd,3);
-				}
-			}
-		  }
-			RFIFOSKIP(fd,17);
-			break;
-
-		case 0x66:	// �L�����I��
-			if (RFIFOREST(fd) < 3)
-				return 0;
-
-			// if we activated email creation and email is default email
-			if (email_creation != 0 && strcmp(sd->email, "a@a.com") == 0 && login_fd > 0) { // to modify an e-mail, login-server must be online
-				WFIFOW(fd, 0) = 0x70;
-				WFIFOB(fd, 2) = 0; // 00 = Incorrect Email address
-				WFIFOSET(fd, 3);
-
-			// otherwise, load the character
-			} else {
-				for (ch = 0; ch < 9; ch++)
-					if (sd->found_char[ch] >= 0 && char_dat[sd->found_char[ch]].char_num == RFIFOB(fd,2))
-						break;
-				if (ch != 9) {
-					char_log("Character Selected, Account ID: %d, Character Slot: %d, Character Name: %s." RETCODE,
-					         sd->account_id, RFIFOB(fd,2), char_dat[sd->found_char[ch]].name);
-					// searching map server
-					i = search_mapserver(char_dat[sd->found_char[ch]].last_point.map);
-					// if map is not found, we check major cities
-					if (i < 0) {
-						if ((i = search_mapserver("prontera.gat")) >= 0) { // check is done without 'gat'.
-							memcpy(char_dat[sd->found_char[ch]].last_point.map, "prontera.gat", 16);
-							char_dat[sd->found_char[ch]].last_point.x = 273; // savepoint coordonates
-							char_dat[sd->found_char[ch]].last_point.y = 354;
-						} else if ((i = search_mapserver("geffen.gat")) >= 0) { // check is done without 'gat'.
-							memcpy(char_dat[sd->found_char[ch]].last_point.map, "geffen.gat", 16);
-							char_dat[sd->found_char[ch]].last_point.x = 120; // savepoint coordonates
-							char_dat[sd->found_char[ch]].last_point.y = 100;
-						} else if ((i = search_mapserver("morocc.gat")) >= 0) { // check is done without 'gat'.
-							memcpy(char_dat[sd->found_char[ch]].last_point.map, "morocc.gat", 16);
-							char_dat[sd->found_char[ch]].last_point.x = 160; // savepoint coordonates
-							char_dat[sd->found_char[ch]].last_point.y = 94;
-						} else if ((i = search_mapserver("alberta.gat")) >= 0) { // check is done without 'gat'.
-							memcpy(char_dat[sd->found_char[ch]].last_point.map, "alberta.gat", 16);
-							char_dat[sd->found_char[ch]].last_point.x = 116; // savepoint coordonates
-							char_dat[sd->found_char[ch]].last_point.y = 57;
-						} else if ((i = search_mapserver("payon.gat")) >= 0) { // check is done without 'gat'.
-							memcpy(char_dat[sd->found_char[ch]].last_point.map, "payon.gat", 16);
-							char_dat[sd->found_char[ch]].last_point.x = 87; // savepoint coordonates
-							char_dat[sd->found_char[ch]].last_point.y = 117;
-						} else if ((i = search_mapserver("izlude.gat")) >= 0) { // check is done without 'gat'.
-							memcpy(char_dat[sd->found_char[ch]].last_point.map, "izlude.gat", 16);
-							char_dat[sd->found_char[ch]].last_point.x = 94; // savepoint coordonates
-							char_dat[sd->found_char[ch]].last_point.y = 103;
-						} else {
-							int j;
-							// get first online server (with a map)
-							i = 0;
-							for(j = 0; j < MAX_MAP_SERVERS; j++)
-								if (server_fd[j] >= 0 && server[j].map[0][0]) { // change save point to one of map found on the server (the first)
-									i = j;
-									memcpy(char_dat[sd->found_char[ch]].last_point.map, server[j].map[0], 16);
-									printf("Map-server #%d found with a map: '%s'.\n", j, server[j].map[0]);
-									// coordonates are unknown
-									break;
-								}
-							// if no map-server is connected, we send: server closed
-							if (j == MAX_MAP_SERVERS) {
-								WFIFOW(fd,0) = 0x81;
-								WFIFOL(fd,2) = 1; // 01 = Server closed
-								WFIFOSET(fd,3);
-								RFIFOSKIP(fd,3);
-								break;
-							}
-						}
-					}
-					WFIFOW(fd,0) = 0x71;
-					WFIFOL(fd,2) = char_dat[sd->found_char[ch]].char_id;
-					memcpy(WFIFOP(fd,6), char_dat[sd->found_char[ch]].last_point.map, 16);
-					printf("Character selection '%s' (account: %d, slot: %d).\n", char_dat[sd->found_char[ch]].name, sd->account_id, ch);
-					printf("--Send IP of map-server. ");
-					if (lan_ip_check(p))
-						WFIFOL(fd, 22) = inet_addr(lan_map_ip);
-					else
-						WFIFOL(fd, 22) = server[i].ip;
-					WFIFOW(fd,26) = server[i].port;
-					WFIFOSET(fd,28);
-					if (auth_fifo_pos >= AUTH_FIFO_SIZE)
-						auth_fifo_pos = 0;
-					//printf("auth_fifo set #%d - account %d, char: %d, secure: %08x-%08x\n", auth_fifo_pos, sd->account_id, char_dat[sd->found_char[ch]].char_id, sd->login_id1, sd->login_id2);
-					auth_fifo[auth_fifo_pos].account_id = sd->account_id;
-					auth_fifo[auth_fifo_pos].char_id = char_dat[sd->found_char[ch]].char_id;
-					auth_fifo[auth_fifo_pos].login_id1 = sd->login_id1;
-					auth_fifo[auth_fifo_pos].login_id2 = sd->login_id2;
-					auth_fifo[auth_fifo_pos].delflag = 0;
-					auth_fifo[auth_fifo_pos].char_pos = sd->found_char[ch];
-					auth_fifo[auth_fifo_pos].sex = sd->sex;
-					auth_fifo[auth_fifo_pos].connect_until_time = sd->connect_until_time;
-					auth_fifo[auth_fifo_pos].ip = session[fd]->client_addr.sin_addr.s_addr;
-					auth_fifo_pos++;
-				}
-			}
-			RFIFOSKIP(fd,3);
-			break;
-
-		case 0x67:	// �쐬
-			if (RFIFOREST(fd) < 37)
-				return 0;
-			i = make_new_char(fd, RFIFOP(fd,2));
-			if (i < 0) {
-				WFIFOW(fd,0) = 0x6e;
-				WFIFOB(fd,2) = 0x00;
-				WFIFOSET(fd,3);
-				RFIFOSKIP(fd,37);
-				break;
-			}
-
-			WFIFOW(fd,0) = 0x6d;
-			memset(WFIFOP(fd,2), 0, 106);
-
-			WFIFOL(fd,2) = char_dat[i].char_id;
-			WFIFOL(fd,2+4) = char_dat[i].base_exp;
-			WFIFOL(fd,2+8) = char_dat[i].zeny;
-			WFIFOL(fd,2+12) = char_dat[i].job_exp;
-			WFIFOL(fd,2+16) = char_dat[i].job_level;
-
-			WFIFOL(fd,2+28) = char_dat[i].karma;
-			WFIFOL(fd,2+32) = char_dat[i].manner;
-
-			WFIFOW(fd,2+40) = 0x30;
-			WFIFOW(fd,2+42) = (char_dat[i].hp > 0x7fff) ? 0x7fff : char_dat[i].hp;
-			WFIFOW(fd,2+44) = (char_dat[i].max_hp > 0x7fff) ? 0x7fff : char_dat[i].max_hp;
-			WFIFOW(fd,2+46) = (char_dat[i].sp > 0x7fff) ? 0x7fff : char_dat[i].sp;
-			WFIFOW(fd,2+48) = (char_dat[i].max_sp > 0x7fff) ? 0x7fff : char_dat[i].max_sp;
-			WFIFOW(fd,2+50) = DEFAULT_WALK_SPEED; // char_dat[i].speed;
-			WFIFOW(fd,2+52) = char_dat[i].class;
-			WFIFOW(fd,2+54) = char_dat[i].hair;
-
-			WFIFOW(fd,2+58) = char_dat[i].base_level;
-			WFIFOW(fd,2+60) = char_dat[i].skill_point;
-
-			WFIFOW(fd,2+64) = char_dat[i].shield;
-			WFIFOW(fd,2+66) = char_dat[i].head_top;
-			WFIFOW(fd,2+68) = char_dat[i].head_mid;
-			WFIFOW(fd,2+70) = char_dat[i].hair_color;
-
-			memcpy(WFIFOP(fd,2+74), char_dat[i].name, 24);
-
-			WFIFOB(fd,2+98) = (char_dat[i].str > 255) ? 255 : char_dat[i].str;
-			WFIFOB(fd,2+99) = (char_dat[i].agi > 255) ? 255 : char_dat[i].agi;
-			WFIFOB(fd,2+100) = (char_dat[i].vit > 255) ? 255 : char_dat[i].vit;
-			WFIFOB(fd,2+101) = (char_dat[i].int_ > 255) ? 255 : char_dat[i].int_;
-			WFIFOB(fd,2+102) = (char_dat[i].dex > 255) ? 255 : char_dat[i].dex;
-			WFIFOB(fd,2+103) = (char_dat[i].luk > 255) ? 255 : char_dat[i].luk;
-			WFIFOB(fd,2+104) = char_dat[i].char_num;
-
-			WFIFOSET(fd,108);
-			RFIFOSKIP(fd,37);
-			for(ch = 0; ch < 9; ch++) {
-				if (sd->found_char[ch] == -1) {
-					sd->found_char[ch] = i;
-					break;
-				}
-			}
-
-		case 0x68:	// delete char //Yor's Fix
-			if (RFIFOREST(fd) < 46)
-				return 0;
-			memcpy(email, RFIFOP(fd,6), 40);
-			if (e_mail_check(email) == 0)
-				strncpy(email, "a@a.com", 40); // default e-mail
-
-			// if we activated email creation and email is default email
-			if (email_creation != 0 && strcmp(sd->email, "a@a.com") == 0 && login_fd > 0) { // to modify an e-mail, login-server must be online
-				// if sended email is incorrect e-mail
-				if (strcmp(email, "a@a.com") == 0) {
-					WFIFOW(fd, 0) = 0x70;
-					WFIFOB(fd, 2) = 0; // 00 = Incorrect Email address
-					WFIFOSET(fd, 3);
-					RFIFOSKIP(fd,46);
-				// we act like we have selected a character
-				} else {
-					// we change the packet to set it like selection.
-					for (i = 0; i < 9; i++)
-						if (char_dat[sd->found_char[i]].char_id == RFIFOL(fd,2)) {
-							// we save new e-mail
-							memcpy(sd->email, email, 40);
-							// we send new e-mail to login-server ('online' login-server is checked before)
-							WFIFOW(login_fd,0) = 0x2715;
-							WFIFOL(login_fd,2) = sd->account_id;
-							memcpy(WFIFOP(login_fd, 6), email, 40);
-							WFIFOSET(login_fd,46);
-							// skip part of the packet! (46, but leave the size of select packet: 3)
-							RFIFOSKIP(fd,43);
-							// change value to put new packet (char selection)
-							RFIFOW(fd, 0) = 0x66;
-							RFIFOB(fd, 2) = char_dat[sd->found_char[i]].char_num;
-							// not send packet, it's modify of actual packet
-							break;
-						}
-					if (i == 9) {
-						WFIFOW(fd, 0) = 0x70;
-						WFIFOB(fd, 2) = 0; // 00 = Incorrect Email address
-						WFIFOSET(fd, 3);
-						RFIFOSKIP(fd,46);
-					}
-				}
-
-			// otherwise, we delete the character
-			} else {
-				if (strcmpi(email, sd->email) != 0) { // if it's an invalid email
-					WFIFOW(fd, 0) = 0x70;
-					WFIFOB(fd, 2) = 0; // 00 = Incorrect Email address
-					WFIFOSET(fd, 3);
-				// if mail is correct
-				} else {
-					for (i = 0; i < 9; i++) {
-						struct mmo_charstatus *cs = NULL;
-						if ((cs = &char_dat[sd->found_char[i]])->char_id == RFIFOL(fd,2)) {
-							char_delete(cs); // deletion process
-
-							if (sd->found_char[i] != char_num - 1) {
-								memcpy(&char_dat[sd->found_char[i]], &char_dat[char_num-1], sizeof(struct mmo_charstatus));
-								// Correct moved character reference in the character's owner
-								{
-									int j, k;
-									struct char_session_data *sd2;
-									for (j = 0; j < fd_max; j++) {
-										if (session[j] && (sd2 = session[j]->session_data) &&
-											sd2->account_id == char_dat[char_num-1].account_id) {
-											for (k = 0; k < 9; k++) {
-												if (sd2->found_char[k] == char_num-1) {
-													sd2->found_char[k] = sd->found_char[i];
-													break;
-												}
-											}
-											break;
-										}
-									}
-								}
-							}
-
-							char_num--;
-							for(ch = i; ch < 9-1; ch++)
-								sd->found_char[ch] = sd->found_char[ch+1];
-							sd->found_char[8] = -1;
-							WFIFOW(fd,0) = 0x6f;
-							WFIFOSET(fd,2);
-							break;
-						}
-					}
-
-					if (i == 9) {
-						WFIFOW(fd,0) = 0x70;
-						WFIFOB(fd,2) = 0;
-						WFIFOSET(fd,3);
-					}
-				}
-				RFIFOSKIP(fd,46);
-			}
-			break;
-
-		case 0x2af8:	// �}�b�v�T�[�o�[���O�C��
-			if (RFIFOREST(fd) < 60)
-				return 0;
-			WFIFOW(fd,0) = 0x2af9;
-			for(i = 0; i < MAX_MAP_SERVERS; i++) {
-				if (server_fd[i] < 0)
-					break;
-			}
-			if (i == MAX_MAP_SERVERS || strcmp(RFIFOP(fd,2), userid) || strcmp(RFIFOP(fd,26), passwd)){
-				WFIFOB(fd,2) = 3;
-				WFIFOSET(fd,3);
-				RFIFOSKIP(fd,60);
-			} else {
-				int len;
-				WFIFOB(fd,2) = 0;
-				session[fd]->func_parse = parse_frommap;
-				server_fd[i] = fd;
-				if(anti_freeze_enable)
-					server_freezeflag[i] = 5; // Map anti-freeze system. Counter. 5 ok, 4...0 freezed
-				server[i].ip = RFIFOL(fd,54);
-				server[i].port = RFIFOW(fd,58);
-				server[i].users = 0;
-				memset(server[i].map, 0, sizeof(server[i].map));
-				WFIFOSET(fd,3);
-				RFIFOSKIP(fd,60);
-				realloc_fifo(fd, FIFOSIZE_SERVERLINK, FIFOSIZE_SERVERLINK);
-				char_mapif_init(fd);
-				// send gm acccounts level to map-servers
-				len = 4;
-				WFIFOW(fd,0) = 0x2b15;
-				for(i = 0; i < GM_num; i++) {
-					WFIFOL(fd,len) = gm_account[i].account_id;
-					WFIFOB(fd,len+4) = (unsigned char)gm_account[i].level;
-					len += 5;
-				}
-				WFIFOW(fd,2) = len;
-				WFIFOSET(fd,len);
-				return 0;
-			}
-			break;
-
-		case 0x187:	// Alive�M���H
-			if (RFIFOREST(fd) < 6)
-				return 0;
-			RFIFOSKIP(fd, 6);
-			break;
-
-		case 0x7530:	// Athena��񏊓�
-			WFIFOW(fd,0) = 0x7531;
-			WFIFOB(fd,2) = ATHENA_MAJOR_VERSION;
-			WFIFOB(fd,3) = ATHENA_MINOR_VERSION;
-			WFIFOB(fd,4) = ATHENA_REVISION;
-			WFIFOB(fd,5) = ATHENA_RELEASE_FLAG;
-			WFIFOB(fd,6) = ATHENA_OFFICIAL_FLAG;
-			WFIFOB(fd,7) = ATHENA_SERVER_INTER | ATHENA_SERVER_CHAR;
-			WFIFOW(fd,8) = ATHENA_MOD_VERSION;
-			WFIFOSET(fd,10);
-			RFIFOSKIP(fd,2);
-			return 0;
-
-		case 0x7532:	// �ڑ��̐ؒf(default�Ə����͈ꏏ���������I�ɂ��邽��)
-			session[fd]->eof = 1;
-			return 0;
-
-		default:
-			session[fd]->eof = 1;
-			return 0;
-		}
-	}
-	RFIFOFLUSH(fd);
-	return 0;
-}
-
-// �S�Ă�MAP�T�[�o�[�Ƀf�[�^���M�i���M����map�I�̐���Ԃ��j
-int mapif_sendall(unsigned char *buf, unsigned int len) {
-	int i, c;
-
-	c = 0;
-	for(i = 0; i < MAX_MAP_SERVERS; i++) {
-		int fd;
-		if ((fd = server_fd[i]) >= 0) {
-			memcpy(WFIFOP(fd,0), buf, len);
-			WFIFOSET(fd,len);
-			c++;
-		}
-	}
-	return c;
-}
-
-// �����ȊO�̑S�Ă�MAP�T�[�o�[�Ƀf�[�^���M�i���M����map�I�̐���Ԃ��j
-int mapif_sendallwos(int sfd, unsigned char *buf, unsigned int len) {
-	int i, c;
-
-	c = 0;
-	for(i = 0; i < MAX_MAP_SERVERS; i++) {
-		int fd;
-		if ((fd = server_fd[i]) >= 0 && fd != sfd) {
-			memcpy(WFIFOP(fd,0), buf, len);
-			WFIFOSET(fd, len);
-			c++;
-		}
-	}
-	return c;
-}
-// MAP�T�[�o�[�Ƀf�[�^���M�imap�I�����m�F�L��j
-int mapif_send(int fd, unsigned char *buf, unsigned int len) {
-	int i;
-
-	if (fd >= 0) {
-		for(i = 0; i < MAX_MAP_SERVERS; i++) {
-			if (fd == server_fd[i]) {
-				memcpy(WFIFOP(fd,0), buf, len);
-				WFIFOSET(fd,len);
-				return 1;
-			}
-		}
-	}
-	return 0;
-}
-
-int send_users_tologin(int tid, unsigned int tick, int id, int data) {
-	int users = count_users();
-	char buf[16];
-
-	if (login_fd > 0 && session[login_fd]) {
-		// send number of user to login server
-		WFIFOW(login_fd,0) = 0x2714;
-		WFIFOL(login_fd,2) = users;
-		WFIFOSET(login_fd,6);
-	}
-	// send number of players to all map-servers
-	WBUFW(buf,0) = 0x2b00;
-	WBUFL(buf,2) = users;
-	mapif_sendall(buf, 6);
-
-	return 0;
-}
-
-int check_connect_login_server(int tid, unsigned int tick, int id, int data) {
-	if (login_fd <= 0 || session[login_fd] == NULL) {
-		printf("Attempt to connect to login-server...\n");
-		login_fd = make_connection(login_ip, login_port);
-		session[login_fd]->func_parse = parse_tologin;
-		realloc_fifo(login_fd, FIFOSIZE_SERVERLINK, FIFOSIZE_SERVERLINK);
-		WFIFOW(login_fd,0) = 0x2710;
-		memset(WFIFOP(login_fd,2), 0, 24);
-		memcpy(WFIFOP(login_fd,2), userid, strlen(userid) < 24 ? strlen(userid) : 24);
-		memset(WFIFOP(login_fd,26), 0, 24);
-		memcpy(WFIFOP(login_fd,26), passwd, strlen(passwd) < 24 ? strlen(passwd) : 24);
-		WFIFOL(login_fd,50) = 0;
-		WFIFOL(login_fd,54) = char_ip;
-		WFIFOL(login_fd,58) = char_port;
-		memset(WFIFOP(login_fd,60), 0, 20);
-		memcpy(WFIFOP(login_fd,60), server_name, strlen(server_name) < 20 ? strlen(server_name) : 20);
-		WFIFOW(login_fd,80) = 0;
-		WFIFOW(login_fd,82) = char_maintenance;
-		WFIFOW(login_fd,84) = char_new;
-		WFIFOSET(login_fd,86);
-	}
-	return 0;
-}
-
-//----------------------------------------------------------
-// Return numerical value of a switch configuration by [Yor]
-// on/off, english, fran�ais, deutsch, espa�ol
-//----------------------------------------------------------
-int config_switch(const char *str) {
-	if (strcmpi(str, "on") == 0 || strcmpi(str, "yes") == 0 || strcmpi(str, "oui") == 0 || strcmpi(str, "ja") == 0 || strcmpi(str, "si") == 0)
-		return 1;
-	if (strcmpi(str, "off") == 0 || strcmpi(str, "no") == 0 || strcmpi(str, "non") == 0 || strcmpi(str, "nein") == 0)
-		return 0;
-
-	return atoi(str);
-}
-
-//-------------------------------------------
-// Reading Lan Support configuration by [Yor]
-//-------------------------------------------
-int lan_config_read(const char *lancfgName) {
-	int j;
-	struct hostent * h = NULL;
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp;
-
-	// set default configuration
-	strncpy(lan_map_ip, "127.0.0.1", sizeof(lan_map_ip));
-	subneti[0] = 127;
-	subneti[1] = 0;
-	subneti[2] = 0;
-	subneti[3] = 1;
-	for(j = 0; j < 4; j++)
-		subnetmaski[j] = 255;
-
-	fp = fopen(lancfgName, "r");
-
-	if (fp == NULL) {
-		printf("LAN support configuration file not found: %s\n", lancfgName);
-		return 1;
-	}
-
-	printf ("---start reading of Lan Support configuration...\n");
-
-	while(fgets(line, sizeof(line)-1, fp)) {
-		if (line[0] == '/' && line[1] == '/')
-			continue;
-
-		line[sizeof(line)-1] = '\0';
-		if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2)
-			continue;
-
-		remove_control_chars(w1);
-		remove_control_chars(w2);
-		if (strcmpi(w1, "lan_map_ip") == 0) { // Read map-server Lan IP Address
-			h = gethostbyname(w2);
-			if (h != NULL) {
-				sprintf(lan_map_ip, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-			} else {
-				strncpy(lan_map_ip, w2, sizeof(lan_map_ip));
-				lan_map_ip[sizeof(lan_map_ip)-1] = 0;
-			}
-			printf("LAN IP of map-server: %s.\n", lan_map_ip);
-		} else if (strcmpi(w1, "subnet") == 0) { // Read Subnetwork
-			for(j = 0; j < 4; j++)
-				subneti[j] = 0;
-			h = gethostbyname(w2);
-			if (h != NULL) {
-				for(j = 0; j < 4; j++)
-					subneti[j] = (unsigned char)h->h_addr[j];
-			} else {
-				sscanf(w2, "%d.%d.%d.%d", &subneti[0], &subneti[1], &subneti[2], &subneti[3]);
-			}
-			printf("Sub-network of the map-server: %d.%d.%d.%d.\n", subneti[0], subneti[1], subneti[2], subneti[3]);
-		} else if (strcmpi(w1, "subnetmask") == 0){ // Read Subnetwork Mask
-			for(j = 0; j < 4; j++)
-				subnetmaski[j] = 255;
-			h = gethostbyname(w2);
-			if (h != NULL) {
-				for(j = 0; j < 4; j++)
-					subnetmaski[j] = (unsigned char)h->h_addr[j];
-			} else {
-				sscanf(w2, "%d.%d.%d.%d", &subnetmaski[0], &subnetmaski[1], &subnetmaski[2], &subnetmaski[3]);
-			}
-			printf("Sub-network mask of the map-server: %d.%d.%d.%d.\n", subnetmaski[0], subnetmaski[1], subnetmaski[2], subnetmaski[3]);
-		}
-	}
-	fclose(fp);
-
-	// sub-network check of the map-server
-	{
-		unsigned int a0, a1, a2, a3;
-		unsigned char p[4];
-		sscanf(lan_map_ip, "%d.%d.%d.%d", &a0, &a1, &a2, &a3);
-		p[0] = a0; p[1] = a1; p[2] = a2; p[3] = a3;
-		printf("LAN test of LAN IP of the map-server: ");
-		if (lan_ip_check(p) == 0) {
-			printf("\033[1;31m***ERROR: LAN IP of the map-server doesn't belong to the specified Sub-network.\033[0m\n");
-		}
-	}
-
-	printf("---End reading of Lan Support configuration...\n");
-
-	return 0;
-}
-
-int char_config_read(const char *cfgName) {
-	struct hostent *h = NULL;
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp = fopen(cfgName, "r");
-
-	if (fp == NULL) {
-		printf("Configuration file not found: %s.\n", cfgName);
-		exit(1);
-	}
-
-	while(fgets(line, sizeof(line)-1, fp)) {
-		if (line[0] == '/' && line[1] == '/')
-			continue;
-
-		line[sizeof(line)-1] = '\0';
-		if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2)
-			continue;
-
-		remove_control_chars(w1);
-		remove_control_chars(w2);
-		if (strcmpi(w1, "userid") == 0) {
-			memcpy(userid, w2, 24);
-		} else if (strcmpi(w1, "passwd") == 0) {
-			memcpy(passwd, w2, 24);
-		} else if (strcmpi(w1, "server_name") == 0) {
-			memcpy(server_name, w2, sizeof(server_name));
-			server_name[sizeof(server_name) - 1] = '\0';
-			printf("%s server has been intialized\n", w2);
-		} else if (strcmpi(w1, "wisp_server_name") == 0) {
-			if (strlen(w2) >= 4) {
-				memcpy(wisp_server_name, w2, sizeof(wisp_server_name));
-				wisp_server_name[sizeof(wisp_server_name) - 1] = '\0';
-			}
-		} else if (strcmpi(w1, "login_ip") == 0) {
-			h = gethostbyname(w2);
-			if (h != NULL) {
-				printf("Login server IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				sprintf(login_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-			} else
-				memcpy(login_ip_str, w2, 16);
-		} else if (strcmpi(w1, "login_port") == 0) {
-			login_port = atoi(w2);
-		} else if (strcmpi(w1, "char_ip") == 0) {
-			h = gethostbyname(w2);
-			if (h != NULL) {
-				printf("Character server IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				sprintf(char_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-			} else
-				memcpy(char_ip_str, w2, 16);
-		} else if (strcmpi(w1, "char_port") == 0) {
-			char_port = atoi(w2);
-		} else if (strcmpi(w1, "char_maintenance") == 0) {
-			char_maintenance = atoi(w2);
-		} else if (strcmpi(w1, "char_new") == 0) {
-			char_new = atoi(w2);
-		} else if (strcmpi(w1, "email_creation") == 0) {
-			email_creation = config_switch(w2);
-		} else if (strcmpi(w1, "char_txt") == 0) {
-			strcpy(char_txt, w2);
-		} else if (strcmpi(w1, "backup_txt") == 0) { //By zanetheinsane
-			strcpy(backup_txt, w2);
-		} else if (strcmpi(w1, "backup_txt_flag") == 0) { // The backup_txt file was created because char deletion bug existed. Now it's finish and that take a lot of time to create a second file when there are a lot of characters. By [Yor]
-			backup_txt_flag = config_switch(w2);
-		} else if (strcmpi(w1, "max_connect_user") == 0) {
-			max_connect_user = atoi(w2);
-			if (max_connect_user < 0)
-				max_connect_user = 0; // unlimited online players
-		} else if (strcmpi(w1, "check_ip_flag") == 0) {
-			check_ip_flag = config_switch(w2);
-		} else if (strcmpi(w1, "autosave_time") == 0) {
-			autosave_interval = atoi(w2)*1000;
-			if (autosave_interval <= 0)
-				autosave_interval = DEFAULT_AUTOSAVE_INTERVAL;
-		} else if (strcmpi(w1, "start_point") == 0) {
-			char map[32];
-			int x, y;
-			if (sscanf(w2, "%[^,],%d,%d", map, &x, &y) < 3)
-				continue;
-			if (strstr(map, ".gat") != NULL) { // Verify at least if '.gat' is in the map name
-				memcpy(start_point.map, map, 16);
-				start_point.x = x;
-				start_point.y = y;
-			}
-		} else if (strcmpi(w1, "start_zeny") == 0) {
-			start_zeny = atoi(w2);
-			if (start_zeny < 0)
-				start_zeny = 0;
-		} else if (strcmpi(w1, "start_weapon") == 0) {
-			start_zeny = atoi(w2);
-			if (start_weapon < 0)
-				start_weapon = 0;
-		} else if (strcmpi(w1, "start_armor") == 0) {
-			start_zeny = atoi(w2);
-			if (start_armor < 0)
-				start_armor = 0;
-		} else if (strcmpi(w1, "unknown_char_name") == 0) {
-			strcpy(unknown_char_name, w2);
-			unknown_char_name[24] = 0;
-		} else if (strcmpi(w1, "char_log_filename") == 0) {
-			strcpy(char_log_filename, w2);
-		} else if (strcmpi(w1, "name_ignoring_case") == 0) {
-			name_ignoring_case = config_switch(w2);
-		} else if (strcmpi(w1, "char_name_option") == 0) {
-			char_name_option = atoi(w2);
-		} else if (strcmpi(w1, "char_name_letters") == 0) {
-			strcpy(char_name_letters, w2);
-// online files options
-		} else if (strcmpi(w1, "online_txt_filename") == 0) {
-			strcpy(online_txt_filename, w2);
-		} else if (strcmpi(w1, "online_html_filename") == 0) {
-			strcpy(online_html_filename, w2);
-		} else if (strcmpi(w1, "online_sorting_option") == 0) {
-			online_sorting_option = atoi(w2);
-		} else if (strcmpi(w1, "online_display_option") == 0) {
-			online_display_option = atoi(w2);
-		} else if (strcmpi(w1, "online_gm_display_min_level") == 0) { // minimum GM level to display 'GM' when we want to display it
-			online_gm_display_min_level = atoi(w2);
-			if (online_gm_display_min_level < 5) // send online file every 5 seconds to player is enough
-				online_gm_display_min_level = 5;
-		} else if (strcmpi(w1, "online_refresh_html") == 0) {
-			online_refresh_html = atoi(w2);
-			if (online_refresh_html < 1)
-				online_refresh_html = 1;
-		} else if(strcmpi(w1,"anti_freeze_enable")==0){
-			anti_freeze_enable = config_switch(w2);
-		} else if (strcmpi(w1, "anti_freeze_interval") == 0) {
-			ANTI_FREEZE_INTERVAL = atoi(w2);
-			if (ANTI_FREEZE_INTERVAL < 5)
-				ANTI_FREEZE_INTERVAL = 5; // minimum 5 seconds
-		} else if (strcmpi(w1, "import") == 0) {
-			char_config_read(w2);
-		}
-	}
-	fclose(fp);
-
-	return 0;
-}
-
-void do_final(void) {
-	int i;
-
-	// write online players files with no player
-	for(i = 0; i < char_num; i++)
-		online_chars[i] = -1;
-	create_online_files();
-	free(online_chars);
-
-	mmo_char_sync();
-	inter_save();
-
-	if (gm_account != NULL)
-		free(gm_account);
-
-	free(char_dat);
-	delete_session(login_fd);
-	delete_session(char_fd);
-
-	char_log("----End of char-server (normal end with closing of all files)." RETCODE);
-}
-
-int do_init(int argc, char **argv) {
-	int i;
-
-	// a newline in the log...
-	char_log("");
-	char_log("The char-server starting..." RETCODE);
-
-	char_config_read((argc < 2) ? CHAR_CONF_NAME : argv[1]);
-	lan_config_read((argc > 1) ? argv[1] : LOGIN_LAN_CONF_NAME);
-
-	login_ip = inet_addr(login_ip_str);
-	char_ip = inet_addr(char_ip_str);
-
-	for(i = 0; i < MAX_MAP_SERVERS; i++) {
-		memset(&server[i], 0, sizeof(struct mmo_map_server));
-		server_fd[i] = -1;
-	}
-
-	mmo_char_init();
-
-	update_online = time(NULL);
-	create_online_files(); // update online players files at start of the server
-
-	inter_init((argc > 2) ? argv[2] : inter_cfgName);	// inter server ������
-
-	set_termfunc(do_final);
-	set_defaultparse(parse_char);
-
-	char_fd = make_listen_port(char_port);
-
-	add_timer_func_list(check_connect_login_server, "check_connect_login_server");
-	add_timer_func_list(send_users_tologin, "send_users_tologin");
-	add_timer_func_list(mmo_char_sync_timer, "mmo_char_sync_timer");
-	
-	i = add_timer_interval(gettick() + 1000, check_connect_login_server, 0, 0, 10 * 1000);
-	i = add_timer_interval(gettick() + 1000, send_users_tologin, 0, 0, 5 * 1000);
-	i = add_timer_interval(gettick() + autosave_interval, mmo_char_sync_timer, 0, 0, autosave_interval);
-	
-	if(anti_freeze_enable > 0) {
-		add_timer_func_list(map_anti_freeze_system, "map_anti_freeze_system");
-		i = add_timer_interval(gettick() + 1000, map_anti_freeze_system, 0, 0, ANTI_FREEZE_INTERVAL * 1000); // checks every X seconds user specifies
-	}
-
-	char_log("The char-server is ready (Server is listening on the port %d)." RETCODE, char_port);
-
-	printf("The char-server is \033[1;32mready\033[0m (Server is listening on the port %d).\n\n", char_port);
-
-	return 0;
-}
diff --git a/misc/src/char/char.h b/misc/src/char/char.h
deleted file mode 100644
index 989ca2f..0000000
--- a/misc/src/char/char.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// $Id: char.h,v 1.1.1.1 2004/09/10 17:26:50 MagicalTux Exp $
-#ifndef _CHAR_H_
-#define _CHAR_H_
-
-#define MAX_MAP_SERVERS 30
-
-#define CHAR_CONF_NAME	"conf/char_athena.conf"
-
-#define LOGIN_LAN_CONF_NAME	"conf/lan_support.conf"
-
-#define DEFAULT_AUTOSAVE_INTERVAL 300*1000
-
-struct mmo_map_server{
-	long ip;
-	short port;
-	int users;
-	char map[MAX_MAP_PER_SERVER][16];
-};
-
-int search_character_index(char* character_name);
-char * search_character_name(int index);
-
-int mapif_sendall(unsigned char *buf, unsigned int len);
-int mapif_sendallwos(int fd,unsigned char *buf, unsigned int len);
-int mapif_send(int fd,unsigned char *buf, unsigned int len);
-
-int char_log(char *fmt, ...);
-
-extern int autosave_interval;
-
-#endif
diff --git a/misc/src/char/diff.diff b/misc/src/char/diff.diff
deleted file mode 100644
index 61e91c7..0000000
--- a/misc/src/char/diff.diff
+++ /dev/null
@@ -1,4242 +0,0 @@
---- char.c	2006-02-17 04:15:48.000000000 +0100
-+++ newchar/char.c	2006-03-15 19:55:35.000000000 +0100
-@@ -1,73 +1,100 @@
--// $Id: char.c,v 1.3 2004/09/13 16:52:16 Yor Exp $
--// original : char2.c 2003/03/14 11:58:35 Rev.1.5
-+// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
-+// For more information, see LICENCE in the main folder
- 
- #include <sys/types.h>
--#include <sys/socket.h>
- #include <stdio.h>
- #include <stdlib.h>
-+
-+#ifdef _WIN32
-+#include <winsock.h>
-+typedef long in_addr_t;
-+#else
-+#include <sys/socket.h>
- #include <netinet/in.h>
--#include <sys/time.h>
--#include <time.h>
-+#include <arpa/inet.h>
-+#include <netdb.h>
- #include <sys/ioctl.h>
-+#include <sys/time.h>
- #include <unistd.h>
-+#endif
-+
-+#include <time.h>
- #include <signal.h>
- #include <fcntl.h>
- #include <string.h>
--#include <arpa/inet.h>
--#include <netdb.h>
- #include <stdarg.h>
-+#include <limits.h>
- 
--#include "core.h"
--#include "socket.h"
--#include "timer.h"
--#include "mmo.h"
--#include "version.h"
--#include "lock.h"
--#include "char.h"
-+#include "../common/strlib.h"
-+#include "../common/core.h"
-+#include "../common/socket.h"
-+#include "../common/timer.h"
-+#include "../common/mmo.h"
-+#include "../common/db.h"
-+#include "../common/version.h"
-+#include "../common/lock.h"
-+#include "../common/showmsg.h"
-+#include "../common/malloc.h"
- 
-+#include "char.h"
- #include "inter.h"
- #include "int_pet.h"
- #include "int_guild.h"
- #include "int_party.h"
- #include "int_storage.h"
--
--#ifdef MEMWATCH
--#include "memwatch.h"
-+#ifdef ENABLE_SC_SAVING
-+#include "int_status.h"
- #endif
- 
- struct mmo_map_server server[MAX_MAP_SERVERS];
- int server_fd[MAX_MAP_SERVERS];
--int server_freezeflag[MAX_MAP_SERVERS]; // Map-server anti-freeze system. Counter. 5 ok, 4...0 freezed
--int anti_freeze_enable = 0;
--int ANTI_FREEZE_INTERVAL = 6;
- 
- int login_fd, char_fd;
- char userid[24];
- char passwd[24];
- char server_name[20];
--char wisp_server_name[24] = "Server";
-+char wisp_server_name[NAME_LENGTH] = "Server";
-+int login_ip_set_ = 0;
- char login_ip_str[16];
--int login_ip;
-+in_addr_t login_ip;
- int login_port = 6900;
-+int char_ip_set_ = 0;
- char char_ip_str[16];
--int char_ip;
-+int bind_ip_set_ = 0;
-+char bind_ip_str[16];
-+in_addr_t char_ip;
- int char_port = 6121;
- int char_maintenance;
- int char_new;
-+int char_new_display;
- int email_creation = 0; // disabled by default
--char char_txt[1024];
--char backup_txt[1024]; //By zanetheinsane
-+char char_txt[1024]="save/athena.txt";
-+char backup_txt[1024]="save/backup.txt"; //By zanetheinsane
-+char friends_txt[1024]="save/friends.txt"; // davidsiaw
- char backup_txt_flag = 0; // The backup_txt file was created because char deletion bug existed. Now it's finish and that take a lot of time to create a second file when there are a lot of characters. => option By [Yor]
- char unknown_char_name[1024] = "Unknown";
- char char_log_filename[1024] = "log/char.log";
--//Added for lan support
--char lan_map_ip[128];
--int subneti[4];
--int subnetmaski[4];
-+char db_path[1024]="db";
-+
-+// Advanced subnet check [LuzZza]
-+struct _subnet {
-+	long subnet;
-+	long mask;
-+	long char_ip;
-+	long map_ip;
-+} subnet[16];
-+
-+int subnet_count = 0;
-+
- int name_ignoring_case = 0; // Allow or not identical name for characters but with a different case by [Yor]
- int char_name_option = 0; // Option to know which letters/symbols are authorised in the name of a character (0: all, 1: only those in char_name_letters, 2: all EXCEPT those in char_name_letters) by [Yor]
-+//The following are characters that are trimmed regardless because they cause confusion and problems on the servers. [Skotlex]
-+#define TRIM_CHARS "\032\t\n "
- char char_name_letters[1024] = ""; // list of letters/symbols authorised (or not) in a character name. by [Yor]
- 
-+int log_char = 1;	// loggin char or not [devil]
-+int log_inter = 1;	// loggin inter or not [devil]
-+
- struct char_session_data{
- 	int account_id, login_id1, login_id2, sex;
- 	int found_char[9];
-@@ -83,18 +110,31 @@
- int auth_fifo_pos = 0;
- 
- int check_ip_flag = 1; // It's to check IP of a player between char-server and other servers (part of anti-hacking system)
-+static int online_check = 1; //If one, it won't let players connect when their account is already registered online and will send the relevant map server a kick user request. [Skotlex]
-+
-+int char_id_count = START_CHAR_NUM;
-+struct character_data {
-+	struct mmo_charstatus status;
-+	int global_num;
-+	struct global_reg global[GLOBAL_REG_NUM];
-+} *char_dat;
- 
--int char_id_count = 150000;
--struct mmo_charstatus *char_dat;
- int char_num, char_max;
- int max_connect_user = 0;
-+int gm_allow_level = 99;
- int autosave_interval = DEFAULT_AUTOSAVE_INTERVAL;
-+int save_log = 1;
- int start_zeny = 500;
- int start_weapon = 1201;
--int start_armor = 1202;
-+int start_armor = 2301;
-+
-+//Custom limits for the fame lists. [Skotlex]
-+int fame_list_size_chemist = MAX_FAME_LIST;
-+int fame_list_size_smith = MAX_FAME_LIST;
-+int fame_list_size_taekwon = MAX_FAME_LIST;
- 
- // Initial position (it's possible to set it in conf file)
--struct point start_point = {"new_1-1.gat", 53, 111};
-+struct point start_point = { 0, 53, 111};
- 
- struct gm_account *gm_account = NULL;
- int GM_num = 0;
-@@ -107,16 +147,31 @@
- int online_refresh_html = 20; // refresh time (in sec) of the html file in the explorer
- int online_gm_display_min_level = 20; // minimum GM level to display 'GM' when we want to display it
- 
--int *online_chars; // same size of char_dat, and id value of current server (or -1)
-+//These are used to aid the map server in identifying valid clients. [Skotlex]
-+static int max_account_id = DEFAULT_MAX_ACCOUNT_ID, max_char_id = DEFAULT_MAX_CHAR_ID;
-+
-+struct online_char_data {
-+	int account_id;
-+	int char_id;
-+	short server;
-+	unsigned waiting_disconnect :1;
-+};
-+
-+struct dbt *online_char_db; //Holds all online characters.
-+
- time_t update_online; // to update online files when we receiving information from a server (not less than 8 seconds)
- 
-+int console = 0;
-+
- //------------------------------
- // Writing function of logs file
- //------------------------------
- int char_log(char *fmt, ...) {
-+	if(log_char)
-+	{
- 	FILE *logfp;
- 	va_list ap;
--	struct timeval tv;
-+		time_t raw_time;
- 	char tmpstr[2048];
- 
- 	va_start(ap, fmt);
-@@ -126,33 +181,16 @@
- 		if (fmt[0] == '\0') // jump a line if no message
- 			fprintf(logfp, RETCODE);
- 		else {
--			gettimeofday(&tv, NULL);
--			strftime(tmpstr, 24, "%d-%m-%Y %H:%M:%S", localtime(&(tv.tv_sec)));
--			sprintf(tmpstr + 19, ".%03d: %s", (int)tv.tv_usec / 1000, fmt);
-+				time(&raw_time);
-+				strftime(tmpstr, 24, "%d-%m-%Y %H:%M:%S", localtime(&raw_time));
-+				sprintf(tmpstr + 19, ": %s", fmt);
- 			vfprintf(logfp, tmpstr, ap);
- 		}
- 		fclose(logfp);
- 	}
--
- 	va_end(ap);
--	return 0;
--}
--
--//-----------------------------------------------------
--// Function to suppress control characters in a string.
--//-----------------------------------------------------
--int remove_control_chars(unsigned char *str) {
--	int i;
--	int change = 0;
--
--	for(i = 0; str[i]; i++) {
--		if (str[i] < 32) {
--			str[i] = '_';
--			change = 1;
--		}
- 	}
--
--	return change;
-+	return 0;
- }
- 
- //----------------------------------------------------------------------
-@@ -183,9 +221,9 @@
- 	index = -1;
- 	for(i = 0; i < char_num; i++) {
- 		// Without case sensitive check (increase the number of similar character names found)
--		if (stricmp(char_dat[i].name, character_name) == 0) {
-+		if (stricmp(char_dat[i].status.name, character_name) == 0) {
- 			// Strict comparison (if found, we finish the function immediatly with correct value)
--			if (strcmp(char_dat[i].name, character_name) == 0)
-+			if (strcmp(char_dat[i].status.name, character_name) == 0)
- 				return i;
- 			quantity++;
- 			index = i;
-@@ -206,30 +244,140 @@
- char * search_character_name(int index) {
- 
- 	if (index >= 0 && index < char_num)
--		return char_dat[index].name;
-+		return char_dat[index].status.name;
- 
- 	return unknown_char_name;
- }
- 
-+static void * create_online_char_data(DBKey key, va_list args) {
-+	struct online_char_data* character;
-+	character = aCalloc(1, sizeof(struct online_char_data));
-+	character->account_id = key.i;
-+	character->char_id = -1;
-+  	character->server = -1;
-+	return character;
-+}
-+
-+static int chardb_waiting_disconnect(int tid, unsigned int tick, int id, int data);
-+
- //-------------------------------------------------
--// Function to create the character line (for save)
-+// Set Character online/offline [Wizputer]
- //-------------------------------------------------
--int mmo_char_tostr(char *str, struct mmo_charstatus *p) {
-+
-+void set_char_online(int map_id, int char_id, int account_id) {
-+	struct online_char_data* character;
-+
-+	if ( char_id != 99 && (max_account_id < account_id || max_char_id < char_id))
-+	{	//Notify map-server of the new max IDs [Skotlex]
-+		if (account_id > max_account_id)
-+			max_account_id = account_id;
-+		if (char_id > max_char_id)
-+			max_char_id = char_id;
-+		mapif_send_maxid(max_account_id, max_char_id);
-+	}
-+	character = idb_ensure(online_char_db, account_id, create_online_char_data);
-+	if (online_check && character->char_id != -1 && character->server > -1 && character->server != map_id)
-+	{
-+		ShowNotice("set_char_online: Character %d:%d marked in map server %d, but map server %d claims to have (%d:%d) online!\n",
-+			character->account_id, character->char_id, character->server, map_id, account_id, char_id);
-+		mapif_disconnectplayer(server_fd[character->server], character->account_id, character->char_id, 2);
-+	}
-+	character->waiting_disconnect = 0;
-+	character->char_id = (char_id==99)?-1:char_id;
-+	character->server = (char_id==99)?-1:map_id;
-+
-+	if (login_fd <= 0 || session[login_fd]->eof)
-+		return;
-+	WFIFOHEAD(login_fd, 6);
-+	WFIFOW(login_fd,0) = 0x272b;
-+	WFIFOL(login_fd,2) = account_id;
-+	WFIFOSET(login_fd,6);
-+
-+	//printf ("set online\n");
-+}
-+void set_char_offline(int char_id, int account_id) {
-+	struct online_char_data* character;
-+
-+	if ((character = idb_get(online_char_db, account_id)) != NULL)
-+	{	//We don't free yet to avoid aCalloc/aFree spamming during char change. [Skotlex]
-+		character->char_id = -1;
-+		character->server = -1;
-+		character->waiting_disconnect = 0;
-+	}
-+	if (login_fd <= 0 || session[login_fd]->eof)
-+		return;
-+	WFIFOHEAD(login_fd, 6);
-+	WFIFOW(login_fd,0) = 0x272c;
-+	WFIFOL(login_fd,2) = account_id;
-+	WFIFOSET(login_fd,6);
-+
-+}
-+
-+static int char_db_setoffline(DBKey key, void* data, va_list ap) {
-+	struct online_char_data* character = (struct online_char_data*)data;
-+	int server = va_arg(ap, int);
-+	if (server == -1) {
-+		character->char_id = -1;
-+		character->server = -1;
-+		character->waiting_disconnect = 0;	
-+	} else if (character->server == server)
-+		character->server = -2; //In some map server that we aren't connected to.
-+	return 0;
-+}
-+
-+void set_all_offline(void) {
-+	online_char_db->foreach(online_char_db,char_db_setoffline,-1);
-+	if (login_fd <= 0 || session[login_fd]->eof)
-+		return;
-+	WFIFOHEAD(login_fd, 6);
-+	WFIFOW(login_fd,0) = 0x272c;
-+	WFIFOL(login_fd,2) = 99;
-+	WFIFOSET(login_fd,6);
-+
-+	//printf ("set all offline\n");
-+}
-+
-+/*---------------------------------------------------
-+  Make a data line for friends list
-+ --------------------------------------------------*/
-+
-+int mmo_friends_list_data_str(char *str, struct mmo_charstatus *p) {
- 	int i;
- 	char *str_p = str;
-+	str_p += sprintf(str_p, "%d", p->char_id);
-+
-+	for (i=0;i<MAX_FRIENDS;i++){
-+		if (p->friends[i].account_id > 0 && p->friends[i].char_id > 0 && p->friends[i].name[0])
-+			str_p += sprintf(str_p, ",%d,%d,%s", p->friends[i].account_id, p->friends[i].char_id, p->friends[i].name);
-+		else
-+			str_p += sprintf(str_p,",,,");
-+	}
-+
-+	str_p += '\0';
-+
-+	return 0;
-+}
-+
-+//-------------------------------------------------
-+// Function to create the character line (for save)
-+//-------------------------------------------------
-+int mmo_char_tostr(char *str, struct mmo_charstatus *p, struct global_reg *reg, int reg_num) {
-+	int i,j;
-+	char *str_p = str;
- 
-+	/* We shouldn't need this anymore... [Skotlex]
- 	// on multi-map server, sometimes it's posssible that last_point become void. (reason???) We check that to not lost character at restart.
--	if (p->last_point.map[0] == '\0') {
--		memcpy(p->last_point.map, "prontera.gat", 16);
-+	if (!p->last_point.map) {
-+		p->last_point.map = mapindex_name2id(MAP_PRONTERA);
- 		p->last_point.x = 273;
- 		p->last_point.y = 354;
- 	}
--
--	str_p += sprintf(str_p, "%d\t%d,%d\t%s\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
-+	*/
-+	str_p += sprintf(str_p, "%d\t%d,%d\t%s\t%d,%d,%d\t%u,%u,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
- 	  "\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d,%d"
--	  "\t%s,%d,%d\t%s,%d,%d,%d\t",
-+		"\t%s,%d,%d\t%s,%d,%d,%d,%d,%d,%d,%d\t",
- 	  p->char_id, p->account_id, p->char_num, p->name, //
--	  p->class, p->base_level, p->job_level,
-+		p->class_, p->base_level, p->job_level,
- 	  p->base_exp, p->job_exp, p->zeny,
- 	  p->hp, p->max_hp, p->sp, p->max_sp,
- 	  p->str, p->agi, p->vit, p->int_, p->dex, p->luk,
-@@ -238,32 +386,34 @@
- 	  p->party_id, p->guild_id, p->pet_id,
- 	  p->hair, p->hair_color, p->clothes_color,
- 	  p->weapon, p->shield, p->head_top, p->head_mid, p->head_bottom,
--	  p->last_point.map, p->last_point.x, p->last_point.y, //
--	  p->save_point.map, p->save_point.x, p->save_point.y,
--	  p->partner_id);
-+		mapindex_id2name(p->last_point.map), p->last_point.x, p->last_point.y, //
-+		mapindex_id2name(p->save_point.map), p->save_point.x, p->save_point.y,
-+		p->partner_id,p->father,p->mother,p->child,p->fame);
- 	for(i = 0; i < 10; i++)
--		if (p->memo_point[i].map[0]) {
--			str_p += sprintf(str_p, "%s,%d,%d", p->memo_point[i].map, p->memo_point[i].x, p->memo_point[i].y);
-+		if (p->memo_point[i].map) {
-+			str_p += sprintf(str_p, "%s,%d,%d", mapindex_id2name(p->memo_point[i].map), p->memo_point[i].x, p->memo_point[i].y);
- 		}
- 	*(str_p++) = '\t';
- 
- 	for(i = 0; i < MAX_INVENTORY; i++)
- 		if (p->inventory[i].nameid) {
--			str_p += sprintf(str_p, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d ",
-+			str_p += sprintf(str_p,"%d,%d,%d,%d,%d,%d,%d",
- 			         p->inventory[i].id, p->inventory[i].nameid, p->inventory[i].amount, p->inventory[i].equip,
--			         p->inventory[i].identify, p->inventory[i].refine, p->inventory[i].attribute,
--			         p->inventory[i].card[0], p->inventory[i].card[1], p->inventory[i].card[2], p->inventory[i].card[3],
--			         p->inventory[i].broken);
-+				p->inventory[i].identify,p->inventory[i].refine,p->inventory[i].attribute);
-+			for(j=0; j<MAX_SLOTS; j++)
-+				str_p += sprintf(str_p,",%d",p->inventory[i].card[j]);
-+			str_p += sprintf(str_p," ");
- 		}
- 	*(str_p++) = '\t';
- 
- 	for(i = 0; i < MAX_CART; i++)
- 		if (p->cart[i].nameid) {
--			str_p += sprintf(str_p, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d ",
-+			str_p += sprintf(str_p,"%d,%d,%d,%d,%d,%d,%d",
- 			         p->cart[i].id, p->cart[i].nameid, p->cart[i].amount, p->cart[i].equip,
--			         p->cart[i].identify, p->cart[i].refine, p->cart[i].attribute,
--			         p->cart[i].card[0], p->cart[i].card[1], p->cart[i].card[2], p->cart[i].card[3],
--			         p->cart[i].broken);
-+				p->cart[i].identify,p->cart[i].refine,p->cart[i].attribute);
-+			for(j=0; j<MAX_SLOTS; j++)
-+				str_p += sprintf(str_p,",%d",p->cart[i].card[j]);
-+			str_p += sprintf(str_p," ");
- 		}
- 	*(str_p++) = '\t';
- 
-@@ -273,9 +423,9 @@
- 		}
- 	*(str_p++) = '\t';
- 
--	for(i = 0; i < p->global_reg_num; i++)
--		if (p->global_reg[i].str[0])
--			str_p += sprintf(str_p, "%s,%d ", p->global_reg[i].str, p->global_reg[i].value);
-+	for(i = 0; i < reg_num; i++)
-+		if (reg[i].str[0])
-+			str_p += sprintf(str_p, "%s,%s ", reg[i].str, reg[i].value);
- 	*(str_p++) = '\t';
- 
- 	*str_p = '\0';
-@@ -285,20 +435,62 @@
- //-------------------------------------------------------------------------
- // Function to set the character from the line (at read of characters file)
- //-------------------------------------------------------------------------
--int mmo_char_fromstr(char *str, struct mmo_charstatus *p) {
-+int mmo_char_fromstr(char *str, struct mmo_charstatus *p, struct global_reg *reg, int *reg_num) {
-+	char tmp_str[3][128]; //To avoid deleting chars with too long names.
- 	int tmp_int[256];
--	int set, next, len, i;
-+	unsigned int tmp_uint[2]; //To read exp....
-+	int set, next, len, i, j;
- 
- 	// initilialise character
- 	memset(p, '\0', sizeof(struct mmo_charstatus));
- 
--	// If it's not char structure of version 1008 and after
--	if ((set = sscanf(str, "%d\t%d,%d\t%[^\t]\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
-+	// If it's not char structure of version 1488 and after
-+	if ((set = sscanf(str, "%d\t%d,%d\t%127[^\t]\t%d,%d,%d\t%u,%u,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
-+		"\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d,%d"
-+		"\t%127[^,],%d,%d\t%127[^,],%d,%d,%d,%d,%d,%d,%d%n",
-+		&tmp_int[0], &tmp_int[1], &tmp_int[2], tmp_str[0],
-+		&tmp_int[3], &tmp_int[4], &tmp_int[5],
-+		&tmp_uint[0], &tmp_uint[1], &tmp_int[8],
-+		&tmp_int[9], &tmp_int[10], &tmp_int[11], &tmp_int[12],
-+		&tmp_int[13], &tmp_int[14], &tmp_int[15], &tmp_int[16], &tmp_int[17], &tmp_int[18],
-+		&tmp_int[19], &tmp_int[20],
-+		&tmp_int[21], &tmp_int[22], &tmp_int[23], //
-+		&tmp_int[24], &tmp_int[25], &tmp_int[26],
-+		&tmp_int[27], &tmp_int[28], &tmp_int[29],
-+		&tmp_int[30], &tmp_int[31], &tmp_int[32], &tmp_int[33], &tmp_int[34],
-+		tmp_str[1], &tmp_int[35], &tmp_int[36],
-+		tmp_str[2], &tmp_int[37], &tmp_int[38], &tmp_int[39], 
-+		&tmp_int[40], &tmp_int[41], &tmp_int[42], &tmp_int[43], &next)) != 47)
-+	{
-+		tmp_int[43] = 0;	
-+		// If it's not char structure of version 1363 and after
-+		if ((set = sscanf(str, "%d\t%d,%d\t%127[^\t]\t%d,%d,%d\t%u,%u,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
-+			"\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d,%d"
-+			"\t%127[^,],%d,%d\t%127[^,],%d,%d,%d,%d,%d,%d%n",
-+			&tmp_int[0], &tmp_int[1], &tmp_int[2], tmp_str[0], //
-+			&tmp_int[3], &tmp_int[4], &tmp_int[5],
-+			&tmp_uint[0], &tmp_uint[1], &tmp_int[8],
-+			&tmp_int[9], &tmp_int[10], &tmp_int[11], &tmp_int[12],
-+			&tmp_int[13], &tmp_int[14], &tmp_int[15], &tmp_int[16], &tmp_int[17], &tmp_int[18],
-+			&tmp_int[19], &tmp_int[20],
-+			&tmp_int[21], &tmp_int[22], &tmp_int[23], //
-+			&tmp_int[24], &tmp_int[25], &tmp_int[26],
-+			&tmp_int[27], &tmp_int[28], &tmp_int[29],
-+			&tmp_int[30], &tmp_int[31], &tmp_int[32], &tmp_int[33], &tmp_int[34],
-+			tmp_str[1], &tmp_int[35], &tmp_int[36], //
-+			tmp_str[2], &tmp_int[37], &tmp_int[38], &tmp_int[39], 
-+			&tmp_int[40], &tmp_int[41], &tmp_int[42], &next)) != 46)
-+		{
-+			tmp_int[40] = 0; // father
-+			tmp_int[41] = 0; // mother
-+			tmp_int[42] = 0; // child
-+			// If it's not char structure of version 1008 and before 1363
-+			if ((set = sscanf(str, "%d\t%d,%d\t%127[^\t]\t%d,%d,%d\t%u,%u,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
- 	   "\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d,%d"
--	   "\t%[^,],%d,%d\t%[^,],%d,%d,%d%n",
--	   &tmp_int[0], &tmp_int[1], &tmp_int[2], p->name, //
-+				"\t%127[^,],%d,%d\t%127[^,],%d,%d,%d%n",
-+				&tmp_int[0], &tmp_int[1], &tmp_int[2], tmp_str[0], //
- 	   &tmp_int[3], &tmp_int[4], &tmp_int[5],
--	   &tmp_int[6], &tmp_int[7], &tmp_int[8],
-+				&tmp_uint[0], &tmp_uint[1], &tmp_int[8],
- 	   &tmp_int[9], &tmp_int[10], &tmp_int[11], &tmp_int[12],
- 	   &tmp_int[13], &tmp_int[14], &tmp_int[15], &tmp_int[16], &tmp_int[17], &tmp_int[18],
- 	   &tmp_int[19], &tmp_int[20],
-@@ -306,16 +498,17 @@
- 	   &tmp_int[24], &tmp_int[25], &tmp_int[26],
- 	   &tmp_int[27], &tmp_int[28], &tmp_int[29],
- 	   &tmp_int[30], &tmp_int[31], &tmp_int[32], &tmp_int[33], &tmp_int[34],
--	   p->last_point.map, &tmp_int[35], &tmp_int[36], //
--	   p->save_point.map, &tmp_int[37], &tmp_int[38], &tmp_int[39], &next)) != 43) {
-+				tmp_str[1], &tmp_int[35], &tmp_int[36], //
-+				tmp_str[2], &tmp_int[37], &tmp_int[38], &tmp_int[39], &next)) != 43)
-+			{
- 		tmp_int[39] = 0; // partner id
- 		// If not char structure from version 384 to 1007
--		if ((set = sscanf(str, "%d\t%d,%d\t%[^\t]\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
-+				if ((set = sscanf(str, "%d\t%d,%d\t%127[^\t]\t%d,%d,%d\t%u,%u,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
- 		   "\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d,%d"
--		   "\t%[^,],%d,%d\t%[^,],%d,%d%n",
--		   &tmp_int[0], &tmp_int[1], &tmp_int[2], p->name, //
-+					"\t%127[^,],%d,%d\t%127[^,],%d,%d%n",
-+					&tmp_int[0], &tmp_int[1], &tmp_int[2], tmp_str[0], //
- 		   &tmp_int[3], &tmp_int[4], &tmp_int[5],
--		   &tmp_int[6], &tmp_int[7], &tmp_int[8],
-+					&tmp_uint[0], &tmp_uint[1], &tmp_int[8],
- 		   &tmp_int[9], &tmp_int[10], &tmp_int[11], &tmp_int[12],
- 		   &tmp_int[13], &tmp_int[14], &tmp_int[15], &tmp_int[16], &tmp_int[17], &tmp_int[18],
- 		   &tmp_int[19], &tmp_int[20],
-@@ -323,16 +516,17 @@
- 		   &tmp_int[24], &tmp_int[25], &tmp_int[26],
- 		   &tmp_int[27], &tmp_int[28], &tmp_int[29],
- 		   &tmp_int[30], &tmp_int[31], &tmp_int[32], &tmp_int[33], &tmp_int[34],
--		   p->last_point.map, &tmp_int[35], &tmp_int[36], //
--		   p->save_point.map, &tmp_int[37], &tmp_int[38], &next)) != 42) {
-+					tmp_str[1], &tmp_int[35], &tmp_int[36], //
-+					tmp_str[2], &tmp_int[37], &tmp_int[38], &next)) != 42)
-+				{
- 			// It's char structure of a version before 384
- 			tmp_int[26] = 0; // pet id
--			set = sscanf(str, "%d\t%d,%d\t%[^\t]\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
-+					set = sscanf(str, "%d\t%d,%d\t%127[^\t]\t%d,%d,%d\t%u,%u,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
- 			      "\t%d,%d,%d\t%d,%d\t%d,%d,%d\t%d,%d,%d,%d,%d"
--			      "\t%[^,],%d,%d\t%[^,],%d,%d%n",
--			      &tmp_int[0], &tmp_int[1], &tmp_int[2], p->name, //
-+					"\t%127[^,],%d,%d\t%127[^,],%d,%d%n",
-+					&tmp_int[0], &tmp_int[1], &tmp_int[2], tmp_str[0], //
- 			      &tmp_int[3], &tmp_int[4], &tmp_int[5],
--			      &tmp_int[6], &tmp_int[7], &tmp_int[8],
-+					&tmp_uint[0], &tmp_uint[1], &tmp_int[8],
- 			      &tmp_int[9], &tmp_int[10], &tmp_int[11], &tmp_int[12],
- 			      &tmp_int[13], &tmp_int[14], &tmp_int[15], &tmp_int[16], &tmp_int[17], &tmp_int[18],
- 			      &tmp_int[19], &tmp_int[20],
-@@ -340,8 +534,8 @@
- 			      &tmp_int[24], &tmp_int[25], //
- 			      &tmp_int[27], &tmp_int[28], &tmp_int[29],
- 			      &tmp_int[30], &tmp_int[31], &tmp_int[32], &tmp_int[33], &tmp_int[34],
--			      p->last_point.map, &tmp_int[35], &tmp_int[36], //
--			      p->save_point.map, &tmp_int[37], &tmp_int[38], &next);
-+					tmp_str[1], &tmp_int[35], &tmp_int[36], //
-+					tmp_str[2], &tmp_int[37], &tmp_int[38], &next);
- 			set += 2;
- 			//printf("char: old char data ver.1\n");
- 		// Char structure of version 1007 or older
-@@ -351,19 +545,30 @@
- 		}
- 	// Char structure of version 1008+
- 	} else {
-+				set += 3;
- 		//printf("char: new char data ver.3\n");
- 	}
--	if (set != 43)
-+		// Char structture of version 1363+
-+		} else {
-+			set++;
-+			//printf("char: new char data ver.4\n");
-+		}
-+	// Char structure of version 1488+
-+	} else {
-+		//printf("char: new char data ver.5\n");
-+	}
-+	if (set != 47)
- 		return 0;
- 
-+	memcpy(p->name, tmp_str[0], NAME_LENGTH-1); //Overflow protection [Skotlex]
- 	p->char_id = tmp_int[0];
- 	p->account_id = tmp_int[1];
- 	p->char_num = tmp_int[2];
--	p->class = tmp_int[3];
-+	p->class_ = tmp_int[3];
- 	p->base_level = tmp_int[4];
- 	p->job_level = tmp_int[5];
--	p->base_exp = tmp_int[6];
--	p->job_exp = tmp_int[7];
-+	p->base_exp = tmp_uint[0];
-+	p->job_exp = tmp_uint[1];
- 	p->zeny = tmp_int[8];
- 	p->hp = tmp_int[9];
- 	p->max_hp = tmp_int[10];
-@@ -391,31 +596,37 @@
- 	p->head_top = tmp_int[32];
- 	p->head_mid = tmp_int[33];
- 	p->head_bottom = tmp_int[34];
-+	p->last_point.map = mapindex_name2id(tmp_str[1]);
- 	p->last_point.x = tmp_int[35];
- 	p->last_point.y = tmp_int[36];
-+	p->save_point.map = mapindex_name2id(tmp_str[2]);
- 	p->save_point.x = tmp_int[37];
- 	p->save_point.y = tmp_int[38];
- 	p->partner_id = tmp_int[39];
-+	p->father = tmp_int[40];
-+	p->mother = tmp_int[41];
-+	p->child = tmp_int[42];
-+	p->fame = tmp_int[43];
- 
- 	// Some checks
- 	for(i = 0; i < char_num; i++) {
--		if (char_dat[i].char_id == p->char_id) {
--			printf("\033[1;31mmmo_auth_init: ******Error: a character has an identical id to another.\n");
--			printf("               character id #%d -> new character not readed.\n", p->char_id);
--			printf("               Character saved in log file.\033[0m\n");
-+		if (char_dat[i].status.char_id == p->char_id) {
-+			ShowError(CL_RED"mmmo_auth_init: a character has an identical id to another.\n");
-+			ShowError("               character id #%d -> new character not readed.\n", p->char_id);
-+			ShowError("               Character saved in log file."CL_RESET"\n");
- 			return -1;
--		} else if (strcmp(char_dat[i].name, p->name) == 0) {
--			printf("\033[1;31mmmo_auth_init: ******Error: character name already exists.\n");
--			printf("               character name '%s' -> new character not readed.\n", p->name);
--			printf("               Character saved in log file.\033[0m\n");
-+		} else if (strcmp(char_dat[i].status.name, p->name) == 0) {
-+			ShowError(CL_RED"mmmo_auth_init: a character name already exists.\n");
-+			ShowError("               character name '%s' -> new character not read.\n", p->name);
-+			ShowError("               Character saved in log file."CL_RESET"\n");
- 			return -2;
- 		}
- 	}
- 
- 	if (strcmpi(wisp_server_name, p->name) == 0) {
--		printf("mmo_auth_init: ******WARNING: character name has wisp server name.\n");
--		printf("               Character name '%s' = wisp server name '%s'.\n", p->name, wisp_server_name);
--		printf("               Character readed. Suggestion: change the wisp server name.\n");
-+		ShowWarning("mmo_auth_init: ******WARNING: character name has wisp server name.\n");
-+		ShowWarning("               Character name '%s' = wisp server name '%s'.\n", p->name, wisp_server_name);
-+		ShowWarning("               Character readed. Suggestion: change the wisp server name.\n");
- 		char_log("mmo_auth_init: ******WARNING: character name has wisp server name: Character name '%s' = wisp server name '%s'." RETCODE,
- 		          p->name, wisp_server_name);
- 	}
-@@ -426,8 +637,9 @@
- 	next++;
- 
- 	for(i = 0; str[next] && str[next] != '\t'; i++) {
--		if (sscanf(str+next, "%[^,],%d,%d%n", p->memo_point[i].map, &tmp_int[0], &tmp_int[1], &len) != 3)
-+		if (sscanf(str+next, "%[^,],%d,%d%n", tmp_str[0], &tmp_int[0], &tmp_int[1], &len) != 3)
- 			return -3;
-+		p->memo_point[i].map = mapindex_name2id(tmp_str[0]);
- 		p->memo_point[i].x = tmp_int[0];
- 		p->memo_point[i].y = tmp_int[1];
- 		next += len;
-@@ -438,18 +650,10 @@
- 	next++;
- 
- 	for(i = 0; str[next] && str[next] != '\t'; i++) {
--		if (sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-+		if(sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d%[0-9,-]%n",
- 		    &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
--		    &tmp_int[4], &tmp_int[5], &tmp_int[6],
--		    &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &tmp_int[11], &len) == 12) {
--			// do nothing, it's ok
--		} else if (sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
--		          &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
--		          &tmp_int[4], &tmp_int[5], &tmp_int[6],
--		          &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &len) == 11) {
--			tmp_int[11] = 0; // broken doesn't exist in this version -> 0
--		} else // invalid structure
--			return -4;
-+		      &tmp_int[4], &tmp_int[5], &tmp_int[6], tmp_str[0], &len) == 8)
-+		{
- 		p->inventory[i].id = tmp_int[0];
- 		p->inventory[i].nameid = tmp_int[1];
- 		p->inventory[i].amount = tmp_int[2];
-@@ -457,31 +661,23 @@
- 		p->inventory[i].identify = tmp_int[4];
- 		p->inventory[i].refine = tmp_int[5];
- 		p->inventory[i].attribute = tmp_int[6];
--		p->inventory[i].card[0] = tmp_int[7];
--		p->inventory[i].card[1] = tmp_int[8];
--		p->inventory[i].card[2] = tmp_int[9];
--		p->inventory[i].card[3] = tmp_int[10];
--		p->inventory[i].broken  = tmp_int[11];
-+
-+			for(j = 0; j < MAX_SLOTS && tmp_str[0] && sscanf(tmp_str[0], ",%d%[0-9,-]",&tmp_int[0], tmp_str[0]) > 0; j++)
-+				p->inventory[i].card[j] = tmp_int[0];
-+
- 		next += len;
- 		if (str[next] == ' ')
- 			next++;
-+		} else // invalid structure
-+			return -4;
- 	}
--
- 	next++;
- 
- 	for(i = 0; str[next] && str[next] != '\t'; i++) {
--		if (sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
--		    &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
--		    &tmp_int[4], &tmp_int[5], &tmp_int[6],
--		    &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &tmp_int[11], &len) == 12) {
--			// do nothing, it's ok
--		} else if (sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-+		if(sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d%[0-9,-]%n",
- 		           &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
--		           &tmp_int[4], &tmp_int[5], &tmp_int[6],
--		           &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &len) == 11) {
--			tmp_int[11] = 0; // broken doesn't exist in this version -> 0
--		} else // invalid structure
--			return -5;
-+		      &tmp_int[4], &tmp_int[5], &tmp_int[6], tmp_str[0], &len) == 8)
-+		{
- 		p->cart[i].id = tmp_int[0];
- 		p->cart[i].nameid = tmp_int[1];
- 		p->cart[i].amount = tmp_int[2];
-@@ -489,14 +685,15 @@
- 		p->cart[i].identify = tmp_int[4];
- 		p->cart[i].refine = tmp_int[5];
- 		p->cart[i].attribute = tmp_int[6];
--		p->cart[i].card[0] = tmp_int[7];
--		p->cart[i].card[1] = tmp_int[8];
--		p->cart[i].card[2] = tmp_int[9];
--		p->cart[i].card[3] = tmp_int[10];
--		p->cart[i].broken = tmp_int[11];
-+			
-+			for(j = 0; j < MAX_SLOTS && tmp_str && sscanf(tmp_str[0], ",%d%[0-9,-]",&tmp_int[0], tmp_str[0]) > 0; j++)
-+				p->cart[i].card[j] = tmp_int[0];
-+			
- 		next += len;
- 		if (str[next] == ' ')
- 			next++;
-+		} else // invalid structure
-+			return -5;
- 	}
- 
- 	next++;
-@@ -514,11 +711,11 @@
- 	next++;
- 
- 	for(i = 0; str[next] && str[next] != '\t' && str[next] != '\n' && str[next] != '\r'; i++) { // global_reg�����ȑO��athena.txt�݊��̂��߈ꉞ'\n'�`�F�b�N
--		if (sscanf(str + next, "%[^,],%d%n", p->global_reg[i].str, &p->global_reg[i].value, &len) != 2) {
-+		if (sscanf(str + next, "%[^,],%[^ ] %n", reg[i].str, reg[i].value, &len) != 2) { 
- 			// because some scripts are not correct, the str can be "". So, we must check that.
- 			// If it's, we must not refuse the character, but just this REG value.
- 			// Character line will have something like: nov_2nd_cos,9 ,9 nov_1_2_cos_c,1 (here, ,9 is not good)
--			if (str[next] == ',' && sscanf(str + next, ",%d%n", &p->global_reg[i].value, &len) == 1)
-+			if (str[next] == ',' && sscanf(str + next, ",%[^ ] %n", reg[i].value, &len) == 1) 
- 				i--;
- 			else
- 				return -7;
-@@ -527,39 +724,127 @@
- 		if (str[next] == ' ')
- 			next++;
- 	}
--	p->global_reg_num = i;
-+	*reg_num = i;
- 
- 	return 1;
- }
-+//---------------------------------
-+// Function to read friend list
-+//---------------------------------
-+
-+int parse_friend_txt(struct mmo_charstatus *p)
-+{
-+	char line[1024], temp[1024];
-+	int pos = 0, count = 0, next;
-+	int i,len;
-+	FILE *fp;
-+
-+	// Open the file and look for the ID
-+	fp = fopen(friends_txt, "r");
-+
-+	if(fp == NULL)
-+		return -1;
-+	
-+	while(fgets(line, sizeof(line)-1, fp)) {
-+
-+		if(line[0] == '/' && line[1] == '/')
-+			continue;
-+		if (sscanf(line, "%d%n",&i, &pos) < 1 || i != p->char_id)
-+			continue; //Not this line...
-+		//Read friends
-+		len = strlen(line);
-+		next = pos;
-+		for (count = 0; next < len && count < MAX_FRIENDS; count++)
-+		{ //Read friends.
-+			if (sscanf(line+next, ",%d,%d,%23[^,]%n",&p->friends[count].account_id,&p->friends[count].char_id, p->friends[count].name, &pos) < 3)
-+			{	//Invalid friend?
-+				memset(&p->friends[count], 0, sizeof(p->friends[count]));
-+				break;
-+			}
-+			next+=pos;
-+			//What IF the name contains a comma? while the next field is not a 
-+			//number, we assume it belongs to the current name. [Skotlex]
-+			//NOTE: Of course, this will fail if someone sets their name to something like
-+			//Bob,2005 but... meh, it's the problem of parsing a text file (encasing it in "
-+			//won't do as quotes are also valid name chars!)
-+			while(next < len && sscanf(line+next, ",%23[^,]%n", temp, &len) > 0)
-+			{
-+				if (atoi(temp)) 
-+				{	//We read the next friend, just continue.
-+					break;
-+				} else {	//Append the name.
-+					next+=len;
-+					if (strlen(p->friends[count].name) + strlen(temp) +1 < NAME_LENGTH)
-+					{
-+						strcat(p->friends[count].name, ",");
-+						strcat(p->friends[count].name, temp);
-+					}
-+				}
-+			} //End Guess Block
-+		} //Friend's for.
-+		break; //Finished reading.
-+	}
-+	/*
-+		//Character names must not exceed the 23+\0 limit. [Skotlex]
-+		sscanf(line, "%d,%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23[^,],%d,%23s",&cid,
-+		&temp[0],p->friend_name[0],
-+		&temp[1],p->friend_name[1],
-+		&temp[2],p->friend_name[2],
-+		&temp[3],p->friend_name[3],
-+		&temp[4],p->friend_name[4],
-+		&temp[5],p->friend_name[5],
-+		&temp[6],p->friend_name[6],
-+		&temp[7],p->friend_name[7],
-+		&temp[8],p->friend_name[8],
-+		&temp[9],p->friend_name[9],
-+		&temp[10],p->friend_name[10],
-+		&temp[11],p->friend_name[11],
-+		&temp[12],p->friend_name[12],
-+		&temp[13],p->friend_name[13],
-+		&temp[14],p->friend_name[14],
-+		&temp[15],p->friend_name[15],
-+		&temp[16],p->friend_name[16],
-+		&temp[17],p->friend_name[17],
-+		&temp[18],p->friend_name[18],
-+		&temp[19],p->friend_name[19]);
-+		if (cid == p->char_id)
-+			break;
-+	}
-+	// No register of friends list
-+	if (cid == 0) {
-+		fclose(fp);
-+		return 0;
-+	}
-+
-+	// Fill in the list
-+
-+	for (i=0; i<MAX_FRIENDS; i++)
-+		p->friend_id[i] = temp[i];
-+*/
-+	fclose(fp);
-+	return count;
-+}
- 
- //---------------------------------
- // Function to read characters file
- //---------------------------------
- int mmo_char_init(void) {
- 	char line[65536];
--	int i;
- 	int ret, line_count;
- 	FILE *fp;
- 
- 	char_max = 256;
--	char_dat = calloc(sizeof(struct mmo_charstatus) * 256, 1);
-+	char_dat = (struct character_data*)aCalloc(sizeof(struct character_data) * 256, 1);
- 	if (!char_dat) {
--		printf("out of memory: mmo_char_init (calloc of char_dat).\n");
--		exit(1);
--	}
--	online_chars = calloc(sizeof(int) * 256, 1);
--	if (!online_chars) {
--		printf("out of memory: mmo_char_init (calloc of online_chars).\n");
-+		ShowFatalError("out of memory: mmo_char_init (calloc of char_dat).\n");
- 		exit(1);
- 	}
--	for(i = 0; i < char_max; i++)
--		online_chars[i] = -1;
--
- 	char_num = 0;
- 
- 	fp = fopen(char_txt, "r");
-+
- 	if (fp == NULL) {
--		printf("Characters file not found: %s.\n", char_txt);
-+		ShowError("Characters file not found: %s.\n", char_txt);
- 		char_log("Characters file not found: %s." RETCODE, char_txt);
- 		char_log("Id for the next created character: %d." RETCODE, char_id_count);
- 		return 0;
-@@ -583,30 +868,26 @@
- 
- 		if (char_num >= char_max) {
- 			char_max += 256;
--			char_dat = realloc(char_dat, sizeof(struct mmo_charstatus) * char_max);
-+			char_dat = (struct character_data*)aRealloc(char_dat, sizeof(struct character_data) * char_max);
- 			if (!char_dat) {
--				printf("Out of memory: mmo_char_init (realloc of char_dat).\n");
-+				ShowFatalError("Out of memory: mmo_char_init (realloc of char_dat).\n");
- 				char_log("Out of memory: mmo_char_init (realloc of char_dat)." RETCODE);
- 				exit(1);
- 			}
--			online_chars = realloc(online_chars, sizeof(int) * char_max);
--			if (!online_chars) {
--				printf("Out of memory: mmo_char_init (realloc of online_chars).\n");
--				char_log("Out of memory: mmo_char_init (realloc of online_chars)." RETCODE);
--				exit(1);
--			}
--			for(i = char_max - 256; i < char_max; i++)
--				online_chars[i] = -1;
- 		}
- 
--		ret = mmo_char_fromstr(line, &char_dat[char_num]);
-+		ret = mmo_char_fromstr(line, &char_dat[char_num].status, char_dat[char_num].global, &char_dat[char_num].global_num);
-+
-+		// Initialize friends list
-+		parse_friend_txt(&char_dat[char_num].status);  // Grab friends for the character
-+
- 		if (ret > 0) { // negative value or zero for errors
--			if (char_dat[char_num].char_id >= char_id_count)
--				char_id_count = char_dat[char_num].char_id + 1;
-+			if (char_dat[char_num].status.char_id >= char_id_count)
-+				char_id_count = char_dat[char_num].status.char_id + 1;
- 			char_num++;
- 		} else {
--			printf("mmo_char_init: in characters file, unable to read the line #%d.\n", line_count);
--			printf("               -> Character saved in log file.\n");
-+			ShowError("mmo_char_init: in characters file, unable to read the line #%d.\n", line_count);
-+			ShowError("               -> Character saved in log file.\n");
- 			switch (ret) {
- 			case -1:
- 				char_log("Duplicate character id in the next character line (character not readed):" RETCODE);
-@@ -639,13 +920,13 @@
- 	fclose(fp);
- 
- 	if (char_num == 0) {
--		printf("mmo_char_init: No character found in %s.\n", char_txt);
-+		ShowNotice("mmo_char_init: No character found in %s.\n", char_txt);
- 		char_log("mmo_char_init: No character found in %s." RETCODE, char_txt);
- 	} else if (char_num == 1) {
--		printf("mmo_char_init: 1 character read in %s.\n", char_txt);
-+		ShowStatus("mmo_char_init: 1 character read in %s.\n", char_txt);
- 		char_log("mmo_char_init: 1 character read in %s." RETCODE, char_txt);
- 	} else {
--		printf("mmo_char_init: %d characters read in %s.\n", char_num, char_txt);
-+		ShowStatus("mmo_char_init: %d characters read in %s.\n", char_num, char_txt);
- 		char_log("mmo_char_init: %d characters read in %s." RETCODE, char_num, char_txt);
- 	}
- 
-@@ -658,20 +939,21 @@
- // Function to save characters in files (speed up by [Yor])
- //---------------------------------------------------------
- void mmo_char_sync(void) {
--	char line[65536];
-+	char line[65536],f_line[1024];
- 	int i, j, k;
- 	int lock;
--	FILE *fp;
--	int id[char_num];
-+	FILE *fp,*f_fp;
-+	//int *id = (int *) aMalloc(sizeof(int) * char_num);
-+	CREATE_BUFFER(id, int, char_num);
- 
- 	// Sorting before save (by [Yor])
- 	for(i = 0; i < char_num; i++) {
- 		id[i] = i;
- 		for(j = 0; j < i; j++) {
--			if ((char_dat[i].account_id < char_dat[id[j]].account_id) ||
-+			if ((char_dat[i].status.account_id < char_dat[id[j]].status.account_id) ||
- 			    // if same account id, we sort by slot.
--			    (char_dat[i].account_id == char_dat[id[j]].account_id &&
--			     char_dat[i].char_num < char_dat[id[j]].char_num)) {
-+			    (char_dat[i].status.account_id == char_dat[id[j]].status.account_id &&
-+			     char_dat[i].status.char_num < char_dat[id[j]].status.char_num)) {
- 				for(k = i; k > j; k--)
- 					id[k] = id[k-1];
- 				id[j] = i; // id[i]
-@@ -683,12 +965,12 @@
- 	// Data save
- 	fp = lock_fopen(char_txt, &lock);
- 	if (fp == NULL) {
--		printf("WARNING: Server can't not save characters.\n");
-+		ShowWarning("Server can't not save characters.\n");
- 		char_log("WARNING: Server can't not save characters." RETCODE);
- 	} else {
- 		for(i = 0; i < char_num; i++) {
- 			// create only once the line, and save it in the 2 files (it's speeder than repeat twice the loop and create twice the line)
--			mmo_char_tostr(line, &char_dat[id[i]]); // use of sorted index
-+			mmo_char_tostr(line, &char_dat[id[i]].status, char_dat[id[i]].global, char_dat[id[i]].global_num); // use of sorted index
- 				fprintf(fp, "%s" RETCODE, line);
- 		}
- 		fprintf(fp, "%d\t%%newid%%" RETCODE, char_id_count);
-@@ -699,19 +981,33 @@
- 	if (backup_txt_flag) { // The backup_txt file was created because char deletion bug existed. Now it's finish and that take a lot of time to create a second file when there are a lot of characters. => option By [Yor]
- 		fp = lock_fopen(backup_txt, &lock);
- 		if (fp == NULL) {
--			printf("WARNING: Server can't not create backup of characters file.\n");
-+			ShowWarning("Server can't not create backup of characters file.\n");
- 			char_log("WARNING: Server can't not create backup of characters file." RETCODE);
-+			//aFree(id); // free up the memory before leaving -.- [Ajarn]
-+			DELETE_BUFFER(id);
- 			return;
- 		}
- 		for(i = 0; i < char_num; i++) {
- 			// create only once the line, and save it in the 2 files (it's speeder than repeat twice the loop and create twice the line)
--			mmo_char_tostr(line, &char_dat[id[i]]); // use of sorted index
-+			mmo_char_tostr(line, &char_dat[id[i]].status,char_dat[id[i]].global, char_dat[id[i]].global_num); // use of sorted index
- 				fprintf(fp, "%s" RETCODE, line);
- 		}
- 		fprintf(fp, "%d\t%%newid%%" RETCODE, char_id_count);
- 		lock_fclose(fp, backup_txt, &lock);
- 	}
- 
-+	// Friends List data save (davidsiaw)
-+	f_fp = lock_fopen(friends_txt, &lock);
-+	for(i = 0; i < char_num; i++) {
-+		mmo_friends_list_data_str(f_line, &char_dat[id[i]].status);
-+		fprintf(f_fp, "%s" RETCODE, f_line);
-+	}
-+
-+	lock_fclose(f_fp, friends_txt, &lock);
-+
-+	//aFree(id);
-+	DELETE_BUFFER(id);
-+
- 	return;
- }
- 
-@@ -719,6 +1015,8 @@
- // Function to save (in a periodic way) datas in files
- //----------------------------------------------------
- int mmo_char_sync_timer(int tid, unsigned int tick, int id, int data) {
-+	if (save_log)
-+		ShowInfo("Saving all files...\n");
- 	mmo_char_sync();
- 	inter_save();
- 	return 0;
-@@ -728,21 +1026,33 @@
- // Function to create a new character
- //-----------------------------------
- int make_new_char(int fd, unsigned char *dat) {
--	int i, j;
-+	int i;
- 	struct char_session_data *sd;
-+	char name[NAME_LENGTH];
- 
--	sd = session[fd]->session_data;
-+	sd = (struct char_session_data*)session[fd]->session_data;
- 
- 	// remove control characters from the name
--	dat[23] = '\0';
--	if (remove_control_chars(dat)) {
-+	strncpy(name, dat, NAME_LENGTH);
-+	name[NAME_LENGTH-1] = '\0'; //Trunc name to max possible value (23)
-+	
-+	trim(name,TRIM_CHARS); //Trim character name. [Skotlex]
-+	
-+	//check name != main chat nick [LuzZza]
-+	if(strcmpi(name, main_chat_nick) == 0) {
-+		char_log("Create char failed (%d): this nick (%s) reserved for mainchat messages." RETCODE,
-+			sd->account_id, name);
-+		return -1;
-+	}	
-+	
-+	if (remove_control_chars((unsigned char *)name)) {
- 		char_log("Make new char error (control char received in the name): (connection #%d, account: %d)." RETCODE,
- 		         fd, sd->account_id);
- 		return -1;
- 	}
- 
- 	// check lenght of character name
--	if (strlen(dat) < 4) {
-+	if (strlen(name) < 4) {
- 		char_log("Make new char error (character name too small): (connection #%d, account: %d, name: '%s')." RETCODE,
- 		         fd, sd->account_id, dat);
- 		return -1;
-@@ -750,15 +1060,15 @@
- 
- 	// Check Authorised letters/symbols in the name of the character
- 	if (char_name_option == 1) { // only letters/symbols in char_name_letters are authorised
--		for (i = 0; dat[i]; i++)
--			if (strchr(char_name_letters, dat[i]) == NULL) {
-+		for (i = 0;  i < NAME_LENGTH && name[i]; i++)
-+			if (strchr(char_name_letters, name[i]) == NULL) {
- 				char_log("Make new char error (invalid letter in the name): (connection #%d, account: %d), name: %s, invalid letter: %c." RETCODE,
--				         fd, sd->account_id, dat, dat[i]);
-+				         fd, sd->account_id, name, name[i]);
- 				return -1;
- 			}
- 	} else if (char_name_option == 2) { // letters/symbols in char_name_letters are forbidden
--		for (i = 0; dat[i]; i++)
--			if (strchr(char_name_letters, dat[i]) != NULL) {
-+		for (i = 0;  i < NAME_LENGTH && name[i]; i++)
-+			if (strchr(char_name_letters, name[i]) != NULL) {
- 				char_log("Make new char error (invalid letter in the name): (connection #%d, account: %d), name: %s, invalid letter: %c." RETCODE,
- 				         fd, sd->account_id, dat, dat[i]);
- 				return -1;
-@@ -767,8 +1077,8 @@
- 
- 	if (dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29] != 5*6 || // stats
- 	    dat[30] >= 9 || // slots (dat[30] can not be negativ)
--	    dat[33] <= 0 || dat[33] >= 20 || // hair style
--	    dat[31] >= 12) { // hair color (dat[31] can not be negativ)
-+	    dat[33] <= 0 || dat[33] >= 24 || // hair style
-+	    dat[31] >= 9) { // hair color (dat[31] can not be negativ)
- 		char_log("Make new char error (invalid values): (connection #%d, account: %d) slot %d, name: %s, stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d" RETCODE,
- 		         fd, sd->account_id, dat[30], dat, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
- 		return -1;
-@@ -781,98 +1091,96 @@
- 			         fd, sd->account_id, dat[30], dat, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
- 			return -1;
- 		}
-+	} // now we know that every stat has proper value but we have to check if str/int agi/luk vit/dex pairs are correct
-+
-+	if( ((dat[24]+dat[27]) > 10) || ((dat[25]+dat[29]) > 10) || ((dat[26]+dat[28]) > 10) ) {
-+		if (log_char) {
-+			char_log("Make new char error (invalid stat value): (connection #%d, account: %d) slot %d, name: %s, stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d" RETCODE,
-+			         fd, sd->account_id, dat[30], dat, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
-+			return -1;
- 	}
-+	} // now when we have passed all stat checks
- 
- 	for(i = 0; i < char_num; i++) {
--		if ((name_ignoring_case != 0 && strcmp(char_dat[i].name, dat) == 0) ||
--			(name_ignoring_case == 0 && strcmpi(char_dat[i].name, dat) == 0)) {
-+		if ((name_ignoring_case != 0 && strncmp(char_dat[i].status.name, name, NAME_LENGTH) == 0) ||
-+			(name_ignoring_case == 0 && strncmpi(char_dat[i].status.name, name, NAME_LENGTH) == 0)) {
- 			char_log("Make new char error (name already exists): (connection #%d, account: %d) slot %d, name: %s (actual name of other char: %d), stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d." RETCODE,
--			         fd, sd->account_id, dat[30], dat, char_dat[i].name, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
-+			         fd, sd->account_id, dat[30], dat, char_dat[i].status.name, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
- 			return -1;
- 		}
--		if (char_dat[i].account_id == sd->account_id && char_dat[i].char_num == dat[30]) {
-+		if (char_dat[i].status.account_id == sd->account_id && char_dat[i].status.char_num == dat[30]) {
- 			char_log("Make new char error (slot already used): (connection #%d, account: %d) slot %d, name: %s (actual name of other char: %d), stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d." RETCODE,
--			         fd, sd->account_id, dat[30], dat, char_dat[i].name, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
-+			         fd, sd->account_id, dat[30], dat, char_dat[i].status.name, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
- 			return -1;
- 		}
- 	}
- 
--	if (strcmp(wisp_server_name, dat) == 0) {
-+	if (strcmp(wisp_server_name, name) == 0) {
- 		char_log("Make new char error (name used is wisp name for server): (connection #%d, account: %d) slot %d, name: %s (actual name of other char: %d), stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d." RETCODE,
--		         fd, sd->account_id, dat[30], dat, char_dat[i].name, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
-+		         fd, sd->account_id, dat[30], name, char_dat[i].status.name, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
- 		return -1;
- 	}
- 
- 	if (char_num >= char_max) {
- 		char_max += 256;
--		char_dat = realloc(char_dat, sizeof(struct mmo_charstatus) * char_max);
-+		char_dat = (struct character_data*)aRealloc(char_dat, sizeof(struct character_data) * char_max);
- 		if (!char_dat) {
--			printf("Out of memory: make_new_char (realloc of char_dat).\n");
-+			ShowFatalError("Out of memory: make_new_char (realloc of char_dat).\n");
- 			char_log("Out of memory: make_new_char (realloc of char_dat)." RETCODE);
- 			exit(1);
- 		}
--		online_chars = realloc(online_chars, sizeof(int) * char_max);
--		if (!online_chars) {
--			printf("Out of memory: make_new_char (realloc of online_chars).\n");
--			char_log("Out of memory: make_new_char (realloc of online_chars)." RETCODE);
--			exit(1);
--		}
--		for(j = char_max - 256; j < char_max; j++)
--			online_chars[j] = -1;
- 	}
- 
- 	char_log("Creation of New Character: (connection #%d, account: %d) slot %d, character Name: %s, stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d." RETCODE,
--	         fd, sd->account_id, dat[30], dat, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
-+	         fd, sd->account_id, dat[30], name, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33], dat[31]);
- 
--	memset(&char_dat[i], 0, sizeof(struct mmo_charstatus));
-+	memset(&char_dat[i], 0, sizeof(struct character_data));
- 
--	char_dat[i].char_id = char_id_count++;
--	char_dat[i].account_id = sd->account_id;
--	char_dat[i].char_num = dat[30];
--	strcpy(char_dat[i].name, dat);
--	char_dat[i].class = 0;
--	char_dat[i].base_level = 1;
--	char_dat[i].job_level = 1;
--	char_dat[i].base_exp = 0;
--	char_dat[i].job_exp = 0;
--	char_dat[i].zeny = start_zeny;
--	char_dat[i].str = dat[24];
--	char_dat[i].agi = dat[25];
--	char_dat[i].vit = dat[26];
--	char_dat[i].int_ = dat[27];
--	char_dat[i].dex = dat[28];
--	char_dat[i].luk = dat[29];
--	char_dat[i].max_hp = 40 * (100 + char_dat[i].vit) / 100;
--	char_dat[i].max_sp = 11 * (100 + char_dat[i].int_) / 100;
--	char_dat[i].hp = char_dat[i].max_hp;
--	char_dat[i].sp = char_dat[i].max_sp;
--	char_dat[i].status_point = 0;
--	char_dat[i].skill_point = 0;
--	char_dat[i].option = 0;
--	char_dat[i].karma = 0;
--	char_dat[i].manner = 0;
--	char_dat[i].party_id = 0;
--	char_dat[i].guild_id = 0;
--	char_dat[i].hair = dat[33];
--	char_dat[i].hair_color = dat[31];
--	char_dat[i].clothes_color = 0;
--	char_dat[i].inventory[0].nameid = start_weapon; // Knife
--	char_dat[i].inventory[0].amount = 1;
--	char_dat[i].inventory[0].equip = 0x02;
--	char_dat[i].inventory[0].identify = 1;
--	char_dat[i].inventory[0].broken = 0;
--	char_dat[i].inventory[1].nameid = start_armor; // Cotton Shirt
--	char_dat[i].inventory[1].amount = 1;
--	char_dat[i].inventory[1].equip = 0x10;
--	char_dat[i].inventory[1].identify = 1;
--	char_dat[i].inventory[1].broken = 0;
--	char_dat[i].weapon = 1;
--	char_dat[i].shield = 0;
--	char_dat[i].head_top = 0;
--	char_dat[i].head_mid = 0;
--	char_dat[i].head_bottom = 0;
--	memcpy(&char_dat[i].last_point, &start_point, sizeof(start_point));
--	memcpy(&char_dat[i].save_point, &start_point, sizeof(start_point));
-+	char_dat[i].status.char_id = char_id_count++;
-+	char_dat[i].status.account_id = sd->account_id;
-+	char_dat[i].status.char_num = dat[30];
-+	strcpy(char_dat[i].status.name,name);
-+	char_dat[i].status.class_ = 0;
-+	char_dat[i].status.base_level = 1;
-+	char_dat[i].status.job_level = 1;
-+	char_dat[i].status.base_exp = 0;
-+	char_dat[i].status.job_exp = 0;
-+	char_dat[i].status.zeny = start_zeny;
-+	char_dat[i].status.str = dat[24];
-+	char_dat[i].status.agi = dat[25];
-+	char_dat[i].status.vit = dat[26];
-+	char_dat[i].status.int_ = dat[27];
-+	char_dat[i].status.dex = dat[28];
-+	char_dat[i].status.luk = dat[29];
-+	char_dat[i].status.max_hp = 40 * (100 + char_dat[i].status.vit) / 100;
-+	char_dat[i].status.max_sp = 11 * (100 + char_dat[i].status.int_) / 100;
-+	char_dat[i].status.hp = char_dat[i].status.max_hp;
-+	char_dat[i].status.sp = char_dat[i].status.max_sp;
-+	char_dat[i].status.status_point = 0;
-+	char_dat[i].status.skill_point = 0;
-+	char_dat[i].status.option = 0;
-+	char_dat[i].status.karma = 0;
-+	char_dat[i].status.manner = 0;
-+	char_dat[i].status.party_id = 0;
-+	char_dat[i].status.guild_id = 0;
-+	char_dat[i].status.hair = dat[33];
-+	char_dat[i].status.hair_color = dat[31];
-+	char_dat[i].status.clothes_color = 0;
-+	char_dat[i].status.inventory[0].nameid = start_weapon; // Knife
-+	char_dat[i].status.inventory[0].amount = 1;
-+	char_dat[i].status.inventory[0].equip = 0x02;
-+	char_dat[i].status.inventory[0].identify = 1;
-+	char_dat[i].status.inventory[1].nameid = start_armor; // Cotton Shirt
-+	char_dat[i].status.inventory[1].amount = 1;
-+	char_dat[i].status.inventory[1].equip = 0x10;
-+	char_dat[i].status.inventory[1].identify = 1;
-+	char_dat[i].status.weapon = 1;
-+	char_dat[i].status.shield = 0;
-+	char_dat[i].status.head_top = 0;
-+	char_dat[i].status.head_mid = 0;
-+	char_dat[i].status.head_bottom = 0;
-+	memcpy(&char_dat[i].status.last_point, &start_point, sizeof(start_point));
-+	memcpy(&char_dat[i].status.save_point, &start_point, sizeof(start_point));
- 	char_num++;
- 
- 	mmo_char_sync();
-@@ -882,8 +1190,8 @@
- //----------------------------------------------------
- // This function return the name of the job (by [Yor])
- //----------------------------------------------------
--char * job_name(int class) {
--	switch (class) {
-+char * job_name(int class_) {
-+	switch (class_) {
- 	case 0:    return "Novice";
- 	case 1:    return "Swordsman";
- 	case 2:    return "Mage";
-@@ -957,108 +1265,138 @@
- 	return "Unknown Job";
- }
- 
--//-------------------------------------------------------------
--// Function to create the online files (txt and html). by [Yor]
--//-------------------------------------------------------------
--void create_online_files(void) {
--	int i, j, k, l; // for loops
--	int players;    // count the number of players
--	FILE *fp;       // for the txt file
--	FILE *fp2;      // for the html file
--	char temp[256];       // to prepare what we must display
--	time_t time_server;   // for number of seconds
--	struct tm *datetime;  // variable for time in structure ->tm_mday, ->tm_sec, ...
--	int id[char_num];
--
--	if (online_display_option == 0) // we display nothing, so return
--		return;
-+static int create_online_files_sub(DBKey key, void* data, va_list va)
-+{
-+	struct online_char_data *character;
-+	int* players;
-+	int *id;
-+	int j,k,l;
-+	character = (struct online_char_data*) data;
-+	players = va_arg(va, int*);
-+	id = va_arg(va, int*);
- 
--	//char_log("Creation of online players files." RETCODE);
-+	// check if map-server is online
-+	if (character->server == -1 || character->char_id == -1) { //Character not currently online.
-+		return -1;
-+	}
- 
--	// Get number of online players, id of each online players
--	players = 0;
--	// sort online characters.
--	for(i = 0; i < char_num; i++) {
--		if (online_chars[i] != -1) {
--			id[players] = i;
-+	j = character->server;
-+	if (server_fd[j] < 0) {
-+		server[j].users = 0;
-+		if (kick_on_disconnect)
-+		{
-+			character->char_id = -1;
-+			character->server = -1;
-+		}
-+		return -1;
-+	}
-+	// search position of character in char_dat and sort online characters.
-+	for(j = 0; j < char_num; j++) {
-+		if (char_dat[j].status.char_id != character->char_id)
-+			continue;
-+		id[*players] = j;
- 			// use sorting option
- 			switch (online_sorting_option) {
- 			case 1: // by name (without case sensitive)
--			  {
--				char *p_name = char_dat[i].name; //speed up sorting when there are a lot of players. But very rarely players have same name.
--				for(j = 0; j < players; j++)
--					if (stricmp(p_name, char_dat[id[j]].name) < 0 ||
-+			for(k = 0; k < *players; k++)
-+				if (stricmp(char_dat[j].status.name, char_dat[id[k]].status.name) < 0 ||
- 					   // if same name, we sort with case sensitive.
--					   (stricmp(p_name, char_dat[id[j]].name) == 0 &&
--					    strcmp(p_name, char_dat[id[j]].name) < 0)) {
--						for(k = players; k > j; k--)
--							id[k] = id[k-1];
--						id[j] = i; // id[players]
-+					(stricmp(char_dat[j].status.name, char_dat[id[k]].status.name) == 0 &&
-+					 strcmp(char_dat[j].status.name, char_dat[id[k]].status.name) < 0)) {
-+					for(l = *players; l > k; l--)
-+						id[l] = id[l-1];
-+					id[k] = j; // id[*players]
- 						break;
- 					}
--			  }
- 				break;
- 			case 2: // by zeny
--				for(j = 0; j < players; j++)
--					if (char_dat[i].zeny < char_dat[id[j]].zeny ||
-+			for(k = 0; k < *players; k++)
-+				if (char_dat[j].status.zeny < char_dat[id[k]].status.zeny ||
- 					   // if same number of zenys, we sort by name.
--					   (char_dat[i].zeny == char_dat[id[j]].zeny &&
--					    stricmp(char_dat[i].name, char_dat[id[j]].name) < 0)) {
--						for(k = players; k > j; k--)
--							id[k] = id[k-1];
--						id[j] = i; // id[players]
-+					(char_dat[j].status.zeny == char_dat[id[k]].status.zeny &&
-+					 stricmp(char_dat[j].status.name, char_dat[id[k]].status.name) < 0)) {
-+					for(l = *players; l > k; l--)
-+						id[l] = id[l-1];
-+					id[k] = j; // id[*players]
- 						break;
- 					}
- 				break;
- 			case 3: // by base level
--				for(j = 0; j < players; j++)
--					if (char_dat[i].base_level < char_dat[id[j]].base_level ||
-+			for(k = 0; k < *players; k++)
-+				if (char_dat[j].status.base_level < char_dat[id[k]].status.base_level ||
- 					   // if same base level, we sort by base exp.
--					   (char_dat[i].base_level == char_dat[id[j]].base_level &&
--					    char_dat[i].base_exp < char_dat[id[j]].base_exp)) {
--						for(k = players; k > j; k--)
--							id[k] = id[k-1];
--						id[j] = i; // id[players]
-+					(char_dat[j].status.base_level == char_dat[id[k]].status.base_level &&
-+					 char_dat[j].status.base_exp < char_dat[id[k]].status.base_exp)) {
-+					for(l = *players; l > k; l--)
-+						id[l] = id[l-1];
-+					id[k] = j; // id[*players]
- 						break;
- 					}
- 				break;
- 			case 4: // by job (and job level)
--				for(j = 0; j < players; j++)
--					if (char_dat[i].class < char_dat[id[j]].class ||
-+			for(k = 0; k < *players; k++)
-+				if (char_dat[j].status.class_ < char_dat[id[k]].status.class_ ||
- 					   // if same job, we sort by job level.
--					   (char_dat[i].class == char_dat[id[j]].class &&
--					    char_dat[i].job_level < char_dat[id[j]].job_level) ||
-+					(char_dat[j].status.class_ == char_dat[id[k]].status.class_ &&
-+					 char_dat[j].status.job_level < char_dat[id[k]].status.job_level) ||
- 					   // if same job and job level, we sort by job exp.
--					   (char_dat[i].class == char_dat[id[j]].class &&
--					    char_dat[i].job_level == char_dat[id[j]].job_level &&
--					    char_dat[i].job_exp < char_dat[id[j]].job_exp)) {
--						for(k = players; k > j; k--)
--							id[k] = id[k-1];
--						id[j] = i; // id[players]
-+					(char_dat[j].status.class_ == char_dat[id[k]].status.class_ &&
-+					 char_dat[j].status.job_level == char_dat[id[k]].status.job_level &&
-+					 char_dat[j].status.job_exp < char_dat[id[k]].status.job_exp)) {
-+					for(l = *players; l > k; l--)
-+						id[l] = id[l-1];
-+					id[k] = j; // id[*players]
- 						break;
- 					}
- 				break;
- 			case 5: // by location map name
- 			  {
--				int cpm_result; // A lot of player maps are identical. So, test if done often twice.
--				for(j = 0; j < players; j++)
--					if ((cpm_result = strcmp(char_dat[i].last_point.map, char_dat[id[j]].last_point.map)) < 0 || // no map are identical and with upper cases (not use stricmp)
-+			const char *map1, *map2;
-+			map1 = mapindex_id2name(char_dat[j].status.last_point.map);
-+			
-+			for(k = 0; k < *players; k++) {
-+				map2 = mapindex_id2name(char_dat[id[k]].status.last_point.map);
-+				if (!map1 || !map2 || //Avoid sorting if either one failed to resolve.
-+					stricmp(map1, map2) < 0 ||
- 					   // if same map name, we sort by name.
--					   (cpm_result == 0 &&
--					    stricmp(char_dat[i].name, char_dat[id[j]].name) < 0)) {
--						for(k = players; k > j; k--)
--							id[k] = id[k-1];
--						id[j] = i; // id[players]
-+					(stricmp(map1, map2) == 0 &&
-+					 stricmp(char_dat[j].status.name, char_dat[id[k]].status.name) < 0)) {
-+					for(l = *players; l > k; l--)
-+						id[l] = id[l-1];
-+					id[k] = j; // id[*players]
- 						break;
- 					}
- 			  }
-+		}
- 				break;
- 			default: // 0 or invalid value: no sorting
- 				break;
- 			}
--			players++;
-+	(*players)++;
-+	break;
- 		}
-+	return 0;
- 	}
-+//-------------------------------------------------------------
-+// Function to create the online files (txt and html). by [Yor]
-+//-------------------------------------------------------------
-+void create_online_files(void) {
-+	unsigned int k, j; // for loop with strlen comparing
-+	int i, l; // for loops
-+	int players;    // count the number of players
-+	FILE *fp;       // for the txt file
-+	FILE *fp2;      // for the html file
-+	char temp[256];      // to prepare what we must display
-+	time_t time_server;  // for number of seconds
-+	struct tm *datetime; // variable for time in structure ->tm_mday, ->tm_sec, ...
-+	int id[4096];
-+
-+	if (online_display_option == 0) // we display nothing, so return
-+		return;
-+
-+	// Get number of online players, id of each online players, and verify if a server is offline
-+	players = 0;
-+	online_char_db->foreach(online_char_db, create_online_files_sub, &players, &id);
- 
- 	// write files
- 	fp = fopen(online_txt_filename, "w");
-@@ -1080,8 +1418,9 @@
- 			fprintf(fp, "Online Players on %s (%s):\n", server_name, temp);
- 			fprintf(fp, "\n");
- 
--			// If we display at least 1 player
--			if (players > 0) {
-+			for (i = 0; i < players; i++) {
-+				// if it's the first player
-+				if (i == 0) {
- 				j = 0; // count the number of characters for the txt version and to set the separate line
- 				fprintf(fp2, "    <table border=\"1\" cellspacing=\"1\">\n");
- 				fprintf(fp2, "      <tr>\n");
-@@ -1128,16 +1467,14 @@
- 				for (k = 0; k < j; k++)
- 					fprintf(fp, "-");
- 				fprintf(fp, "\n");
--
--				// display each player.
--				for (i = 0; i < players; i++) {
-+				}
-+				fprintf(fp2, "      <tr>\n");
- 					// get id of the character (more speed)
- 					j = id[i];
--					fprintf(fp2, "      <tr>\n");
- 					// displaying the character name
- 					if ((online_display_option & 1) || (online_display_option & 64)) { // without/with 'GM' display
--						strcpy(temp, char_dat[j].name);
--						l = isGM(char_dat[j].account_id);
-+					strcpy(temp, char_dat[j].status.name);
-+					l = isGM(char_dat[j].status.account_id);
- 						if (online_display_option & 64) {
- 							if (l >= online_gm_display_min_level)
- 								fprintf(fp, "%-24s (GM) ", temp);
-@@ -1149,7 +1486,7 @@
- 						fprintf(fp2, "        <td>");
- 						if ((online_display_option & 64) && l >= online_gm_display_min_level)
- 							fprintf(fp2, "<b>");
--						for (k = 0; temp[k]; k++) {
-+					for (k = 0; k < strlen(temp); k++) {
- 							switch(temp[k]) {
- 							case '<': // <
- 								fprintf(fp2, "&lt;");
-@@ -1168,48 +1505,51 @@
- 					}
- 					// displaying of the job
- 					if (online_display_option & 6) {
--						char * jobname = job_name(char_dat[j].class);
-+					char * jobname = job_name(char_dat[j].status.class_);
- 						if ((online_display_option & 6) == 6) {
--							fprintf(fp2, "        <td>%s %d/%d</td>\n", jobname, char_dat[j].base_level, char_dat[j].job_level);
--							fprintf(fp, "%-18s %3d/%3d ", jobname, char_dat[j].base_level, char_dat[j].job_level);
-+						fprintf(fp2, "        <td>%s %d/%d</td>\n", jobname, char_dat[j].status.base_level, char_dat[j].status.job_level);
-+						fprintf(fp, "%-18s %3d/%3d ", jobname, char_dat[j].status.base_level, char_dat[j].status.job_level);
- 						} else if (online_display_option & 2) {
- 							fprintf(fp2, "        <td>%s</td>\n", jobname);
- 							fprintf(fp, "%-18s ", jobname);
- 						} else if (online_display_option & 4) {
--							fprintf(fp2, "        <td>%d/%d</td>\n", char_dat[j].base_level, char_dat[j].job_level);
--							fprintf(fp, "%3d/%3d ", char_dat[j].base_level, char_dat[j].job_level);
-+						fprintf(fp2, "        <td>%d/%d</td>\n", char_dat[j].status.base_level, char_dat[j].status.job_level);
-+						fprintf(fp, "%3d/%3d ", char_dat[j].status.base_level, char_dat[j].status.job_level);
- 						}
- 					}
- 					// displaying of the map
- 					if (online_display_option & 24) { // 8 or 16
- 						// prepare map name
--						memset(temp, 0, sizeof(temp));
--						strncpy(temp, char_dat[j].last_point.map, 16);
--						if (strchr(temp, '.') != NULL)
--							temp[strchr(temp, '.') - temp] = '\0'; // suppress the '.gat'
-+					memcpy(temp, mapindex_id2name(char_dat[j].status.last_point.map), MAP_NAME_LENGTH);
-+					temp[MAP_NAME_LENGTH] = '\0';
-+					if (strstr(temp, ".gat") != NULL) {
-+						temp[strstr(temp, ".gat") - temp] = 0; // suppress the '.gat'
-+					}
- 						// write map name
--						if (online_display_option & 16) { // map-name AND coordonates
--							fprintf(fp2, "        <td>%s (%d, %d)</td>\n", temp, char_dat[j].last_point.x, char_dat[j].last_point.y);
--							fprintf(fp, "%-12s (%3d,%3d) ", temp, char_dat[j].last_point.x, char_dat[j].last_point.y);
-+					if (online_display_option & 16) { // map-name AND coordinates
-+						fprintf(fp2, "        <td>%s (%d, %d)</td>\n", temp, char_dat[j].status.last_point.x, char_dat[j].status.last_point.y);
-+						fprintf(fp, "%-12s (%3d,%3d) ", temp, char_dat[j].status.last_point.x, char_dat[j].status.last_point.y);
- 						} else {
- 							fprintf(fp2, "        <td>%s</td>\n", temp);
- 							fprintf(fp, "%-12s ", temp);
- 						}
- 					}
--					// displaying number of zenys
-+				// displaying nimber of zenys
- 					if (online_display_option & 32) {
- 						// write number of zenys
--						if (char_dat[j].zeny == 0) { // if no zeny
-+					if (char_dat[j].status.zeny == 0) { // if no zeny
- 							fprintf(fp2, "        <td ALIGN=RIGHT>no zeny</td>\n");
- 							fprintf(fp, "        no zeny ");
- 						} else {
--							fprintf(fp2, "        <td ALIGN=RIGHT>%d z</td>\n", char_dat[j].zeny);
--							fprintf(fp, "%13d z ", char_dat[j].zeny);
-+						fprintf(fp2, "        <td ALIGN=RIGHT>%d z</td>\n", char_dat[j].status.zeny);
-+						fprintf(fp, "%13d z ", char_dat[j].status.zeny);
- 						}
- 					}
- 					fprintf(fp, "\n");
- 					fprintf(fp2, "      </tr>\n");
- 				}
-+			// If we display at least 1 player
-+			if (players > 0) {
- 				fprintf(fp2, "    </table>\n");
- 				fprintf(fp, "\n");
- 			}
-@@ -1218,8 +1558,9 @@
- 			if (players == 0) {
- 				fprintf(fp2, "    <p>No user is online.</p>\n");
- 				fprintf(fp, "No user is online.\n");
--			// no display if only 1 player
- 			} else if (players == 1) {
-+				fprintf(fp2, "    <p>%d user is online.</p>\n", players);
-+				fprintf(fp, "%d user is online.\n", players);
- 			} else {
- 				fprintf(fp2, "    <p>%d users are online.</p>\n", players);
- 				fprintf(fp, "%d users are online.\n", players);
-@@ -1254,15 +1595,17 @@
- int mmo_char_send006b(int fd, struct char_session_data *sd) {
- 	int i, j, found_num;
- 	struct mmo_charstatus *p;
--#ifdef NEW_006b
-+//#ifdef NEW_006b
- 	const int offset = 24;
--#else
--	const int offset = 4;
--#endif
-+//#else
-+//	const int offset = 4;
-+//#endif
-+
-+	set_char_online(0, 99,sd->account_id);
- 
- 	found_num = 0;
- 	for(i = 0; i < char_num; i++) {
--		if (char_dat[i].account_id == sd->account_id) {
-+		if (char_dat[i].status.account_id == sd->account_id) {
- 			sd->found_char[found_num] = i;
- 			found_num++;
- 			if (found_num == 9)
-@@ -1272,18 +1615,19 @@
- 	for(i = found_num; i < 9; i++)
- 		sd->found_char[i] = -1;
- 
-+        WFIFOHEAD(fd, offset + found_num * 106);
- 	memset(WFIFOP(fd,0), 0, offset + found_num * 106);
- 	WFIFOW(fd,0) = 0x6b;
- 	WFIFOW(fd,2) = offset + found_num * 106;
- 
- 	for(i = 0; i < found_num; i++) {
--		p = &char_dat[sd->found_char[i]];
-+		p = &char_dat[sd->found_char[i]].status;
- 		j = offset + (i * 106); // increase speed of code
- 
- 		WFIFOL(fd,j) = p->char_id;
--		WFIFOL(fd,j+4) = p->base_exp;
-+		WFIFOL(fd,j+4) = p->base_exp>LONG_MAX?LONG_MAX:p->base_exp;
- 		WFIFOL(fd,j+8) = p->zeny;
--		WFIFOL(fd,j+12) = p->job_exp;
-+		WFIFOL(fd,j+12) = p->job_exp>LONG_MAX?LONG_MAX:p->job_exp;
- 		WFIFOL(fd,j+16) = p->job_level;
- 
- 		WFIFOL(fd,j+20) = 0;
-@@ -1299,9 +1643,16 @@
- 		WFIFOW(fd,j+46) = (p->sp > 0x7fff) ? 0x7fff : p->sp;
- 		WFIFOW(fd,j+48) = (p->max_sp > 0x7fff) ? 0x7fff : p->max_sp;
- 		WFIFOW(fd,j+50) = DEFAULT_WALK_SPEED; // p->speed;
--		WFIFOW(fd,j+52) = p->class;
-+		WFIFOW(fd,j+52) = p->class_;
- 		WFIFOW(fd,j+54) = p->hair;
--		WFIFOW(fd,j+56) = p->weapon;
-+
-+		// pecopeco knights/crusaders crash fix
-+		if (p->class_ == 13 || p->class_ == 21 ||
-+			p->class_ == 4014 || p->class_ == 4022 ||
-+				p->class_ == 4036 || p->class_ == 4044)
-+			WFIFOW(fd,j+56) = 0;
-+		else WFIFOW(fd,j+56) = p->weapon;
-+
- 		WFIFOW(fd,j+58) = p->base_level;
- 		WFIFOW(fd,j+60) = p->skill_point;
- 		WFIFOW(fd,j+62) = p->head_bottom;
-@@ -1311,7 +1662,7 @@
- 		WFIFOW(fd,j+70) = p->hair_color;
- 		WFIFOW(fd,j+72) = p->clothes_color;
- 
--		memcpy(WFIFOP(fd,j+74), p->name, 24);
-+		memcpy(WFIFOP(fd,j+74), p->name, NAME_LENGTH);
- 
- 		WFIFOB(fd,j+98) = (p->str > 255) ? 255 : p->str;
- 		WFIFOB(fd,j+99) = (p->agi > 255) ? 255 : p->agi;
-@@ -1327,34 +1678,20 @@
- 	return 0;
- }
- 
--int set_account_reg2(int acc, int num, struct global_reg *reg) {
--	int i, c;
-+// ����(char�폜���Ɏg�p)
-+int char_divorce(struct mmo_charstatus *cs) {
-+	if (cs == NULL)
-+		return 0;
- 
--	c = 0;
-+	if (cs->partner_id > 0){
-+		int i, j;
- 	for(i = 0; i < char_num; i++) {
--		if (char_dat[i].account_id == acc) {
--			memcpy(char_dat[i].account_reg2, reg, sizeof(char_dat[i].account_reg2));
--			char_dat[i].account_reg2_num = num;
--			c++;
--		}
--	}
--	return c;
--}
--
--// ����(char�폜���Ɏg�p)
--int char_divorce(struct mmo_charstatus *cs) {
--	if (cs == NULL)
--		return 0;
--
--	if (cs->partner_id > 0){
--		int i, j;
--		for(i = 0; i < char_num; i++) {
--			if (char_dat[i].char_id == cs->partner_id && char_dat[i].partner_id == cs->char_id) {
-+			if (char_dat[i].status.char_id == cs->partner_id && char_dat[i].status.partner_id == cs->char_id) {
- 				cs->partner_id = 0;
--				char_dat[i].partner_id = 0;
-+				char_dat[i].status.partner_id = 0;
- 				for(j = 0; j < MAX_INVENTORY; j++)
--					if (char_dat[i].inventory[j].nameid == WEDDING_RING_M || char_dat[i].inventory[j].nameid == WEDDING_RING_F)
--						memset(&char_dat[i].inventory[j], 0, sizeof(char_dat[i].inventory[0]));
-+					if (char_dat[i].status.inventory[j].nameid == WEDDING_RING_M || char_dat[i].status.inventory[j].nameid == WEDDING_RING_F)
-+						memset(&char_dat[i].status.inventory[j], 0, sizeof(char_dat[i].status.inventory[0]));
- 					if (cs->inventory[j].nameid == WEDDING_RING_M || cs->inventory[j].nameid == WEDDING_RING_F)
- 						memset(&cs->inventory[j], 0, sizeof(cs->inventory[0]));
- 				return 0;
-@@ -1364,12 +1701,22 @@
- 	return 0;
- }
- 
-+int char_married(int pl1,int pl2) {
-+	return (char_dat[pl1].status.char_id == char_dat[pl2].status.partner_id && char_dat[pl2].status.char_id == char_dat[pl1].status.partner_id);
-+}
-+
-+int char_child(int parent_id, int child_id) {
-+	return (char_dat[parent_id].status.child == char_dat[child_id].status.char_id && 
-+		((char_dat[parent_id].status.char_id == char_dat[child_id].status.father) || 
-+		(char_dat[parent_id].status.char_id == char_dat[child_id].status.mother)));		
-+}
-+
- //------------------------------------------------------------
- // E-mail check: return 0 (not correct) or 1 (valid). by [Yor]
- //------------------------------------------------------------
--int e_mail_check(unsigned char *email) {
-+int e_mail_check(char *email) {
- 	char ch;
--	unsigned char* last_arobas;
-+	char* last_arobas;
- 
- 	// athena limits
- 	if (strlen(email) < 3 || strlen(email) > 39)
-@@ -1412,7 +1759,7 @@
- 
- 	// disconnect player if online on char-server
- 	for(i = 0; i < fd_max; i++) {
--		if (session[i] && (sd = session[i]->session_data)) {
-+		if (session[i] && (sd = (struct char_session_data*)session[i]->session_data)) {
- 			if (sd->account_id == accound_id) {
- 				session[i]->eof = 1;
- 				return 1;
-@@ -1432,20 +1779,20 @@
- 		inter_pet_delete(cs->pet_id);
- 	for (j = 0; j < MAX_INVENTORY; j++)
- 		if (cs->inventory[j].card[0] == (short)0xff00)
--			inter_pet_delete(*((long *)(&cs->inventory[j].card[2])));
-+			inter_pet_delete(MakeDWord(cs->inventory[j].card[1],cs->inventory[j].card[2]));
- 	for (j = 0; j < MAX_CART; j++)
- 		if (cs->cart[j].card[0] == (short)0xff00)
--			inter_pet_delete(*((long *)(&cs->cart[j].card[2])));
-+			inter_pet_delete( MakeDWord(cs->cart[j].card[1],cs->cart[j].card[2]) );
- 	// �M���h�E��
- 	if (cs->guild_id)
- 		inter_guild_leave(cs->guild_id, cs->account_id, cs->char_id);
- 	// �p�[�e�B�[�E��
- 	if (cs->party_id)
--		inter_party_leave(cs->party_id, cs->account_id);
-+		inter_party_leave(cs->party_id, cs->account_id, cs->char_id);
- 	// ����
- 	if (cs->partner_id){
- 		// ��������map�ɒʒm
--		char buf[10];
-+		unsigned char buf[10];
- 		WBUFW(buf,0) = 0x2b12;
- 		WBUFL(buf,2) = cs->char_id;
- 		WBUFL(buf,6) = cs->partner_id;
-@@ -1459,22 +1806,24 @@
- int parse_tologin(int fd) {
- 	int i;
- 	struct char_session_data *sd;
-+	RFIFOHEAD(fd);
- 
- 	// only login-server can have an access to here.
- 	// so, if it isn't the login-server, we disconnect the session (fd != login_fd).
--	if (fd != login_fd || session[fd]->eof) {
-+	if (fd != login_fd)
-+		session[fd]->eof = 1;
-+	if(session[fd]->eof) {
- 		if (fd == login_fd) {
--			printf("Char-server can't connect to login-server (connection #%d).\n", fd);
-+			ShowWarning("Connection to login-server lost (connection #%d).\n", fd);
- 			login_fd = -1;
- 		}
--		close(fd);
--		delete_session(fd);
-+		do_close(fd);
- 		return 0;
- 	}
- 
--	sd = session[fd]->session_data;
-+	sd = (struct char_session_data*)session[fd]->session_data;
- 
--	while(RFIFOREST(fd) >= 2) {
-+	while(RFIFOREST(fd) >= 2 && !session[fd]->eof) {
- //		printf("parse_tologin: connection #%d, packet: 0x%x (with being read: %d bytes).\n", fd, RFIFOW(fd,0), RFIFOREST(fd));
- 
- 		switch(RFIFOW(fd,0)) {
-@@ -1483,19 +1832,21 @@
- 				return 0;
- 			if (RFIFOB(fd,2)) {
- //				printf("connect login server error : %d\n", RFIFOB(fd,2));
--				printf("Can not connect to login-server.\n");
--				printf("The server communication passwords (default s1/p1) is probably invalid.\n");
--				printf("Also, please make sure your accounts file (default: accounts.txt) has those values present.\n");
--				printf("If you changed the communication passwords, change them back at map_athena.conf and char_athena.conf\n");
-+				ShowError("Can not connect to the login-server.\n");
-+				ShowError("The server communication passwords (default s1/p1) are probably invalid.\n");
-+				ShowInfo("Also, please make sure your accounts file (default: accounts.txt) has those values present.\n");
-+				ShowInfo("The communication passwords can be changed in map_athena.conf and char_athena.conf\n");
- 				exit(1);
- 			} else {
--				printf("Connected to login-server (connection #%d).\n", fd);
-+				ShowStatus("Connected to login-server (connection #%d).\n", fd);
-+				if (kick_on_disconnect)
-+					set_all_offline();
- 				// if no map-server already connected, display a message...
- 				for(i = 0; i < MAX_MAP_SERVERS; i++)
--					if (server_fd[i] >= 0 && server[i].map[0][0]) // if map-server online and at least 1 map
-+					if (server_fd[i] >= 0 && server[i].map[0]) // if map-server online and at least 1 map
- 						break;
- 				if (i == MAX_MAP_SERVERS)
--					printf("Awaiting maps from map-server.\n");
-+					ShowStatus("Awaiting maps from map-server.\n");
- 			}
- 			RFIFOSKIP(fd,3);
- 			break;
-@@ -1505,8 +1856,9 @@
- 				return 0;
- //			printf("parse_tologin 2713 : %d\n", RFIFOB(fd,6));
- 			for(i = 0; i < fd_max; i++) {
--				if (session[i] && (sd = session[i]->session_data) && sd->account_id == RFIFOL(fd,2)) {
-+				if (session[i] && (sd = (struct char_session_data*)session[i]->session_data) && sd->account_id == RFIFOL(fd,2)) {
- 					if (RFIFOB(fd,6) != 0) {
-+                                                WFIFOHEAD(i, 3);
- 						WFIFOW(i,0) = 0x6c;
- 						WFIFOB(i,2) = 0x42;
- 						WFIFOSET(i,3);
-@@ -1521,9 +1873,14 @@
- 						sd->connect_until_time = (time_t)RFIFOL(fd,47);
- 						// send characters to player
- 						mmo_char_send006b(i, sd);
-+					} else if(isGM(sd->account_id) >= gm_allow_level) {
-+						sd->connect_until_time = (time_t)RFIFOL(fd,47);
-+						// send characters to player
-+						mmo_char_send006b(i, sd);
- 					} else {
- 						// refuse connection: too much online players
- //						printf("count_users(): %d < max_connect_use (%d) -> fail...\n", count_users(), max_connect_user);
-+                                                WFIFOHEAD(fd, 3);
- 						WFIFOW(i,0) = 0x6c;
- 						WFIFOW(i,2) = 0;
- 						WFIFOSET(i,3);
-@@ -1539,7 +1896,7 @@
- 			if (RFIFOREST(fd) < 50)
- 				return 0;
- 			for(i = 0; i < fd_max; i++) {
--				if (session[i] && (sd = session[i]->session_data)) {
-+				if (session[i] && (sd = (struct char_session_data*)session[i]->session_data)) {
- 					if (sd->account_id == RFIFOL(fd,2)) {
- 						memcpy(sd->email, RFIFOP(fd,6), 40);
- 						if (e_mail_check(sd->email) == 0)
-@@ -1552,6 +1909,40 @@
- 			RFIFOSKIP(fd,50);
- 			break;
- 
-+		// login-server alive packet
-+		case 0x2718:
-+			if (RFIFOREST(fd) < 2)
-+				return 0;
-+			RFIFOSKIP(fd,2);
-+			break;
-+
-+		// Receiving authentification from Freya-type login server (to avoid char->login->char)
-+		case 0x2719:
-+			if (RFIFOREST(fd) < 18)
-+				return 0;
-+			// to conserv a maximum of authentification, search if account is already authentified and replace it
-+			// that will reduce multiple connection too
-+			for(i = 0; i < AUTH_FIFO_SIZE; i++)
-+				if (auth_fifo[i].account_id == RFIFOL(fd,2))
-+					break;
-+			// if not found, use next value
-+			if (i == AUTH_FIFO_SIZE) {
-+				if (auth_fifo_pos >= AUTH_FIFO_SIZE)
-+					auth_fifo_pos = 0;
-+				i = auth_fifo_pos;
-+				auth_fifo_pos++;
-+			}
-+			auth_fifo[i].account_id = RFIFOL(fd,2);
-+			auth_fifo[i].char_id = 0;
-+			auth_fifo[i].login_id1 = RFIFOL(fd,6);
-+			auth_fifo[i].login_id2 = RFIFOL(fd,10);
-+			auth_fifo[i].delflag = 2; // 0: auth_fifo canceled/void, 2: auth_fifo received from login/map server in memory, 1: connection authentified
-+			auth_fifo[i].char_pos = 0;
-+			auth_fifo[i].connect_until_time = 0; // unlimited/unknown time by default (not display in map-server)
-+			auth_fifo[i].ip = RFIFOL(fd,14);
-+			RFIFOSKIP(fd,18);
-+			break;
-+
- 		case 0x2721:	// gm reply
- 			if (RFIFOREST(fd) < 10)
- 				return 0;
-@@ -1576,49 +1967,55 @@
- 			sex = RFIFOB(fd,6);
- 			RFIFOSKIP(fd, 7);
- 			if (acc > 0) {
--				for (i = 0; i < char_num; i++) {
--					if (char_dat[i].account_id == acc) {
--						int jobclass = char_dat[i].class;
--						char_dat[i].sex = sex;
-+				for(i = 0; i < AUTH_FIFO_SIZE; i++) {
-+					if (auth_fifo[i].account_id == acc)	
- 						auth_fifo[i].sex = sex;
-+				}
-+				for (i = 0; i < char_num; i++) {
-+					if (char_dat[i].status.account_id == acc) {
-+						int jobclass = char_dat[i].status.class_;
-+						char_dat[i].status.sex = sex;
- 						if (jobclass == 19 || jobclass == 20 ||
- 						    jobclass == 4020 || jobclass == 4021 ||
- 						    jobclass == 4042 || jobclass == 4043) {
- 							// job modification
- 							if (jobclass == 19 || jobclass == 20) {
--								char_dat[i].class = (sex) ? 19 : 20;
-+								char_dat[i].status.class_ = (sex) ? 19 : 20;
- 							} else if (jobclass == 4020 || jobclass == 4021) {
--								char_dat[i].class = (sex) ? 4020 : 4021;
-+								char_dat[i].status.class_ = (sex) ? 4020 : 4021;
- 							} else if (jobclass == 4042 || jobclass == 4043) {
--								char_dat[i].class = (sex) ? 4042 : 4043;
-+								char_dat[i].status.class_ = (sex) ? 4042 : 4043;
- 							}
- 							// remove specifical skills of classes 19, 4020 and 4042
- 							for(j = 315; j <= 322; j++) {
--								if (char_dat[i].skill[j].id > 0 && !char_dat[i].skill[j].flag) {
--									char_dat[i].skill_point += char_dat[i].skill[j].lv;
--									char_dat[i].skill[j].id = 0;
--									char_dat[i].skill[j].lv = 0;
-+								if (char_dat[i].status.skill[j].id > 0 && !char_dat[i].status.skill[j].flag) {
-+									char_dat[i].status.skill_point += char_dat[i].status.skill[j].lv;
-+									char_dat[i].status.skill[j].id = 0;
-+									char_dat[i].status.skill[j].lv = 0;
- 								}
- 							}
- 							// remove specifical skills of classes 20, 4021 and 4043
- 							for(j = 323; j <= 330; j++) {
--								if (char_dat[i].skill[j].id > 0 && !char_dat[i].skill[j].flag) {
--									char_dat[i].skill_point += char_dat[i].skill[j].lv;
--									char_dat[i].skill[j].id = 0;
--									char_dat[i].skill[j].lv = 0;
-+								if (char_dat[i].status.skill[j].id > 0 && !char_dat[i].status.skill[j].flag) {
-+									char_dat[i].status.skill_point += char_dat[i].status.skill[j].lv;
-+									char_dat[i].status.skill[j].id = 0;
-+									char_dat[i].status.skill[j].lv = 0;
- 								}
- 							}
- 						}
- 						// to avoid any problem with equipment and invalid sex, equipment is unequiped.
- 						for (j = 0; j < MAX_INVENTORY; j++) {
--							if (char_dat[i].inventory[j].nameid && char_dat[i].inventory[j].equip)
--								char_dat[i].inventory[j].equip = 0;
-+							if (char_dat[i].status.inventory[j].nameid && char_dat[i].status.inventory[j].equip)
-+								char_dat[i].status.inventory[j].equip = 0;
- 						}
--						char_dat[i].weapon = 0;
--						char_dat[i].shield = 0;
--						char_dat[i].head_top = 0;
--						char_dat[i].head_mid = 0;
--						char_dat[i].head_bottom = 0;
-+						char_dat[i].status.weapon = 0;
-+						char_dat[i].status.shield = 0;
-+						char_dat[i].status.head_top = 0;
-+						char_dat[i].status.head_mid = 0;
-+						char_dat[i].status.head_bottom = 0;
-+
-+						if (char_dat[i].status.guild_id)	//If there is a guild, update the guild_member data [Skotlex]
-+							inter_guild_sex_changed(char_dat[i].status.guild_id, acc, char_dat[i].status.char_id, sex);
- 					}
- 				}
- 				// disconnect player if online on char-server
-@@ -1644,14 +2041,14 @@
- 				if (i == MAX_MAP_SERVERS)
- 					char_log("'ladmin': Receiving a message for broadcast, but no map-server is online." RETCODE);
- 				else {
--					char buf[128];
--					char message[RFIFOL(fd,4) + 1]; // +1 to add a null terminated if not exist in the packet
-+					unsigned char buf[128];
-+					char message[4096]; // +1 to add a null terminated if not exist in the packet
- 					int lp;
- 					char *p;
- 					memset(message, '\0', sizeof(message));
- 					memcpy(message, RFIFOP(fd,8), RFIFOL(fd,4));
- 					message[sizeof(message)-1] = '\0';
--					remove_control_chars(message);
-+					remove_control_chars((unsigned char *)message);
- 					// remove all first spaces
- 					p = message;
- 					while(p[0] == ' ')
-@@ -1702,22 +2099,13 @@
- 		case 0x2729:
- 			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
- 				return 0;
--		  {
--			struct global_reg reg[ACCOUNT_REG2_NUM];
--			unsigned char buf[4096];
--			int j, p, acc;
--			acc = RFIFOL(fd,4);
--			for (p = 8, j = 0; p < RFIFOW(fd,2) && j < ACCOUNT_REG2_NUM; p += 36, j++) {
--				memcpy(reg[j].str, RFIFOP(fd,p), 32);
--				reg[j].value = RFIFOL(fd,p+32);
--			}
--			set_account_reg2(acc, j, reg);
--			// ���C���O�C�����֎~���Ă���Α���K�v�͖���
-+		  {	//Receive account_reg2 registry, forward to map servers.
-+			unsigned char buf[ACCOUNT_REG2_NUM*(256+32+2)+16];
- 			memcpy(buf, RFIFOP(fd,0), RFIFOW(fd,2));
--			WBUFW(buf,0) = 0x2b11;
-+//			WBUFW(buf,0) = 0x2b11;
-+			WBUFW(buf,0) = 0x3804; //Map server can now receive all kinds of reg values with the same packet. [Skotlex]
- 			mapif_sendall(buf, WBUFW(buf,2));
- 			RFIFOSKIP(fd,RFIFOW(fd,2));
--//			printf("char: save_account_reg_reply\n");
- 		  }
- 			break;
- 
-@@ -1727,20 +2115,20 @@
- 				return 0;
- 			// Deletion of all characters of the account
- 			for(i = 0; i < char_num; i++) {
--				if (char_dat[i].account_id == RFIFOL(fd,2)) {
--					char_delete(&char_dat[i]);
-+				if (char_dat[i].status.account_id == RFIFOL(fd,2)) {
-+					char_delete(&char_dat[i].status);
- 					if (i < char_num - 1) {
--						memcpy(&char_dat[i], &char_dat[char_num-1], sizeof(struct mmo_charstatus));
-+						memcpy(&char_dat[i], &char_dat[char_num-1], sizeof(struct character_data));
- 						// if moved character owns to deleted account, check again it's character
--						if (char_dat[i].account_id == RFIFOL(fd,2)) {
-+						if (char_dat[i].status.account_id == RFIFOL(fd,2)) {
- 							i--;
- 						// Correct moved character reference in the character's owner by [Yor]
- 						} else {
- 							int j, k;
- 							struct char_session_data *sd2;
- 							for (j = 0; j < fd_max; j++) {
--								if (session[j] && (sd2 = session[j]->session_data) &&
--									sd2->account_id == char_dat[char_num-1].account_id) {
-+								if (session[j] && (sd2 = (struct char_session_data*)session[j]->session_data) &&
-+									sd2->account_id == char_dat[char_num-1].status.account_id) {
- 									for (k = 0; k < 9; k++) {
- 										if (sd2->found_char[k] == char_num-1) {
- 											sd2->found_char[k] = i;
-@@ -1792,10 +2180,10 @@
- 			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
- 				return 0;
- 		  {
--			char buf[32000];
-+			unsigned char buf[32000];
- 			if (gm_account != NULL)
--				free(gm_account);
--			gm_account = calloc(sizeof(struct gm_account) * ((RFIFOW(fd,2) - 4) / 5), 1);
-+				aFree(gm_account);
-+			gm_account = (struct gm_account*)aCalloc(sizeof(struct gm_account) * ((RFIFOW(fd,2) - 4) / 5), 1);
- 			GM_num = 0;
- 			for (i = 4; i < RFIFOW(fd,2); i = i + 5) {
- 				gm_account[GM_num].account_id = RFIFOL(fd,i);
-@@ -1803,8 +2191,8 @@
- 				//printf("GM account: %d -> level %d\n", gm_account[GM_num].account_id, gm_account[GM_num].level);
- 				GM_num++;
- 			}
--			printf("From login-server: receiving of %d GM accounts information.\n", GM_num);
--			char_log("From login-server: receiving of %d GM accounts information." RETCODE, GM_num);
-+			ShowStatus("From login-server: receiving information of %d GM accounts.\n", GM_num);
-+			char_log("From login-server: receiving information of %d GM accounts." RETCODE, GM_num);
- 			create_online_files(); // update online players files (perhaps some online players change of GM level)
- 			// send new gm acccounts level to map-servers
- 			memcpy(buf, RFIFOP(fd,0), RFIFOW(fd,2));
-@@ -1814,7 +2202,101 @@
- 			RFIFOSKIP(fd,RFIFOW(fd,2));
- 			break;
- 
-+		// Receive GM accounts [Freya login server packet by Yor]
-+		case 0x2733:
-+		// add test here to remember that the login-server is Freya-type
-+		// sprintf (login_server_type, "Freya");
-+			if (RFIFOREST(fd) < 7)
-+				return 0;
-+			{
-+				unsigned char buf[32000];
-+				int new_level = 0;
-+				for(i = 0; i < GM_num; i++)
-+					if (gm_account[i].account_id == RFIFOL(fd,2)) {
-+						if (gm_account[i].level != (int)RFIFOB(fd,6)) {
-+							gm_account[i].level = (int)RFIFOB(fd,6);
-+							new_level = 1;
-+						}
-+						break;
-+					}
-+				// if not found, add it
-+				if (i == GM_num) {
-+					// limited to 4000, because we send information to char-servers (more than 4000 GM accounts???)
-+					// int (id) + int (level) = 8 bytes * 4000 = 32k (limit of packets in windows)
-+					if (((int)RFIFOB(fd,6)) > 0 && GM_num < 4000) {
-+						if (GM_num == 0) {
-+							gm_account = (struct gm_account*)aMalloc(sizeof(struct gm_account));
-+						} else {
-+							gm_account = (struct gm_account*)aRealloc(gm_account, sizeof(struct gm_account) * (GM_num + 1));						
-+						}
-+						gm_account[GM_num].account_id = RFIFOL(fd,2);
-+						gm_account[GM_num].level = (int)RFIFOB(fd,6);
-+						new_level = 1;
-+						GM_num++;
-+						if (GM_num >= 4000) {
-+							ShowWarning("4000 GM accounts found. Next GM accounts are not readed.\n");
-+							char_log("***WARNING: 4000 GM accounts found. Next GM accounts are not readed." RETCODE);
-+						}
-+					}
-+				}
-+				if (new_level == 1) {
-+					int len;
-+					ShowStatus("From login-server: receiving GM account information (%d: level %d).\n", RFIFOL(fd,2), (int)RFIFOB(fd,6));
-+					char_log("From login-server: receiving a GM account information (%d: level %d)." RETCODE, RFIFOL(fd,2), (int)RFIFOB(fd,6));
-+					//create_online_files(); // not change online file for only 1 player (in next timer, that will be done
-+					// send gm acccounts level to map-servers
-+					len = 4;
-+					WBUFW(buf,0) = 0x2b15;
-+				
-+					for(i = 0; i < GM_num; i++) {
-+						WBUFL(buf, len) = gm_account[i].account_id;
-+						WBUFB(buf, len+4) = (unsigned char)gm_account[i].level;
-+						len += 5;
-+					}
-+					WBUFW(buf, 2) = len;
-+					mapif_sendall(buf, len);
-+				}
-+			}
-+			RFIFOSKIP(fd,7);
-+			break;
-+
-+		//Login server request to kick a character out. [Skotlex]
-+		case 0x2734:
-+			if (RFIFOREST(fd) < 6)
-+				return 0;
-+			{
-+				struct online_char_data* character;
-+				int aid = RFIFOL(fd,2);
-+				if ((character = idb_get(online_char_db, aid)) != NULL)
-+				{	//Kick out this player.
-+					if (character->server > -1)
-+					{	//Kick it from the map server it is on.
-+						mapif_disconnectplayer(server_fd[character->server], character->account_id, character->char_id, 2);
-+						if (!character->waiting_disconnect)
-+							add_timer(gettick()+15000, chardb_waiting_disconnect, character->account_id, 0);
-+						character->waiting_disconnect = 1;
-+					} else { //Manual kick from char server.
-+						struct char_session_data *tsd;
-+						int i;
-+						for(i = 0; i < fd_max; i++) {
-+							if (session[i] && (tsd = (struct char_session_data*)session[i]->session_data) && tsd->account_id == aid)
-+							{
-+								WFIFOHEAD(fd, 3);
-+								WFIFOW(i,0) = 0x81;
-+								WFIFOB(i,2) = 2;
-+								WFIFOSET(i,3);
-+								break;
-+							}
-+						}
-+						if (i == fd_max) //Shouldn't happen, but just in case.
-+							set_char_offline(99, aid);
-+					}
-+				}
-+				RFIFOSKIP(fd,6);
-+			}
-+			break;
- 		default:
-+			ShowWarning("Unknown packet 0x%04x received from login-server, disconnecting.\n", RFIFOW(fd,0));
- 			session[fd]->eof = 1;
- 			return 0;
- 		}
-@@ -1824,57 +2306,130 @@
- 	return 0;
- }
- 
--//--------------------------------
--// Map-server anti-freeze system
--//--------------------------------
--int map_anti_freeze_system(int tid, unsigned int tick, int id, int data) {
--	int i;
-+int request_accreg2(int account_id, int char_id) {
-+	if (login_fd > 0) {
-+		WFIFOW(login_fd, 0) = 0x272e;
-+		WFIFOL(login_fd, 2) = account_id;
-+		WFIFOL(login_fd, 6) = char_id;
-+		WFIFOSET(login_fd, 10);
-+		return 1;
-+	}
-+	return 0;
-+}
- 
--	//printf("Entering in map_anti_freeze_system function to check freeze of servers.\n");
--	for(i = 0; i < MAX_MAP_SERVERS; i++) {
--		if (server_fd[i] >= 0) {// if map-server is online
--			//printf("map_anti_freeze_system: server #%d, flag: %d.\n", i, server_freezeflag[i]);
--			if (server_freezeflag[i]-- < 1) { // Map-server anti-freeze system. Counter. 5 ok, 4...0 freezed
--				printf("Map-server anti-freeze system: char-server #%d is freezed -> disconnection.\n", i);
--				char_log("Map-server anti-freeze system: char-server #%d is freezed -> disconnection." RETCODE,
--				         i);
--				session[server_fd[i]]->eof = 1;
-+//Send packet forward to login-server for account saving
-+int save_accreg2(unsigned char* buf, int len) {
-+	if (login_fd > 0) {
-+		WFIFOHEAD(login_fd, len+4);
-+		memcpy(WFIFOP(login_fd,4), buf, len);
-+		WFIFOW(login_fd,0) = 0x2728;
-+		WFIFOW(login_fd,2) = len+4;
-+		WFIFOSET(login_fd,len+4);
-+		return 1;
- 			}
-+	return 0;
- 		}
-+
-+//Receive Registry information for a character.
-+int char_parse_Registry(int account_id, int char_id, unsigned char *buf, int buf_len) {
-+	int i,j,p,len;
-+	for (i = 0; i < char_num; i++) {
-+		if (char_dat[i].status.account_id == account_id && char_dat[i].status.char_id == char_id)
-+			break;
-+	}
-+	if(i >= char_num) //Character not found?
-+		return 1;
-+	for(j=0,p=0;j<GLOBAL_REG_NUM && p<buf_len;j++){
-+		sscanf(WBUFP(buf,p), "%31c%n",char_dat[i].global[j].str,&len);
-+		char_dat[i].global[j].str[len]='\0';
-+		p +=len+1; //+1 to skip the '\0' between strings.
-+		sscanf(WBUFP(buf,p), "%255c%n",char_dat[i].global[j].value,&len);
-+		char_dat[i].global[j].value[len]='\0';
-+		p +=len+1;
-+	}
-+	char_dat[i].global_num = j;
-+	return 0;
- 	}
- 
-+//Reply to map server with acc reg values.
-+int char_account_reg_reply(int fd,int account_id,int char_id) {
-+	int i,j,p;
-+	WFIFOHEAD(login_fd, GLOBAL_REG_NUM*288 + 13);
-+	WFIFOW(fd,0)=0x3804;
-+	WFIFOL(fd,4)=account_id;
-+	WFIFOL(fd,8)=char_id;
-+	WFIFOB(fd,12)=3; //Type 3: char acc reg.
-+	for (i = 0;i < char_num; i++) {
-+		if (char_dat[i].status.account_id == account_id && char_dat[i].status.char_id	== char_id)
-+			break;
-+	}
-+	if(i >= char_num){ //Character not found? Sent empty packet.
-+		WFIFOW(fd,2)=13;
-+	}else{
-+		for (p=13,j = 0; j < char_dat[i].global_num; j++) {
-+			if (char_dat[i].global[j].str[0]) {
-+				p+= sprintf(WFIFOP(fd,p), "%s", char_dat[i].global[j].str)+1; //We add 1 to consider the '\0' in place.
-+				p+= sprintf(WFIFOP(fd,p), "%s", char_dat[i].global[j].value)+1;
-+			}
-+		}
-+		WFIFOW(fd,2)=p;
-+	}
-+	WFIFOSET(fd,WFIFOW(fd,2));
- 	return 0;
- }
- 
-+int search_mapserver(unsigned short map, long ip, short port);
-+
- int parse_frommap(int fd) {
- 	int i, j;
- 	int id;
-+	RFIFOHEAD(fd);
- 
- 	for(id = 0; id < MAX_MAP_SERVERS; id++)
- 		if (server_fd[id] == fd)
- 			break;
--	if (id == MAX_MAP_SERVERS || session[fd]->eof) {
-+	if(id==MAX_MAP_SERVERS)
-+		session[fd]->eof=1;
-+	if(session[fd]->eof){
- 		if (id < MAX_MAP_SERVERS) {
--			printf("Map-server %d (session #%d) has disconnected.\n", id, fd);
--			memset(&server[id], 0, sizeof(struct mmo_map_server));
-+			unsigned char buf[16384];
-+			ShowStatus("Map-server %d has disconnected.\n", id);
-+			//Notify other map servers that this one is gone. [Skotlex]
-+			WBUFW(buf,0) = 0x2b20;
-+			WBUFL(buf,4) = server[id].ip;
-+			WBUFW(buf,8) = server[id].port;
-+			j = 0;
-+			for(i = 0; i < MAX_MAP_PER_SERVER; i++)
-+				if (server[id].map[i])
-+					WBUFW(buf,10+(j++)*4) = server[id].map[i];
-+			if (j > 0) {
-+				WBUFW(buf,2) = j * 4 + 10;
-+				mapif_sendallwos(fd, buf, WBUFW(buf,2));
-+			}
- 			server_fd[id] = -1;
--			for(j = 0; j < char_num; j++)
--				if (online_chars[j] == fd)
--					online_chars[j] = -1;
--			create_online_files(); // update online players files (to remove all online players of this server)
-+			online_char_db->foreach(online_char_db,char_db_setoffline,i); //Tag relevant chars as 'in disconnected' server.
- 		}
--		close(fd);
--		delete_session(fd);
-+		do_close(fd);
-+		create_online_files();
- 		return 0;
- 	}
- 
--	while(RFIFOREST(fd) >= 2) {
-+	while(RFIFOREST(fd) >= 2 && !session[fd]->eof) {
- //		printf("parse_frommap: connection #%d, packet: 0x%x (with being read: %d bytes).\n", fd, RFIFOW(fd,0), RFIFOREST(fd));
- 
- 		switch(RFIFOW(fd,0)) {
-+
-+		// map-server alive packet
-+		case 0x2718:
-+			if (RFIFOREST(fd) < 2)
-+				return 0;
-+			RFIFOSKIP(fd,2);
-+			break;
-+
- 		// request from map-server to reload GM accounts. Transmission to login-server (by Yor)
- 		case 0x2af7:
- 			if (login_fd > 0) { // don't send request if no login-server
-+                                WFIFOHEAD(login_fd, 2);
- 				WFIFOW(login_fd,0) = 0x2709;
- 				WFIFOSET(login_fd, 2);
- //				printf("char : request from map-server to reload GM accounts -> login-server.\n");
-@@ -1888,36 +2443,41 @@
- 				return 0;
- 			memset(server[id].map, 0, sizeof(server[id].map));
- 			j = 0;
--			for(i = 4; i < RFIFOW(fd,2); i += 16) {
--				memcpy(server[id].map[j], RFIFOP(fd,i), 16);
--//				printf("set map %d.%d : %s\n", id, j, server[id].map[j]);
-+			for(i = 4; i < RFIFOW(fd,2); i += 4) {
-+				server[id].map[j] =  RFIFOW(fd,i);
- 				j++;
- 			}
- 			{
- 				unsigned char *p = (unsigned char *)&server[id].ip;
--				printf("Map-Server %d connected: %d maps, from IP %d.%d.%d.%d port %d.\n",
-+				ShowStatus("Map-Server %d connected: %d maps, from IP %d.%d.%d.%d port %d.\n",
- 				       id, j, p[0], p[1], p[2], p[3], server[id].port);
--				printf("Map-server %d loading complete.\n", id);
-+				ShowStatus("Map-server %d loading complete.\n", id);
- 				char_log("Map-Server %d connected: %d maps, from IP %d.%d.%d.%d port %d. Map-server %d loading complete." RETCODE,
- 				         id, j, p[0], p[1], p[2], p[3], server[id].port, id);
-+				if (kick_on_disconnect)
-+					set_all_offline();
-+				if (max_account_id != DEFAULT_MAX_ACCOUNT_ID || max_char_id != DEFAULT_MAX_CHAR_ID)
-+					mapif_send_maxid(max_account_id, max_char_id); //Send the current max ids to the server to keep in sync [Skotlex]
- 			}
-+                        WFIFOHEAD(fd, 3 + NAME_LENGTH);
- 			WFIFOW(fd,0) = 0x2afb;
- 			WFIFOB(fd,2) = 0;
--			memcpy(WFIFOP(fd,3), wisp_server_name, 24); // name for wisp to player
--			WFIFOSET(fd,27);
-+			memcpy(WFIFOP(fd,3), wisp_server_name, NAME_LENGTH); // name for wisp to player
-+			WFIFOSET(fd,3+NAME_LENGTH);
-+			//WFIFOSET(fd,27);
- 			{
- 				unsigned char buf[16384];
- 				int x;
- 				if (j == 0) {
--					printf("WARNING: Map-Server %d have NO map.\n", id);
-+					ShowWarning("Map-Server %d have NO map.\n", id);
- 					char_log("WARNING: Map-Server %d have NO map." RETCODE, id);
- 				// Transmitting maps information to the other map-servers
- 				} else {
- 					WBUFW(buf,0) = 0x2b04;
--					WBUFW(buf,2) = j * 16 + 10;
-+					WBUFW(buf,2) = j * 4 + 10;
- 					WBUFL(buf,4) = server[id].ip;
- 					WBUFW(buf,8) = server[id].port;
--					memcpy(WBUFP(buf,10), RFIFOP(fd,4), j * 16);
-+					memcpy(WBUFP(buf,10), RFIFOP(fd,4), j * 4);
- 					mapif_sendallwos(fd, buf, WBUFW(buf,2));
- 				}
- 				// Transmitting the maps of the other map-servers to the new map-server
-@@ -1928,10 +2488,10 @@
- 						WFIFOW(fd,8) = server[x].port;
- 						j = 0;
- 						for(i = 0; i < MAX_MAP_PER_SERVER; i++)
--							if (server[x].map[i][0])
--								memcpy(WFIFOP(fd,10+(j++)*16), server[x].map[i], 16);
-+							if (server[x].map[i])
-+								WFIFOW(fd,10+(j++)*4) = server[x].map[i];
- 						if (j > 0) {
--							WFIFOW(fd,2) = j * 16 + 10;
-+							WFIFOW(fd,2) = j * 4 + 10;
- 							WFIFOSET(fd,WFIFOW(fd,2));
- 						}
- 					}
-@@ -1940,83 +2500,95 @@
- 			RFIFOSKIP(fd,RFIFOW(fd,2));
- 			break;
- 
--		// �F�ؗv��
-+		//Packet command is now used for sc_data request. [Skotlex]
- 		case 0x2afc:
--			if (RFIFOREST(fd) < 22)
-+			if (RFIFOREST(fd) < 10)
- 				return 0;
--			//printf("auth_fifo search: account: %d, char: %d, secure: %08x-%08x\n", RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOL(fd,14));
--			for(i = 0; i < AUTH_FIFO_SIZE; i++) {
--				if (auth_fifo[i].account_id == RFIFOL(fd,2) &&
--				    auth_fifo[i].char_id == RFIFOL(fd,6) &&
--				    auth_fifo[i].login_id1 == RFIFOL(fd,10) &&
--#if CMP_AUTHFIFO_LOGIN2 != 0
--				// here, it's the only area where it's possible that we doesn't know login_id2 (map-server asks just after 0x72 packet, that doesn't given the value)
--				    (auth_fifo[i].login_id2 == RFIFOL(fd,14) || RFIFOL(fd,14) == 0) && // relate to the versions higher than 18
-+		{
-+#ifdef ENABLE_SC_SAVING
-+			int aid, cid;
-+			struct scdata *data;
-+			aid = RFIFOL(fd,2);
-+			cid = RFIFOL(fd,6);
- #endif
--				    (!check_ip_flag || auth_fifo[i].ip == RFIFOL(fd,18)) &&
--				    !auth_fifo[i].delflag) {
--					auth_fifo[i].delflag = 1;
--					WFIFOW(fd,0) = 0x2afd;
--					WFIFOW(fd,2) = 16 + sizeof(struct mmo_charstatus);
--					WFIFOL(fd,4) = RFIFOL(fd,2);
--					WFIFOL(fd,8) = auth_fifo[i].login_id2;
--					WFIFOL(fd,12) = (unsigned long)auth_fifo[i].connect_until_time;
--					char_dat[auth_fifo[i].char_pos].sex = auth_fifo[i].sex;
--					memcpy(WFIFOP(fd,16), &char_dat[auth_fifo[i].char_pos], sizeof(struct mmo_charstatus));
-+			RFIFOSKIP(fd, 10);
-+#ifdef ENABLE_SC_SAVING
-+			data = status_search_scdata(aid, cid);
-+			if (data->count > 0)
-+			{	//Deliver status change data.
-+				int i;
-+				
-+				WFIFOW(fd,0) = 0x2b1d;
-+				WFIFOW(fd,2) = 14 + data->count*sizeof(struct status_change_data);
-+				WFIFOL(fd,4) = aid;
-+				WFIFOL(fd,8) = cid;
-+				WFIFOW(fd,12) = data->count;
-+				for (i = 0; i < data->count; i++)
-+					memcpy(WFIFOP(fd,14+i*sizeof(struct status_change_data)), &data->data[i], sizeof(struct status_change_data));
- 					WFIFOSET(fd, WFIFOW(fd,2));
--					//printf("auth_fifo search success (auth #%d, account %d, character: %d).\n", i, RFIFOL(fd,2), RFIFOL(fd,6));
--					break;
-+				status_delete_scdata(aid, cid); //Data sent, so it needs be discarded now.
- 				}
-+#endif
-+			break;
- 			}
--			if (i == AUTH_FIFO_SIZE) {
--				WFIFOW(fd,0) = 0x2afe;
--				WFIFOL(fd,2) = RFIFOL(fd,2);
--				WFIFOSET(fd,6);
--				printf("auth_fifo search error! account %d not authentified.\n", RFIFOL(fd,2));
-+		
-+		//set MAP user count
-+		case 0x2afe:
-+			if (RFIFOREST(fd) < 4)
-+				return 0;
-+			if (RFIFOW(fd,2) != server[id].users) {
-+				server[id].users = RFIFOW(fd,2);
-+				ShowInfo("User Count: %d (Server: %d)\n", server[id].users, id);
- 			}
--			RFIFOSKIP(fd,22);
-+			RFIFOSKIP(fd, 4);
- 			break;
--
--		// MAP�T�[�o�[��̃��[�U�[����M
-+		//set MAP users
- 		case 0x2aff:
- 			if (RFIFOREST(fd) < 6 || RFIFOREST(fd) < RFIFOW(fd,2))
- 				return 0;
- 			server[id].users = RFIFOW(fd,4);
--			if(anti_freeze_enable)
--				server_freezeflag[id] = 5; // Map anti-freeze system. Counter. 5 ok, 4...0 freezed
--			// remove all previously online players of the server
--			for(i = 0; i < char_num; i++)
--				if (online_chars[i] == id)
--					online_chars[i] = -1;
--			// add online players in the list by [Yor]
-+			// add online players in the list by [Yor], adapted to use dbs by [Skotlex]
-+			j = 0;
-+			online_char_db->foreach(online_char_db,char_db_setoffline,id); //Set all chars from this server as 'unknown'
- 			for(i = 0; i < server[id].users; i++) {
--				int char_id = RFIFOL(fd,6+i*4);
--				for(j = 0; j < char_num; j++)
--					if (char_dat[j].char_id == char_id) {
--						online_chars[j] = id;
--						//printf("%d\n", char_id);
--						break;
-+				int aid, cid;
-+				struct online_char_data* character;
-+				aid = RFIFOL(fd,6+i*8);
-+				cid = RFIFOL(fd,6+i*8+4);
-+				character = idb_ensure(online_char_db, aid, create_online_char_data);
-+				if (online_check && character->server > -1 && character->server != id)
-+				{
-+					ShowNotice("Set map user: Character (%d:%d) marked on map server %d, but map server %d claims to have (%d:%d) online!\n",
-+						character->account_id, character->char_id, character->server, id, aid, cid);
-+					mapif_disconnectplayer(server_fd[character->server], character->account_id, character->char_id, 2);
- 					}
-+				character->char_id = cid;
-+				character->server = id;
- 			}
- 			if (update_online < time(NULL)) { // Time is done
- 				update_online = time(NULL) + 8;
- 				create_online_files(); // only every 8 sec. (normally, 1 server send users every 5 sec.) Don't update every time, because that takes time, but only every 2 connection.
- 				                       // it set to 8 sec because is more than 5 (sec) and if we have more than 1 map-server, informations can be received in shifted.
- 			}
--			RFIFOSKIP(fd,6+i*4);
-+			//If any chars remain in -2, they will be cleaned in the cleanup timer.
-+			RFIFOSKIP(fd,6+i*8);
- 			break;
- 
- 		// �L�����f�[�^�ۑ�
-+		// Recieve character data from map-server
- 		case 0x2b01:
- 			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
- 				return 0;
- 			for(i = 0; i < char_num; i++) {
--				if (char_dat[i].account_id == RFIFOL(fd,4) &&
--				    char_dat[i].char_id == RFIFOL(fd,8))
-+				if (char_dat[i].status.account_id == RFIFOL(fd,4) &&
-+				    char_dat[i].status.char_id == RFIFOL(fd,8))
- 					break;
- 			}
- 			if (i != char_num)
--				memcpy(&char_dat[i], RFIFOP(fd,12), sizeof(struct mmo_charstatus));
-+				memcpy(&char_dat[i].status, RFIFOP(fd,13), sizeof(struct mmo_charstatus));
-+			if (RFIFOB(fd,12)) { //Flag, set character offline. [Skotlex]
-+				set_char_offline(RFIFOL(fd,8),RFIFOL(fd,4));
-+			}
- 			RFIFOSKIP(fd,RFIFOW(fd,2));
- 			break;
- 
-@@ -2026,7 +2598,6 @@
- 				return 0;
- 			if (auth_fifo_pos >= AUTH_FIFO_SIZE)
- 				auth_fifo_pos = 0;
--			//printf("auth_fifo set (auth #%d) - account: %d, secure: %08x-%08x\n", auth_fifo_pos, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10));
- 			auth_fifo[auth_fifo_pos].account_id = RFIFOL(fd,2);
- 			auth_fifo[auth_fifo_pos].char_id = 0;
- 			auth_fifo[auth_fifo_pos].login_id1 = RFIFOL(fd,6);
-@@ -2043,35 +2614,58 @@
- 			RFIFOSKIP(fd,18);
- 			break;
- 
--		// �}�b�v�T�[�o�[�Ԉړ��v��
-+		// request "change map server"
- 		case 0x2b05:
--			if (RFIFOREST(fd) < 49)
-+			if (RFIFOREST(fd) < 35)
- 				return 0;
--			if (auth_fifo_pos >= AUTH_FIFO_SIZE)
--				auth_fifo_pos = 0;
--			WFIFOW(fd,0) = 0x2b06;
--			memcpy(WFIFOP(fd,2), RFIFOP(fd,2), 42);
--			//printf("auth_fifo set (auth#%d) - account: %d, secure: 0x%08x-0x%08x\n", auth_fifo_pos, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10));
--			auth_fifo[auth_fifo_pos].account_id = RFIFOL(fd,2);
--			auth_fifo[auth_fifo_pos].char_id = RFIFOL(fd,14);
--			auth_fifo[auth_fifo_pos].login_id1 = RFIFOL(fd,6);
--			auth_fifo[auth_fifo_pos].login_id2 = RFIFOL(fd,10);
--			auth_fifo[auth_fifo_pos].delflag = 0;
--			auth_fifo[auth_fifo_pos].sex = RFIFOB(fd,44);
--			auth_fifo[auth_fifo_pos].connect_until_time = 0; // unlimited/unknown time by default (not display in map-server)
--			auth_fifo[auth_fifo_pos].ip = RFIFOL(fd,45);
--			for(i = 0; i < char_num; i++)
--				if (char_dat[i].account_id == RFIFOL(fd,2) &&
--				    char_dat[i].char_id == RFIFOL(fd,14)) {
--					auth_fifo[auth_fifo_pos].char_pos = i;
--					auth_fifo_pos++;
--					WFIFOL(fd,6) = 0;
-+			{
-+				unsigned short name;
-+				int map_id, map_fd = -1, i;
-+				struct online_char_data* data;
-+				struct mmo_charstatus* char_data;
-+
-+				name = RFIFOW(fd,18);
-+				map_id = search_mapserver(name, RFIFOL(fd,24), RFIFOW(fd,28)); //Locate mapserver by ip and port.
-+				if (map_id >= 0)
-+					map_fd = server_fd[map_id];
-+				for(i = 0; i < char_num; i++) {
-+				if (char_dat[i].status.account_id == RFIFOL(fd,2) &&
-+				    char_dat[i].status.char_id == RFIFOL(fd,14))
- 					break;
- 				}
--			if (i == char_num)
--				WFIFOW(fd,6) = 1;
--			WFIFOSET(fd,44);
--			RFIFOSKIP(fd,49);
-+				char_data = i< char_num? &char_dat[i].status:NULL;
-+				//Tell the new map server about this player using Kevin's new auth packet. [Skotlex]
-+				if (map_fd>=0 && session[map_fd] && char_data) 
-+				{	//Send the map server the auth of this player.
-+					//Update the "last map" as this is where the player must be spawned on the new map server.
-+					char_data->last_point.map = RFIFOW(fd,18);
-+					char_data->last_point.x = RFIFOW(fd,20);
-+					char_data->last_point.y = RFIFOW(fd,22);
-+
-+					WFIFOW(map_fd,0) = 0x2afd;
-+					WFIFOW(map_fd,2) = 20 + sizeof(struct mmo_charstatus);
-+					WFIFOL(map_fd,4) = RFIFOL(fd, 2); //Account ID
-+					WFIFOL(map_fd,8) = RFIFOL(fd, 6); //Login1
-+					WFIFOL(map_fd,16) = RFIFOL(fd,10); //Login2
-+					WFIFOL(map_fd,12) = (unsigned long)0; //TODO: connect_until_time, how do I figure it out right now?
-+					memcpy(WFIFOP(map_fd,20), char_data, sizeof(struct mmo_charstatus));
-+					WFIFOSET(map_fd, WFIFOW(map_fd,2));
-+					data = idb_ensure(online_char_db, RFIFOL(fd, 2), create_online_char_data);
-+					data->char_id = char_data->char_id;
-+					data->server = map_id; //Update server where char is.
-+
-+					//Reply with an ack.
-+					WFIFOW(fd, 0) = 0x2b06;
-+					memcpy(WFIFOP(fd,2), RFIFOP(fd,2), 28);
-+					WFIFOSET(fd, 30);
-+				} else { //Reply with nak
-+					WFIFOW(fd, 0) = 0x2b06;
-+					memcpy(WFIFOP(fd,2), RFIFOP(fd,2), 28);
-+					WFIFOL(fd, 6) = 0; //Set login1 to 0.
-+					WFIFOSET(fd, 30);
-+				}
-+				RFIFOSKIP(fd, 35);
-+			}
- 			break;
- 
- 		// �L����������
-@@ -2079,16 +2673,17 @@
- 			if (RFIFOREST(fd) < 6)
- 				return 0;
- 			for(i = 0; i < char_num; i++) {
--				if (char_dat[i].char_id == RFIFOL(fd,2))
-+				if (char_dat[i].status.char_id == RFIFOL(fd,2))
- 					break;
- 			}
- 			WFIFOW(fd,0) = 0x2b09;
- 			WFIFOL(fd,2) = RFIFOL(fd,2);
- 			if (i != char_num)
--				memcpy(WFIFOP(fd,6), char_dat[i].name, 24);
-+				memcpy(WFIFOP(fd,6), char_dat[i].status.name, NAME_LENGTH);
- 			else
--				memcpy(WFIFOP(fd,6), unknown_char_name, 24);
--			WFIFOSET(fd,30);
-+				memcpy(WFIFOP(fd,6), unknown_char_name, NAME_LENGTH);
-+			WFIFOSET(fd,6+NAME_LENGTH);
-+			//WFIFOSET(fd,30);
- 			RFIFOSKIP(fd,6);
- 			break;
- 
-@@ -2127,10 +2722,10 @@
- 			if (RFIFOREST(fd) < 44)
- 				return 0;
- 		  {
--			char character_name[24];
-+			char character_name[NAME_LENGTH];
- 			int acc = RFIFOL(fd,2); // account_id of who ask (-1 if nobody)
--			memcpy(character_name, RFIFOP(fd,6), 24);
--			character_name[sizeof(character_name) -1] = '\0';
-+			memcpy(character_name, RFIFOP(fd,6), NAME_LENGTH-1);
-+			character_name[NAME_LENGTH -1] = '\0';
- 			// prepare answer
- 			WFIFOW(fd,0) = 0x2b0f; // answer
- 			WFIFOL(fd,2) = acc; // who want do operation
-@@ -2138,14 +2733,15 @@
- 			// search character
- 			i = search_character_index(character_name);
- 			if (i >= 0) {
--				memcpy(WFIFOP(fd,6), search_character_name(i), 24); // put correct name if found
--				WFIFOW(fd,32) = 0; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-+				memcpy(WFIFOP(fd,6), search_character_name(i), NAME_LENGTH); // put correct name if found
-+				WFIFOW(fd,6+NAME_LENGTH) = 0; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-+				//WFIFOW(fd,32) = 0; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
- 				switch(RFIFOW(fd, 30)) {
- 				case 1: // block
--					if (acc == -1 || isGM(acc) >= isGM(char_dat[i].account_id)) {
-+					if (acc == -1 || isGM(acc) >= isGM(char_dat[i].status.account_id)) {
- 						if (login_fd > 0) { // don't send request if no login-server
- 							WFIFOW(login_fd,0) = 0x2724;
--							WFIFOL(login_fd,2) = char_dat[i].account_id; // account value
-+							WFIFOL(login_fd,2) = char_dat[i].status.account_id; // account value
- 							WFIFOL(login_fd,6) = 5; // status of the account
- 							WFIFOSET(login_fd, 10);
- //							printf("char : status -> login: account %d, status: %d \n", char_dat[i].account_id, 5);
-@@ -2155,10 +2751,10 @@
- 						WFIFOW(fd,32) = 2; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
- 					break;
- 				case 2: // ban
--					if (acc == -1 || isGM(acc) >= isGM(char_dat[i].account_id)) {
-+					if (acc == -1 || isGM(acc) >= isGM(char_dat[i].status.account_id)) {
- 						if (login_fd > 0) { // don't send request if no login-server
- 							WFIFOW(login_fd, 0) = 0x2725;
--							WFIFOL(login_fd, 2) = char_dat[i].account_id; // account value
-+							WFIFOL(login_fd, 2) = char_dat[i].status.account_id; // account value
- 							WFIFOW(login_fd, 6) = RFIFOW(fd,32); // year
- 							WFIFOW(login_fd, 8) = RFIFOW(fd,34); // month
- 							WFIFOW(login_fd,10) = RFIFOW(fd,36); // day
-@@ -2174,10 +2770,10 @@
- 						WFIFOW(fd,32) = 2; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
- 					break;
- 				case 3: // unblock
--					if (acc == -1 || isGM(acc) >= isGM(char_dat[i].account_id)) {
-+					if (acc == -1 || isGM(acc) >= isGM(char_dat[i].status.account_id)) {
- 						if (login_fd > 0) { // don't send request if no login-server
- 							WFIFOW(login_fd,0) = 0x2724;
--							WFIFOL(login_fd,2) = char_dat[i].account_id; // account value
-+							WFIFOL(login_fd,2) = char_dat[i].status.account_id; // account value
- 							WFIFOL(login_fd,6) = 0; // status of the account
- 							WFIFOSET(login_fd, 10);
- //							printf("char : status -> login: account %d, status: %d \n", char_dat[i].account_id, 0);
-@@ -2187,10 +2783,10 @@
- 						WFIFOW(fd,32) = 2; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
- 					break;
- 				case 4: // unban
--					if (acc == -1 || isGM(acc) >= isGM(char_dat[i].account_id)) {
-+					if (acc == -1 || isGM(acc) >= isGM(char_dat[i].status.account_id)) {
- 						if (login_fd > 0) { // don't send request if no login-server
- 							WFIFOW(login_fd, 0) = 0x272a;
--							WFIFOL(login_fd, 2) = char_dat[i].account_id; // account value
-+							WFIFOL(login_fd, 2) = char_dat[i].status.account_id; // account value
- 							WFIFOSET(login_fd, 6);
- //							printf("char : status -> login: account %d, unban request\n", char_dat[i].account_id);
- 						} else
-@@ -2199,10 +2795,10 @@
- 						WFIFOW(fd,32) = 2; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
- 					break;
- 				case 5: // changesex
--					if (acc == -1 || isGM(acc) >= isGM(char_dat[i].account_id)) {
-+					if (acc == -1 || isGM(acc) >= isGM(char_dat[i].status.account_id)) {
- 						if (login_fd > 0) { // don't send request if no login-server
- 							WFIFOW(login_fd, 0) = 0x2727;
--							WFIFOL(login_fd, 2) = char_dat[i].account_id; // account value
-+							WFIFOL(login_fd, 2) = char_dat[i].status.account_id; // account value
- 							WFIFOSET(login_fd, 6);
- //							printf("char : status -> login: account %d, change sex request\n", char_dat[i].account_id);
- 						} else
-@@ -2213,12 +2809,14 @@
- 				}
- 			} else {
- 				// character name not found
--				memcpy(WFIFOP(fd,6), character_name, 24);
--				WFIFOW(fd,32) = 1; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-+				memcpy(WFIFOP(fd,6), character_name, NAME_LENGTH);
-+				WFIFOW(fd,8+NAME_LENGTH) = 1; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-+				//WFIFOW(fd,32) = 1; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
- 			}
- 			// send answer if a player ask, not if the server ask
- 			if (acc != -1) {
--				WFIFOSET(fd, 34);
-+				//WFIFOSET(fd, 34);
-+				WFIFOSET(fd, 10+NAME_LENGTH);
- 			}
- 			RFIFOSKIP(fd, 44);
- 			break;
-@@ -2226,34 +2824,157 @@
- 
- //		case 0x2b0f: not more used (available for futur usage)
- 
--		// account_reg�ۑ��v��
--		case 0x2b10:
--			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-+		//Packet 0x2b10 deprecated in favor of packet 0x3004 for registry saving. [Skotlex]
-+		//case 0x2b10:
-+
-+		// Recieve rates [Wizputer]
-+		case 0x2b16:
-+			if (RFIFOREST(fd) < 6 || RFIFOREST(fd) < RFIFOW(fd,8))
-+				return 0;
-+			// Txt doesn't need this packet, so just skip it
-+			RFIFOSKIP(fd,RFIFOW(fd,8));
-+			break;
-+
-+		// Character disconnected set online 0 [Wizputer]
-+		case 0x2b17:
-+			if (RFIFOREST(fd) < 6)
-+				return 0;
-+			//printf("Setting %d char offline\n",RFIFOL(fd,2));
-+			set_char_offline(RFIFOL(fd,2),RFIFOL(fd,6));
-+			RFIFOSKIP(fd,10);
-+			break;
-+
-+		// Reset all chars to offline [Wizputer]
-+		case 0x2b18:
-+			ShowNotice("Map server [%d] requested to set all characters offline.\n", id);
-+			set_all_offline();
-+			RFIFOSKIP(fd,2);
-+			break;
-+
-+		// Character set online [Wizputer]
-+		case 0x2b19:
-+			if (RFIFOREST(fd) < 6)
-+				return 0;
-+			//printf("Setting %d char online\n",RFIFOL(fd,2));
-+			set_char_online(id, RFIFOL(fd,2),RFIFOL(fd,6));
-+			RFIFOSKIP(fd,10);
-+			break;
-+
-+		// Request sending of fame list
-+		case 0x2b1a:
-+			if (RFIFOREST(fd) < 2)
- 				return 0;
- 		  {
--			struct global_reg reg[ACCOUNT_REG2_NUM];
--			int p, acc;
--			acc = RFIFOL(fd,4);
--			for(p = 8, j = 0; p < RFIFOW(fd,2) && j < ACCOUNT_REG2_NUM; p += 36, j++) {
--				memcpy(reg[j].str, RFIFOP(fd,p), 32);
--				reg[j].value = RFIFOL(fd, p+32);
-+			int i, j, k, len = 8;
-+			unsigned char buf[32000];
-+			struct fame_list fame_item;
-+			//struct mmo_charstatus *dat;
-+			//dat = (struct mmo_charstatus *)aCalloc(char_num, sizeof(struct mmo_charstatus *));
-+			CREATE_BUFFER(id, int, char_num);
-+			
-+			// copy character list into buffer
-+			//for (i = 0; i < char_num; i++)
-+			//	dat[i] = char_dat[i];
-+			// sort according to fame
-+			// qsort(dat, char_num, sizeof(struct mmo_charstatus *), sort_fame);
-+
-+			for(i = 0; i < char_num; i++) {
-+				id[i] = i;
-+				for(j = 0; j < i; j++) {
-+					if (char_dat[i].status.fame > char_dat[id[j]].status.fame) {
-+						for(k = i; k > j; k--)
-+							id[k] = id[k-1];
-+						id[j] = i; // id[i]
-+						break;
- 			}
--			set_account_reg2(acc, j, reg);
--			// login�T�[�o�[�֑���
--			if (login_fd > 0) { // don't send request if no login-server
--				WFIFOW(login_fd, 0) = 0x2728;
--				memcpy(WFIFOP(login_fd,0), RFIFOP(fd,0), RFIFOW(fd,2));
--				WFIFOSET(login_fd, WFIFOW(login_fd,2));
- 			}
--			// ���[���h�ւ̓��C���O�C�����Ȃ����map�T�[�o�[�ɑ���K�v�͂Ȃ�
--			//memcpy(buf, RFIFOP(fd,0), RFIFOW(fd,2));
--			//WBUFW(buf,0) = 0x2b11;
--			//mapif_sendall(buf, WBUFW(buf,2));
-+			}
-+
-+			// starting to send to map
-+			WBUFW(buf,0) = 0x2b1b;
-+			// add list for blacksmiths
-+			for (i = 0, j = 0; i < char_num && j < fame_list_size_smith; i++) {
-+				if (char_dat[id[i]].status.fame && (char_dat[id[i]].status.class_ == 10 ||
-+					char_dat[id[i]].status.class_ == 4011 ||
-+					char_dat[id[i]].status.class_ == 4033))
-+				{
-+					fame_item.id = char_dat[id[i]].status.char_id;
-+					fame_item.fame = char_dat[id[i]].status.fame;
-+					strncpy(fame_item.name, char_dat[id[i]].status.name, NAME_LENGTH);
-+					
-+					memcpy(WBUFP(buf, len), &fame_item, sizeof(struct fame_list));
-+					len += sizeof(struct fame_list);
-+					j++;
-+				}
-+			}
-+			// add blacksmith's block length
-+			WBUFW(buf, 6) = len;
-+			
-+			// add list for alchemists
-+			for (i = 0, j = 0; i < char_num && j < fame_list_size_chemist; i++) {
-+				if (char_dat[id[i]].status.fame && (char_dat[id[i]].status.class_ == 18 ||
-+					char_dat[id[i]].status.class_ == 4019 ||
-+					char_dat[id[i]].status.class_ == 4041))
-+				{
-+					fame_item.id = char_dat[id[i]].status.char_id;
-+					fame_item.fame = char_dat[id[i]].status.fame;
-+					strncpy(fame_item.name, char_dat[id[i]].status.name, NAME_LENGTH);
-+					
-+					memcpy(WBUFP(buf, len), &fame_item, sizeof(struct fame_list));
-+					len += sizeof(struct fame_list);
-+					j++;
-+				}
-+			}
-+			// add alchemist's block length
-+			WBUFW(buf, 4) = len;
-+
-+			// adding list for taekwons
-+			for (i = 0, j = 0; i < char_num && j < fame_list_size_taekwon; i++) {
-+				if (char_dat[id[i]].status.fame && char_dat[id[i]].status.class_ == 4046)
-+				{
-+					fame_item.id = char_dat[id[i]].status.char_id;
-+					fame_item.fame = char_dat[id[i]].status.fame;
-+					strncpy(fame_item.name, char_dat[id[i]].status.name, NAME_LENGTH);
-+					
-+					memcpy(WBUFP(buf, len), &fame_item, sizeof(struct fame_list));
-+					len += sizeof(struct fame_list);
-+					j++;
-+				}
-+			}
-+			// add total packet length
-+			WBUFW(buf, 2) = len;
-+
-+			// sending to all maps
-+			mapif_sendall(buf, len);
-+			// done!
-+			//aFree(dat);
-+			DELETE_BUFFER(id);
-+			RFIFOSKIP(fd,2);
-+			break;
-+		}
-+		//Request to save status change data. [Skotlex]
-+		case 0x2b1c:
-+			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-+				return 0;
-+		{
-+#ifdef ENABLE_SC_SAVING
-+			int count, aid, cid, i;
-+			struct scdata *data;
-+			aid = RFIFOL(fd, 4);
-+			cid = RFIFOL(fd, 8);
-+			count = RFIFOW(fd, 12);
-+			data = status_search_scdata(aid, cid);
-+			if (data->count != count)
-+			{
-+				data->count = count;
-+				data->data = aRealloc(data->data, count*sizeof(struct status_change_data));
-+			}
-+			for (i = 0; i < count; i++)
-+				memcpy (&data->data[i], RFIFOP(fd, 14+i*sizeof(struct status_change_data)), sizeof(struct status_change_data));
-+#endif
- 			RFIFOSKIP(fd, RFIFOW(fd,2));
--//			printf("char: save_account_reg (from map)\n");
- 			break;
- 		  }
--
- 		default:
- 			// inter server�����ɓn��
- 			{
-@@ -2264,7 +2985,7 @@
- 					return 0;
- 			}
- 			// inter server�����ł��Ȃ��ꍇ�͐ؒf
--			printf("char: unknown packet 0x%04x (%d bytes to read in buffer)! (from map).\n", RFIFOW(fd,0), RFIFOREST(fd));
-+			ShowError("Unknown packet 0x%04x from map server, disconnecting.\n", RFIFOW(fd,0));
- 			session[fd]->eof = 1;
- 			return 0;
- 		}
-@@ -2272,28 +2993,20 @@
- 	return 0;
- }
- 
--int search_mapserver(char *map) {
-+int search_mapserver(unsigned short map, long ip, short port) {
- 	int i, j;
--	char temp_map[16];
--	int temp_map_len;
--
--//	printf("Searching the map-server for map '%s'... ", map);
--	strncpy(temp_map, map, sizeof(temp_map));
--	temp_map[sizeof(temp_map)-1] = '\0';
--	if (strchr(temp_map, '.') != NULL)
--		temp_map[strchr(temp_map, '.') - temp_map + 1] = '\0'; // suppress the '.gat', but conserve the '.' to be sure of the name of the map
- 
--	temp_map_len = strlen(temp_map);
- 	for(i = 0; i < MAX_MAP_SERVERS; i++)
- 		if (server_fd[i] >= 0)
--			for (j = 0; server[i].map[j][0]; j++)
--				//printf("%s : %s = %d\n", server[i].map[j], map, strncmp(server[i].map[j], temp_map, temp_map_len));
--				if (strncmp(server[i].map[j], temp_map, temp_map_len) == 0) {
--//					printf("found -> server #%d.\n", i);
-+			for (j = 0; server[i].map[j]; j++)
-+				if (server[i].map[j] == map) {
-+					if (ip > 0 && server[i].ip != ip)
-+						continue;
-+					if (port > 0 && server[i].port != port)
-+						continue;
- 					return i;
- 				}
- 
--//	printf("not found.\n");
- 	return -1;
- }
- 
-@@ -2302,48 +3015,81 @@
- 	return inter_mapif_init(fd);
- }
- 
--//-----------------------------------------------------
--// Test to know if an IP come from LAN or WAN. by [Yor]
--//-----------------------------------------------------
--int lan_ip_check(unsigned char *p){
-+//--------------------------------------------
-+// Test to know if an IP come from LAN or WAN.
-+// Rewrote: Adnvanced subnet check [LuzZza]
-+//--------------------------------------------
-+int lan_subnetcheck(long *p) {
-+
- 	int i;
--	int lancheck = 1;
-+	unsigned char *sbn, *msk, *src = (unsigned char *)p;
- 
--//	printf("lan_ip_check: to compare: %d.%d.%d.%d, network: %d.%d.%d.%d/%d.%d.%d.%d\n",
--//	       p[0], p[1], p[2], p[3],
--//	       subneti[0], subneti[1], subneti[2], subneti[3],
--//	       subnetmaski[0], subnetmaski[1], subnetmaski[2], subnetmaski[3]);
--	for(i = 0; i < 4; i++) {
--		if ((subneti[i] & subnetmaski[i]) != (p[i] & subnetmaski[i])) {
--			lancheck = 0;
--			break;
-+	for(i=0; i<subnet_count; i++) {
-+	
-+		if((subnet[i].subnet & subnet[i].mask) == (*p & subnet[i].mask)) {
-+			
-+			sbn = (unsigned char *)&subnet[i].subnet;
-+			msk = (unsigned char *)&subnet[i].mask;
-+			
-+			ShowInfo("Subnet check [%u.%u.%u.%u]: Matches "CL_CYAN"%u.%u.%u.%u/%u.%u.%u.%u"CL_RESET"\n",
-+				src[0], src[1], src[2], src[3], sbn[0], sbn[1], sbn[2], sbn[3], msk[0], msk[1], msk[2], msk[3]);
-+			
-+			return subnet[i].map_ip;
- 		}
- 	}
--	printf("LAN test (result): %s source\033[0m.\n", (lancheck) ? "\033[1;36mLAN" : "\033[1;32mWAN");
--	return lancheck;
-+	
-+	ShowInfo("Subnet check [%u.%u.%u.%u]: "CL_CYAN"WAN"CL_RESET"\n", src[0], src[1], src[2], src[3]);
-+	return 0;
- }
- 
- int parse_char(int fd) {
-+	
- 	int i, ch;
-+	unsigned short cmd;
- 	char email[40];
-+	int map_fd;
- 	struct char_session_data *sd;
- 	unsigned char *p = (unsigned char *) &session[fd]->client_addr.sin_addr;
-+	long subnet_map_ip;
-+	
-+	RFIFOHEAD(fd);
-+
-+	sd = (struct char_session_data*)session[fd]->session_data;
- 
--	if (login_fd < 0 || session[fd]->eof) { // disconnect any player (already connected to char-server or coming back from map-server) if login-server is diconnected.
-+	if (login_fd < 0)
-+		session[fd]->eof = 1;
-+	if(session[fd]->eof) { // disconnect any player (already connected to char-server or coming back from map-server) if login-server is diconnected.
- 		if (fd == login_fd)
- 			login_fd = -1;
--		close(fd);
--		delete_session(fd);
-+		if (sd != NULL)
-+		{
-+			struct online_char_data* data = idb_get(online_char_db, sd->account_id);
-+			if (!data || data->server== -1) //If it is not in any server, send it offline. [Skotlex]
-+				set_char_offline(99,sd->account_id);
-+		}
-+		do_close(fd);
- 		return 0;
- 	}
- 
--	sd = session[fd]->session_data;
-+	while(RFIFOREST(fd) >= 2 && !session[fd]->eof) {
-+		cmd = RFIFOW(fd,0);
-+		// crc32�̃X�L�b�v�p
-+		if(	sd==NULL			&&	// �����O�C��or�Ǘ��p�P�b�g
-+			RFIFOREST(fd)>=4	&&	// �Œ�o�C�g������ �� 0x7530,0x7532�Ǘ��p�P����
-+			RFIFOREST(fd)<=21	&&	// �ő�o�C�g������ �� �T�[�o�[���O�C������
-+			cmd!=0x20b	&&	// md5�ʒm�p�P�b�g����
-+			(RFIFOREST(fd)<6 || RFIFOW(fd,4)==0x65)	){	// ���ɉ����p�P�b�g�����Ă�Ȃ�A�ڑ��łȂ��Ƃ���
-+			RFIFOSKIP(fd,4);
-+			cmd = RFIFOW(fd,0);
-+			ShowDebug("parse_char : %d crc32 skipped\n",fd);
-+			if(RFIFOREST(fd)==0)
-+				return 0;
-+		}
- 
--	while (RFIFOREST(fd) >= 2) {
--//		if (RFIFOW(fd,0) < 30000)
--//			printf("parse_char: connection #%d, packet: 0x%x (with being read: %d bytes).\n", fd, RFIFOW(fd,0), RFIFOREST(fd));
-+//For use in packets that depend on an sd being present [Skotlex]
-+#define FIFOSD_CHECK(rest) { if(RFIFOREST(fd) < rest) return 0; if (sd==NULL) { RFIFOSKIP(fd,rest); return 0; } }
- 
--		switch(RFIFOW(fd,0)) {
-+		switch(cmd){
- 		case 0x20b:	//20040622�Í���ragexe�Ή�
- 			if (RFIFOREST(fd) < 19)
- 				return 0;
-@@ -2356,13 +3102,15 @@
- 		  {
- 			int GM_value;
- 			if ((GM_value = isGM(RFIFOL(fd,2))))
--				printf("Account Logged On; Account ID: %d (GM level %d).\n", RFIFOL(fd,2), GM_value);
-+				ShowInfo("Account Logged On; Account ID: %d (GM level %d).\n", RFIFOL(fd,2), GM_value);
- 			else
--				printf("Account Logged On; Account ID: %d.\n", RFIFOL(fd,2));
-+				ShowInfo("Account Logged On; Account ID: %d.\n", RFIFOL(fd,2));
- 			if (sd == NULL) {
--				sd = session[fd]->session_data = calloc(sizeof(struct char_session_data), 1);
--				memset(sd, 0, sizeof(struct char_session_data));
--				memcpy(sd->email, "no mail", 40); // put here a mail without '@' to refuse deletion if we don't receive the e-mail
-+				sd = (struct char_session_data*)aCalloc(sizeof(struct char_session_data), 1);
-+				session[fd]->session_data = sd;
-+
-+//				memset(sd, 0, sizeof(struct char_session_data)); aCalloc does this [Skotlex]
-+				strncpy(sd->email, "no mail", 40); // put here a mail without '@' to refuse deletion if we don't receive the e-mail
- 				sd->connect_until_time = 0; // unknow or illimited (not displaying on map-server)
- 			}
- 			sd->account_id = RFIFOL(fd,2);
-@@ -2370,6 +3118,7 @@
- 			sd->login_id2 = RFIFOL(fd,10);
- 			sd->sex = RFIFOB(fd,16);
- 			// send back account_id
-+                        WFIFOHEAD(fd, 4);
- 			WFIFOL(fd,0) = RFIFOL(fd,2);
- 			WFIFOSET(fd,4);
- 			// search authentification
-@@ -2382,6 +3131,44 @@
- 				    (!check_ip_flag || auth_fifo[i].ip == session[fd]->client_addr.sin_addr.s_addr) &&
- 				    auth_fifo[i].delflag == 2) {
- 					auth_fifo[i].delflag = 1;
-+						
-+					if (online_check)
-+					{	// check if character is not online already. [Skotlex]
-+						struct online_char_data* character;
-+						character = idb_get(online_char_db, sd->account_id);
-+
-+						if (character)
-+						{
-+							if(character->server > -1)
-+							{	//Kick it from the map server it is on.
-+								mapif_disconnectplayer(server_fd[character->server], character->account_id, character->char_id, 2);
-+								if (!character->waiting_disconnect)
-+									add_timer(gettick()+20000, chardb_waiting_disconnect, character->account_id, 0);
-+								character->waiting_disconnect = 1;
-+						/* Not a good idea because this would trigger when you do a char-change from the map server! [Skotlex]
-+							} else { //Manual kick from char server.
-+								struct char_session_data *tsd;
-+								int i;
-+								for(i = 0; i < fd_max; i++) {
-+									if (session[i] && i!=fd && (tsd = (struct char_session_data*)session[i]->session_data) && tsd->account_id == sd->account_id)
-+									{
-+										WFIFOW(i,0) = 0x81;
-+										WFIFOB(i,2) = 2;
-+										WFIFOSET(i,3);
-+										break;
-+									}
-+								}
-+								if (i == fd_max) //Shouldn't happen, but just in case.
-+									set_char_offline(99, sd->account_id);
-+						*/
-+								WFIFOW(fd,0) = 0x81;
-+								WFIFOB(fd,2) = 8;
-+								WFIFOSET(fd,3);
-+								break;
-+							}
-+						}
-+					}
-+
- 					if (max_connect_user == 0 || count_users() < max_connect_user) {
- 						if (login_fd > 0) { // don't send request if no login-server
- 							// request to login-server to obtain e-mail/time limit
-@@ -2421,89 +3208,103 @@
- 			break;
- 
- 		case 0x66:	// �L�����I��
--			if (RFIFOREST(fd) < 3)
--				return 0;
-+			FIFOSD_CHECK(3);
-+		{
-+			int char_num = RFIFOB(fd,2);
-+			struct mmo_charstatus *cd;
-+			RFIFOSKIP(fd,3);
- 
- 			// if we activated email creation and email is default email
- 			if (email_creation != 0 && strcmp(sd->email, "a@a.com") == 0 && login_fd > 0) { // to modify an e-mail, login-server must be online
-+				WFIFOHEAD(fd, 3);
- 				WFIFOW(fd, 0) = 0x70;
- 				WFIFOB(fd, 2) = 0; // 00 = Incorrect Email address
- 				WFIFOSET(fd, 3);
--
-+				break;
-+			}
- 			// otherwise, load the character
--			} else {
- 				for (ch = 0; ch < 9; ch++)
--					if (sd->found_char[ch] >= 0 && char_dat[sd->found_char[ch]].char_num == RFIFOB(fd,2))
-+				if (sd->found_char[ch] >= 0 && char_dat[sd->found_char[ch]].status.char_num == char_num)
- 						break;
--				if (ch != 9) {
-+			if (ch == 9)
-+			{	//Not found?? May be forged packet.
-+				break;
-+			}
-+			cd = &char_dat[sd->found_char[ch]].status;
- 					char_log("Character Selected, Account ID: %d, Character Slot: %d, Character Name: %s." RETCODE,
--					         sd->account_id, RFIFOB(fd,2), char_dat[sd->found_char[ch]].name);
-+	         sd->account_id, char_num, cd->name);
-+
-+			cd->sex = sd->sex;
-+			
- 					// searching map server
--					i = search_mapserver(char_dat[sd->found_char[ch]].last_point.map);
-+			i = search_mapserver(cd->last_point.map,-1,-1);
- 					// if map is not found, we check major cities
- 					if (i < 0) {
--						if ((i = search_mapserver("prontera.gat")) >= 0) { // check is done without 'gat'.
--							memcpy(char_dat[sd->found_char[ch]].last_point.map, "prontera.gat", 16);
--							char_dat[sd->found_char[ch]].last_point.x = 273; // savepoint coordonates
--							char_dat[sd->found_char[ch]].last_point.y = 354;
--						} else if ((i = search_mapserver("geffen.gat")) >= 0) { // check is done without 'gat'.
--							memcpy(char_dat[sd->found_char[ch]].last_point.map, "geffen.gat", 16);
--							char_dat[sd->found_char[ch]].last_point.x = 120; // savepoint coordonates
--							char_dat[sd->found_char[ch]].last_point.y = 100;
--						} else if ((i = search_mapserver("morocc.gat")) >= 0) { // check is done without 'gat'.
--							memcpy(char_dat[sd->found_char[ch]].last_point.map, "morocc.gat", 16);
--							char_dat[sd->found_char[ch]].last_point.x = 160; // savepoint coordonates
--							char_dat[sd->found_char[ch]].last_point.y = 94;
--						} else if ((i = search_mapserver("alberta.gat")) >= 0) { // check is done without 'gat'.
--							memcpy(char_dat[sd->found_char[ch]].last_point.map, "alberta.gat", 16);
--							char_dat[sd->found_char[ch]].last_point.x = 116; // savepoint coordonates
--							char_dat[sd->found_char[ch]].last_point.y = 57;
--						} else if ((i = search_mapserver("payon.gat")) >= 0) { // check is done without 'gat'.
--							memcpy(char_dat[sd->found_char[ch]].last_point.map, "payon.gat", 16);
--							char_dat[sd->found_char[ch]].last_point.x = 87; // savepoint coordonates
--							char_dat[sd->found_char[ch]].last_point.y = 117;
--						} else if ((i = search_mapserver("izlude.gat")) >= 0) { // check is done without 'gat'.
--							memcpy(char_dat[sd->found_char[ch]].last_point.map, "izlude.gat", 16);
--							char_dat[sd->found_char[ch]].last_point.x = 94; // savepoint coordonates
--							char_dat[sd->found_char[ch]].last_point.y = 103;
-+				unsigned short j;
-+				ShowWarning("Unable to find map-server for '%s', resorting to sending to a major city.\n", mapindex_id2name(cd->last_point.map));
-+				if ((i = search_mapserver((j=mapindex_name2id(MAP_PRONTERA)),-1,-1)) >= 0) {
-+					cd->last_point.map = j;
-+					cd->last_point.x = 273; // savepoint coordinates
-+					cd->last_point.y = 354;
-+				} else if ((i = search_mapserver((j=mapindex_name2id(MAP_GEFFEN)),-1,-1)) >= 0) {
-+					cd->last_point.map = j;
-+					cd->last_point.x = 120; // savepoint coordinates
-+					cd->last_point.y = 100;
-+				} else if ((i = search_mapserver((j=mapindex_name2id(MAP_MORROC)),-1,-1)) >= 0) {
-+					cd->last_point.map = j;
-+					cd->last_point.x = 160; // savepoint coordinates
-+					cd->last_point.y = 94;
-+				} else if ((i = search_mapserver((j=mapindex_name2id(MAP_ALBERTA)),-1,-1)) >= 0) {
-+					cd->last_point.map = j;
-+					cd->last_point.x = 116; // savepoint coordinates
-+					cd->last_point.y = 57;
-+				} else if ((i = search_mapserver((j=mapindex_name2id(MAP_PAYON)),-1,-1)) >= 0) {
-+					cd->last_point.map = j;
-+					cd->last_point.x = 87; // savepoint coordinates
-+					cd->last_point.y = 117;
-+				} else if ((i = search_mapserver((j=mapindex_name2id(MAP_IZLUDE)),-1,-1)) >= 0) {
-+					cd->last_point.map = j;
-+					cd->last_point.x = 94; // savepoint coordinates
-+					cd->last_point.y = 103;
- 						} else {
--							int j;
- 							// get first online server (with a map)
- 							i = 0;
- 							for(j = 0; j < MAX_MAP_SERVERS; j++)
--								if (server_fd[j] >= 0 && server[j].map[0][0]) { // change save point to one of map found on the server (the first)
-+						if (server_fd[j] >= 0 && server[j].map[0]) { // change save point to one of map found on the server (the first)
- 									i = j;
--									memcpy(char_dat[sd->found_char[ch]].last_point.map, server[j].map[0], 16);
--									printf("Map-server #%d found with a map: '%s'.\n", j, server[j].map[0]);
--									// coordonates are unknown
-+							cd->last_point.map = server[j].map[0];
-+							ShowInfo("Map-server #%d found with a map: '%s'.\n", j, mapindex_id2name(server[j].map[0]));
-+							// coordinates are unknown
- 									break;
- 								}
- 							// if no map-server is connected, we send: server closed
- 							if (j == MAX_MAP_SERVERS) {
-+						WFIFOHEAD(fd, 3);
- 								WFIFOW(fd,0) = 0x81;
--								WFIFOL(fd,2) = 1; // 01 = Server closed
-+						WFIFOB(fd,2) = 1; // 01 = Server closed
- 								WFIFOSET(fd,3);
--								RFIFOSKIP(fd,3);
- 								break;
- 							}
- 						}
- 					}
-+			WFIFOHEAD(fd, 28);
- 					WFIFOW(fd,0) = 0x71;
--					WFIFOL(fd,2) = char_dat[sd->found_char[ch]].char_id;
--					memcpy(WFIFOP(fd,6), char_dat[sd->found_char[ch]].last_point.map, 16);
--					printf("Character selection '%s' (account: %d, slot: %d).\n", char_dat[sd->found_char[ch]].name, sd->account_id, ch);
--					printf("--Send IP of map-server. ");
--					if (lan_ip_check(p))
--						WFIFOL(fd, 22) = inet_addr(lan_map_ip);
-+			WFIFOL(fd,2) = cd->char_id;
-+			memcpy(WFIFOP(fd,6), mapindex_id2name(cd->last_point.map), MAP_NAME_LENGTH);
-+			ShowInfo("Character selection '%s' (account: %d, slot: %d).\n", cd->name, sd->account_id, ch);
-+						    
-+			// Andvanced subnet check [LuzZza]
-+			if((subnet_map_ip = lan_subnetcheck((long *)p)))
-+				WFIFOL(fd,22) = subnet_map_ip;
- 					else
- 						WFIFOL(fd, 22) = server[i].ip;
-+
- 					WFIFOW(fd,26) = server[i].port;
- 					WFIFOSET(fd,28);
- 					if (auth_fifo_pos >= AUTH_FIFO_SIZE)
- 						auth_fifo_pos = 0;
--					//printf("auth_fifo set #%d - account %d, char: %d, secure: %08x-%08x\n", auth_fifo_pos, sd->account_id, char_dat[sd->found_char[ch]].char_id, sd->login_id1, sd->login_id2);
- 					auth_fifo[auth_fifo_pos].account_id = sd->account_id;
--					auth_fifo[auth_fifo_pos].char_id = char_dat[sd->found_char[ch]].char_id;
-+			auth_fifo[auth_fifo_pos].char_id = cd->char_id;
- 					auth_fifo[auth_fifo_pos].login_id1 = sd->login_id1;
- 					auth_fifo[auth_fifo_pos].login_id2 = sd->login_id2;
- 					auth_fifo[auth_fifo_pos].delflag = 0;
-@@ -2511,62 +3312,109 @@
- 					auth_fifo[auth_fifo_pos].sex = sd->sex;
- 					auth_fifo[auth_fifo_pos].connect_until_time = sd->connect_until_time;
- 					auth_fifo[auth_fifo_pos].ip = session[fd]->client_addr.sin_addr.s_addr;
--					auth_fifo_pos++;
-+
-+			//Send NEW auth packet [Kevin]
-+			if ((map_fd = server_fd[i]) < 1 || session[map_fd] == NULL)
-+			{	//0 Should not be a valid server_fd [Skotlex]
-+				ShowError("parse_char: Attempting to write to invalid session %d! Map Server #%d disconnected.\n", map_fd, i);
-+				server_fd[i] = -1;
-+				memset(&server[i], 0, sizeof(struct mmo_map_server));
-+				//Send server closed.
-+				WFIFOW(fd,0) = 0x81;
-+				WFIFOB(fd,2) = 1; // 01 = Server closed
-+				WFIFOSET(fd,3);
-+				break;
- 				}
-+			WFIFOW(map_fd,0) = 0x2afd;
-+			WFIFOW(map_fd,2) = 20 + sizeof(struct mmo_charstatus);
-+			WFIFOL(map_fd,4) = auth_fifo[auth_fifo_pos].account_id;
-+			WFIFOL(map_fd,8) = auth_fifo[auth_fifo_pos].login_id1;
-+			WFIFOL(map_fd,16) = auth_fifo[auth_fifo_pos].login_id2;
-+			WFIFOL(map_fd,12) = (unsigned long)auth_fifo[auth_fifo_pos].connect_until_time;
-+			memcpy(WFIFOP(map_fd,20), cd, sizeof(struct mmo_charstatus));
-+			WFIFOSET(map_fd, WFIFOW(map_fd,2));
-+
-+			set_char_online(i, cd->char_id, cd->account_id);
-+			//Sets char online in the party and breaks even share if needed.
-+			inter_party_logged(cd->party_id, cd->account_id, cd->char_id);
-+
-+			auth_fifo_pos++;
- 			}
--			RFIFOSKIP(fd,3);
- 			break;
- 
- 		case 0x67:	// �쐬
--			if (RFIFOREST(fd) < 37)
--				return 0;
-+			FIFOSD_CHECK(37);
-+				
-+			if(char_new == 0) //turn character creation on/off [Kevin]
-+				i = -2;
-+			else
- 			i = make_new_char(fd, RFIFOP(fd,2));
--			if (i < 0) {
-+				
-+			if(i == -1){ //added some better faile reporting to client on the txt version [Kevin]
-+                         //already exists
-+                            WFIFOHEAD(fd, 3);
- 				WFIFOW(fd,0) = 0x6e;
- 				WFIFOB(fd,2) = 0x00;
- 				WFIFOSET(fd,3);
- 				RFIFOSKIP(fd,37);
- 				break;
-+                        }else if(i == -2){
-+                            //denied
-+                            WFIFOHEAD(fd, 3);
-+                            WFIFOW(fd, 0) = 0x6e;
-+                            WFIFOB(fd, 2) = 0x02;
-+                            WFIFOSET(fd, 3); 
-+                            RFIFOSKIP(fd, 37);                           
-+                            break;
-+                        }else if(i == -3){
-+                            //underaged XD
-+                            WFIFOHEAD(fd, 3);
-+                            WFIFOW(fd, 0) = 0x6e;
-+                            WFIFOB(fd, 2) = 0x01;
-+                            WFIFOSET(fd, 3);
-+                            RFIFOSKIP(fd, 37);
-+                            break;
- 			}
- 
-+                        WFIFOHEAD(fd, 108);
- 			WFIFOW(fd,0) = 0x6d;
- 			memset(WFIFOP(fd,2), 0, 106);
- 
--			WFIFOL(fd,2) = char_dat[i].char_id;
--			WFIFOL(fd,2+4) = char_dat[i].base_exp;
--			WFIFOL(fd,2+8) = char_dat[i].zeny;
--			WFIFOL(fd,2+12) = char_dat[i].job_exp;
--			WFIFOL(fd,2+16) = char_dat[i].job_level;
-+			WFIFOL(fd,2) = char_dat[i].status.char_id;
-+			WFIFOL(fd,2+4) = char_dat[i].status.base_exp>LONG_MAX?LONG_MAX:char_dat[i].status.base_exp;
-+			WFIFOL(fd,2+8) = char_dat[i].status.zeny;
-+			WFIFOL(fd,2+12) = char_dat[i].status.job_exp>LONG_MAX?LONG_MAX:char_dat[i].status.job_exp;
-+			WFIFOL(fd,2+16) = char_dat[i].status.job_level;
- 
--			WFIFOL(fd,2+28) = char_dat[i].karma;
--			WFIFOL(fd,2+32) = char_dat[i].manner;
-+			WFIFOL(fd,2+28) = char_dat[i].status.karma;
-+			WFIFOL(fd,2+32) = char_dat[i].status.manner;
- 
- 			WFIFOW(fd,2+40) = 0x30;
--			WFIFOW(fd,2+42) = (char_dat[i].hp > 0x7fff) ? 0x7fff : char_dat[i].hp;
--			WFIFOW(fd,2+44) = (char_dat[i].max_hp > 0x7fff) ? 0x7fff : char_dat[i].max_hp;
--			WFIFOW(fd,2+46) = (char_dat[i].sp > 0x7fff) ? 0x7fff : char_dat[i].sp;
--			WFIFOW(fd,2+48) = (char_dat[i].max_sp > 0x7fff) ? 0x7fff : char_dat[i].max_sp;
--			WFIFOW(fd,2+50) = DEFAULT_WALK_SPEED; // char_dat[i].speed;
--			WFIFOW(fd,2+52) = char_dat[i].class;
--			WFIFOW(fd,2+54) = char_dat[i].hair;
--
--			WFIFOW(fd,2+58) = char_dat[i].base_level;
--			WFIFOW(fd,2+60) = char_dat[i].skill_point;
--
--			WFIFOW(fd,2+64) = char_dat[i].shield;
--			WFIFOW(fd,2+66) = char_dat[i].head_top;
--			WFIFOW(fd,2+68) = char_dat[i].head_mid;
--			WFIFOW(fd,2+70) = char_dat[i].hair_color;
--
--			memcpy(WFIFOP(fd,2+74), char_dat[i].name, 24);
--
--			WFIFOB(fd,2+98) = (char_dat[i].str > 255) ? 255 : char_dat[i].str;
--			WFIFOB(fd,2+99) = (char_dat[i].agi > 255) ? 255 : char_dat[i].agi;
--			WFIFOB(fd,2+100) = (char_dat[i].vit > 255) ? 255 : char_dat[i].vit;
--			WFIFOB(fd,2+101) = (char_dat[i].int_ > 255) ? 255 : char_dat[i].int_;
--			WFIFOB(fd,2+102) = (char_dat[i].dex > 255) ? 255 : char_dat[i].dex;
--			WFIFOB(fd,2+103) = (char_dat[i].luk > 255) ? 255 : char_dat[i].luk;
--			WFIFOB(fd,2+104) = char_dat[i].char_num;
-+			WFIFOW(fd,2+42) = (char_dat[i].status.hp > 0x7fff) ? 0x7fff : char_dat[i].status.hp;
-+			WFIFOW(fd,2+44) = (char_dat[i].status.max_hp > 0x7fff) ? 0x7fff : char_dat[i].status.max_hp;
-+			WFIFOW(fd,2+46) = (char_dat[i].status.sp > 0x7fff) ? 0x7fff : char_dat[i].status.sp;
-+			WFIFOW(fd,2+48) = (char_dat[i].status.max_sp > 0x7fff) ? 0x7fff : char_dat[i].status.max_sp;
-+			WFIFOW(fd,2+50) = DEFAULT_WALK_SPEED; // char_dat[i].status.speed;
-+			WFIFOW(fd,2+52) = char_dat[i].status.class_;
-+			WFIFOW(fd,2+54) = char_dat[i].status.hair;
-+
-+			WFIFOW(fd,2+58) = char_dat[i].status.base_level;
-+			WFIFOW(fd,2+60) = char_dat[i].status.skill_point;
-+
-+			WFIFOW(fd,2+64) = char_dat[i].status.shield;
-+			WFIFOW(fd,2+66) = char_dat[i].status.head_top;
-+			WFIFOW(fd,2+68) = char_dat[i].status.head_mid;
-+			WFIFOW(fd,2+70) = char_dat[i].status.hair_color;
-+
-+			memcpy(WFIFOP(fd,2+74), char_dat[i].status.name, NAME_LENGTH);
-+
-+			WFIFOB(fd,2+98) = (char_dat[i].status.str > 255) ? 255 : char_dat[i].status.str;
-+			WFIFOB(fd,2+99) = (char_dat[i].status.agi > 255) ? 255 : char_dat[i].status.agi;
-+			WFIFOB(fd,2+100) = (char_dat[i].status.vit > 255) ? 255 : char_dat[i].status.vit;
-+			WFIFOB(fd,2+101) = (char_dat[i].status.int_ > 255) ? 255 : char_dat[i].status.int_;
-+			WFIFOB(fd,2+102) = (char_dat[i].status.dex > 255) ? 255 : char_dat[i].status.dex;
-+			WFIFOB(fd,2+103) = (char_dat[i].status.luk > 255) ? 255 : char_dat[i].status.luk;
-+			WFIFOB(fd,2+104) = char_dat[i].status.char_num;
- 
- 			WFIFOSET(fd,108);
- 			RFIFOSKIP(fd,37);
-@@ -2578,8 +3426,8 @@
- 			}
- 
- 		case 0x68:	// delete char //Yor's Fix
--			if (RFIFOREST(fd) < 46)
--				return 0;
-+			FIFOSD_CHECK(46);
-+
- 			memcpy(email, RFIFOP(fd,6), 40);
- 			if (e_mail_check(email) == 0)
- 				strncpy(email, "a@a.com", 40); // default e-mail
-@@ -2596,7 +3444,7 @@
- 				} else {
- 					// we change the packet to set it like selection.
- 					for (i = 0; i < 9; i++)
--						if (char_dat[sd->found_char[i]].char_id == RFIFOL(fd,2)) {
-+						if (char_dat[sd->found_char[i]].status.char_id == RFIFOL(fd,2)) {
- 							// we save new e-mail
- 							memcpy(sd->email, email, 40);
- 							// we send new e-mail to login-server ('online' login-server is checked before)
-@@ -2608,7 +3456,7 @@
- 							RFIFOSKIP(fd,43);
- 							// change value to put new packet (char selection)
- 							RFIFOW(fd, 0) = 0x66;
--							RFIFOB(fd, 2) = char_dat[sd->found_char[i]].char_num;
-+							RFIFOB(fd, 2) = char_dat[sd->found_char[i]].status.char_num;
- 							// not send packet, it's modify of actual packet
- 							break;
- 						}
-@@ -2630,7 +3478,7 @@
- 				} else {
- 					for (i = 0; i < 9; i++) {
- 						struct mmo_charstatus *cs = NULL;
--						if ((cs = &char_dat[sd->found_char[i]])->char_id == RFIFOL(fd,2)) {
-+						if ((cs = &char_dat[sd->found_char[i]].status)->char_id == RFIFOL(fd,2)) {
- 							char_delete(cs); // deletion process
- 
- 							if (sd->found_char[i] != char_num - 1) {
-@@ -2640,8 +3488,8 @@
- 									int j, k;
- 									struct char_session_data *sd2;
- 									for (j = 0; j < fd_max; j++) {
--										if (session[j] && (sd2 = session[j]->session_data) &&
--											sd2->account_id == char_dat[char_num-1].account_id) {
-+										if (session[j] && (sd2 = (struct char_session_data*)session[j]->session_data) &&
-+											sd2->account_id == char_dat[char_num-1].status.account_id) {
- 											for (k = 0; k < 9; k++) {
- 												if (sd2->found_char[k] == char_num-1) {
- 													sd2->found_char[k] = sd->found_char[i];
-@@ -2682,7 +3530,7 @@
- 				if (server_fd[i] < 0)
- 					break;
- 			}
--			if (i == MAX_MAP_SERVERS || strcmp(RFIFOP(fd,2), userid) || strcmp(RFIFOP(fd,26), passwd)){
-+			if (i == MAX_MAP_SERVERS || strcmp((char*)RFIFOP(fd,2), userid) || strcmp((char*)RFIFOP(fd,26), passwd)){
- 				WFIFOB(fd,2) = 3;
- 				WFIFOSET(fd,3);
- 				RFIFOSKIP(fd,60);
-@@ -2691,8 +3539,6 @@
- 				WFIFOB(fd,2) = 0;
- 				session[fd]->func_parse = parse_frommap;
- 				server_fd[i] = fd;
--				if(anti_freeze_enable)
--					server_freezeflag[i] = 5; // Map anti-freeze system. Counter. 5 ok, 4...0 freezed
- 				server[i].ip = RFIFOL(fd,54);
- 				server[i].port = RFIFOW(fd,58);
- 				server[i].users = 0;
-@@ -2735,9 +3581,6 @@
- 			return 0;
- 
- 		case 0x7532:	// �ڑ��̐ؒf(default�Ə����͈ꏏ���������I�ɂ��邽��)
--			session[fd]->eof = 1;
--			return 0;
--
- 		default:
- 			session[fd]->eof = 1;
- 			return 0;
-@@ -2747,6 +3590,30 @@
- 	return 0;
- }
- 
-+// Console Command Parser [Wizputer]
-+int parse_console(char *buf) {
-+    char *type,*command;
-+
-+	type = (char *)aCalloc(64,1);
-+	command = (char *)aCalloc(64,1);
-+
-+//	memset(type,0,64);
-+//	memset(command,0,64);
-+
-+    ShowStatus("Console: %s\n",buf);
-+
-+    if ( sscanf(buf, "%[^:]:%[^\n]", type , command ) < 2 )
-+        sscanf(buf,"%[^\n]",type);
-+
-+    ShowDebug("Type of command: %s || Command: %s \n",type,command);
-+
-+    if(buf) aFree(buf);
-+    if(type) aFree(type);
-+    if(command) aFree(command);
-+
-+    return 0;
-+}
-+
- // �S�Ă�MAP�T�[�o�[�Ƀf�[�^���M�i���M����map�I�̐���Ԃ��j
- int mapif_sendall(unsigned char *buf, unsigned int len) {
- 	int i, c;
-@@ -2755,6 +3622,16 @@
- 	for(i = 0; i < MAX_MAP_SERVERS; i++) {
- 		int fd;
- 		if ((fd = server_fd[i]) >= 0) {
-+			if (session[fd] == NULL)
-+			{	//Could this be the crash's source? [Skotlex]
-+				ShowError("mapif_sendall: Attempting to write to invalid session %d! Map Server #%d disconnected.\n", fd, i);
-+				server_fd[i] = -1;
-+				memset(&server[i], 0, sizeof(struct mmo_map_server));
-+				continue;
-+			}
-+			WFIFOHEAD(fd, len);
-+			if (WFIFOSPACE(fd) < len) //Increase buffer size.
-+				realloc_writefifo(fd, len);
- 			memcpy(WFIFOP(fd,0), buf, len);
- 			WFIFOSET(fd,len);
- 			c++;
-@@ -2771,6 +3648,9 @@
- 	for(i = 0; i < MAX_MAP_SERVERS; i++) {
- 		int fd;
- 		if ((fd = server_fd[i]) >= 0 && fd != sfd) {
-+			WFIFOHEAD(fd, len);
-+			if (WFIFOSPACE(fd) < len) //Increase buffer size.
-+				realloc_writefifo(fd, len);
- 			memcpy(WFIFOP(fd,0), buf, len);
- 			WFIFOSET(fd, len);
- 			c++;
-@@ -2785,6 +3665,9 @@
- 	if (fd >= 0) {
- 		for(i = 0; i < MAX_MAP_SERVERS; i++) {
- 			if (fd == server_fd[i]) {
-+				WFIFOHEAD(fd, len);
-+				if (WFIFOSPACE(fd) < len) //Increase buffer size.
-+					realloc_writefifo(fd, len);
- 				memcpy(WFIFOP(fd,0), buf, len);
- 				WFIFOSET(fd,len);
- 				return 1;
-@@ -2796,10 +3679,11 @@
- 
- int send_users_tologin(int tid, unsigned int tick, int id, int data) {
- 	int users = count_users();
--	char buf[16];
-+	unsigned char buf[16];
- 
- 	if (login_fd > 0 && session[login_fd]) {
- 		// send number of user to login server
-+		WFIFOHEAD(login_fd, 6);
- 		WFIFOW(login_fd,0) = 0x2714;
- 		WFIFOL(login_fd,2) = users;
- 		WFIFOSET(login_fd,6);
-@@ -2812,17 +3696,52 @@
- 	return 0;
- }
- 
-+static int send_accounts_tologin_sub(DBKey key, void* data, va_list ap) {
-+	struct online_char_data* character = (struct online_char_data*)data;
-+	int *i = va_arg(ap, int*);
-+	int count = va_arg(ap, int);
-+	if ((*i) >= count)
-+		return 0; //This is an error that shouldn't happen....
-+	if(character->server > -1) {
-+		WFIFOHEAD(login_fd, 8+count*4);
-+		WFIFOL(login_fd, 8+(*i)*4) =character->account_id;
-+		(*i)++;
-+		return 1;
-+	}
-+	return 0;
-+}
-+
-+int send_accounts_tologin(int tid, unsigned int tick, int id, int data) {
-+	int users = count_users(), i=0;
-+
-+	if (login_fd > 0 && session[login_fd]) {
-+		// send account list to login server
-+		WFIFOHEAD(login_fd, 8+users*4);
-+		WFIFOW(login_fd,0) = 0x272d;
-+		WFIFOL(login_fd,4) = users;
-+		online_char_db->foreach(online_char_db, send_accounts_tologin_sub, &i);
-+		WFIFOW(login_fd,2) = 8+ i*4;
-+		if (i > 0)
-+			WFIFOSET(login_fd,WFIFOW(login_fd,2));
-+	}
-+	return 0;
-+}
-+
- int check_connect_login_server(int tid, unsigned int tick, int id, int data) {
- 	if (login_fd <= 0 || session[login_fd] == NULL) {
--		printf("Attempt to connect to login-server...\n");
-+		ShowInfo("Attempt to connect to login-server...\n");
- 		login_fd = make_connection(login_ip, login_port);
-+		if (login_fd == -1)
-+		{	//Try again later... [Skotlex]
-+			login_fd = 0;
-+			return 0;
-+		}
- 		session[login_fd]->func_parse = parse_tologin;
- 		realloc_fifo(login_fd, FIFOSIZE_SERVERLINK, FIFOSIZE_SERVERLINK);
-+                WFIFOHEAD(login_fd, 86);
- 		WFIFOW(login_fd,0) = 0x2710;
--		memset(WFIFOP(login_fd,2), 0, 24);
--		memcpy(WFIFOP(login_fd,2), userid, strlen(userid) < 24 ? strlen(userid) : 24);
--		memset(WFIFOP(login_fd,26), 0, 24);
--		memcpy(WFIFOP(login_fd,26), passwd, strlen(passwd) < 24 ? strlen(passwd) : 24);
-+		memcpy(WFIFOP(login_fd,2), userid, 24);
-+		memcpy(WFIFOP(login_fd,26), passwd, 24);
- 		WFIFOL(login_fd,50) = 0;
- 		WFIFOL(login_fd,54) = char_ip;
- 		WFIFOL(login_fd,58) = char_port;
-@@ -2830,12 +3749,28 @@
- 		memcpy(WFIFOP(login_fd,60), server_name, strlen(server_name) < 20 ? strlen(server_name) : 20);
- 		WFIFOW(login_fd,80) = 0;
- 		WFIFOW(login_fd,82) = char_maintenance;
--		WFIFOW(login_fd,84) = char_new;
-+
-+		WFIFOW(login_fd,84) = char_new_display; //only display (New) if they want to [Kevin]
-+		
- 		WFIFOSET(login_fd,86);
- 	}
- 	return 0;
- }
- 
-+//------------------------------------------------
-+//Invoked 15 seconds after mapif_disconnectplayer in case the map server doesn't
-+//replies/disconnect the player we tried to kick. [Skotlex]
-+//------------------------------------------------
-+static int chardb_waiting_disconnect(int tid, unsigned int tick, int id, int data)
-+{
-+	struct online_char_data* character;
-+	if ((character = idb_get(online_char_db, id)) != NULL && character->waiting_disconnect)
-+	{	//Mark it offline due to timeout.
-+		set_char_offline(character->char_id, character->account_id);
-+	}
-+	return 0;
-+}
-+
- //----------------------------------------------------------
- // Return numerical value of a switch configuration by [Yor]
- // on/off, english, fran�ais, deutsch, espa�ol
-@@ -2849,92 +3784,56 @@
- 	return atoi(str);
- }
- 
--//-------------------------------------------
--// Reading Lan Support configuration by [Yor]
--//-------------------------------------------
--int lan_config_read(const char *lancfgName) {
--	int j;
--	struct hostent * h = NULL;
--	char line[1024], w1[1024], w2[1024];
--	FILE *fp;
-+//----------------------------------
-+// Reading Lan Support configuration
-+// Rewrote: Anvanced subnet check [LuzZza]
-+//----------------------------------
-+int char_lan_config_read(const char *lancfgName) {
- 
--	// set default configuration
--	strncpy(lan_map_ip, "127.0.0.1", sizeof(lan_map_ip));
--	subneti[0] = 127;
--	subneti[1] = 0;
--	subneti[2] = 0;
--	subneti[3] = 1;
--	for(j = 0; j < 4; j++)
--		subnetmaski[j] = 255;
--
--	fp = fopen(lancfgName, "r");
-+	FILE *fp;
-+	int line_num = 0;
-+	char line[1024], w1[64], w2[64], w3[64], w4[64], w5[64];
- 
--	if (fp == NULL) {
--		printf("LAN support configuration file not found: %s\n", lancfgName);
-+	if((fp = fopen(lancfgName, "r")) == NULL) {
-+		ShowWarning("LAN Support configuration file is not found: %s\n", lancfgName);
- 		return 1;
- 	}
- 
--	printf ("---start reading of Lan Support configuration...\n");
-+	ShowInfo("Reading the configuration file %s...\n", lancfgName);
- 
- 	while(fgets(line, sizeof(line)-1, fp)) {
--		if (line[0] == '/' && line[1] == '/')
-+
-+		line_num++;		
-+		if ((line[0] == '/' && line[1] == '/') || line[0] == '\n' || line[1] == '\n')
- 			continue;
- 
- 		line[sizeof(line)-1] = '\0';
--		if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2)
--			continue;
-+		if(sscanf(line,"%[^:]: %[^/]/%[^:]:%[^:]:%[^\r\n]", w1, w2, w3, w4, w5) != 5) {
- 
--		remove_control_chars(w1);
--		remove_control_chars(w2);
--		if (strcmpi(w1, "lan_map_ip") == 0) { // Read map-server Lan IP Address
--			h = gethostbyname(w2);
--			if (h != NULL) {
--				sprintf(lan_map_ip, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
--			} else {
--				strncpy(lan_map_ip, w2, sizeof(lan_map_ip));
--				lan_map_ip[sizeof(lan_map_ip)-1] = 0;
--			}
--			printf("LAN IP of map-server: %s.\n", lan_map_ip);
--		} else if (strcmpi(w1, "subnet") == 0) { // Read Subnetwork
--			for(j = 0; j < 4; j++)
--				subneti[j] = 0;
--			h = gethostbyname(w2);
--			if (h != NULL) {
--				for(j = 0; j < 4; j++)
--					subneti[j] = (unsigned char)h->h_addr[j];
--			} else {
--				sscanf(w2, "%d.%d.%d.%d", &subneti[0], &subneti[1], &subneti[2], &subneti[3]);
--			}
--			printf("Sub-network of the map-server: %d.%d.%d.%d.\n", subneti[0], subneti[1], subneti[2], subneti[3]);
--		} else if (strcmpi(w1, "subnetmask") == 0){ // Read Subnetwork Mask
--			for(j = 0; j < 4; j++)
--				subnetmaski[j] = 255;
--			h = gethostbyname(w2);
--			if (h != NULL) {
--				for(j = 0; j < 4; j++)
--					subnetmaski[j] = (unsigned char)h->h_addr[j];
--			} else {
--				sscanf(w2, "%d.%d.%d.%d", &subnetmaski[0], &subnetmaski[1], &subnetmaski[2], &subnetmaski[3]);
--			}
--			printf("Sub-network mask of the map-server: %d.%d.%d.%d.\n", subnetmaski[0], subnetmaski[1], subnetmaski[2], subnetmaski[3]);
--		}
-+			ShowWarning("Error syntax of configuration file %s in line %d.\n", lancfgName, line_num);	
-+			continue;
- 	}
--	fclose(fp);
- 
--	// sub-network check of the map-server
--	{
--		unsigned int a0, a1, a2, a3;
--		unsigned char p[4];
--		sscanf(lan_map_ip, "%d.%d.%d.%d", &a0, &a1, &a2, &a3);
--		p[0] = a0; p[1] = a1; p[2] = a2; p[3] = a3;
--		printf("LAN test of LAN IP of the map-server: ");
--		if (lan_ip_check(p) == 0) {
--			printf("\033[1;31m***ERROR: LAN IP of the map-server doesn't belong to the specified Sub-network.\033[0m\n");
--		}
-+		remove_control_chars((unsigned char *)w1);
-+		remove_control_chars((unsigned char *)w2);
-+		remove_control_chars((unsigned char *)w3);
-+		remove_control_chars((unsigned char *)w4);
-+		remove_control_chars((unsigned char *)w5);
-+
-+		if(strcmpi(w1, "subnet") == 0) {
-+	
-+			subnet[subnet_count].subnet = inet_addr(w2);
-+			subnet[subnet_count].mask = inet_addr(w3);
-+			subnet[subnet_count].char_ip = inet_addr(w4);
-+			subnet[subnet_count].map_ip = inet_addr(w5);
-+				
-+			subnet_count++;
- 	}
- 
--	printf("---End reading of Lan Support configuration...\n");
-+		ShowStatus("Information about %d subnetworks readen.\n", subnet_count);
-+	}
- 
-+	fclose(fp);
- 	return 0;
- }
- 
-@@ -2944,10 +3843,11 @@
- 	FILE *fp = fopen(cfgName, "r");
- 
- 	if (fp == NULL) {
--		printf("Configuration file not found: %s.\n", cfgName);
-+		ShowFatalError("Configuration file not found: %s.\n", cfgName);
- 		exit(1);
- 	}
- 
-+	ShowInfo("Reading configuration file %s...\n", cfgName);
- 	while(fgets(line, sizeof(line)-1, fp)) {
- 		if (line[0] == '/' && line[1] == '/')
- 			continue;
-@@ -2956,86 +3856,122 @@
- 		if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2)
- 			continue;
- 
--		remove_control_chars(w1);
--		remove_control_chars(w2);
--		if (strcmpi(w1, "userid") == 0) {
--			memcpy(userid, w2, 24);
-+		remove_control_chars((unsigned char *)w1);
-+		remove_control_chars((unsigned char *)w2);
-+		if(strcmpi(w1,"timestamp_format") == 0) {
-+			strncpy(timestamp_format, w2, 20);
-+		} else if(strcmpi(w1,"console_silent")==0){
-+			msg_silent = 0; //To always allow the next line to show up.
-+			ShowInfo("Console Silent Setting: %d\n", atoi(w2));
-+			msg_silent = atoi(w2);
-+		} else if (strcmpi(w1, "userid") == 0) {
-+			strncpy(userid, w2, 24);
- 		} else if (strcmpi(w1, "passwd") == 0) {
--			memcpy(passwd, w2, 24);
-+			strncpy(passwd, w2, 24);
- 		} else if (strcmpi(w1, "server_name") == 0) {
- 			memcpy(server_name, w2, sizeof(server_name));
- 			server_name[sizeof(server_name) - 1] = '\0';
--			printf("%s server has been intialized\n", w2);
-+			ShowStatus("%s server has been initialized\n", w2);
- 		} else if (strcmpi(w1, "wisp_server_name") == 0) {
- 			if (strlen(w2) >= 4) {
- 				memcpy(wisp_server_name, w2, sizeof(wisp_server_name));
- 				wisp_server_name[sizeof(wisp_server_name) - 1] = '\0';
- 			}
- 		} else if (strcmpi(w1, "login_ip") == 0) {
-+			login_ip_set_ = 1;
- 			h = gethostbyname(w2);
- 			if (h != NULL) {
--				printf("Login server IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-+				ShowStatus("Login server IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
- 				sprintf(login_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
- 			} else
- 				memcpy(login_ip_str, w2, 16);
- 		} else if (strcmpi(w1, "login_port") == 0) {
- 			login_port = atoi(w2);
- 		} else if (strcmpi(w1, "char_ip") == 0) {
-+			char_ip_set_ = 1;
- 			h = gethostbyname(w2);
- 			if (h != NULL) {
--				printf("Character server IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-+				ShowStatus("Character server IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
- 				sprintf(char_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
- 			} else
- 				memcpy(char_ip_str, w2, 16);
-+		} else if (strcmpi(w1, "bind_ip") == 0) {
-+			bind_ip_set_ = 1;
-+			h = gethostbyname(w2);
-+			if (h != NULL) {
-+				ShowStatus("Character server binding IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-+				sprintf(bind_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-+			} else
-+				memcpy(bind_ip_str, w2, 16);
- 		} else if (strcmpi(w1, "char_port") == 0) {
- 			char_port = atoi(w2);
- 		} else if (strcmpi(w1, "char_maintenance") == 0) {
- 			char_maintenance = atoi(w2);
- 		} else if (strcmpi(w1, "char_new") == 0) {
- 			char_new = atoi(w2);
-+		} else if (strcmpi(w1, "char_new_display") == 0) {
-+			char_new_display = atoi(w2);
- 		} else if (strcmpi(w1, "email_creation") == 0) {
- 			email_creation = config_switch(w2);
- 		} else if (strcmpi(w1, "char_txt") == 0) {
- 			strcpy(char_txt, w2);
-+		} else if (strcmpi(w1, "scdata_txt") == 0) { //By Skotlex
-+			strcpy(scdata_txt, w2);
- 		} else if (strcmpi(w1, "backup_txt") == 0) { //By zanetheinsane
- 			strcpy(backup_txt, w2);
-+		} else if (strcmpi(w1, "friends_txt") == 0) { //By davidsiaw
-+			strcpy(friends_txt, w2);
- 		} else if (strcmpi(w1, "backup_txt_flag") == 0) { // The backup_txt file was created because char deletion bug existed. Now it's finish and that take a lot of time to create a second file when there are a lot of characters. By [Yor]
- 			backup_txt_flag = config_switch(w2);
- 		} else if (strcmpi(w1, "max_connect_user") == 0) {
- 			max_connect_user = atoi(w2);
- 			if (max_connect_user < 0)
- 				max_connect_user = 0; // unlimited online players
-+		} else if(strcmpi(w1, "gm_allow_level") == 0) {
-+			gm_allow_level = atoi(w2);
-+			if(gm_allow_level < 0)
-+				gm_allow_level = 99;
- 		} else if (strcmpi(w1, "check_ip_flag") == 0) {
- 			check_ip_flag = config_switch(w2);
-+		} else if (strcmpi(w1, "online_check") == 0) {
-+			online_check = config_switch(w2);
- 		} else if (strcmpi(w1, "autosave_time") == 0) {
- 			autosave_interval = atoi(w2)*1000;
- 			if (autosave_interval <= 0)
- 				autosave_interval = DEFAULT_AUTOSAVE_INTERVAL;
-+		} else if (strcmpi(w1, "save_log") == 0) {
-+			save_log = config_switch(w2);
- 		} else if (strcmpi(w1, "start_point") == 0) {
- 			char map[32];
- 			int x, y;
- 			if (sscanf(w2, "%[^,],%d,%d", map, &x, &y) < 3)
- 				continue;
- 			if (strstr(map, ".gat") != NULL) { // Verify at least if '.gat' is in the map name
--				memcpy(start_point.map, map, 16);
-+				start_point.map = mapindex_name2id(map);
-+				if (!start_point.map) {
-+					ShowError("Specified start_point %s not found in map-index cache.\n", map);
-+					start_point.map = 0;
-+				}
- 				start_point.x = x;
- 				start_point.y = y;
- 			}
-+		} else if(strcmpi(w1,"log_char")==0) {		//log char or not [devil]
-+			log_char = atoi(w2);
- 		} else if (strcmpi(w1, "start_zeny") == 0) {
- 			start_zeny = atoi(w2);
- 			if (start_zeny < 0)
- 				start_zeny = 0;
- 		} else if (strcmpi(w1, "start_weapon") == 0) {
--			start_zeny = atoi(w2);
-+			start_weapon = atoi(w2);
- 			if (start_weapon < 0)
- 				start_weapon = 0;
- 		} else if (strcmpi(w1, "start_armor") == 0) {
--			start_zeny = atoi(w2);
-+			start_armor = atoi(w2);
- 			if (start_armor < 0)
- 				start_armor = 0;
- 		} else if (strcmpi(w1, "unknown_char_name") == 0) {
- 			strcpy(unknown_char_name, w2);
--			unknown_char_name[24] = 0;
-+			unknown_char_name[NAME_LENGTH-1] = '\0';
- 		} else if (strcmpi(w1, "char_log_filename") == 0) {
- 			strcpy(char_log_filename, w2);
- 		} else if (strcmpi(w1, "name_ignoring_case") == 0) {
-@@ -3061,52 +3997,130 @@
- 			online_refresh_html = atoi(w2);
- 			if (online_refresh_html < 1)
- 				online_refresh_html = 1;
--		} else if(strcmpi(w1,"anti_freeze_enable")==0){
--			anti_freeze_enable = config_switch(w2);
--		} else if (strcmpi(w1, "anti_freeze_interval") == 0) {
--			ANTI_FREEZE_INTERVAL = atoi(w2);
--			if (ANTI_FREEZE_INTERVAL < 5)
--				ANTI_FREEZE_INTERVAL = 5; // minimum 5 seconds
-+		} else if(strcmpi(w1,"db_path")==0) {
-+			strcpy(db_path,w2);
-+		} else if (strcmpi(w1, "console") == 0) {
-+			if(strcmpi(w2,"on") == 0 || strcmpi(w2,"yes") == 0 )
-+				console = 1;
-+		} else if (strcmpi(w1, "fame_list_alchemist") == 0) {
-+			fame_list_size_chemist = atoi(w2);
-+			if (fame_list_size_chemist > MAX_FAME_LIST) {
-+				ShowWarning("Max fame list size is %d (fame_list_alchemist)\n", MAX_FAME_LIST);
-+				fame_list_size_chemist = MAX_FAME_LIST;
-+			}
-+		} else if (strcmpi(w1, "fame_list_blacksmith") == 0) {
-+			fame_list_size_smith = atoi(w2);
-+			if (fame_list_size_smith > MAX_FAME_LIST) {
-+				ShowWarning("Max fame list size is %d (fame_list_blacksmith)\n", MAX_FAME_LIST);
-+				fame_list_size_smith = MAX_FAME_LIST;
-+			}
-+		} else if (strcmpi(w1, "fame_list_taekwon") == 0) {
-+			fame_list_size_taekwon = atoi(w2);
-+			if (fame_list_size_taekwon > MAX_FAME_LIST) {
-+				ShowWarning("Max fame list size is %d (fame_list_taekwon)\n", MAX_FAME_LIST);
-+				fame_list_size_taekwon = MAX_FAME_LIST;
-+			}
- 		} else if (strcmpi(w1, "import") == 0) {
- 			char_config_read(w2);
- 		}
- 	}
- 	fclose(fp);
- 
-+	ShowInfo("done reading %s.\n", cfgName);
- 	return 0;
- }
- 
-+int chardb_final(int key, void* data, va_list va)
-+{
-+	aFree(data);
-+	return 0;
-+}
- void do_final(void) {
--	int i;
--
-+	ShowStatus("Terminating server.\n");
- 	// write online players files with no player
--	for(i = 0; i < char_num; i++)
--		online_chars[i] = -1;
-+	online_char_db->clear(online_char_db, NULL); //clean the db...
- 	create_online_files();
--	free(online_chars);
-+	online_char_db->destroy(online_char_db, NULL); //dispose the db...
- 
- 	mmo_char_sync();
- 	inter_save();
-+	set_all_offline();
- 
--	if (gm_account != NULL)
--		free(gm_account);
-+	if(gm_account) aFree(gm_account);
-+	if(char_dat) aFree(char_dat);
- 
--	free(char_dat);
- 	delete_session(login_fd);
- 	delete_session(char_fd);
- 
-+#ifdef ENABLE_SC_SAVING
-+	status_final();
-+#endif
-+	inter_final();
-+	mapindex_final();
-+
- 	char_log("----End of char-server (normal end with closing of all files)." RETCODE);
- }
- 
-+void set_server_type(void)
-+{
-+	SERVER_TYPE = ATHENA_SERVER_CHAR;
-+}
-+
-+static int online_data_cleanup_sub(DBKey key, void *data, va_list ap)
-+{
-+	struct online_char_data *character= (struct online_char_data*)data;
-+	if (character->server == -2) //Unknown server.. set them offline
-+		set_char_offline(character->char_id, character->account_id);
-+	if (character->server < 0)
-+		//Free data from players that have not been online for a while.
-+		db_remove(online_char_db, key);
-+	return 0;
-+}
-+
-+static int online_data_cleanup(int tid, unsigned int tick, int id, int data)
-+{
-+	online_char_db->foreach(online_char_db, online_data_cleanup_sub);
-+	return 0;
-+}
-+
- int do_init(int argc, char **argv) {
- 	int i;
- 
-+	mapindex_init(); //Needed here for the start-point reading.
-+	start_point.map = mapindex_name2id("new_1-1.gat");
-+	char_config_read((argc < 2) ? CHAR_CONF_NAME : argv[1]);
-+	char_lan_config_read((argc > 3) ? argv[3] : LOGIN_LAN_CONF_NAME);
-+
-+	if (strcmp(userid, "s1")==0 && strcmp(passwd, "p1")==0) {
-+		ShowError("Using the default user/password s1/p1 is NOT RECOMMENDED.\n");
-+		ShowNotice("Please edit your save/account.txt file to create a proper inter-server user/password (gender 'S')\n");
-+		ShowNotice("And then change the user/password to use in conf/char_athena.conf (or conf/import/char_conf.txt)\n");
-+	}
-+
- 	// a newline in the log...
- 	char_log("");
-+	// moved behind char_config_read in case we changed the filename [celest]
- 	char_log("The char-server starting..." RETCODE);
- 
--	char_config_read((argc < 2) ? CHAR_CONF_NAME : argv[1]);
--	lan_config_read((argc > 1) ? argv[1] : LOGIN_LAN_CONF_NAME);
-+	if ((naddr_ != 0) && (login_ip_set_ == 0 || char_ip_set_ == 0)) {
-+		// The char server should know what IP address it is running on
-+		 //   - MouseJstr
-+		int localaddr = ntohl(addr_[0]);
-+		unsigned char *ptr = (unsigned char *) &localaddr;
-+		char buf[16];
-+		sprintf(buf, "%d.%d.%d.%d", ptr[0], ptr[1], ptr[2], ptr[3]);;
-+		if (naddr_ != 1)
-+			ShowStatus("Multiple interfaces detected..  using %s as our IP address\n", buf);
-+		else
-+			ShowStatus("Defaulting to %s as our IP address\n", buf);
-+		if (login_ip_set_ == 0)
-+			strcpy(login_ip_str, buf);
-+		if (char_ip_set_ == 0)
-+			strcpy(char_ip_str, buf);
-+
-+		if (ptr[0] == 192 && ptr[1] == 168)
-+			ShowWarning("Firewall detected.. edit lan_support.conf and char_athena.conf\n");
-+	}
- 
- 	login_ip = inet_addr(login_ip_str);
- 	char_ip = inet_addr(char_ip_str);
-@@ -3116,34 +4130,45 @@
- 		server_fd[i] = -1;
- 	}
- 
--	mmo_char_init();
-+	online_char_db = db_alloc(__FILE__,__LINE__,DB_INT,DB_OPT_RELEASE_DATA,sizeof(int));
- 
-+	mmo_char_init();
-+#ifdef ENABLE_SC_SAVING
-+	status_init();
-+#endif
- 	update_online = time(NULL);
- 	create_online_files(); // update online players files at start of the server
- 
- 	inter_init((argc > 2) ? argv[2] : inter_cfgName);	// inter server ������
- 
--	set_termfunc(do_final);
- 	set_defaultparse(parse_char);
- 
--	char_fd = make_listen_port(char_port);
-+	if (bind_ip_set_)
-+		char_fd = make_listen_bind(inet_addr(bind_ip_str),char_port);
-+	else
-+		char_fd = make_listen_bind(INADDR_ANY,char_port);
- 
- 	add_timer_func_list(check_connect_login_server, "check_connect_login_server");
- 	add_timer_func_list(send_users_tologin, "send_users_tologin");
-+	add_timer_func_list(send_accounts_tologin, "send_accounts_tologin");
- 	add_timer_func_list(mmo_char_sync_timer, "mmo_char_sync_timer");
-+	add_timer_func_list(chardb_waiting_disconnect, "chardb_waiting_disconnect");
-+	add_timer_func_list(online_data_cleanup, "online_data_cleanup");
- 	
--	i = add_timer_interval(gettick() + 1000, check_connect_login_server, 0, 0, 10 * 1000);
--	i = add_timer_interval(gettick() + 1000, send_users_tologin, 0, 0, 5 * 1000);
--	i = add_timer_interval(gettick() + autosave_interval, mmo_char_sync_timer, 0, 0, autosave_interval);
--	
--	if(anti_freeze_enable > 0) {
--		add_timer_func_list(map_anti_freeze_system, "map_anti_freeze_system");
--		i = add_timer_interval(gettick() + 1000, map_anti_freeze_system, 0, 0, ANTI_FREEZE_INTERVAL * 1000); // checks every X seconds user specifies
-+	add_timer_interval(gettick() + 600*1000, online_data_cleanup, 0, 0, 600 * 1000);
-+	add_timer_interval(gettick() + 1000, check_connect_login_server, 0, 0, 10 * 1000);
-+	add_timer_interval(gettick() + 1000, send_users_tologin, 0, 0, 5 * 1000);
-+	add_timer_interval(gettick() + 3600*1000, send_accounts_tologin, 0, 0, 3600*1000); //Sync online accounts every hour
-+	add_timer_interval(gettick() + autosave_interval, mmo_char_sync_timer, 0, 0, autosave_interval);
-+
-+	if(console) {
-+	    set_defaultconsoleparse(parse_console);
-+	   	start_console();
- 	}
- 
- 	char_log("The char-server is ready (Server is listening on the port %d)." RETCODE, char_port);
- 
--	printf("The char-server is \033[1;32mready\033[0m (Server is listening on the port %d).\n\n", char_port);
-+	ShowStatus("The char-server is "CL_GREEN"ready"CL_RESET" (Server is listening on the port %d).\n\n", char_port);
- 
- 	return 0;
- }
diff --git a/misc/src/char/int_guild.c b/misc/src/char/int_guild.c
deleted file mode 100644
index 665e017..0000000
--- a/misc/src/char/int_guild.c
+++ /dev/null
@@ -1,1441 +0,0 @@
-// $Id: int_guild.c,v 1.2 2004/09/25 19:36:53 Akitasha Exp $
-#include "inter.h"
-#include "int_guild.h"
-#include "int_storage.h"
-#include "mmo.h"
-#include "char.h"
-#include "socket.h"
-#include "db.h"
-#include "lock.h"
-
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-char guild_txt[1024] = "save/guild.txt";
-char castle_txt[1024] = "save/castle.txt";
-
-static struct dbt *guild_db;
-static struct dbt *castle_db;
-
-static int guild_newid = 10000;
-
-static int guild_exp[100];
-
-int mapif_parse_GuildLeave(int fd, int guild_id, int account_id, int char_id, int flag, const char *mes);
-int mapif_guild_broken(int guild_id, int flag);
-int guild_check_empty(struct guild *g);
-int guild_calcinfo(struct guild *g);
-int mapif_guild_basicinfochanged(int guild_id, int type, const void *data, int len);
-int mapif_guild_info(int fd, struct guild *g);
-int guild_break_sub(void *key, void *data, va_list ap);
-
-// �M���h�f�[�^�̕�����ւ̕ϊ�
-int inter_guild_tostr(char *str, struct guild *g) {
-	int i, c, len;
-
-	// ��{�f�[�^
-	len = sprintf(str, "%d\t%s\t%s\t%d,%d,%d,%d,%d\t%s#\t%s#\t",
-	              g->guild_id, g->name, g->master,
-	              g->guild_lv, g->max_member, g->exp, g->skill_point, g->castle_id,
-	              g->mes1, g->mes2);
-	// �����o�[
-	for(i = 0; i < g->max_member; i++) {
-		struct guild_member *m = &g->member[i];
-		len += sprintf(str + len, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\t%s\t",
-		               m->account_id, m->char_id,
-		               m->hair, m->hair_color, m->gender,
-		               m->class, m->lv, m->exp, m->exp_payper, m->position,
-		               ((m->account_id > 0) ? m->name : "-"));
-	}
-	// ��E
-	for(i = 0; i < MAX_GUILDPOSITION; i++) {
-		struct guild_position *p = &g->position[i];
-		len += sprintf(str + len, "%d,%d\t%s#\t", p->mode, p->exp_mode, p->name);
-	}
-	// �G���u����
-	len += sprintf(str + len, "%d,%d,", g->emblem_len, g->emblem_id);
-	for(i = 0; i < g->emblem_len; i++) {
-		len += sprintf(str + len, "%02x", (unsigned char)(g->emblem_data[i]));
-	}
-	len += sprintf(str + len, "$\t");
-	// �������X�g
-	c = 0;
-	for(i = 0; i < MAX_GUILDALLIANCE; i++)
-		if (g->alliance[i].guild_id > 0)
-			c++;
-	len += sprintf(str + len, "%d\t", c);
-	for(i = 0; i < MAX_GUILDALLIANCE; i++) {
-		struct guild_alliance *a = &g->alliance[i];
-		if (a->guild_id > 0)
-			len += sprintf(str + len, "%d,%d\t%s\t", a->guild_id, a->opposition, a->name);
-	}
-	// �Ǖ����X�g
-	c = 0;
-	for(i = 0; i < MAX_GUILDEXPLUSION; i++)
-		if (g->explusion[i].account_id > 0)
-			c++;
-	len += sprintf(str + len, "%d\t", c);
-	for(i = 0; i < MAX_GUILDEXPLUSION; i++) {
-		struct guild_explusion *e = &g->explusion[i];
-		if (e->account_id > 0)
-			len += sprintf(str + len, "%d,%d,%d,%d\t%s\t%s\t%s#\t",
-			               e->account_id, e->rsv1, e->rsv2, e->rsv3,
-			               e->name, e->acc, e->mes );
-	}
-	// �M���h�X�L��
-	for(i = 0; i < MAX_GUILDSKILL; i++) {
-		len += sprintf(str + len, "%d,%d ", g->skill[i].id, g->skill[i].lv);
-	}
-	len += sprintf(str + len, "\t");
-
-	return 0;
-}
-
-// �M���h�f�[�^�̕����񂩂�̕ϊ�
-int inter_guild_fromstr(char *str, struct guild *g) {
-	int i, j, c;
-	int tmp_int[16];
-	char tmp_str[4][256];
-	char tmp_str2[4096];
-	char *pstr;
-
-	// ��{�f�[�^
-	memset(g, 0, sizeof(struct guild));
-	if (sscanf(str, "%d\t%[^\t]\t%[^\t]\t%d,%d,%d,%d,%d\t%[^\t]\t%[^\t]\t", &tmp_int[0],
-	           tmp_str[0], tmp_str[1],
-	           &tmp_int[1], &tmp_int[2], &tmp_int[3], &tmp_int[4], &tmp_int[5],
-	           tmp_str[2], tmp_str[3]) < 8)
-		return 1;
-
-	g->guild_id = tmp_int[0];
-	g->guild_lv = tmp_int[1];
-	g->max_member = tmp_int[2];
-	g->exp = tmp_int[3];
-	g->skill_point = tmp_int[4];
-	g->castle_id = tmp_int[5];
-	memcpy(g->name, tmp_str[0], 24);
-	memcpy(g->master, tmp_str[1], 24);
-	memcpy(g->mes1, tmp_str[2], 60);
-	memcpy(g->mes2, tmp_str[3], 120);
-	g->mes1[strlen(g->mes1)-1] = 0;
-	g->mes2[strlen(g->mes2)-1] = 0;
-
-	for(j = 0; j < 6 && str != NULL; j++)	// �ʒu�X�L�b�v
-		str = strchr(str + 1, '\t');
-//	printf("GuildBaseInfo OK\n");
-
-	// �����o�[
-	for(i = 0; i < g->max_member; i++) {
-		struct guild_member *m = &g->member[i];
-		if (sscanf(str + 1, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\t%[^\t]\t",
-		           &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3], &tmp_int[4],
-		           &tmp_int[5], &tmp_int[6], &tmp_int[7], &tmp_int[8], &tmp_int[9],
-		           tmp_str[0]) < 11)
-			return 1;
-		m->account_id = tmp_int[0];
-		m->char_id = tmp_int[1];
-		m->hair = tmp_int[2];
-		m->hair_color = tmp_int[3];
-		m->gender = tmp_int[4];
-		m->class = tmp_int[5];
-		m->lv = tmp_int[6];
-		m->exp = tmp_int[7];
-		m->exp_payper = tmp_int[8];
-		m->position = tmp_int[9];
-		memcpy(m->name, tmp_str[0], 24);
-
-		for(j = 0; j < 2 && str != NULL; j++)	// �ʒu�X�L�b�v
-			str = strchr(str + 1, '\t');
-	}
-//	printf("GuildMemberInfo OK\n");
-	// ��E
-	i = 0;
-	while (sscanf(str+1, "%d,%d%n", &tmp_int[0], &tmp_int[1], &j) == 2 && str[1+j] == '\t') {
-		struct guild_position *p = &g->position[i];
-		if (sscanf(str+1, "%d,%d\t%[^\t]\t", &tmp_int[0], &tmp_int[1], tmp_str[0]) < 3)
-			return 1;
-		p->mode = tmp_int[0];
-		p->exp_mode = tmp_int[1];
-		tmp_str[0][strlen(tmp_str[0])-1] = 0;
-		memcpy(p->name, tmp_str[0], 24);
-
-		for(j = 0; j < 2 && str != NULL; j++)	// �ʒu�X�L�b�v
-			str = strchr(str+1, '\t');
-		i++;
-	}
-//	printf("GuildPositionInfo OK\n");
-	// �G���u����
-	tmp_int[1] = 0;
-	if (sscanf(str + 1, "%d,%d,%[^\t]\t", &tmp_int[0], &tmp_int[1], tmp_str2)< 3 &&
-		sscanf(str + 1, "%d,%[^\t]\t", &tmp_int[0], tmp_str2) < 2)
-		return 1;
-	g->emblem_len = tmp_int[0];
-	g->emblem_id = tmp_int[1];
-	for(i = 0, pstr = tmp_str2; i < g->emblem_len; i++, pstr += 2) {
-		int c1 = pstr[0], c2 = pstr[1], x1 = 0, x2 = 0;
-		if (c1 >= '0' && c1 <= '9') x1 = c1 - '0';
-		if (c1 >= 'a' && c1 <= 'f') x1 = c1 - 'a' + 10;
-		if (c1 >= 'A' && c1 <= 'F') x1 = c1 - 'A' + 10;
-		if (c2 >= '0' && c2 <= '9') x2 = c2 - '0';
-		if (c2 >= 'a' && c2 <= 'f') x2 = c2 - 'a' + 10;
-		if (c2 >= 'A' && c2 <= 'F') x2 = c2 - 'A' + 10;
-		g->emblem_data[i] = (x1<<4) | x2;
-	}
-//	printf("GuildEmblemInfo OK\n");
-	str=strchr(str + 1, '\t');	// �ʒu�X�L�b�v
-
-	// �������X�g
-	if (sscanf(str + 1, "%d\t", &c) < 1)
-		return 1;
-	str = strchr(str + 1, '\t');	// �ʒu�X�L�b�v
-	for(i = 0; i < c; i++) {
-		struct guild_alliance *a = &g->alliance[i];
-		if (sscanf(str + 1, "%d,%d\t%[^\t]\t", &tmp_int[0], &tmp_int[1], tmp_str[0]) < 3)
-			return 1;
-		a->guild_id = tmp_int[0];
-		a->opposition = tmp_int[1];
-		memcpy(a->name, tmp_str[0], 24);
-
-		for(j = 0; j < 2 && str != NULL; j++)	// �ʒu�X�L�b�v
-			str = strchr(str + 1, '\t');
-	}
-//	printf("GuildAllianceInfo OK\n");
-	// �Ǖ����X�g
-	if (sscanf(str+1, "%d\t", &c) < 1)
-		return 1;
-	str = strchr(str + 1, '\t');	// �ʒu�X�L�b�v
-	for(i = 0; i < c; i++) {
-		struct guild_explusion *e = &g->explusion[i];
-		if (sscanf(str + 1, "%d,%d,%d,%d\t%[^\t]\t%[^\t]\t%[^\t]\t",
-		           &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
-		           tmp_str[0], tmp_str[1], tmp_str[2]) < 6)
-			return 1;
-		e->account_id = tmp_int[0];
-		e->rsv1 = tmp_int[1];
-		e->rsv2 = tmp_int[2];
-		e->rsv3 = tmp_int[3];
-		memcpy(e->name, tmp_str[0], 24);
-		memcpy(e->acc, tmp_str[1], 24);
-		tmp_str[2][strlen(tmp_str[2])-1] = 0;
-		memcpy(e->mes, tmp_str[2], 40);
-
-		for(j = 0; j < 4 && str != NULL; j++)	// �ʒu�X�L�b�v
-			str = strchr(str + 1, '\t');
-	}
-//	printf("GuildExplusionInfo OK\n");
-	// �M���h�X�L��
-	for(i = 0; i < MAX_GUILDSKILL; i++) {
-		if (sscanf(str+1,"%d,%d ", &tmp_int[0], &tmp_int[1]) < 2)
-			break;
-		g->skill[i].id = tmp_int[0];
-		g->skill[i].lv = tmp_int[1];
-		str = strchr(str + 1, ' ');
-	}
-	str = strchr(str + 1, '\t');
-//	printf("GuildSkillInfo OK\n");
-
-	return 0;
-}
-
-// �M���h��f�[�^�̕�����ւ̕ϊ�
-int inter_guildcastle_tostr(char *str, struct guild_castle *gc) {
-	int len;
-
-	len = sprintf(str, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",	// added Guardian HP [Valaris]
-	              gc->castle_id, gc->guild_id, gc->economy, gc->defense, gc->triggerE,
-	              gc->triggerD, gc->nextTime, gc->payTime, gc->createTime, gc->visibleC,
-	              gc->visibleG0, gc->visibleG1, gc->visibleG2, gc->visibleG3, gc->visibleG4,
-	              gc->visibleG5, gc->visibleG6, gc->visibleG7, gc->Ghp0, gc->Ghp1, gc->Ghp2,
-	              gc->Ghp3, gc->Ghp4, gc->Ghp5, gc->Ghp6, gc->Ghp7);
-
-	return 0;
-}
-
-// �M���h��f�[�^�̕����񂩂�̕ϊ�
-int inter_guildcastle_fromstr(char *str, struct guild_castle *gc) {
-	int tmp_int[26];
-
-	memset(gc, 0, sizeof(struct guild_castle));
-	// new structure of guild castle
-	if (sscanf(str, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
-	           &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3], &tmp_int[4], &tmp_int[5], &tmp_int[6],
-	           &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &tmp_int[11], &tmp_int[12], &tmp_int[13],
-	           &tmp_int[14], &tmp_int[15], &tmp_int[16], &tmp_int[17], &tmp_int[18], &tmp_int[19], &tmp_int[20],
-	           &tmp_int[21], &tmp_int[22], &tmp_int[23], &tmp_int[24], &tmp_int[25]) == 26) {
-		gc->castle_id = tmp_int[0];
-		gc->guild_id = tmp_int[1];
-		gc->economy = tmp_int[2];
-		gc->defense = tmp_int[3];
-		gc->triggerE = tmp_int[4];
-		gc->triggerD = tmp_int[5];
-		gc->nextTime = tmp_int[6];
-		gc->payTime = tmp_int[7];
-		gc->createTime = tmp_int[8];
-		gc->visibleC = tmp_int[9];
-		gc->visibleG0 = tmp_int[10];
-		gc->visibleG1 = tmp_int[11];
-		gc->visibleG2 = tmp_int[12];
-		gc->visibleG3 = tmp_int[13];
-		gc->visibleG4 = tmp_int[14];
-		gc->visibleG5 = tmp_int[15];
-		gc->visibleG6 = tmp_int[16];
-		gc->visibleG7 = tmp_int[17];
-		gc->Ghp0 = tmp_int[18];
-		gc->Ghp1 = tmp_int[19];
-		gc->Ghp2 = tmp_int[20];
-		gc->Ghp3 = tmp_int[21];
-		gc->Ghp4 = tmp_int[22];
-		gc->Ghp5 = tmp_int[23];
-		gc->Ghp6 = tmp_int[24];
-		gc->Ghp7 = tmp_int[25];	// end additions [Valaris]
-	// old structure of guild castle
-	} else if (sscanf(str, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
-	                  &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3], &tmp_int[4], &tmp_int[5], &tmp_int[6],
-	                  &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &tmp_int[11], &tmp_int[12], &tmp_int[13],
-	                  &tmp_int[14], &tmp_int[15], &tmp_int[16], &tmp_int[17]) == 18) {
-		gc->castle_id = tmp_int[0];
-		gc->guild_id = tmp_int[1];
-		gc->economy = tmp_int[2];
-		gc->defense = tmp_int[3];
-		gc->triggerE = tmp_int[4];
-		gc->triggerD = tmp_int[5];
-		gc->nextTime = tmp_int[6];
-		gc->payTime = tmp_int[7];
-		gc->createTime = tmp_int[8];
-		gc->visibleC = tmp_int[9];
-		gc->visibleG0 = tmp_int[10];
-		gc->visibleG1 = tmp_int[11];
-		gc->visibleG2 = tmp_int[12];
-		gc->visibleG3 = tmp_int[13];
-		gc->visibleG4 = tmp_int[14];
-		gc->visibleG5 = tmp_int[15];
-		gc->visibleG6 = tmp_int[16];
-		gc->visibleG7 = tmp_int[17];
-		if (gc->visibleG0 == 1)
-			gc->Ghp0 = 15670 + 2000 * gc->defense;
-		else
-			gc->Ghp0 = 0;
-		if (gc->visibleG1 == 1)
-			gc->Ghp1 = 15670 + 2000 * gc->defense;
-		else
-			gc->Ghp1 = 0;
-		if (gc->visibleG2 == 1)
-			gc->Ghp2 = 15670 + 2000 * gc->defense;
-		else
-			gc->Ghp2 = 0;
-		if (gc->visibleG3 == 1)
-			gc->Ghp3 = 30214 + 2000 * gc->defense;
-		else
-			gc->Ghp3 = 0;
-		if (gc->visibleG4 == 1)
-			gc->Ghp4 = 30214 + 2000 * gc->defense;
-		else
-			gc->Ghp4 = 0;
-		if (gc->visibleG5 == 1)
-			gc->Ghp5 = 28634 + 2000 * gc->defense;
-		else
-			gc->Ghp5 = 0;
-		if (gc->visibleG6 == 1)
-			gc->Ghp6 = 28634 + 2000 * gc->defense;
-		else
-			gc->Ghp6 = 0;
-		if (gc->visibleG7 == 1)
-			gc->Ghp7 = 28634 + 2000 * gc->defense;
-		else
-			gc->Ghp7 = 0;
-	} else {
-		return 1;
-	}
-
-	return 0;
-}
-
-// �M���h�֘A�f�[�^�x�[�X�ǂݍ���
-int inter_guild_readdb() {
-	int i;
-	FILE *fp;
-	char line[1024];
-
-	fp = fopen("db/exp_guild.txt", "r");
-	if (fp == NULL) {
-		printf("can't read db/exp_guild.txt\n");
-		return 1;
-	}
-	i = 0;
-	while(fgets(line, sizeof(line)-1, fp) && i < 100){
-		if (line[0] == '/' && line[1] == '/')
-			continue;
-		guild_exp[i] = atoi(line);
-		i++;
-	}
-	fclose(fp);
-
-	return 0;
-}
-
-// �M���h�f�[�^�̓ǂݍ���
-int inter_guild_init() {
-	char line[16384];
-	struct guild *g;
-	struct guild_castle *gc;
-	FILE *fp;
-	int i, j, c = 0;
-
-	inter_guild_readdb();
-
-	guild_db = numdb_init();
-	castle_db = numdb_init();
-
-	if ((fp = fopen(guild_txt,"r")) == NULL)
-		return 1;
-	while(fgets(line, sizeof(line)-1, fp)) {
-		j = 0;
-		if (sscanf(line, "%d\t%%newid%%\n%n", &i, &j) == 1 && j > 0 && guild_newid <= i) {
-			guild_newid = i;
-			continue;
-		}
-
-		g = calloc(sizeof(struct guild), 1);
-		if(g == NULL){
-			printf("int_guild: out of memory!\n");
-			exit(0);
-		}
-		memset(g, 0, sizeof(struct guild));
-		if (inter_guild_fromstr(line, g) == 0 && g->guild_id > 0) {
-			if (g->guild_id >= guild_newid)
-				guild_newid = g->guild_id + 1;
-			numdb_insert(guild_db, g->guild_id, g);
-			guild_check_empty(g);
-			guild_calcinfo(g);
-		} else {
-			printf("int_guild: broken data [%s] line %d\n", guild_txt, c);
-			free(g);
-		}
-		c++;
-	}
-	fclose(fp);
-//	printf("int_guild: %s read done (%d guilds)\n", guild_txt, c);
-
-	c = 0;//�J�E���^������
-
-	if ((fp = fopen(castle_txt, "r")) == NULL) {
-		return 1;
-	}
-
-	while(fgets(line, sizeof(line)-1, fp)) {
-		gc = calloc(sizeof(struct guild_castle), 1);
-		if(gc == NULL){
-			printf("int_guild: out of memory!\n");
-			exit(0);
-		}
-		memset(gc, 0, sizeof(struct guild_castle));
-		if (inter_guildcastle_fromstr(line, gc) == 0) {
-			numdb_insert(castle_db, gc->castle_id, gc);
-		} else {
-			printf("int_guild: broken data [%s] line %d\n", castle_txt, c);
-			free(gc);
-		}
-		c++;
-	}
-
-	if (!c) {
-		printf(" %s - making Default Data...\n", castle_txt);
-		//�f�t�H���g�f�[�^���쐬
-		for(i = 0; i < MAX_GUILDCASTLE; i++) {
-			gc = calloc(sizeof(struct guild_castle), 1);
-			if (gc == NULL) {
-				printf("int_guild: out of memory!\n");
-				exit(0);
-			}
-			memset(gc, 0, sizeof(struct guild_castle));
-			gc->castle_id = i;
-			gc->guild_id = 0;
-			gc->economy = 0;
-			gc->defense = 0;
-			gc->triggerE = 0;
-			gc->triggerD = 0;
-			gc->nextTime = 0;
-			gc->payTime = 0;
-			gc->createTime = 0;
-			gc->visibleC = 0;
-			gc->visibleG0 = 0;
-			gc->visibleG1 = 0;
-			gc->visibleG2 = 0;
-			gc->visibleG3 = 0;
-			gc->visibleG4 = 0;
-			gc->visibleG5 = 0;
-			gc->visibleG6 = 0;
-			gc->visibleG7 = 0;
-			gc->Ghp0 = 0;	// guardian HP [Valaris]
-			gc->Ghp1 = 0;
-			gc->Ghp2 = 0;
-			gc->Ghp3 = 0;
-			gc->Ghp4 = 0;
-			gc->Ghp5 = 0;
-			gc->Ghp6 = 0;
-			gc->Ghp7 = 0;	// end additions [Valaris]
-			numdb_insert(castle_db, gc->castle_id, gc);
-		}
-		printf(" %s - making done\n",castle_txt);
-		return 0;
-	}
-
-	fclose(fp);
-
-	return 0;
-}
-
-struct guild *inter_guild_search(int guild_id) {
-	struct guild *g;
-
-	g=numdb_search(guild_db, guild_id);
-
-	return g;
-}
-
-// �M���h�f�[�^�̃Z�[�u�p
-int inter_guild_save_sub(void *key,void *data,va_list ap) {
-	char line[16384];
-	FILE *fp;
-
-	inter_guild_tostr(line,(struct guild *)data);
-	fp=va_arg(ap,FILE *);
-	fprintf(fp,"%s" RETCODE,line);
-
-	return 0;
-}
-
-// �M���h��f�[�^�̃Z�[�u�p
-int inter_castle_save_sub(void *key, void *data, va_list ap) {
-	char line[16384];
-	FILE *fp;
-
-	inter_guildcastle_tostr(line, (struct guild_castle *)data);
-	fp = va_arg(ap, FILE *);
-	fprintf(fp, "%s" RETCODE, line);
-
-	return 0;
-}
-
-// �M���h�f�[�^�̃Z�[�u
-int inter_guild_save() {
-	FILE *fp;
-	int lock;
-
-	if ((fp = lock_fopen(guild_txt, &lock)) == NULL) {
-		printf("int_guild: cant write [%s] !!! data is lost !!!\n", guild_txt);
-		return 1;
-	}
-	numdb_foreach(guild_db, inter_guild_save_sub, fp);
-//	fprintf(fp, "%d\t%%newid%%\n", guild_newid);
-	lock_fclose(fp, guild_txt, &lock);
-//	printf("int_guild: %s saved.\n", guild_txt);
-
-	if ((fp = lock_fopen(castle_txt,&lock)) == NULL) {
-		printf("int_guild: cant write [%s] !!! data is lost !!!\n", castle_txt);
-		return 1;
-	}
-	numdb_foreach(castle_db, inter_castle_save_sub, fp);
-	lock_fclose(fp, castle_txt, &lock);
-
-	return 0;
-}
-
-// �M���h�������p
-int search_guildname_sub(void *key, void *data, va_list ap) {
-	struct guild *g = (struct guild *)data, **dst;
-	char *str;
-
-	str = va_arg(ap, char *);
-	dst = va_arg(ap, struct guild **);
-	if (strcmpi(g->name, str) == 0)
-		*dst = g;
-	return 0;
-}
-
-// �M���h������
-struct guild* search_guildname(char *str) {
-	struct guild *g = NULL;
-	numdb_foreach(guild_db, search_guildname_sub, str, &g);
-	return g;
-}
-
-// �M���h���󂩂ǂ����`�F�b�N
-int guild_check_empty(struct guild *g) {
-	int i;
-
-	for(i = 0; i < g->max_member; i++) {
-		if (g->member[i].account_id > 0) {
-			return 0;
-		}
-	}
-		// �N�����Ȃ��̂ʼn��U
-	numdb_foreach(guild_db, guild_break_sub, g->guild_id);
-	numdb_erase(guild_db, g->guild_id);
-	inter_guild_storage_delete(g->guild_id);
-	mapif_guild_broken(g->guild_id, 0);
-	free(g);
-
-	return 1;
-}
-
-// �L�����̋������Ȃ����`�F�b�N�p
-int guild_check_conflict_sub(void *key, void *data, va_list ap) {
-	struct guild *g = (struct guild *)data;
-	int guild_id, account_id, char_id, i;
-
-	guild_id = va_arg(ap, int);
-	account_id = va_arg(ap, int);
-	char_id = va_arg(ap, int);
-
-	if (g->guild_id == guild_id)	// �{���̏����Ȃ̂Ŗ��Ȃ�
-		return 0;
-
-	for(i = 0; i < MAX_GUILD; i++) {
-		if (g->member[i].account_id == account_id && g->member[i].char_id == char_id) {
-			// �ʂ̃M���h�ɋU�̏����f�[�^������̂ŒE��
-			printf("int_guild: guild conflict! %d,%d %d!=%d\n", account_id, char_id, guild_id, g->guild_id);
-			mapif_parse_GuildLeave(-1, g->guild_id, account_id, char_id, 0, "**�f�[�^����**");
-		}
-	}
-
-	return 0;
-}
-// �L�����̋������Ȃ����`�F�b�N
-int guild_check_conflict(int guild_id, int account_id, int char_id) {
-	numdb_foreach(guild_db, guild_check_conflict_sub, guild_id, account_id, char_id);
-
-	return 0;
-}
-
-int guild_nextexp(int level) {
-	if (level < 100)
-		return guild_exp[level-1];
-
-	return 0;
-}
-
-// �M���h�X�L�������邩�m�F
-int guild_checkskill(struct guild *g, int id){
-	return g->skill[id-10000].lv;
-}
-
-// �M���h�̏��̍Čv�Z
-int guild_calcinfo(struct guild *g) {
-	int i, c, nextexp;
-	struct guild before = *g;
-
-	// �X�L��ID�̐ݒ�
-	for(i = 0; i < 5; i++)
-		g->skill[i].id = i + 10000;
-
-	// �M���h���x��
-	if (g->guild_lv <= 0)
-		g->guild_lv = 1;
-	nextexp = guild_nextexp(g->guild_lv);
-	if (nextexp > 0) {
-		while(g->exp >= nextexp) {	// ���x���A�b�v����
-			g->exp -= nextexp;
-			g->guild_lv++;
-			g->skill_point++;
-			nextexp = guild_nextexp(g->guild_lv);
-		}
-	}
-
-	// �M���h�̎��̌o���l
-	g->next_exp = guild_nextexp(g->guild_lv);
-
-	// �����o����i�M���h�g���K�p�j
-	g->max_member = 16 + guild_checkskill(g, 10004) * 2;
-
-	// ���σ��x���ƃI�����C���l��
-	g->average_lv = 0;
-	g->connect_member = 0;
-	c = 0;
-	for(i = 0; i < g->max_member; i++) {
-		if (g->member[i].account_id > 0) {
-			g->average_lv += g->member[i].lv;
-			c++;
-			if (g->member[i].online > 0)
-				g->connect_member++;
-		}
-	}
-	g->average_lv /= c;
-
-	// �S�f�[�^�𑗂�K�v�����肻��
-	if (g->max_member != before.max_member ||
-		g->guild_lv != before.guild_lv ||
-		g->skill_point != before.skill_point) {
-		mapif_guild_info(-1, g);
-		return 1;
-	}
-
-	return 0;
-}
-
-//-------------------------------------------------------------------
-// map server�ւ̒ʐM
-
-// �M���h�쐬�”�
-int mapif_guild_created(int fd, int account_id, struct guild *g) {
-	WFIFOW(fd,0) = 0x3830;
-	WFIFOL(fd,2) = account_id;
-	if (g != NULL) {
-		WFIFOL(fd,6) = g->guild_id;
-		printf("int_guild: created! %d %s\n", g->guild_id, g->name);
-	}else{
-		WFIFOL(fd,6) = 0;
-	}
-	WFIFOSET(fd,10);
-	return 0;
-}
-
-// �M���h��񌩂‚��炸
-int mapif_guild_noinfo(int fd, int guild_id) {
-	WFIFOW(fd,0) = 0x3831;
-	WFIFOW(fd,2) = 8;
-	WFIFOL(fd,4) = guild_id;
-	WFIFOSET(fd,8);
-	printf("int_guild: info not found %d\n", guild_id);
-
-	return 0;
-}
-
-// �M���h���܂Ƃߑ���
-int mapif_guild_info(int fd, struct guild *g) {
-	unsigned char buf[4 + sizeof(struct guild)];
-
-	WBUFW(buf,0) = 0x3831;
-	memcpy(buf + 4, g, sizeof(struct guild));
-	WBUFW(buf,2) = 4 + sizeof(struct guild);
-//	printf("int_guild: sizeof(guild)=%d\n", sizeof(struct guild));
-	if (fd < 0)
-		mapif_sendall(buf, WBUFW(buf,2));
-	else
-		mapif_send(fd, buf, WBUFW(buf,2));
-//	printf("int_guild: info %d %s\n", p->guild_id, p->name);
-
-	return 0;
-}
-
-// �����o�lj��”�
-int mapif_guild_memberadded(int fd, int guild_id, int account_id, int char_id, int flag) {
-	WFIFOW(fd,0) = 0x3832;
-	WFIFOL(fd,2) = guild_id;
-	WFIFOL(fd,6) = account_id;
-	WFIFOL(fd,10) = char_id;
-	WFIFOB(fd,14) = flag;
-	WFIFOSET(fd, 15);
-
-	return 0;
-}
-
-// �E��/�Ǖ��ʒm
-int mapif_guild_leaved(int guild_id, int account_id, int char_id, int flag, const char *name, const char *mes) {
-	unsigned char buf[79];
-
-	WBUFW(buf, 0) = 0x3834;
-	WBUFL(buf, 2) = guild_id;
-	WBUFL(buf, 6) = account_id;
-	WBUFL(buf,10) = char_id;
-	WBUFB(buf,14) = flag;
-	memcpy(WBUFP(buf,15), mes, 40);
-	memcpy(WBUFP(buf,55), name, 24);
-	mapif_sendall(buf, 79);
-	printf("int_guild: guild leaved %d %d %s %s\n", guild_id, account_id, name, mes);
-
-	return 0;
-}
-
-// �I�����C����Ԃ�Lv�X�V�ʒm
-int mapif_guild_memberinfoshort(struct guild *g, int idx) {
-	unsigned char buf[19];
-
-	WBUFW(buf, 0) = 0x3835;
-	WBUFL(buf, 2) = g->guild_id;
-	WBUFL(buf, 6) = g->member[idx].account_id;
-	WBUFL(buf,10) = g->member[idx].char_id;
-	WBUFB(buf,14) = g->member[idx].online;
-	WBUFW(buf,15) = g->member[idx].lv;
-	WBUFW(buf,17) = g->member[idx].class;
-	mapif_sendall(buf, 19);
-	return 0;
-}
-
-// ���U�ʒm
-int mapif_guild_broken(int guild_id, int flag) {
-	unsigned char buf[7];
-
-	WBUFW(buf,0) = 0x3836;
-	WBUFL(buf,2) = guild_id;
-	WBUFB(buf,6) = flag;
-	mapif_sendall(buf, 7);
-	printf("int_guild: broken %d\n", guild_id);
-
-	return 0;
-}
-
-// �M���h������
-int mapif_guild_message(int guild_id, int account_id, char *mes, int len) {
-	unsigned char buf[len+12];
-
-	WBUFW(buf,0) = 0x3837;
-	WBUFW(buf,2) = len + 12;
-	WBUFL(buf,4) = guild_id;
-	WBUFL(buf,8) = account_id;
-	memcpy(WBUFP(buf,12), mes, len);
-	mapif_sendall(buf, len + 12);
-
-	return 0;
-}
-
-// �M���h��{���ύX�ʒm
-int mapif_guild_basicinfochanged(int guild_id, int type, const void *data, int len) {
-	unsigned char buf[2048];
-
-	WBUFW(buf,0) = 0x3839;
-	WBUFW(buf,2) = len+10;
-	WBUFL(buf,4) = guild_id;
-	WBUFW(buf,8) = type;
-	memcpy(WBUFP(buf,10),data,len);
-	mapif_sendall(buf,len+10);
-	return 0;
-}
-
-// �M���h�����o���ύX�ʒm
-int mapif_guild_memberinfochanged(int guild_id, int account_id, int char_id, int type, const void *data, int len) {
-	unsigned char buf[len + 18];
-
-	WBUFW(buf, 0) = 0x383a;
-	WBUFW(buf, 2) = len + 18;
-	WBUFL(buf, 4) = guild_id;
-	WBUFL(buf, 8) = account_id;
-	WBUFL(buf,12) = char_id;
-	WBUFW(buf,16) = type;
-	memcpy(WBUFP(buf,18), data, len);
-	mapif_sendall(buf,len+18);
-
-	return 0;
-}
-
-// �M���h�X�L���A�b�v�ʒm
-int mapif_guild_skillupack(int guild_id, int skill_num, int account_id) {
-	unsigned char buf[14];
-
-	WBUFW(buf, 0) = 0x383c;
-	WBUFL(buf, 2) = guild_id;
-	WBUFL(buf, 6) = skill_num;
-	WBUFL(buf,10) = account_id;
-	mapif_sendall(buf, 14);
-
-	return 0;
-}
-
-// �M���h����/�G�Βʒm
-int mapif_guild_alliance(int guild_id1, int guild_id2, int account_id1, int account_id2, int flag, const char *name1, const char *name2) {
-	unsigned char buf[67];
-
-	WBUFW(buf, 0) = 0x383d;
-	WBUFL(buf, 2) = guild_id1;
-	WBUFL(buf, 6) = guild_id2;
-	WBUFL(buf,10) = account_id1;
-	WBUFL(buf,14) = account_id2;
-	WBUFB(buf,18) = flag;
-	memcpy(WBUFP(buf,19), name1, 24);
-	memcpy(WBUFP(buf,43), name2, 24);
-	mapif_sendall(buf, 67);
-
-	return 0;
-}
-
-// �M���h��E�ύX�ʒm
-int mapif_guild_position(struct guild *g, int idx) {
-	unsigned char buf[sizeof(struct guild_position) + 12];
-
-	WBUFW(buf,0) = 0x383b;
-	WBUFW(buf,2) = sizeof(struct guild_position) + 12;
-	WBUFL(buf,4) = g->guild_id;
-	WBUFL(buf,8) = idx;
-	memcpy(WBUFP(buf,12), &g->position[idx], sizeof(struct guild_position));
-	mapif_sendall(buf, WBUFW(buf,2));
-
-	return 0;
-}
-
-// �M���h���m�ύX�ʒm
-int mapif_guild_notice(struct guild *g) {
-	unsigned char buf[186];
-
-	WBUFW(buf,0) = 0x383e;
-	WBUFL(buf,2) = g->guild_id;
-	memcpy(WBUFP(buf,6), g->mes1, 60);
-	memcpy(WBUFP(buf,66), g->mes2, 120);
-	mapif_sendall(buf, 186);
-
-	return 0;
-}
-
-// �M���h�G���u�����ύX�ʒm
-int mapif_guild_emblem(struct guild *g) {
-	unsigned char buf[2048];
-
-	WBUFW(buf,0) = 0x383f;
-	WBUFW(buf,2) = g->emblem_len + 12;
-	WBUFL(buf,4) = g->guild_id;
-	WBUFL(buf,8) = g->emblem_id;
-	memcpy(WBUFP(buf,12), g->emblem_data, g->emblem_len);
-	mapif_sendall(buf, WBUFW(buf,2));
-
-	return 0;
-}
-
-int mapif_guild_castle_dataload(int castle_id, int index, int value) {
-	unsigned char buf[9];
-
-	WBUFW(buf,0) = 0x3840;
-	WBUFW(buf,2) = castle_id;
-	WBUFB(buf,4) = index;
-	WBUFL(buf,5) = value;
-	mapif_sendall(buf,9);
-
-	return 0;
-}
-
-int mapif_guild_castle_datasave(int castle_id, int index, int value) {
-	unsigned char buf[9];
-
-	WBUFW(buf,0) = 0x3841;
-	WBUFW(buf,2) = castle_id;
-	WBUFB(buf,4) = index;
-	WBUFL(buf,5) = value;
-	mapif_sendall(buf,9);
-
-	return 0;
-}
-
-int mapif_guild_castle_alldataload_sub(void *key, void *data, va_list ap) {
-	int fd = va_arg(ap, int);
-	int *p = va_arg(ap, int*);
-
-	memcpy(WFIFOP(fd,*p), (struct guild_castle*)data, sizeof(struct guild_castle));
-	(*p) += sizeof(struct guild_castle);
-
-	return 0;
-}
-
-int mapif_guild_castle_alldataload(int fd) {
-	int len = 4;
-
-	WFIFOW(fd,0) = 0x3842;
-	numdb_foreach(castle_db, mapif_guild_castle_alldataload_sub, fd, &len);
-	WFIFOW(fd,2) = len;
-	WFIFOSET(fd, len);
-
-	return 0;
-}
-
-//-------------------------------------------------------------------
-// map server����̒ʐM
-
-// �M���h�쐬�v��
-int mapif_parse_CreateGuild(int fd, int account_id, char *name, struct guild_member *master) {
-	struct guild *g;
-	int i;
-
-	for(i = 0; i < 24 && name[i]; i++) {
-		if (!(name[i] & 0xe0) || name[i] == 0x7f) {
-			printf("int_guild: illeagal guild name [%s]\n", name);
-			mapif_guild_created(fd, account_id, NULL);
-			return 0;
-		}
-	}
-
-	if ((g = search_guildname(name)) != NULL) {
-		printf("int_guild: same name guild exists [%s]\n", name);
-		mapif_guild_created(fd, account_id, NULL);
-		return 0;
-	}
-	g = calloc(sizeof(struct guild), 1);
-	if (g == NULL) {
-		printf("int_guild: CreateGuild: out of memory !\n");
-		mapif_guild_created(fd, account_id, NULL);
-		exit(0);
-	}
-	memset(g, 0, sizeof(struct guild));
-	g->guild_id = guild_newid++;
-	memcpy(g->name, name, 24);
-	memcpy(g->master, master->name, 24);
-	memcpy(&g->member[0], master, sizeof(struct guild_member));
-
-	g->position[0].mode = 0x11;
-	strcpy(g->position[                  0].name, "GuildMaster");
-	strcpy(g->position[MAX_GUILDPOSITION-1].name, "Newbie");
-	for(i = 1; i < MAX_GUILDPOSITION-1; i++)
-		sprintf(g->position[i].name, "Position %d", i + 1);
-
-	// �����ŃM���h���v�Z���K�v�Ǝv����
-	g->max_member = 16;
-	g->average_lv = master->lv;
-	for(i = 0; i < 5; i++)
-		g->skill[i].id = i + 10000;
-
-	numdb_insert(guild_db, g->guild_id, g);
-
-	mapif_guild_created(fd, account_id, g);
-	mapif_guild_info(fd, g);
-
-	inter_log("guild %s (id=%d) created by master %s (id=%d)" RETCODE,
-		name, g->guild_id, master->name, master->account_id);
-
-	return 0;
-}
-
-// �M���h���v��
-int mapif_parse_GuildInfo(int fd, int guild_id) {
-	struct guild *g;
-
-	g = numdb_search(guild_db, guild_id);
-	if (g != NULL){
-		guild_calcinfo(g);
-		mapif_guild_info(fd, g);
-	} else
-		mapif_guild_noinfo(fd, guild_id);
-
-	return 0;
-}
-
-// �M���h�����o�lj��v��
-int mapif_parse_GuildAddMember(int fd, int guild_id, struct guild_member *m) {
-	struct guild *g;
-	int i;
-
-	g = numdb_search(guild_db, guild_id);
-	if (g == NULL) {
-		mapif_guild_memberadded(fd, guild_id, m->account_id, m->char_id, 1);
-		return 0;
-	}
-
-	for(i = 0; i < g->max_member; i++) {
-		if (g->member[i].account_id == 0) {
-			memcpy(&g->member[i], m, sizeof(struct guild_member));
-			mapif_guild_memberadded(fd, guild_id, m->account_id, m->char_id, 0);
-			guild_calcinfo(g);
-			mapif_guild_info(-1, g);
-
-			return 0;
-		}
-	}
-	mapif_guild_memberadded(fd, guild_id, m->account_id, m->char_id, 1);
-
-	return 0;
-}
-
-// �M���h�E��/�Ǖ��v��
-int mapif_parse_GuildLeave(int fd, int guild_id, int account_id, int char_id, int flag, const char *mes) {
-	struct guild *g = NULL;
-	int i, j;
-
-	g = numdb_search(guild_db, guild_id);
-	if (g != NULL) {
-		for(i = 0; i < MAX_GUILD; i++) {
-			if (g->member[i].account_id == account_id && g->member[i].char_id == char_id) {
-//				printf("%d %d\n", i, (int)(&g->member[i]));
-//				printf("%d %s\n", i, g->member[i].name);
-
-				if (flag) {	// �Ǖ��̏ꍇ�Ǖ����X�g�ɓ����
-					for(j = 0; j < MAX_GUILDEXPLUSION; j++) {
-						if (g->explusion[j].account_id == 0)
-							break;
-					}
-					if (j == MAX_GUILDEXPLUSION) {	// ��t�Ȃ̂ŌÂ��̂�����
-						for(j = 0; j < MAX_GUILDEXPLUSION - 1; j++)
-							g->explusion[j] = g->explusion[j+1];
-						j = MAX_GUILDEXPLUSION - 1;
-					}
-					g->explusion[j].account_id = account_id;
-					memcpy(g->explusion[j].acc, "dummy", 24);
-					memcpy(g->explusion[j].name, g->member[i].name, 24);
-					memcpy(g->explusion[j].mes, mes, 40);
-				}
-
-				mapif_guild_leaved(guild_id, account_id, char_id, flag, g->member[i].name, mes);
-//				printf("%d %d\n", i, (int)(&g->member[i]));
-//				printf("%d %s\n", i, (&g->member[i])->name);
-				memset(&g->member[i], 0, sizeof(struct guild_member));
-
-				if (guild_check_empty(g) == 0)
-					mapif_guild_info(-1,g);// �܂��l������̂Ńf�[�^���M
-
-				return 0;
-			}
-		}
-	}
-	return 0;
-}
-
-// �I�����C��/Lv�X�V
-int mapif_parse_GuildChangeMemberInfoShort(int fd, int guild_id, int account_id, int char_id, int online, int lv, int class) {
-	struct guild *g;
-	int i, alv, c;
-
-	g = numdb_search(guild_db, guild_id);
-	if (g == NULL)
-		return 0;
-
-	g->connect_member = 0;
-
-	alv = 0;
-	c = 0;
-	for(i = 0; i < MAX_GUILD; i++) {
-		if (g->member[i].account_id == account_id && g->member[i].char_id == char_id) {
-			g->member[i].online = online;
-			g->member[i].lv = lv;
-			g->member[i].class = class;
-			mapif_guild_memberinfoshort(g, i);
-		}
-		if (g->member[i].account_id > 0) {
-			alv += g->member[i].lv;
-			c++;
-		}
-		if (g->member[i].online)
-			g->connect_member++;
-	}
-	// ���σ��x��
-	g->average_lv = alv / c;
-
-	return 0;
-}
-
-// �M���h���U�����p�i����/�G�΂������j
-int guild_break_sub(void *key, void *data, va_list ap) {
-	struct guild *g = (struct guild *)data;
-	int guild_id = va_arg(ap, int);
-	int i;
-
-	for(i = 0; i < MAX_GUILDALLIANCE; i++) {
-		if (g->alliance[i].guild_id == guild_id)
-			g->alliance[i].guild_id = 0;
-	}
-	return 0;
-}
-
-// �M���h���U�v��
-int mapif_parse_BreakGuild(int fd, int guild_id) {
-	struct guild *g;
-
-	g = numdb_search(guild_db, guild_id);
-	if(g == NULL)
-		return 0;
-
-	numdb_foreach(guild_db, guild_break_sub, guild_id);
-	numdb_erase(guild_db, guild_id);
-	inter_guild_storage_delete(guild_id);
-	mapif_guild_broken(guild_id, 0);
-
-	inter_log("guild %s (id=%d) broken" RETCODE, g->name, guild_id);
-	free(g);
-
-	return 0;
-}
-
-// �M���h���b�Z�[�W���M
-int mapif_parse_GuildMessage(int fd, int guild_id, int account_id, char *mes, int len) {
-	return mapif_guild_message(guild_id, account_id, mes, len);
-}
-
-// �M���h��{�f�[�^�ύX�v��
-int mapif_parse_GuildBasicInfoChange(int fd, int guild_id, int type, const char *data, int len) {
-	struct guild *g;
-	short dw = *((short *)data);
-
-	g = numdb_search(guild_db, guild_id);
-	if (g == NULL)
-		return 0;
-
-	switch(type) {
-	case GBI_GUILDLV:
-		if (dw > 0 && g->guild_lv + dw <= 50) {
-			g->guild_lv+=dw;
-			g->skill_point+=dw;
-		} else if (dw < 0 && g->guild_lv + dw >= 1)
-			g->guild_lv += dw;
-		mapif_guild_info(-1, g);
-		return 0;
-	default:
-		printf("int_guild: GuildBasicInfoChange: Unknown type %d\n", type);
-		break;
-	}
-	mapif_guild_basicinfochanged(guild_id, type, data, len);
-
-	return 0;
-}
-
-// �M���h�����o�f�[�^�ύX�v��
-int mapif_parse_GuildMemberInfoChange(int fd, int guild_id, int account_id, int char_id, int type, const char *data, int len) {
-	int i;
-	struct guild *g;
-
-	g = numdb_search(guild_db, guild_id);
-	if(g == NULL)
-		return 0;
-
-	for(i = 0; i < g->max_member; i++)
-		if (g->member[i].account_id == account_id && g->member[i].char_id == char_id)
-			break;
-		if (i == g->max_member) {
-			printf("int_guild: GuildMemberChange: Not found %d,%d in %d[%s]\n", account_id, char_id, guild_id, g->name);
-			return 0;
-		}
-		switch(type) {
-		case GMI_POSITION:	// ��E
-			g->member[i].position = *((int *)data);
-			break;
-		case GMI_EXP:	// EXP
-		  {
-			int exp, oldexp = g->member[i].exp;
-			exp = g->member[i].exp = *((unsigned int *)data);
-			g->exp += (exp - oldexp);
-			guild_calcinfo(g);	// Lv�A�b�v���f
-			mapif_guild_basicinfochanged(guild_id, GBI_EXP, &g->exp, 4);
-		  }
-			break;
-	default:
-		printf("int_guild: GuildMemberInfoChange: Unknown type %d\n", type);
-		break;
-	}
-	mapif_guild_memberinfochanged(guild_id, account_id, char_id, type, data, len);
-
-	return 0;
-}
-
-// �M���h��E���ύX�v��
-int mapif_parse_GuildPosition(int fd, int guild_id, int idx, struct guild_position *p) {
-	struct guild *g = numdb_search(guild_db, guild_id);
-
-	if (g == NULL || idx < 0 || idx >= MAX_GUILDPOSITION) {
-		return 0;
-	}
-	memcpy(&g->position[idx], p, sizeof(struct guild_position));
-	mapif_guild_position(g, idx);
-	printf("int_guild: position changed %d\n", idx);
-
-	return 0;
-}
-
-// �M���h�X�L���A�b�v�v��
-int mapif_parse_GuildSkillUp(int fd, int guild_id, int skill_num, int account_id) {
-	struct guild *g = numdb_search(guild_db, guild_id);
-	int idx = skill_num - 10000;
-
-	if (g == NULL || skill_num < 10000)
-		return 0;
-
-	if (g->skill_point > 0 && g->skill[idx].id > 0 && g->skill[idx].lv < 10) {
-		g->skill[idx].lv++;
-		g->skill_point--;
-		if (guild_calcinfo(g) == 0)
-			mapif_guild_info(-1, g);
-		mapif_guild_skillupack(guild_id, skill_num, account_id);
-		printf("int_guild: skill %d up\n", skill_num);
-	}
-
-	return 0;
-}
-
-// �M���h�����v��
-int mapif_parse_GuildAlliance(int fd, int guild_id1, int guild_id2, int account_id1, int account_id2, int flag) {
-	struct guild *g[2];
-	int j, i;
-
-	g[0] = numdb_search(guild_db, guild_id1);
-	g[1] = numdb_search(guild_db, guild_id2);
-	if (g[0] == NULL || g[1] == NULL)
-		return 0;
-
-	if (!(flag & 0x8)) {
-		for(i = 0; i < 2 - (flag & 1); i++) {
-			for(j = 0; j < MAX_GUILDALLIANCE; j++)
-				if (g[i]->alliance[j].guild_id == 0) {
-					g[i]->alliance[j].guild_id = g[1-i]->guild_id;
-					memcpy(g[i]->alliance[j].name, g[1-i]->name, 24);
-					g[i]->alliance[j].opposition = flag & 1;
-					break;
-				}
-		}
-	} else {	// �֌W����
-		for(i = 0; i < 2 - (flag & 1); i++) {
-			for(j = 0; j < MAX_GUILDALLIANCE; j++)
-				if (g[i]->alliance[j].guild_id == g[1-i]->guild_id && g[i]->alliance[j].opposition == (flag & 1)) {
-					g[i]->alliance[j].guild_id = 0;
-					break;
-				}
-		}
-	}
-	mapif_guild_alliance(guild_id1, guild_id2, account_id1, account_id2, flag, g[0]->name, g[1]->name);
-
-	return 0;
-}
-
-// �M���h���m�ύX�v��
-int mapif_parse_GuildNotice(int fd, int guild_id, const char *mes1, const char *mes2) {
-	struct guild *g;
-
-	g = numdb_search(guild_db, guild_id);
-	if (g == NULL)
-		return 0;
-	memcpy(g->mes1, mes1, 60);
-	memcpy(g->mes2, mes2, 120);
-
-	return mapif_guild_notice(g);
-}
-
-// �M���h�G���u�����ύX�v��
-int mapif_parse_GuildEmblem(int fd, int len, int guild_id, int dummy, const char *data) {
-	struct guild *g;
-
-	g = numdb_search(guild_db, guild_id);
-	if (g == NULL)
-		return 0;
-	memcpy(g->emblem_data, data, len);
-	g->emblem_len = len;
-	g->emblem_id++;
-
-	return mapif_guild_emblem(g);
-}
-
-int mapif_parse_GuildCastleDataLoad(int fd, int castle_id, int index) {
-	struct guild_castle *gc = numdb_search(castle_db, castle_id);
-
-	if (gc == NULL) {
-		return mapif_guild_castle_dataload(castle_id, 0, 0);
-	}
-	switch(index) {
-	case 1: return mapif_guild_castle_dataload(gc->castle_id, index, gc->guild_id);
-	case 2: return mapif_guild_castle_dataload(gc->castle_id, index, gc->economy);
-	case 3: return mapif_guild_castle_dataload(gc->castle_id, index, gc->defense);
-	case 4: return mapif_guild_castle_dataload(gc->castle_id, index, gc->triggerE);
-	case 5: return mapif_guild_castle_dataload(gc->castle_id, index, gc->triggerD);
-	case 6: return mapif_guild_castle_dataload(gc->castle_id, index, gc->nextTime);
-	case 7: return mapif_guild_castle_dataload(gc->castle_id, index, gc->payTime);
-	case 8: return mapif_guild_castle_dataload(gc->castle_id, index, gc->createTime);
-	case 9: return mapif_guild_castle_dataload(gc->castle_id, index, gc->visibleC);
-	case 10: return mapif_guild_castle_dataload(gc->castle_id, index, gc->visibleG0);
-	case 11: return mapif_guild_castle_dataload(gc->castle_id, index, gc->visibleG1);
-	case 12: return mapif_guild_castle_dataload(gc->castle_id, index, gc->visibleG2);
-	case 13: return mapif_guild_castle_dataload(gc->castle_id, index, gc->visibleG3);
-	case 14: return mapif_guild_castle_dataload(gc->castle_id, index, gc->visibleG4);
-	case 15: return mapif_guild_castle_dataload(gc->castle_id, index, gc->visibleG5);
-	case 16: return mapif_guild_castle_dataload(gc->castle_id, index, gc->visibleG6);
-	case 17: return mapif_guild_castle_dataload(gc->castle_id, index, gc->visibleG7);
-	case 18: return mapif_guild_castle_dataload(gc->castle_id, index, gc->Ghp0);	// guardian HP [Valaris]
-	case 19: return mapif_guild_castle_dataload(gc->castle_id, index, gc->Ghp1);
-	case 20: return mapif_guild_castle_dataload(gc->castle_id, index, gc->Ghp2);
-	case 21: return mapif_guild_castle_dataload(gc->castle_id, index, gc->Ghp3);
-	case 22: return mapif_guild_castle_dataload(gc->castle_id, index, gc->Ghp4);
-	case 23: return mapif_guild_castle_dataload(gc->castle_id, index, gc->Ghp5);
-	case 24: return mapif_guild_castle_dataload(gc->castle_id, index, gc->Ghp6);
-	case 25: return mapif_guild_castle_dataload(gc->castle_id, index, gc->Ghp7);	// end additions [Valaris]
-
-	default:
-		printf("mapif_parse_GuildCastleDataLoad ERROR!! (Not found index=%d)\n", index);
-		return 0;
-	}
-
-	return 0;
-}
-
-int mapif_parse_GuildCastleDataSave(int fd, int castle_id, int index, int value) {
-	struct guild_castle *gc=numdb_search(castle_db, castle_id);
-
-	if (gc == NULL) {
-		return mapif_guild_castle_datasave(castle_id, index, value);
-	}
-	switch(index) {
-	case 1:
-		if (gc->guild_id != value) {
-			int gid = (value) ? value : gc->guild_id;
-			struct guild *g = numdb_search(guild_db, gid);
-			inter_log("guild %s (id=%d) %s castle id=%d" RETCODE,
-				(g) ? g->name : "??", gid, (value) ? "occupy" : "abandon", index);
-		}
-		gc->guild_id = value;
-		break;
-	case 2: gc->economy = value; break;
-	case 3: gc->defense = value; break;
-	case 4: gc->triggerE = value; break;
-	case 5: gc->triggerD = value; break;
-	case 6: gc->nextTime = value; break;
-	case 7: gc->payTime = value; break;
-	case 8: gc->createTime = value; break;
-	case 9: gc->visibleC = value; break;
-	case 10: gc->visibleG0 = value; break;
-	case 11: gc->visibleG1 = value; break;
-	case 12: gc->visibleG2 = value; break;
-	case 13: gc->visibleG3 = value; break;
-	case 14: gc->visibleG4 = value; break;
-	case 15: gc->visibleG5 = value; break;
-	case 16: gc->visibleG6 = value; break;
-	case 17: gc->visibleG7 = value; break;
-	case 18: gc->Ghp0 = value; break;	// guardian HP [Valaris]
-	case 19: gc->Ghp1 = value; break;
-	case 20: gc->Ghp2 = value; break;
-	case 21: gc->Ghp3 = value; break;
-	case 22: gc->Ghp4 = value; break;
-	case 23: gc->Ghp5 = value; break;
-	case 24: gc->Ghp6 = value; break;
-	case 25: gc->Ghp7 = value; break;	// end additions [Valaris]
-	default:
-		printf("mapif_parse_GuildCastleDataSave ERROR!! (Not found index=%d)\n", index);
-		return 0;
-	}
-
-	return mapif_guild_castle_datasave(gc->castle_id, index, value);
-}
-
-// �M���h�`�F�b�N�v��
-int mapif_parse_GuildCheck(int fd, int guild_id, int account_id, int char_id) {
-	return guild_check_conflict(guild_id, account_id, char_id);
-}
-
-// map server ����̒ʐM
-// �E�P�p�P�b�g�̂݉�͂��邱��
-// �E�p�P�b�g���f�[�^��inter.c�ɃZ�b�g���Ă�������
-// �E�p�P�b�g���`�F�b�N��ARFIFOSKIP�͌Ăяo�����ōs����̂ōs���Ă͂Ȃ�Ȃ�
-// �E�G���[�Ȃ�0(false)�A�����łȂ��Ȃ�1(true)���������Ȃ���΂Ȃ�Ȃ�
-int inter_guild_parse_frommap(int fd) {
-	switch(RFIFOW(fd,0)) {
-	case 0x3030: mapif_parse_CreateGuild(fd, RFIFOL(fd,4), RFIFOP(fd,8), (struct guild_member *)RFIFOP(fd,32)); break;
-	case 0x3031: mapif_parse_GuildInfo(fd, RFIFOL(fd,2)); break;
-	case 0x3032: mapif_parse_GuildAddMember(fd, RFIFOL(fd,4), (struct guild_member *)RFIFOP(fd,8)); break;
-	case 0x3034: mapif_parse_GuildLeave(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOB(fd,14), RFIFOP(fd,15)); break;
-	case 0x3035: mapif_parse_GuildChangeMemberInfoShort(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOB(fd,14), RFIFOW(fd,15), RFIFOW(fd,17)); break;
-	case 0x3036: mapif_parse_BreakGuild(fd, RFIFOL(fd,2)); break;
-	case 0x3037: mapif_parse_GuildMessage(fd, RFIFOL(fd,4), RFIFOL(fd,8), RFIFOP(fd,12), RFIFOW(fd,2)-12); break;
-	case 0x3038: mapif_parse_GuildCheck(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10)); break;
-	case 0x3039: mapif_parse_GuildBasicInfoChange(fd, RFIFOL(fd,4), RFIFOW(fd,8), RFIFOP(fd,10), RFIFOW(fd,2)-10); break;
-	case 0x303A: mapif_parse_GuildMemberInfoChange(fd, RFIFOL(fd,4), RFIFOL(fd,8), RFIFOL(fd,12), RFIFOW(fd,16), RFIFOP(fd,18), RFIFOW(fd,2)-18); break;
-	case 0x303B: mapif_parse_GuildPosition(fd, RFIFOL(fd,4), RFIFOL(fd,8), (struct guild_position *)RFIFOP(fd,12)); break;
-	case 0x303C: mapif_parse_GuildSkillUp(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10)); break;
-	case 0x303D: mapif_parse_GuildAlliance(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOL(fd,14), RFIFOB(fd,18)); break;
-	case 0x303E: mapif_parse_GuildNotice(fd, RFIFOL(fd,2), RFIFOP(fd,6), RFIFOP(fd,66)); break;
-	case 0x303F: mapif_parse_GuildEmblem(fd, RFIFOW(fd,2)-12, RFIFOL(fd,4), RFIFOL(fd,8), RFIFOP(fd,12)); break;
-	case 0x3040: mapif_parse_GuildCastleDataLoad(fd, RFIFOW(fd,2), RFIFOB(fd,4)); break;
-	case 0x3041: mapif_parse_GuildCastleDataSave(fd, RFIFOW(fd,2), RFIFOB(fd,4), RFIFOL(fd,5)); break;
-
-	default:
-		return 0;
-	}
-
-	return 1;
-}
-
-// �}�b�v�T�[�o�[�̐ڑ�������
-int inter_guild_mapif_init(int fd) {
-	return mapif_guild_castle_alldataload(fd);
-}
-
-// �T�[�o�[����E�ޗv���i�L�����폜�p�j
-int inter_guild_leave(int guild_id, int account_id, int char_id) {
-	return mapif_parse_GuildLeave(-1, guild_id, account_id, char_id, 0, "**�T�[�o�[����**");
-}
diff --git a/misc/src/char/int_guild.h b/misc/src/char/int_guild.h
deleted file mode 100644
index 555f5e1..0000000
--- a/misc/src/char/int_guild.h
+++ /dev/null
@@ -1,16 +0,0 @@
-// $Id: int_guild.h,v 1.1.1.1 2004/09/10 17:26:51 MagicalTux Exp $
-#ifndef _INT_GUILD_H_
-#define _INT_GUILD_H_
-
-int inter_guild_init();
-int inter_guild_save();
-int inter_guild_parse_frommap(int fd);
-struct guild *inter_guild_search(int guild_id);
-int inter_guild_mapif_init(int fd);
-
-int inter_guild_leave(int guild_id,int account_id,int char_id);
-
-extern char guild_txt[1024];
-extern char castle_txt[1024];
-
-#endif
diff --git a/misc/src/char/int_party.c b/misc/src/char/int_party.c
deleted file mode 100644
index 0fd58fa..0000000
--- a/misc/src/char/int_party.c
+++ /dev/null
@@ -1,595 +0,0 @@
-// $Id: int_party.c,v 1.1.1.1 2004/09/10 17:26:51 MagicalTux Exp $
-#include "inter.h"
-#include "int_party.h"
-#include "mmo.h"
-#include "char.h"
-#include "socket.h"
-#include "db.h"
-#include "lock.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-char party_txt[1024] = "save/party.txt";
-
-static struct dbt *party_db;
-static int party_newid = 100;
-
-int mapif_party_broken(int party_id, int flag);
-int party_check_empty(struct party *p);
-int mapif_parse_PartyLeave(int fd, int party_id, int account_id);
-
-// �p�[�e�B�f�[�^�̕�����ւ̕ϊ�
-int inter_party_tostr(char *str, struct party *p) {
-	int i, len;
-
-	len = sprintf(str, "%d\t%s\t%d,%d\t", p->party_id, p->name, p->exp, p->item);
-	for(i = 0; i < MAX_PARTY; i++) {
-		struct party_member *m = &p->member[i];
-		len += sprintf(str + len, "%d,%d\t%s\t", m->account_id, m->leader, ((m->account_id > 0) ? m->name : "NoMember"));
-	}
-
-	return 0;
-}
-
-// �p�[�e�B�f�[�^�̕����񂩂�̕ϊ�
-int inter_party_fromstr(char *str, struct party *p) {
-	int i, j;
-	int tmp_int[16];
-	char tmp_str[256];
-
-	memset(p, 0, sizeof(struct party));
-
-//	printf("sscanf party main info\n");
-	if (sscanf(str, "%d\t%[^\t]\t%d,%d\t", &tmp_int[0], tmp_str, &tmp_int[1], &tmp_int[2]) != 4)
-		return 1;
-
-	p->party_id = tmp_int[0];
-	strcpy(p->name, tmp_str);
-	p->exp = tmp_int[1];
-	p->item = tmp_int[2];
-//	printf("%d [%s] %d %d\n", tmp_int[0], tmp_str[0], tmp_int[1], tmp_int[2]);
-
-	for(j = 0; j < 3 && str != NULL; j++)
-		str = strchr(str + 1, '\t');
-
-	for(i = 0; i < MAX_PARTY; i++) {
-		struct party_member *m = &p->member[i];
-		if (str == NULL)
-			return 1;
-//		printf("sscanf party member info %d\n", i);
-
-		if (sscanf(str + 1, "%d,%d\t%[^\t]\t", &tmp_int[0], &tmp_int[1], tmp_str) != 3)
-			return 1;
-
-		m->account_id = tmp_int[0];
-		m->leader = tmp_int[1];
-		strncpy(m->name, tmp_str, sizeof(m->name));
-//		printf(" %d %d [%s]\n", tmp_int[0], tmp_int[1], tmp_str);
-
-		for(j = 0; j < 2 && str != NULL; j++)
-			str = strchr(str + 1, '\t');
-	}
-
-	return 0;
-}
-
-// �p�[�e�B�f�[�^�̃��[�h
-int inter_party_init() {
-	char line[8192];
-	struct party *p;
-	FILE *fp;
-	int c = 0;
-	int i, j;
-
-	party_db = numdb_init();
-
-	if ((fp = fopen(party_txt, "r")) == NULL)
-		return 1;
-
-	while(fgets(line, sizeof(line) - 1, fp)) {
-		j = 0;
-		if (sscanf(line, "%d\t%%newid%%\n%n", &i, &j) == 1 && j > 0 && party_newid <= i) {
-			party_newid = i;
-			continue;
-		}
-
-		p = calloc(sizeof(struct party), 1);
-		if (p == NULL){
-			printf("int_party: out of memory!\n");
-			exit(0);
-		}
-		memset(p, 0, sizeof(struct party));
-		if (inter_party_fromstr(line, p) == 0 && p->party_id > 0) {
-			if (p->party_id >= party_newid)
-				party_newid = p->party_id + 1;
-			numdb_insert(party_db, p->party_id, p);
-			party_check_empty(p);
-		} else {
-			printf("int_party: broken data [%s] line %d\n", party_txt, c + 1);
-			free(p);
-		}
-		c++;
-	}
-	fclose(fp);
-//	printf("int_party: %s read done (%d parties)\n", party_txt, c);
-
-	return 0;
-}
-
-// �p�[�e�B�[�f�[�^�̃Z�[�u�p
-int inter_party_save_sub(void *key, void *data, va_list ap) {
-	char line[8192];
-	FILE *fp;
-
-	inter_party_tostr(line, (struct party *)data);
-	fp = va_arg(ap, FILE *);
-	fprintf(fp, "%s" RETCODE, line);
-
-	return 0;
-}
-
-// �p�[�e�B�[�f�[�^�̃Z�[�u
-int inter_party_save() {
-	FILE *fp;
-	int lock;
-
-	if ((fp = lock_fopen(party_txt, &lock)) == NULL) {
-		printf("int_party: cant write [%s] !!! data is lost !!!\n", party_txt);
-		return 1;
-	}
-	numdb_foreach(party_db, inter_party_save_sub, fp);
-//	fprintf(fp, "%d\t%%newid%%\n", party_newid);
-	lock_fclose(fp,party_txt, &lock);
-//	printf("int_party: %s saved.\n", party_txt);
-
-	return 0;
-}
-
-// �p�[�e�B�������p
-int search_partyname_sub(void *key,void *data,va_list ap) {
-	struct party *p = (struct party *)data,**dst;
-	char *str;
-
-	str = va_arg(ap, char *);
-	dst = va_arg(ap, struct party **);
-	if (strcmpi(p->name, str) == 0)
-		*dst = p;
-
-	return 0;
-}
-
-// �p�[�e�B������
-struct party* search_partyname(char *str) {
-	struct party *p = NULL;
-	numdb_foreach(party_db, search_partyname_sub, str, &p);
-
-	return p;
-}
-
-// EXP�������z�ł��邩�`�F�b�N
-int party_check_exp_share(struct party *p) {
-	int i;
-	int maxlv = 0, minlv = 0x7fffffff;
-
-	for(i = 0; i < MAX_PARTY; i++) {
-		int lv = p->member[i].lv;
-		if (p->member[i].online) {
-			if (lv < minlv)
-				minlv = lv;
-			if (maxlv < lv)
-				maxlv = lv;
-		}
-	}
-
-	return (maxlv == 0 || maxlv-minlv <= party_share_level);
-}
-
-// �p�[�e�B���󂩂ǂ����`�F�b�N
-int party_check_empty(struct party *p) {
-	int i;
-
-//	printf("party check empty %08X\n", (int)p);
-	for(i = 0; i < MAX_PARTY; i++) {
-//		printf("%d acc=%d\n", i, p->member[i].account_id);
-		if (p->member[i].account_id > 0) {
-			return 0;
-		}
-	}
-		// �N�����Ȃ��̂ʼn��U
-	mapif_party_broken(p->party_id, 0);
-	numdb_erase(party_db, p->party_id);
-	free(p);
-
-	return 1;
-}
-
-// �L�����̋������Ȃ����`�F�b�N�p
-int party_check_conflict_sub(void *key, void *data, va_list ap) {
-	struct party *p = (struct party *)data;
-	int party_id, account_id, i;
-	char *nick;
-
-	party_id=va_arg(ap, int);
-	account_id=va_arg(ap, int);
-	nick=va_arg(ap, char *);
-
-	if (p->party_id == party_id)	// �{���̏����Ȃ̂Ŗ��Ȃ�
-		return 0;
-
-	for(i = 0; i < MAX_PARTY; i++) {
-		if (p->member[i].account_id == account_id && strcmp(p->member[i].name, nick) == 0) {
-			// �ʂ̃p�[�e�B�ɋU�̏����f�[�^������̂ŒE��
-			printf("int_party: party conflict! %d %d %d\n", account_id, party_id, p->party_id);
-			mapif_parse_PartyLeave(-1, p->party_id, account_id);
-		}
-	}
-
-	return 0;
-}
-
-// �L�����̋������Ȃ����`�F�b�N
-int party_check_conflict(int party_id, int account_id, char *nick) {
-	numdb_foreach(party_db, party_check_conflict_sub, party_id, account_id, nick);
-
-	return 0;
-}
-
-//-------------------------------------------------------------------
-// map server�ւ̒ʐM
-
-// �p�[�e�B�쐬�”�
-int mapif_party_created(int fd,int account_id, struct party *p) {
-	WFIFOW(fd,0) = 0x3820;
-	WFIFOL(fd,2) = account_id;
-	if (p != NULL) {
-		WFIFOB(fd,6) = 0;
-		WFIFOL(fd,7) = p->party_id;
-		memcpy(WFIFOP(fd,11), p->name, 24);
-		printf("int_party: created! %d %s\n", p->party_id, p->name);
-	} else {
-		WFIFOB(fd,6) = 1;
-		WFIFOL(fd,7) = 0;
-		memcpy(WFIFOP(fd,11), "error", 24);
-	}
-	WFIFOSET(fd,35);
-
-	return 0;
-}
-
-// �p�[�e�B��񌩂‚��炸
-int mapif_party_noinfo(int fd, int party_id) {
-	WFIFOW(fd,0) = 0x3821;
-	WFIFOW(fd,2) = 8;
-	WFIFOL(fd,4) = party_id;
-	WFIFOSET(fd,8);
-	printf("int_party: info not found %d\n", party_id);
-
-	return 0;
-}
-
-// �p�[�e�B���܂Ƃߑ���
-int mapif_party_info(int fd, struct party *p) {
-	unsigned char buf[4 + sizeof(struct party)];
-
-	WBUFW(buf,0) = 0x3821;
-	memcpy(buf + 4, p, sizeof(struct party));
-	WBUFW(buf,2) = 4 + sizeof(struct party);
-	if (fd < 0)
-		mapif_sendall(buf, WBUFW(buf,2));
-	else
-		mapif_send(fd, buf, WBUFW(buf,2));
-//	printf("int_party: info %d %s\n", p->party_id, p->name);
-
-	return 0;
-}
-
-// �p�[�e�B�����o�lj��”�
-int mapif_party_memberadded(int fd, int party_id, int account_id, int flag) {
-	WFIFOW(fd,0) = 0x3822;
-	WFIFOL(fd,2) = party_id;
-	WFIFOL(fd,6) = account_id;
-	WFIFOB(fd,10) = flag;
-	WFIFOSET(fd,11);
-
-	return 0;
-}
-
-// �p�[�e�B�ݒ�ύX�ʒm
-int mapif_party_optionchanged(int fd,struct party *p, int account_id, int flag) {
-	unsigned char buf[15];
-
-	WBUFW(buf,0) = 0x3823;
-	WBUFL(buf,2) = p->party_id;
-	WBUFL(buf,6) = account_id;
-	WBUFW(buf,10) = p->exp;
-	WBUFW(buf,12) = p->item;
-	WBUFB(buf,14) = flag;
-	if (flag == 0)
-		mapif_sendall(buf, 15);
-	else
-		mapif_send(fd, buf, 15);
-	printf("int_party: option changed %d %d %d %d %d\n", p->party_id, account_id, p->exp, p->item, flag);
-
-	return 0;
-}
-
-// �p�[�e�B�E�ޒʒm
-int mapif_party_leaved(int party_id,int account_id, char *name) {
-	unsigned char buf[34];
-
-	WBUFW(buf,0) = 0x3824;
-	WBUFL(buf,2) = party_id;
-	WBUFL(buf,6) = account_id;
-	memcpy(WBUFP(buf,10), name, 24);
-	mapif_sendall(buf, 34);
-	printf("int_party: party leaved %d %d %s\n", party_id, account_id, name);
-
-	return 0;
-}
-
-// �p�[�e�B�}�b�v�X�V�ʒm
-int mapif_party_membermoved(struct party *p, int idx) {
-	unsigned char buf[29];
-
-	WBUFW(buf,0) = 0x3825;
-	WBUFL(buf,2) = p->party_id;
-	WBUFL(buf,6) = p->member[idx].account_id;
-	memcpy(WBUFP(buf,10), p->member[idx].map, 16);
-	WBUFB(buf,26) = p->member[idx].online;
-	WBUFW(buf,27) = p->member[idx].lv;
-	mapif_sendall(buf, 29);
-
-	return 0;
-}
-
-// �p�[�e�B���U�ʒm
-int mapif_party_broken(int party_id, int flag) {
-	unsigned char buf[7];
-	WBUFW(buf,0) = 0x3826;
-	WBUFL(buf,2) = party_id;
-	WBUFB(buf,6) = flag;
-	mapif_sendall(buf, 7);
-	printf("int_party: broken %d\n", party_id);
-
-	return 0;
-}
-
-// �p�[�e�B������
-int mapif_party_message(int party_id, int account_id, char *mes, int len) {
-	unsigned char buf[len+12];
-
-	WBUFW(buf,0) = 0x3827;
-	WBUFW(buf,2) = len + 12;
-	WBUFL(buf,4) = party_id;
-	WBUFL(buf,8) = account_id;
-	memcpy(WBUFP(buf,12), mes, len);
-	mapif_sendall(buf,len + 12);
-
-	return 0;
-}
-
-//-------------------------------------------------------------------
-// map server����̒ʐM
-
-
-// �p�[�e�B
-int mapif_parse_CreateParty(int fd, int account_id, char *name, char *nick, char *map, int lv) {
-	struct party *p;
-	int i;
-
-	for(i = 0; i < 24 && name[i]; i++) {
-		if (!(name[i] & 0xe0) || name[i] == 0x7f) {
-			printf("int_party: illegal party name [%s]\n", name);
-			mapif_party_created(fd, account_id, NULL);
-			return 0;
-		}
-	}
-
-	if ((p = search_partyname(name)) != NULL) {
-		printf("int_party: same name party exists [%s]\n", name);
-		mapif_party_created(fd, account_id, NULL);
-		return 0;
-	}
-	p = calloc(sizeof(struct party), 1);
-	if (p == NULL) {
-		printf("int_party: out of memory !\n");
-		mapif_party_created(fd,account_id,NULL);
-		return 0;
-	}
-	memset(p, 0, sizeof(struct party));
-	p->party_id = party_newid++;
-	memcpy(p->name, name, 24);
-	p->exp = 0;
-	p->item = 0;
-	p->member[0].account_id = account_id;
-	memcpy(p->member[0].name, nick, 24);
-	memcpy(p->member[0].map, map, 16);
-	p->member[0].leader = 1;
-	p->member[0].online = 1;
-	p->member[0].lv = lv;
-
-	numdb_insert(party_db, p->party_id, p);
-
-	mapif_party_created(fd, account_id, p);
-	mapif_party_info(fd, p);
-
-	return 0;
-}
-
-// �p�[�e�B���v��
-int mapif_parse_PartyInfo(int fd, int party_id) {
-	struct party *p;
-
-	p = numdb_search(party_db, party_id);
-	if (p != NULL)
-		mapif_party_info(fd, p);
-	else
-		mapif_party_noinfo(fd, party_id);
-
-	return 0;
-}
-
-// �p�[�e�B�lj��v��
-int mapif_parse_PartyAddMember(int fd, int party_id, int account_id, char *nick, char *map, int lv) {
-	struct party *p;
-	int i;
-
-	p = numdb_search(party_db, party_id);
-	if (p == NULL) {
-		mapif_party_memberadded(fd, party_id, account_id, 1);
-		return 0;
-	}
-
-	for(i = 0; i < MAX_PARTY; i++) {
-		if (p->member[i].account_id == 0) {
-			int flag = 0;
-
-			p->member[i].account_id = account_id;
-			memcpy(p->member[i].name, nick, 24);
-			memcpy(p->member[i].map, map, 16);
-			p->member[i].leader = 0;
-			p->member[i].online = 1;
-			p->member[i].lv = lv;
-			mapif_party_memberadded(fd, party_id, account_id, 0);
-			mapif_party_info(-1, p);
-
-			if (p->exp > 0 && !party_check_exp_share(p)) {
-				p->exp = 0;
-				flag = 0x01;
-			}
-			if (flag)
-				mapif_party_optionchanged(fd, p, 0, 0);
-			return 0;
-		}
-	}
-	mapif_party_memberadded(fd, party_id, account_id, 1);
-
-	return 0;
-}
-
-// �p�[�e�B�[�ݒ�ύX�v��
-int mapif_parse_PartyChangeOption(int fd, int party_id, int account_id, int exp, int item) {
-	struct party *p;
-	int flag = 0;
-
-	p = numdb_search(party_db, party_id);
-	if (p == NULL)
-		return 0;
-
-	p->exp = exp;
-	if (exp>0 && !party_check_exp_share(p)) {
-		flag |= 0x01;
-		p->exp = 0;
-	}
-
-	p->item = item;
-
-	mapif_party_optionchanged(fd, p, account_id, flag);
-	return 0;
-}
-
-// �p�[�e�B�E�ޗv��
-int mapif_parse_PartyLeave(int fd, int party_id, int account_id) {
-	struct party *p;
-	int i;
-
-	p = numdb_search(party_db, party_id);
-	if (p != NULL) {
-		for(i = 0; i < MAX_PARTY; i++) {
-			if (p->member[i].account_id == account_id) {
-				mapif_party_leaved(party_id, account_id, p->member[i].name);
-
-				memset(&p->member[i], 0, sizeof(struct party_member));
-				if (party_check_empty(p) == 0)
-					mapif_party_info(-1, p);// �܂��l������̂Ńf�[�^���M
-				return 0;
-			}
-		}
-	}
-
-	return 0;
-}
-
-// �p�[�e�B�}�b�v�X�V�v��
-int mapif_parse_PartyChangeMap(int fd, int party_id, int account_id, char *map, int online, int lv) {
-	struct party *p;
-	int i;
-
-	p = numdb_search(party_db, party_id);
-	if (p == NULL)
-		return 0;
-
-	for(i = 0; i < MAX_PARTY; i++) {
-		if (p->member[i].account_id == account_id) {
-			int flag = 0;
-
-			memcpy(p->member[i].map, map, 16);
-			p->member[i].online = online;
-			p->member[i].lv = lv;
-			mapif_party_membermoved(p, i);
-
-			if (p->exp > 0 && !party_check_exp_share(p)) {
-				p->exp = 0;
-				flag = 1;
-			}
-			if (flag)
-				mapif_party_optionchanged(fd, p, 0, 0);
-			break;
-		}
-	}
-
-	return 0;
-}
-
-// �p�[�e�B���U�v��
-int mapif_parse_BreakParty(int fd, int party_id) {
-	struct party *p;
-
-	p = numdb_search(party_db, party_id);
-	if (p == NULL)
-		return 0;
-
-	numdb_erase(party_db, party_id);
-	mapif_party_broken(fd, party_id);
-
-	return 0;
-}
-
-// �p�[�e�B���b�Z�[�W���M
-int mapif_parse_PartyMessage(int fd, int party_id, int account_id, char *mes, int len) {
-	return mapif_party_message(party_id, account_id, mes, len);
-}
-// �p�[�e�B�`�F�b�N�v��
-int mapif_parse_PartyCheck(int fd, int party_id, int account_id, char *nick) {
-	return party_check_conflict(party_id, account_id, nick);
-}
-
-// map server ����̒ʐM
-// �E�P�p�P�b�g�̂݉�͂��邱��
-// �E�p�P�b�g���f�[�^��inter.c�ɃZ�b�g���Ă�������
-// �E�p�P�b�g���`�F�b�N��ARFIFOSKIP�͌Ăяo�����ōs����̂ōs���Ă͂Ȃ�Ȃ�
-// �E�G���[�Ȃ�0(false)�A�����łȂ��Ȃ�1(true)���������Ȃ���΂Ȃ�Ȃ�
-int inter_party_parse_frommap(int fd) {
-	switch(RFIFOW(fd,0)) {
-	case 0x3020: mapif_parse_CreateParty(fd, RFIFOL(fd,2), RFIFOP(fd,6), RFIFOP(fd,30), RFIFOP(fd,54), RFIFOW(fd,70)); break;
-	case 0x3021: mapif_parse_PartyInfo(fd, RFIFOL(fd,2)); break;
-	case 0x3022: mapif_parse_PartyAddMember(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOP(fd,10), RFIFOP(fd,34), RFIFOW(fd,50)); break;
-	case 0x3023: mapif_parse_PartyChangeOption(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOW(fd,10), RFIFOW(fd,12)); break;
-	case 0x3024: mapif_parse_PartyLeave(fd, RFIFOL(fd,2), RFIFOL(fd,6)); break;
-	case 0x3025: mapif_parse_PartyChangeMap(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOP(fd,10), RFIFOB(fd,26), RFIFOW(fd,27)); break;
-	case 0x3026: mapif_parse_BreakParty(fd, RFIFOL(fd,2)); break;
-	case 0x3027: mapif_parse_PartyMessage(fd, RFIFOL(fd,4), RFIFOL(fd,8), RFIFOP(fd,12), RFIFOW(fd,2)-12); break;
-	case 0x3028: mapif_parse_PartyCheck(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOP(fd,10)); break;
-	default:
-		return 0;
-	}
-
-	return 1;
-}
-
-// �T�[�o�[����E�ޗv���i�L�����폜�p�j
-int inter_party_leave(int party_id, int account_id) {
-	return mapif_parse_PartyLeave(-1, party_id, account_id);
-}
-
diff --git a/misc/src/char/int_party.h b/misc/src/char/int_party.h
deleted file mode 100644
index b265b4c..0000000
--- a/misc/src/char/int_party.h
+++ /dev/null
@@ -1,14 +0,0 @@
-// $Id: int_party.h,v 1.1.1.1 2004/09/10 17:26:51 MagicalTux Exp $
-#ifndef _INT_PARTY_H_
-#define _INT_PARTY_H_
-
-int inter_party_init();
-int inter_party_save();
-
-int inter_party_parse_frommap(int fd);
-
-int inter_party_leave(int party_id,int account_id);
-
-extern char party_txt[1024];
-
-#endif
diff --git a/misc/src/char/int_pet.c b/misc/src/char/int_pet.c
deleted file mode 100644
index cff1e43..0000000
--- a/misc/src/char/int_pet.c
+++ /dev/null
@@ -1,364 +0,0 @@
-// $Id: int_pet.c,v 1.1.1.1 2004/09/10 17:26:51 MagicalTux Exp $
-#include "inter.h"
-#include "int_pet.h"
-#include "mmo.h"
-#include "char.h"
-#include "socket.h"
-#include "db.h"
-#include "lock.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-
-char pet_txt[1024]="save/pet.txt";
-
-static struct dbt *pet_db;
-static int pet_newid = 100;
-
-int inter_pet_tostr(char *str,struct s_pet *p)
-{
-	int len;
-
-	if(p->hungry < 0)
-		p->hungry = 0;
-	else if(p->hungry > 100)
-		p->hungry = 100;
-	if(p->intimate < 0)
-		p->intimate = 0;
-	else if(p->intimate > 1000)
-		p->intimate = 1000;
-
-	len=sprintf(str,"%d,%d,%s\t%d,%d,%d,%d,%d,%d,%d,%d,%d",
-		p->pet_id,p->class,p->name,p->account_id,p->char_id,p->level,p->egg_id,
-		p->equip,p->intimate,p->hungry,p->rename_flag,p->incuvate);
-
-	return 0;
-}
-
-int inter_pet_fromstr(char *str,struct s_pet *p)
-{
-	int s;
-	int tmp_int[16];
-	char tmp_str[256];
-	
-	memset(p,0,sizeof(struct s_pet));
-	
-//	printf("sscanf pet main info\n");
-	s=sscanf(str,"%d,%d,%[^\t]\t%d,%d,%d,%d,%d,%d,%d,%d,%d",&tmp_int[0],&tmp_int[1],tmp_str,&tmp_int[2],
-		&tmp_int[3],&tmp_int[4],&tmp_int[5],&tmp_int[6],&tmp_int[7],&tmp_int[8],&tmp_int[9],&tmp_int[10]);
-
-	if(s!=12)
-		return 1;
-	
-	p->pet_id = tmp_int[0];
-	p->class = tmp_int[1];
-	memcpy(p->name,tmp_str,24);
-	p->account_id = tmp_int[2];
-	p->char_id = tmp_int[3];
-	p->level = tmp_int[4];
-	p->egg_id = tmp_int[5];
-	p->equip = tmp_int[6];
-	p->intimate = tmp_int[7];
-	p->hungry = tmp_int[8];
-	p->rename_flag = tmp_int[9];
-	p->incuvate = tmp_int[10];
-
-	if(p->hungry < 0)
-		p->hungry = 0;
-	else if(p->hungry > 100)
-		p->hungry = 100;
-	if(p->intimate < 0)
-		p->intimate = 0;
-	else if(p->intimate > 1000)
-		p->intimate = 1000;
-
-	return 0;
-}
-
-int inter_pet_init()
-{
-	char line[8192];
-	struct s_pet *p;
-	FILE *fp;
-	int c=0;
-
-	pet_db=numdb_init();
-
-	if( (fp=fopen(pet_txt,"r"))==NULL )
-		return 1;
-	while(fgets(line,sizeof(line),fp)){
-		p=calloc(sizeof(struct s_pet), 1);
-		if(p==NULL){
-			printf("int_pet: out of memory!\n");
-			exit(0);
-		}
-		memset(p,0,sizeof(struct s_pet));
-		if(inter_pet_fromstr(line,p)==0 && p->pet_id>0){
-			if( p->pet_id >= pet_newid)
-				pet_newid=p->pet_id+1;
-			numdb_insert(pet_db,p->pet_id,p);
-		}else{
-			printf("int_pet: broken data [%s] line %d\n",pet_txt,c);
-			free(p);
-		}
-		c++;
-	}
-	fclose(fp);
-//	printf("int_pet: %s read done (%d pets)\n",pet_txt,c);
-	return 0;
-}
-
-int inter_pet_save_sub(void *key,void *data,va_list ap)
-{
-	char line[8192];
-	FILE *fp;
-	inter_pet_tostr(line,(struct s_pet *)data);
-	fp=va_arg(ap,FILE *);
-	fprintf(fp,"%s" RETCODE,line);
-	return 0;
-}
-
-int inter_pet_save()
-{
-	FILE *fp;
-	int lock;
-	if( (fp=lock_fopen(pet_txt,&lock))==NULL ){
-		printf("int_pet: cant write [%s] !!! data is lost !!!\n",pet_txt);
-		return 1;
-	}
-	numdb_foreach(pet_db,inter_pet_save_sub,fp);
-	lock_fclose(fp,pet_txt,&lock);
-//	printf("int_pet: %s saved.\n",pet_txt);
-	return 0;
-}
-
-int inter_pet_delete(int pet_id)
-{
-	struct s_pet *p;
-	p = numdb_search(pet_db,pet_id);
-	if( p == NULL)
-		return 1;
-	else {
-		numdb_erase(pet_db,pet_id);
-		printf("pet_id: %d deleted\n",pet_id);
-	}
-	return 0;
-}
-
-int mapif_pet_created(int fd,int account_id,struct s_pet *p)
-{
-	WFIFOW(fd,0)=0x3880;
-	WFIFOL(fd,2)=account_id;
-	if(p!=NULL){
-		WFIFOB(fd,6)=0;
-		WFIFOL(fd,7)=p->pet_id;
-		printf("int_pet: created! %d %s\n",p->pet_id,p->name);
-	}else{
-		WFIFOB(fd,6)=1;
-		WFIFOL(fd,7)=0;
-	}
-	WFIFOSET(fd,11);
-
-	return 0;
-}
-
-int mapif_pet_info(int fd,int account_id,struct s_pet *p)
-{
-	WFIFOW(fd,0)=0x3881;
-	WFIFOW(fd,2)=sizeof(struct s_pet) + 9;
-	WFIFOL(fd,4)=account_id;
-	WFIFOB(fd,8)=0;
-	memcpy(WFIFOP(fd,9),p,sizeof(struct s_pet));
-	WFIFOSET(fd,WFIFOW(fd,2));
-
-	return 0;
-}
-
-int mapif_pet_noinfo(int fd,int account_id)
-{
-	WFIFOW(fd,0)=0x3881;
-	WFIFOW(fd,2)=sizeof(struct s_pet) + 9;
-	WFIFOL(fd,4)=account_id;
-	WFIFOB(fd,8)=1;
-	memset(WFIFOP(fd,9),0,sizeof(struct s_pet));
-	WFIFOSET(fd,WFIFOW(fd,2));
-
-	return 0;
-}
-
-int mapif_save_pet_ack(int fd,int account_id,int flag)
-{
-	WFIFOW(fd,0)=0x3882;
-	WFIFOL(fd,2)=account_id;
-	WFIFOB(fd,6)=flag;
-	WFIFOSET(fd,7);
-
-	return 0;
-}
-
-int mapif_delete_pet_ack(int fd,int flag)
-{
-	WFIFOW(fd,0)=0x3883;
-	WFIFOB(fd,2)=flag;
-	WFIFOSET(fd,3);
-
-	return 0;
-}
-
-int mapif_create_pet(int fd,int account_id,int char_id,short pet_class,short pet_lv,short pet_egg_id,
-	short pet_equip,short intimate,short hungry,char rename_flag,char incuvate,char *pet_name)
-{
-	struct s_pet *p;
-	p=malloc(sizeof(struct s_pet));
-	if(p==NULL){
-		printf("int_pet: out of memory !\n");
-		mapif_pet_created(fd,account_id,NULL);
-		return 0;
-	}
-	memset(p,0,sizeof(struct s_pet));
-	p->pet_id = pet_newid++;
-	memcpy(p->name,pet_name,24);
-	if(incuvate == 1)
-		p->account_id = p->char_id = 0;
-	else {
-		p->account_id = account_id;
-		p->char_id = char_id;
-	}
-	p->class = pet_class;
-	p->level = pet_lv;
-	p->egg_id = pet_egg_id;
-	p->equip = pet_equip;
-	p->intimate = intimate;
-	p->hungry = hungry;
-	p->rename_flag = rename_flag;
-	p->incuvate = incuvate;
-
-	if(p->hungry < 0)
-		p->hungry = 0;
-	else if(p->hungry > 100)
-		p->hungry = 100;
-	if(p->intimate < 0)
-		p->intimate = 0;
-	else if(p->intimate > 1000)
-		p->intimate = 1000;
-	
-	numdb_insert(pet_db,p->pet_id,p);
-	
-	mapif_pet_created(fd,account_id,p);
-	
-	return 0;
-}
-
-int mapif_load_pet(int fd,int account_id,int char_id,int pet_id)
-{
-	struct s_pet *p;
-	p=numdb_search(pet_db,pet_id);
-	if(p!=NULL) {
-		if(p->incuvate == 1) {
-			p->account_id = p->char_id = 0;
-			mapif_pet_info(fd,account_id,p);
-		}
-		else if(account_id == p->account_id && char_id == p->char_id)
-			mapif_pet_info(fd,account_id,p);
-		else
-			mapif_pet_noinfo(fd,account_id);
-	}
-	else
-		mapif_pet_noinfo(fd,account_id);
-
-	return 0;
-}
-
-int mapif_save_pet(int fd,int account_id,struct s_pet *data)
-{
-	struct s_pet *p;
-	int pet_id;
-	int len=RFIFOW(fd,2);
-	if(sizeof(struct s_pet)!=len-8) {
-		printf("inter pet: data size error %d %d\n",sizeof(struct s_pet),len-8);
-	}
-	else{
-		pet_id = data->pet_id;
-		p=numdb_search(pet_db,pet_id);
-		if(p == NULL) {
-			p=malloc(sizeof(struct s_pet));
-			if(p==NULL){
-				printf("int_pet: out of memory !\n");
-				mapif_save_pet_ack(fd,account_id,1);
-				return 0;
-			}
-			memset(p,0,sizeof(struct s_pet));
-			p->pet_id = data->pet_id;
-			if(p->pet_id == 0)
-				data->pet_id = p->pet_id = pet_newid++;
-			numdb_insert(pet_db,p->pet_id,p);		
-		}
-		if(data->hungry < 0)
-			data->hungry = 0;
-		else if(data->hungry > 100)
-			data->hungry = 100;
-		if(data->intimate < 0)
-			data->intimate = 0;
-		else if(data->intimate > 1000)
-			data->intimate = 1000;
-		memcpy(p,data,sizeof(struct s_pet));
-		if(p->incuvate == 1)
-			p->account_id = p->char_id = 0;
-
-		mapif_save_pet_ack(fd,account_id,0);
-	}
-
-	return 0;
-}
-
-int mapif_delete_pet(int fd,int pet_id)
-{
-	mapif_delete_pet_ack(fd,inter_pet_delete(pet_id));
-
-	return 0;
-}
-
-int mapif_parse_CreatePet(int fd)
-{
-	mapif_create_pet(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOW(fd,10),RFIFOW(fd,12),RFIFOW(fd,14),RFIFOW(fd,16),RFIFOL(fd,18),
-		RFIFOL(fd,20),RFIFOB(fd,22),RFIFOB(fd,23),RFIFOP(fd,24));
-	return 0;
-}
-
-int mapif_parse_LoadPet(int fd)
-{
-	mapif_load_pet(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10));
-	return 0;
-}
-
-int mapif_parse_SavePet(int fd)
-{
-	mapif_save_pet(fd,RFIFOL(fd,4),(struct s_pet *)RFIFOP(fd,8));
-	return 0;
-}
-
-int mapif_parse_DeletePet(int fd)
-{
-	mapif_delete_pet(fd,RFIFOL(fd,2));
-	return 0;
-}
-
-// map server ����̒ʐM
-// �E�P�p�P�b�g�̂݉�͂��邱��
-// �E�p�P�b�g���f�[�^��inter.c�ɃZ�b�g���Ă�������
-// �E�p�P�b�g���`�F�b�N��ARFIFOSKIP�͌Ăяo�����ōs����̂ōs���Ă͂Ȃ�Ȃ�
-// �E�G���[�Ȃ�0(false)�A�����łȂ��Ȃ�1(true)���������Ȃ���΂Ȃ�Ȃ�
-int inter_pet_parse_frommap(int fd)
-{
-	switch(RFIFOW(fd,0)){
-	case 0x3080: mapif_parse_CreatePet(fd); break;
-	case 0x3081: mapif_parse_LoadPet(fd); break;
-	case 0x3082: mapif_parse_SavePet(fd); break;
-	case 0x3083: mapif_parse_DeletePet(fd); break;
-	default:
-		return 0;
-	}
-	return 1;
-}
-
diff --git a/misc/src/char/int_pet.h b/misc/src/char/int_pet.h
deleted file mode 100644
index 993f913..0000000
--- a/misc/src/char/int_pet.h
+++ /dev/null
@@ -1,13 +0,0 @@
-// $Id: int_pet.h,v 1.1.1.1 2004/09/10 17:26:51 MagicalTux Exp $
-#ifndef _INT_PET_H_
-#define _INT_PET_H_
-
-int inter_pet_init();
-int inter_pet_save();
-int inter_pet_delete(int pet_id);
-
-int inter_pet_parse_frommap(int fd);
-
-extern char pet_txt[1024];
-
-#endif
diff --git a/misc/src/char/int_storage.c b/misc/src/char/int_storage.c
deleted file mode 100644
index 8b656fc..0000000
--- a/misc/src/char/int_storage.c
+++ /dev/null
@@ -1,504 +0,0 @@
-// $Id: int_storage.c,v 1.1.1.1 2004/09/10 17:26:51 MagicalTux Exp $
-#include "inter.h"
-#include "int_storage.h"
-#include "int_pet.h"
-#include "int_guild.h"
-#include "mmo.h"
-#include "char.h"
-#include "socket.h"
-#include "db.h"
-#include "lock.h"
-
-#include <string.h>
-#include <stdlib.h>
-
-// �t�@�C�����̃f�t�H���g
-// inter_config_read()�ōĐݒ肳���
-char storage_txt[1024]="save/storage.txt";
-char guild_storage_txt[1024]="save/g_storage.txt";
-
-static struct dbt *storage_db;
-static struct dbt *guild_storage_db;
-
-// �q�Ƀf�[�^�𕶎���ɕϊ�
-int storage_tostr(char *str,struct storage *p)
-{
-	int i,f=0;
-	char *str_p = str;
-	str_p += sprintf(str_p,"%d,%d\t",p->account_id,p->storage_amount);
-
-	for(i=0;i<MAX_STORAGE;i++)
-		if( (p->storage[i].nameid) && (p->storage[i].amount) ){
-			str_p += sprintf(str_p,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d ",
-				p->storage[i].id,p->storage[i].nameid,p->storage[i].amount,p->storage[i].equip,
-				p->storage[i].identify,p->storage[i].refine,p->storage[i].attribute,
-				p->storage[i].card[0],p->storage[i].card[1],p->storage[i].card[2],p->storage[i].card[3],p->storage[i].broken);
-			f++;
-		}
-
-	*(str_p++)='\t';
-
-	*str_p='\0';
-	if(!f)
-		str[0]=0;
-	return 0;
-}
-
-// �������q�Ƀf�[�^�ɕϊ�
-int storage_fromstr(char *str,struct storage *p)
-{
-	int tmp_int[256];
-	int set,next,len,i;
-
-	set=sscanf(str,"%d,%d%n",&tmp_int[0],&tmp_int[1],&next);
-	p->storage_amount=tmp_int[1];
-
-	if(set!=2)
-		return 1;
-	if(str[next]=='\n' || str[next]=='\r')
-		return 0;	
-	next++;
-	for(i=0;str[next] && str[next]!='\t';i++){
-		if(sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-		      &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
-		      &tmp_int[4], &tmp_int[5], &tmp_int[6],
-		      &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &tmp_int[11], &len) == 12) {
-			p->storage[i].id = tmp_int[0];
-			p->storage[i].nameid = tmp_int[1];
-			p->storage[i].amount = tmp_int[2];
-			p->storage[i].equip = tmp_int[3];
-			p->storage[i].identify = tmp_int[4];
-			p->storage[i].refine = tmp_int[5];
-			p->storage[i].attribute = tmp_int[6];
-			p->storage[i].card[0] = tmp_int[7];
-			p->storage[i].card[1] = tmp_int[8];
-			p->storage[i].card[2] = tmp_int[9];
-			p->storage[i].card[3] = tmp_int[10];
-			p->storage[i].broken  = tmp_int[11];
-			next += len;
-			if (str[next] == ' ')
-				next++;	
-		}
-
-		else if(sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-		      &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
-		      &tmp_int[4], &tmp_int[5], &tmp_int[6],
-		      &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &len) == 11) {
-			p->storage[i].id = tmp_int[0];
-			p->storage[i].nameid = tmp_int[1];
-			p->storage[i].amount = tmp_int[2];
-			p->storage[i].equip = tmp_int[3];
-			p->storage[i].identify = tmp_int[4];
-			p->storage[i].refine = tmp_int[5];
-			p->storage[i].attribute = tmp_int[6];
-			p->storage[i].card[0] = tmp_int[7];
-			p->storage[i].card[1] = tmp_int[8];
-			p->storage[i].card[2] = tmp_int[9];
-			p->storage[i].card[3] = tmp_int[10];
-			p->storage[i].broken = 0;	
-			next += len;
-			if (str[next] == ' ')
-				next++;	
-		}
-		
-		else return 1;
-	}
-	return 0;
-}
-
-int guild_storage_tostr(char *str,struct guild_storage *p)
-{
-	int i,f=0;
-	char *str_p = str;
-	str_p+=sprintf(str,"%d,%d\t",p->guild_id,p->storage_amount);
-
-	for(i=0;i<MAX_GUILD_STORAGE;i++)
-		if( (p->storage[i].nameid) && (p->storage[i].amount) ){
-			str_p += sprintf(str_p,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d ",
-				p->storage[i].id,p->storage[i].nameid,p->storage[i].amount,p->storage[i].equip,
-				p->storage[i].identify,p->storage[i].refine,p->storage[i].attribute,
-				p->storage[i].card[0],p->storage[i].card[1],p->storage[i].card[2],p->storage[i].card[3],p->storage[i].broken);
-			f++;
-		}
-
-	*(str_p++)='\t';
-
-	*str_p='\0';
-	if(!f)
-		str[0]=0;
-	return 0;
-}
-
-int guild_storage_fromstr(char *str,struct guild_storage *p)
-{
-	int tmp_int[256];
-	int set,next,len,i;
-
-	set=sscanf(str,"%d,%d%n",&tmp_int[0],&tmp_int[1],&next);
-	p->storage_amount=tmp_int[1];
-
-	if(set!=2)
-		return 1;
-	if(str[next]=='\n' || str[next]=='\r')
-		return 0;	
-	next++;
-	for(i=0;str[next] && str[next]!='\t';i++){
-	if(sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-		      &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
-		      &tmp_int[4], &tmp_int[5], &tmp_int[6],
-		      &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &tmp_int[11], &len) == 12) {
-			p->storage[i].id = tmp_int[0];
-			p->storage[i].nameid = tmp_int[1];
-			p->storage[i].amount = tmp_int[2];
-			p->storage[i].equip = tmp_int[3];
-			p->storage[i].identify = tmp_int[4];
-			p->storage[i].refine = tmp_int[5];
-			p->storage[i].attribute = tmp_int[6];
-			p->storage[i].card[0] = tmp_int[7];
-			p->storage[i].card[1] = tmp_int[8];
-			p->storage[i].card[2] = tmp_int[9];
-			p->storage[i].card[3] = tmp_int[10];
-			p->storage[i].broken  = tmp_int[11];
-			next += len;
-			if (str[next] == ' ')
-				next++;	
-		}
-
-		else if(sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-		      &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
-		      &tmp_int[4], &tmp_int[5], &tmp_int[6],
-		      &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &len) == 11) {
-			p->storage[i].id = tmp_int[0];
-			p->storage[i].nameid = tmp_int[1];
-			p->storage[i].amount = tmp_int[2];
-			p->storage[i].equip = tmp_int[3];
-			p->storage[i].identify = tmp_int[4];
-			p->storage[i].refine = tmp_int[5];
-			p->storage[i].attribute = tmp_int[6];
-			p->storage[i].card[0] = tmp_int[7];
-			p->storage[i].card[1] = tmp_int[8];
-			p->storage[i].card[2] = tmp_int[9];
-			p->storage[i].card[3] = tmp_int[10];
-			p->storage[i].broken = 0;	
-			next += len;
-			if (str[next] == ' ')
-				next++;	
-		}
-		
-		else return 1;
-	}
-	return 0;
-}
-
-// �A�J�E���g����q�Ƀf�[�^�C���f�b�N�X�𓾂�i�V�K�q�ɒlj��”\�j
-struct storage *account2storage(int account_id)
-{
-	struct storage *s;
-	s=numdb_search(storage_db,account_id);
-	if(s == NULL) {
-		s = calloc(sizeof(struct storage), 1);
-		if(s==NULL){
-			printf("int_storage: out of memory!\n");
-			exit(0);
-		}
-		memset(s,0,sizeof(struct storage));
-		s->account_id=account_id;
-		numdb_insert(storage_db,s->account_id,s);
-	}
-	return s;
-}
-
-struct guild_storage *guild2storage(int guild_id)
-{
-	struct guild_storage *gs = NULL;
-	if(inter_guild_search(guild_id) != NULL) {
-		gs=numdb_search(guild_storage_db,guild_id);
-		if(gs == NULL) {
-			gs = calloc(sizeof(struct guild_storage), 1);
-			if(gs==NULL){
-				printf("int_storage: out of memory!\n");
-				exit(0);
-			}
-			memset(gs,0,sizeof(struct guild_storage));
-			gs->guild_id=guild_id;
-			numdb_insert(guild_storage_db,gs->guild_id,gs);
-		}
-	}
-	return gs;
-}
-
-//---------------------------------------------------------
-// �q�Ƀf�[�^��ǂݍ���
-int inter_storage_init()
-{
-	char line[65536];
-	int c=0,tmp_int;
-	struct storage *s;
-	struct guild_storage *gs;
-	FILE *fp;
-
-	storage_db = numdb_init();
-
-	fp=fopen(storage_txt,"r");
-	if(fp==NULL){
-		printf("cant't read : %s\n",storage_txt);
-		return 1;
-	}
-	while(fgets(line,65535,fp)){
-		sscanf(line,"%d",&tmp_int);
-		s=calloc(sizeof(struct storage), 1);
-		if(s==NULL){
-			printf("int_storage: out of memory!\n");
-			exit(0);
-		}
-		memset(s,0,sizeof(struct storage));
-		s->account_id=tmp_int;
-		if(s->account_id > 0 && storage_fromstr(line,s) == 0) {
-			numdb_insert(storage_db,s->account_id,s);
-		}
-		else{
-			printf("int_storage: broken data [%s] line %d\n",storage_txt,c);
-			free(s);
-		}
-		c++;
-	}
-	fclose(fp);
-
-	c = 0;
-	guild_storage_db = numdb_init();
-
-	fp=fopen(guild_storage_txt,"r");
-	if(fp==NULL){
-		printf("cant't read : %s\n",guild_storage_txt);
-		return 1;
-	}
-	while(fgets(line,65535,fp)){
-		sscanf(line,"%d",&tmp_int);
-		gs=calloc(sizeof(struct guild_storage), 1);
-		if(gs==NULL){
-			printf("int_storage: out of memory!\n");
-			exit(0);
-		}
-		memset(gs,0,sizeof(struct guild_storage));
-		gs->guild_id=tmp_int;
-		if(gs->guild_id > 0 && guild_storage_fromstr(line,gs) == 0) {
-			numdb_insert(guild_storage_db,gs->guild_id,gs);
-		}
-		else{
-			printf("int_storage: broken data [%s] line %d\n",guild_storage_txt,c);
-			free(gs);
-		}
-		c++;
-	}
-	fclose(fp);
-
-	return 0;
-}
-
-int inter_storage_save_sub(void *key,void *data,va_list ap)
-{
-	char line[65536];
-	FILE *fp;
-	storage_tostr(line,(struct storage *)data);
-	fp=va_arg(ap,FILE *);
-	if(*line)
-		fprintf(fp,"%s" RETCODE,line);
-	return 0;
-}
-//---------------------------------------------------------
-// �q�Ƀf�[�^����������
-int inter_storage_save()
-{
-	FILE *fp;
-	int lock;
-	if( (fp=lock_fopen(storage_txt,&lock))==NULL ){
-		printf("int_storage: cant write [%s] !!! data is lost !!!\n",storage_txt);
-		return 1;
-	}
-	numdb_foreach(storage_db,inter_storage_save_sub,fp);
-	lock_fclose(fp,storage_txt,&lock);
-//	printf("int_storage: %s saved.\n",storage_txt);
-	return 0;
-}
-
-int inter_guild_storage_save_sub(void *key,void *data,va_list ap)
-{
-	char line[65536];
-	FILE *fp;
-	if(inter_guild_search(((struct guild_storage *)data)->guild_id) != NULL) {
-		guild_storage_tostr(line,(struct guild_storage *)data);
-		fp=va_arg(ap,FILE *);
-		if(*line)
-			fprintf(fp,"%s" RETCODE,line);
-	}
-	return 0;
-}
-//---------------------------------------------------------
-// �q�Ƀf�[�^����������
-int inter_guild_storage_save()
-{
-	FILE *fp;
-	int  lock;
-	if( (fp=lock_fopen(guild_storage_txt,&lock))==NULL ){
-		printf("int_storage: cant write [%s] !!! data is lost !!!\n",guild_storage_txt);
-		return 1;
-	}
-	numdb_foreach(guild_storage_db,inter_guild_storage_save_sub,fp);
-	lock_fclose(fp,guild_storage_txt,&lock);
-//	printf("int_storage: %s saved.\n",guild_storage_txt);
-	return 0;
-}
-
-// �q�Ƀf�[�^�폜
-int inter_storage_delete(int account_id)
-{
-	struct storage *s = numdb_search(storage_db,account_id);
-	if(s) {
-		int i;
-		for(i=0;i<s->storage_amount;i++){
-			if(s->storage[i].card[0] == (short)0xff00)
-				inter_pet_delete(*((long *)(&s->storage[i].card[2])));
-		}
-		numdb_erase(storage_db,account_id);
-		free(s);
-	}
-	return 0;
-}
-
-// �M���h�q�Ƀf�[�^�폜
-int inter_guild_storage_delete(int guild_id)
-{
-	struct guild_storage *gs = numdb_search(guild_storage_db,guild_id);
-	if(gs) {
-		int i;
-		for(i=0;i<gs->storage_amount;i++){
-			if(gs->storage[i].card[0] == (short)0xff00)
-				inter_pet_delete(*((long *)(&gs->storage[i].card[2])));
-		}
-		numdb_erase(guild_storage_db,guild_id);
-		free(gs);
-	}
-	return 0;
-}
-
-//---------------------------------------------------------
-// map server�ւ̒ʐM
-
-// �q�Ƀf�[�^�̑��M
-int mapif_load_storage(int fd,int account_id)
-{
-	struct storage *s=account2storage(account_id);
-	WFIFOW(fd,0)=0x3810;
-	WFIFOW(fd,2)=sizeof(struct storage)+8;
-	WFIFOL(fd,4)=account_id;
-	memcpy(WFIFOP(fd,8),s,sizeof(struct storage));
-	WFIFOSET(fd,WFIFOW(fd,2));
-	return 0;
-}
-// �q�Ƀf�[�^�ۑ��������M
-int mapif_save_storage_ack(int fd,int account_id)
-{
-	WFIFOW(fd,0)=0x3811;
-	WFIFOL(fd,2)=account_id;
-	WFIFOB(fd,6)=0;
-	WFIFOSET(fd,7);
-	return 0;
-}
-
-int mapif_load_guild_storage(int fd,int account_id,int guild_id)
-{
-	struct guild_storage *gs=guild2storage(guild_id);
-	WFIFOW(fd,0)=0x3818;
-	if(gs) {
-		WFIFOW(fd,2)=sizeof(struct guild_storage)+12;
-		WFIFOL(fd,4)=account_id;
-		WFIFOL(fd,8)=guild_id;
-		memcpy(WFIFOP(fd,12),gs,sizeof(struct guild_storage));
-	}
-	else {
-		WFIFOW(fd,2)=12;
-		WFIFOL(fd,4)=account_id;
-		WFIFOL(fd,8)=0;
-	}
-	WFIFOSET(fd,WFIFOW(fd,2));
-
-	return 0;
-}
-int mapif_save_guild_storage_ack(int fd,int account_id,int guild_id,int fail)
-{
-	WFIFOW(fd,0)=0x3819;
-	WFIFOL(fd,2)=account_id;
-	WFIFOL(fd,6)=guild_id;
-	WFIFOB(fd,10)=fail;
-	WFIFOSET(fd,11);
-	return 0;
-}
-
-//---------------------------------------------------------
-// map server����̒ʐM
-
-// �q�Ƀf�[�^�v����M
-int mapif_parse_LoadStorage(int fd)
-{
-	mapif_load_storage(fd,RFIFOL(fd,2));
-	return 0;
-}
-// �q�Ƀf�[�^��M���ۑ�
-int mapif_parse_SaveStorage(int fd)
-{
-	struct storage *s;
-	int account_id=RFIFOL(fd,4);
-	int len=RFIFOW(fd,2);
-	if(sizeof(struct storage)!=len-8){
-		printf("inter storage: data size error %d %d\n",sizeof(struct storage),len-8);
-	}
-	else {
-		s=account2storage(account_id);
-		memcpy(s,RFIFOP(fd,8),sizeof(struct storage));
-		mapif_save_storage_ack(fd,account_id);
-	}
-	return 0;
-}
-
-int mapif_parse_LoadGuildStorage(int fd)
-{
-	mapif_load_guild_storage(fd,RFIFOL(fd,2),RFIFOL(fd,6));
-	return 0;
-}
-int mapif_parse_SaveGuildStorage(int fd)
-{
-	struct guild_storage *gs;
-	int guild_id=RFIFOL(fd,8);
-	int len=RFIFOW(fd,2);
-	if(sizeof(struct guild_storage)!=len-12){
-		printf("inter storage: data size error %d %d\n",sizeof(struct guild_storage),len-12);
-	}
-	else {
-		gs=guild2storage(guild_id);
-		if(gs) {
-			memcpy(gs,RFIFOP(fd,12),sizeof(struct guild_storage));
-			mapif_save_guild_storage_ack(fd,RFIFOL(fd,4),guild_id,0);
-		}
-		else
-			mapif_save_guild_storage_ack(fd,RFIFOL(fd,4),guild_id,1);
-	}
-	return 0;
-}
-
-// map server ����̒ʐM
-// �E�P�p�P�b�g�̂݉�͂��邱��
-// �E�p�P�b�g���f�[�^��inter.c�ɃZ�b�g���Ă�������
-// �E�p�P�b�g���`�F�b�N��ARFIFOSKIP�͌Ăяo�����ōs����̂ōs���Ă͂Ȃ�Ȃ�
-// �E�G���[�Ȃ�0(false)�A�����łȂ��Ȃ�1(true)���������Ȃ���΂Ȃ�Ȃ�
-int inter_storage_parse_frommap(int fd)
-{
-	switch(RFIFOW(fd,0)){
-	case 0x3010: mapif_parse_LoadStorage(fd); break;
-	case 0x3011: mapif_parse_SaveStorage(fd); break;
-	case 0x3018: mapif_parse_LoadGuildStorage(fd); break;
-	case 0x3019: mapif_parse_SaveGuildStorage(fd); break;
-	default:
-		return 0;
-	}
-	return 1;
-}
diff --git a/misc/src/char/int_storage.h b/misc/src/char/int_storage.h
deleted file mode 100644
index d918f5f..0000000
--- a/misc/src/char/int_storage.h
+++ /dev/null
@@ -1,16 +0,0 @@
-// $Id: int_storage.h,v 1.1.1.1 2004/09/10 17:26:51 MagicalTux Exp $
-#ifndef _INT_STORAGE_H_
-#define _INT_STORAGE_H_
-
-int inter_storage_init();
-int inter_storage_save();
-int inter_guild_storage_save();
-int inter_storage_delete(int account_id);
-int inter_guild_storage_delete(int guild_id);
-
-int inter_storage_parse_frommap(int fd);
-
-extern char storage_txt[1024];
-extern char guild_storage_txt[1024];
-
-#endif
diff --git a/misc/src/char/inter.c b/misc/src/char/inter.c
deleted file mode 100644
index 29ec57b..0000000
--- a/misc/src/char/inter.c
+++ /dev/null
@@ -1,561 +0,0 @@
-// $Id: inter.c,v 1.1.1.1 2004/09/10 17:26:51 MagicalTux Exp $
-#include "mmo.h"
-#include "char.h"
-#include "socket.h"
-#include "timer.h"
-#include "db.h"
-#include <string.h>
-#include <stdlib.h>
-
-#include "inter.h"
-#include "int_party.h"
-#include "int_guild.h"
-#include "int_storage.h"
-#include "int_pet.h"
-#include "lock.h"
-
-#define WISDATA_TTL (60*1000)	// Existence time of Wisp/page data (60 seconds)
-                             	// that is the waiting time of answers of all map-servers
-#define WISDELLIST_MAX 256   	// Number of elements of Wisp/page data deletion list
-
-char inter_log_filename[1024] = "log/inter.log";
-
-char accreg_txt[1024] = "save/accreg.txt";
-static struct dbt *accreg_db = NULL;
-
-struct accreg {
-	int account_id, reg_num;
-	struct global_reg reg[ACCOUNT_REG_NUM];
-};
-
-int party_share_level = 10;
-
-
-// ���M�p�P�b�g�����X�g
-int inter_send_packet_length[] = {
-	-1,-1,27,-1, -1, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	-1, 7, 0, 0,  0, 0, 0, 0, -1,11, 0, 0,  0, 0,  0, 0,
-	35,-1,11,15, 34,29, 7,-1,  0, 0, 0, 0,  0, 0,  0, 0,
-	10,-1,15, 0, 79,19, 7,-1,  0,-1,-1,-1, 14,67,186,-1,
-	 9, 9,-1, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	 0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	 0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	 0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	11,-1, 7, 3,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-};
-// ��M�p�P�b�g�����X�g
-int inter_recv_packet_length[] = {
-	-1,-1, 7,-1, -1, 6, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	 6,-1, 0, 0,  0, 0, 0, 0, 10,-1, 0, 0,  0, 0,  0, 0,
-	72, 6,52,14, 10,29, 6,-1, 34, 0, 0, 0,  0, 0,  0, 0,
-	-1, 6,-1, 0, 55,19, 6,-1, 14,-1,-1,-1, 14,19,186,-1,
-	 5, 9, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	 0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	 0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	 0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	48,14,-1, 6,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-};
-
-struct WisData {
-	int id, fd, count, len;
-	unsigned long tick;
-	unsigned char src[24], dst[24], msg[1024];
-};
-static struct dbt * wis_db = NULL;
-static int wis_dellist[WISDELLIST_MAX], wis_delnum;
-
-
-//--------------------------------------------------------
-
-// �A�J�E���g�ϐ��𕶎���֕ϊ�
-int inter_accreg_tostr(char *str, struct accreg *reg) {
-	int j;
-	char *p = str;
-
-	p += sprintf(p, "%d\t", reg->account_id);
-	for(j = 0; j < reg->reg_num; j++) {
-		p += sprintf(p,"%s,%d ", reg->reg[j].str, reg->reg[j].value);
-	}
-
-	return 0;
-}
-
-// �A�J�E���g�ϐ��𕶎��񂩂�ϊ�
-int inter_accreg_fromstr(const char *str, struct accreg *reg) {
-	int j, v, n;
-	char buf[128];
-	const char *p = str;
-
-	if (sscanf(p, "%d\t%n", &reg->account_id, &n ) != 1 || reg->account_id <= 0)
-		return 1;
-
-	for(j = 0, p += n; j < ACCOUNT_REG_NUM; j++, p += n) {
-		if (sscanf(p, "%[^,],%d %n", buf, &v, &n) != 2)
-			break;
-		memcpy(reg->reg[j].str, buf, 32);
-		reg->reg[j].value = v;
-	}
-	reg->reg_num = j;
-
-	return 0;
-}
-
-// �A�J�E���g�ϐ��̓ǂݍ���
-int inter_accreg_init() {
-	char line[8192];
-	FILE *fp;
-	int c = 0;
-	struct accreg *reg;
-
-	accreg_db = numdb_init();
-
-	if( (fp = fopen(accreg_txt, "r")) == NULL)
-		return 1;
-	while(fgets(line, sizeof(line)-1, fp)){
-		line[sizeof(line)-1] = '\0';
-
-		reg = calloc(sizeof(struct accreg), 1);
-		if (reg == NULL) {
-			printf("inter: accreg: out of memory!\n");
-			exit(0);
-		}
-		if (inter_accreg_fromstr(line, reg) == 0 && reg->account_id > 0) {
-			numdb_insert(accreg_db, reg->account_id, reg);
-		} else {
-			printf("inter: accreg: broken data [%s] line %d\n", accreg_txt, c);
-			free(reg);
-		}
-		c++;
-	}
-	fclose(fp);
-//	printf("inter: %s read done (%d)\n", accreg_txt, c);
-
-	return 0;
-}
-
-// �A�J�E���g�ϐ��̃Z�[�u�p
-int inter_accreg_save_sub(void *key, void *data, va_list ap) {
-	char line[8192];
-	FILE *fp;
-	struct accreg *reg = (struct accreg *)data;
-
-	if (reg->reg_num > 0) {
-		inter_accreg_tostr(line,reg);
-		fp = va_arg(ap, FILE *);
-		fprintf(fp, "%s" RETCODE, line);
-	}
-
-	return 0;
-}
-
-// �A�J�E���g�ϐ��̃Z�[�u
-int inter_accreg_save() {
-	FILE *fp;
-	int lock;
-
-	if ((fp = lock_fopen(accreg_txt,&lock)) == NULL) {
-		printf("int_accreg: cant write [%s] !!! data is lost !!!\n", accreg_txt);
-		return 1;
-	}
-	numdb_foreach(accreg_db, inter_accreg_save_sub,fp);
-	lock_fclose(fp, accreg_txt, &lock);
-//	printf("inter: %s saved.\n", accreg_txt);
-
-	return 0;
-}
-
-//--------------------------------------------------------
-
-/*==========================================
- * �ݒ�t�@�C����ǂݍ���
- *------------------------------------------
- */
-int inter_config_read(const char *cfgName) {
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp;
-
-	fp = fopen(cfgName, "r");
-	if (fp == NULL) {
-		printf("file not found: %s\n", cfgName);
-		return 1;
-	}
-	while(fgets(line, sizeof(line) - 1, fp)) {
-		if (line[0] == '/' && line[1] == '/')
-			continue;
-		line[sizeof(line)-1] = '\0';
-
-		if (sscanf(line,"%[^:]: %[^\r\n]", w1, w2) != 2)
-			continue;
-
-		if (strcmpi(w1, "storage_txt") == 0) {
-			strncpy(storage_txt, w2, sizeof(storage_txt));
-		} else if (strcmpi(w1, "party_txt") == 0) {
-			strncpy(party_txt, w2, sizeof(party_txt));
-		} else if (strcmpi(w1, "guild_txt") == 0) {
-			strncpy(guild_txt, w2, sizeof(guild_txt));
-		} else if (strcmpi(w1, "pet_txt") == 0) {
-			strncpy(pet_txt, w2, sizeof(pet_txt));
-		} else if (strcmpi(w1, "castle_txt") == 0) {
-			strncpy(castle_txt, w2, sizeof(castle_txt));
-		} else if (strcmpi(w1, "accreg_txt") == 0) {
-			strncpy(accreg_txt, w2, sizeof(accreg_txt));
-		} else if (strcmpi(w1, "guild_storage_txt") == 0) {
-			strncpy(guild_storage_txt, w2, sizeof(guild_storage_txt));
-		} else if (strcmpi(w1, "party_share_level") == 0) {
-			party_share_level = atoi(w2);
-			if (party_share_level < 0)
-				party_share_level = 0;
-		} else if (strcmpi(w1, "inter_log_filename") == 0) {
-			strncpy(inter_log_filename, w2, sizeof(inter_log_filename));
-		} else if (strcmpi(w1, "import") == 0) {
-			inter_config_read(w2);
-		}
-	}
-	fclose(fp);
-
-	return 0;
-}
-
-// ���O�����o��
-int inter_log(char *fmt,...) {
-	FILE *logfp;
-	va_list ap;
-
-	va_start(ap,fmt);
-	logfp = fopen(inter_log_filename, "a");
-	if (logfp) {
-		vfprintf(logfp, fmt, ap);
-		fclose(logfp);
-	}
-	va_end(ap);
-
-	return 0;
-}
-
-// �Z�[�u
-int inter_save() {
-	inter_party_save();
-	inter_guild_save();
-	inter_storage_save();
-	inter_guild_storage_save();
-	inter_pet_save();
-	inter_accreg_save();
-
-	return 0;
-}
-
-// ������
-int inter_init(const char *file) {
-	inter_config_read(file);
-
-	wis_db = numdb_init();
-
-	inter_party_init();
-	inter_guild_init();
-	inter_storage_init();
-	inter_pet_init();
-	inter_accreg_init();
-
-	return 0;
-}
-
-// �}�b�v�T�[�o�[�ڑ�
-int inter_mapif_init(int fd) {
-	inter_guild_mapif_init(fd);
-
-	return 0;
-}
-
-//--------------------------------------------------------
-// sended packets to map-server
-
-// GM���b�Z�[�W���M
-int mapif_GMmessage(unsigned char *mes, int len) {
-	unsigned char buf[len];
-
-	WBUFW(buf,0) = 0x3800;
-	WBUFW(buf,2) = len;
-	memcpy(WBUFP(buf,4), mes, len - 4);
-	mapif_sendall(buf, len);
-//	printf("inter server: GM:%d %s\n", len, mes);
-
-	return 0;
-}
-
-// Wisp/page transmission to all map-server
-int mapif_wis_message(struct WisData *wd) {
-	unsigned char buf[56 + wd->len];
-
-	WBUFW(buf, 0) = 0x3801;
-	WBUFW(buf, 2) = 56 + wd->len;
-	WBUFL(buf, 4) = wd->id;
-	memcpy(WBUFP(buf, 8), wd->src, 24);
-	memcpy(WBUFP(buf,32), wd->dst, 24);
-	memcpy(WBUFP(buf,56), wd->msg, wd->len);
-	wd->count = mapif_sendall(buf, WBUFW(buf,2));
-
-	return 0;
-}
-
-// Wisp/page transmission result to map-server
-int mapif_wis_end(struct WisData *wd, int flag) {
-	unsigned char buf[27];
-
-	WBUFW(buf, 0) = 0x3802;
-	memcpy(WBUFP(buf, 2), wd->src, 24);
-	WBUFB(buf,26) = flag; // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-	mapif_send(wd->fd, buf, 27);
-//	printf("inter server wis_end: flag: %d\n", flag);
-
-	return 0;
-}
-
-// �A�J�E���g�ϐ����M
-int mapif_account_reg(int fd, unsigned char *src) {
-	unsigned char buf[WBUFW(src,2)];
-
-	memcpy(WBUFP(buf,0),src,WBUFW(src,2));
-	WBUFW(buf, 0) = 0x3804;
-	mapif_sendallwos(fd, buf, WBUFW(buf,2));
-
-	return 0;
-}
-
-// �A�J�E���g�ϐ��v���ԐM
-int mapif_account_reg_reply(int fd,int account_id) {
-	struct accreg *reg = numdb_search(accreg_db,account_id);
-
-	WFIFOW(fd,0) = 0x3804;
-	WFIFOL(fd,4) = account_id;
-	if (reg == NULL) {
-		WFIFOW(fd,2) = 8;
-	} else {
-		int j, p;
-		for(j = 0, p = 8; j < reg->reg_num; j++, p += 36) {
-			memcpy(WFIFOP(fd,p), reg->reg[j].str, 32);
-			WFIFOL(fd,p+32) = reg->reg[j].value;
-		}
-		WFIFOW(fd,2) = p;
-	}
-	WFIFOSET(fd,WFIFOW(fd,2));
-
-	return 0;
-}
-
-//--------------------------------------------------------
-
-// Existence check of WISP data
-int check_ttl_wisdata_sub(void *key, void *data, va_list ap) {
-	unsigned long tick;
-	struct WisData *wd = (struct WisData *)data;
-	tick = va_arg(ap, unsigned long);
-
-	if (DIFF_TICK(tick, wd->tick) > WISDATA_TTL && wis_delnum < WISDELLIST_MAX)
-		wis_dellist[wis_delnum++] = wd->id;
-
-	return 0;
-}
-
-int check_ttl_wisdata() {
-	unsigned long tick = gettick();
-	int i;
-
-	do {
-		wis_delnum = 0;
-		numdb_foreach(wis_db, check_ttl_wisdata_sub, tick);
-		for(i = 0; i < wis_delnum; i++) {
-			struct WisData *wd = numdb_search(wis_db, wis_dellist[i]);
-			printf("inter: wis data id=%d time out : from %s to %s\n", wd->id, wd->src, wd->dst);
-			// removed. not send information after a timeout. Just no answer for the player
-			//mapif_wis_end(wd, 1); // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-			numdb_erase(wis_db, wd->id);
-			free(wd);
-		}
-	} while(wis_delnum >= WISDELLIST_MAX);
-
-	return 0;
-}
-
-//--------------------------------------------------------
-// received packets from map-server
-
-// GM���b�Z�[�W���M
-int mapif_parse_GMmessage(int fd) {
-	mapif_GMmessage(RFIFOP(fd,4), RFIFOW(fd,2));
-
-	return 0;
-}
-
-// Wisp/page request to send
-int mapif_parse_WisRequest(int fd) {
-	struct WisData* wd;
-	static int wisid = 0;
-	int index;
-
-	if (RFIFOW(fd,2)-52 >= sizeof(wd->msg)) {
-		printf("inter: Wis message size too long.\n");
-		return 0;
-	} else if (RFIFOW(fd,2)-52 <= 0) { // normaly, impossible, but who knows...
-		printf("inter: Wis message doesn't exist.\n");
-		return 0;
-	}
-
-	// search if character exists before to ask all map-servers
-	if ((index = search_character_index(RFIFOP(fd,28))) == -1) {
-		unsigned char buf[27];
-		WBUFW(buf, 0) = 0x3802;
-		memcpy(WBUFP(buf, 2), RFIFOP(fd, 4), 24);
-		WBUFB(buf,26) = 1; // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-		mapif_send(fd, buf, 27);
-	// Character exists. So, ask all map-servers
-	} else {
-		// to be sure of the correct name, rewrite it
-		memset(RFIFOP(fd,28), 0, 24);
-		strncpy(RFIFOP(fd,28), search_character_name(index), 24);
-		// if source is destination, don't ask other servers.
-		if (strcmp(RFIFOP(fd,4),RFIFOP(fd,28)) == 0) {
-			unsigned char buf[27];
-			WBUFW(buf, 0) = 0x3802;
-			memcpy(WBUFP(buf, 2), RFIFOP(fd, 4), 24);
-			WBUFB(buf,26) = 1; // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-			mapif_send(fd, buf, 27);
-		} else {
-
-			wd = (struct WisData *)calloc(sizeof(struct WisData), 1);
-			if (wd == NULL){
-				printf("inter: WisRequest: out of memory !\n");
-				return 0;
-			}
-
-			// Whether the failure of previous wisp/page transmission (timeout)
-			check_ttl_wisdata();
-
-			wd->id = ++wisid;
-			wd->fd = fd;
-			wd->len= RFIFOW(fd,2)-52;
-			memcpy(wd->src, RFIFOP(fd, 4), 24);
-			memcpy(wd->dst, RFIFOP(fd,28), 24);
-			memcpy(wd->msg, RFIFOP(fd,52), wd->len);
-			wd->tick = gettick();
-			numdb_insert(wis_db, wd->id, wd);
-			mapif_wis_message(wd);
-		}
-	}
-
-	return 0;
-}
-
-// Wisp/page transmission result
-int mapif_parse_WisReply(int fd) {
-	int id = RFIFOL(fd,2), flag = RFIFOB(fd,6);
-	struct WisData *wd = numdb_search(wis_db, id);
-
-	if (wd == NULL)
-		return 0;	// This wisp was probably suppress before, because it was timeout of because of target was found on another map-server
-
-	if ((--wd->count) <= 0 || flag != 1) {
-		mapif_wis_end(wd, flag); // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-		numdb_erase(wis_db, id);
-		free(wd);
-	}
-
-	return 0;
-}
-
-// Received wisp message from map-server for ALL gm (just copy the message and resends it to ALL map-servers)
-int mapif_parse_WisToGM(int fd) {
-	unsigned char buf[RFIFOW(fd,2)]; // 0x3003/0x3803 <packet_len>.w <wispname>.24B <min_gm_level>.w <message>.?B
-
-	memcpy(WBUFP(buf,0), RFIFOP(fd,0), RFIFOW(fd,2));
-	WBUFW(buf, 0) = 0x3803;
-	mapif_sendall(buf, RFIFOW(fd,2));
-
-	return 0;
-}
-
-// �A�J�E���g�ϐ��ۑ��v��
-int mapif_parse_AccReg(int fd) {
-	int j, p;
-	struct accreg *reg = numdb_search(accreg_db, RFIFOL(fd,4));
-
-	if (reg == NULL) {
-		if ((reg = calloc(sizeof(struct accreg), 1)) == NULL) {
-			printf("inter: accreg: out of memory !\n");
-			exit(0);
-		}
-		reg->account_id = RFIFOL(fd,4);
-		numdb_insert(accreg_db, RFIFOL(fd,4), reg);
-	}
-
-	for(j = 0, p = 8; j < ACCOUNT_REG_NUM && p < RFIFOW(fd,2); j++, p += 36) {
-		memcpy(reg->reg[j].str, RFIFOP(fd,p), 32);
-		reg->reg[j].value = RFIFOL(fd, p + 32);
-	}
-	reg->reg_num = j;
-
-	mapif_account_reg(fd, RFIFOP(fd,0));	// ����MAP�T�[�o�[�ɑ��M
-
-	return 0;
-}
-
-// �A�J�E���g�ϐ����M�v��
-int mapif_parse_AccRegRequest(int fd) {
-//	printf("mapif: accreg request\n");
-	return mapif_account_reg_reply(fd, RFIFOL(fd,2));
-}
-
-//--------------------------------------------------------
-
-// map server ����̒ʐM�i�P�p�P�b�g�̂݉�͂��邱�Ɓj
-// �G���[�Ȃ�0(false)�A�����ł����Ȃ�1�A
-// �p�P�b�g��������Ȃ����2���������Ȃ���΂Ȃ�Ȃ�
-int inter_parse_frommap(int fd) {
-	int cmd = RFIFOW(fd,0);
-	int len = 0;
-
-	// inter�I�NJ����𒲂ׂ�
-	if (cmd < 0x3000 || cmd >= 0x3000 + (sizeof(inter_recv_packet_length) / sizeof(inter_recv_packet_length[0])))
-		return 0;
-
-	// �p�P�b�g���𒲂ׂ�
-	if ((len = inter_check_length(fd, inter_recv_packet_length[cmd - 0x3000])) == 0)
-		return 2;
-
-	switch(cmd) {
-	case 0x3000: mapif_parse_GMmessage(fd); break;
-	case 0x3001: mapif_parse_WisRequest(fd); break;
-	case 0x3002: mapif_parse_WisReply(fd); break;
-	case 0x3003: mapif_parse_WisToGM(fd); break;
-	case 0x3004: mapif_parse_AccReg(fd); break;
-	case 0x3005: mapif_parse_AccRegRequest(fd); break;
-	default:
-		if (inter_party_parse_frommap(fd))
-			break;
-		if (inter_guild_parse_frommap(fd))
-			break;
-		if (inter_storage_parse_frommap(fd))
-			break;
-		if (inter_pet_parse_frommap(fd))
-			break;
-		return 0;
-	}
-	RFIFOSKIP(fd, len);
-
-	return 1;
-}
-
-// RFIFO�̃p�P�b�g���m�F
-// �K�v�p�P�b�g��������΃p�P�b�g���A�܂�����Ȃ����0
-int inter_check_length(int fd, int length) {
-	if (length == -1) {	// �•σp�P�b�g��
-		if (RFIFOREST(fd) < 4)	// �p�P�b�g��������
-			return 0;
-		length = RFIFOW(fd,2);
-	}
-
-	if (RFIFOREST(fd) < length)	// �p�P�b�g������
-		return 0;
-
-	return length;
-}
-
diff --git a/misc/src/char/inter.h b/misc/src/char/inter.h
deleted file mode 100644
index b004c9b..0000000
--- a/misc/src/char/inter.h
+++ /dev/null
@@ -1,19 +0,0 @@
-// $Id: inter.h,v 1.1.1.1 2004/09/10 17:26:51 MagicalTux Exp $
-#ifndef _INTER_H_
-#define _INTER_H_
-
-int inter_init(const char *file);
-int inter_save();
-int inter_parse_frommap(int fd);
-int inter_mapif_init(int fd);
-
-int inter_check_length(int fd,int length);
-
-int inter_log(char *fmt,...);
-
-#define inter_cfgName "conf/inter_athena.conf"
-
-extern int party_share_level;
-extern char inter_log_filename[1024];
-
-#endif
diff --git a/misc/src/char_sql/GNUmakefile b/misc/src/char_sql/GNUmakefile
deleted file mode 100644
index 9c7b5e5..0000000
--- a/misc/src/char_sql/GNUmakefile
+++ /dev/null
@@ -1,20 +0,0 @@
-all: char-server_sql
-sql: char-server_sql
-
-COMMON_OBJ = ../common/core.o ../common/socket.o ../common/timer.o ../common/db.o ../common/malloc.o
-COMMON_H = ../common/core.h ../common/socket.h ../common/timer.h ../common/db.h ../common/malloc.h
-
-char-server_sql: char.o inter.o int_party.o int_guild.o int_storage.o int_pet.o strlib.o itemdb.o $(COMMON_OBJ)
-	$(CC) -o ../../$@ $^ $(LIB_S)
-
-char.o: char.c char.h strlib.h itemdb.h
-inter.o: inter.c inter.h int_party.h int_guild.h int_storage.h int_pet.h ../common/mmo.h char.h ../common/socket.h
-int_party.o: int_party.c int_party.h inter.h ../common/mmo.h char.h ../common/socket.h ../common/timer.h ../common/db.h
-int_guild.o: int_guild.c int_guild.h inter.h ../common/mmo.h char.h ../common/socket.h ../common/db.h
-int_storage.o: int_storage.c int_storage.h char.h itemdb.h
-int_pet.o: int_pet.c int_pet.h inter.h char.h ../common/mmo.h ../common/socket.h ../common/db.h
-strlib.o: strlib.c strlib.h
-itemdb.o: itemdb.c itemdb.h ../common/db.h ../common/mmo.h
-
-clean:
-	rm -f *.o ../../char-server_sql
diff --git a/misc/src/char_sql/Makefile b/misc/src/char_sql/Makefile
deleted file mode 100644
index cefe36e..0000000
--- a/misc/src/char_sql/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-all: char-server_sql
-sql: char-server_sql
-
-COMMON_OBJ = ../common/core.o ../common/socket.o ../common/timer.o ../common/db.o ../common/malloc.o
-COMMON_H = ../common/core.h ../common/socket.h ../common/timer.h ../common/db.h ../common/malloc.h
-
-char-server_sql: char.o inter.o int_party.o int_guild.o int_storage.o int_pet.o strlib.o itemdb.o $(COMMON_OBJ)
-	$(CC) -o ../../$@ $^ $(LIB_S)
-
-char.o: char.c char.h strlib.h itemdb.h
-inter.o: inter.c inter.h int_party.h int_guild.h int_storage.h int_pet.h ../common/mmo.h char.h ../common/socket.h
-int_party.o: int_party.c int_party.h inter.h ../common/mmo.h char.h ../common/socket.h ../common/timer.h ../common/db.h
-int_guild.o: int_guild.c int_guild.h inter.h ../common/mmo.h char.h ../common/socket.h ../common/db.h
-int_storage.o: int_storage.c int_storage.h char.h itemdb.h
-int_pet.o: int_pet.c int_pet.h inter.h char.h ../common/mmo.h ../common/socket.h ../common/db.h
-strlib.o: strlib.c strlib.h
-itemdb.o: itemdb.c itemdb.h ../common/db.h ../common/mmo.h
-
-clean:
-	rm -f *.o ../../char-server_sql
diff --git a/misc/src/char_sql/char.c b/misc/src/char_sql/char.c
deleted file mode 100644
index 11b6a49..0000000
--- a/misc/src/char_sql/char.c
+++ /dev/null
@@ -1,2917 +0,0 @@
-// $Id: char.c,v 1.16 2004/09/23 18:31:16 MouseJstr Exp $
-// original : char2.c 2003/03/14 11:58:35 Rev.1.5
-//
-// original code from athena
-// SQL conversion by Jioh L. Jung
-// TXT 1.105
-#include <sys/types.h>
-
-#ifdef LCCWIN32
-#include <winsock.h>
-#pragma lib <libmysql.lib>
-#else
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <sys/time.h>
-#include <sys/ioctl.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#endif
-
-#include "utils.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <netinet/in.h>
-#include <sys/time.h>
-#include <time.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <string.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <stdarg.h>
-
-#include "char.h"
-#include "strlib.h"
-#include "itemdb.h"
-#include "inter.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-char char_db[256] = "char";
-char cart_db[256] = "cart_inventory";
-char inventory_db[256] = "inventory";
-char charlog_db[256] = "charlog";
-char storage_db[256] = "storage";
-char interlog_db[256] = "interlog";
-char reg_db[256] = "global_reg_value";
-char skill_db[256] = "skill";
-char memo_db[256] = "memo";
-char guild_db[256] = "guild";
-char guild_alliance_db[256] = "guild_alliance";
-char guild_castle_db[256] = "guild_castle";
-char guild_expulsion_db[256] = "guild_expulsion";
-char guild_member_db[256] = "guild_member";
-char guild_position_db[256] = "guild_position";
-char guild_skill_db[256] = "guild_skill";
-char guild_storage_db[256] = "guild_storage";
-char party_db[256] = "party";
-char pet_db[256] = "pet";
-char login_db[256] = "login";
-
-char login_db_account_id[32] = "account_id";
-char login_db_level[32] = "level";
-
-int lowest_gm_level = 1;
-
-unsigned char *SQL_CONF_NAME = "conf/inter_athena.conf";
-
-struct mmo_map_server server[MAX_MAP_SERVERS];
-int server_fd[MAX_MAP_SERVERS];
-int server_freezeflag[MAX_MAP_SERVERS]; // Map-server anti-freeze system. Counter. 5 ok, 4...0 freezed
-
-int anti_freeze_enable = 0;
-int ANTI_FREEZE_INTERVAL = 6;
-
-int login_fd, char_fd;
-char userid[24];
-char passwd[24];
-char server_name[20];
-char wisp_server_name[24] = "Server";
-char login_ip_str[128];
-int login_ip;
-int login_port = 6900;
-char char_ip_str[128];
-int char_ip;
-int char_port = 6121;
-int char_maintenance;
-int char_new;
-int name_ignoring_case = 0; // Allow or not identical name for characters but with a different case by [Yor]
-int char_name_option = 0; // Option to know which letters/symbols are authorised in the name of a character (0: all, 1: only those in char_name_letters, 2: all EXCEPT those in char_name_letters) by [Yor]
-char char_name_letters[1024] = ""; // list of letters/symbols used to authorise or not a name of a character. by [Yor]
-
-char lan_map_ip[128]; // Lan map ip added by kashy
-int subnetmaski[4]; // Subnetmask added by kashy
-char unknown_char_name[1024] = "Unknown";
-
-struct char_session_data{
-	int account_id,login_id1,login_id2,sex;
-	int found_char[9];
-	char email[40]; // e-mail (default: a@a.com) by [Yor]
-	time_t connect_until_time; // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited)
-};
-
-#define AUTH_FIFO_SIZE 256
-struct {
-	int account_id,char_id,login_id1,login_id2,ip,char_pos,delflag,sex;
-	time_t connect_until_time; // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited)
-} auth_fifo[AUTH_FIFO_SIZE];
-int auth_fifo_pos = 0;
-
-int check_ip_flag = 1; // It's to check IP of a player between char-server and other servers (part of anti-hacking system)
-
-int char_id_count = 150000;
-struct mmo_charstatus *char_dat;
-int char_num,char_max;
-int max_connect_user = 0;
-int autosave_interval = DEFAULT_AUTOSAVE_INTERVAL;
-int start_zeny = 500;
-int start_weapon = 1201;
-int start_armor = 2301;
-
-// check for exit signal
-// 0 is saving complete
-// other is char_id
-unsigned int save_flag = 0;
-
-// start point (you can reset point on conf file)
-struct point start_point = {"new_1-1.gat", 53, 111};
-
-struct gm_account *gm_account = NULL;
-int GM_num = 0;
-
-//-----------------------------------------------------
-// Function to suppress control characters in a string.
-//-----------------------------------------------------
-int remove_control_chars(unsigned char *str) {
-	int i;
-	int change = 0;
-
-	for(i = 0; i < strlen(str); i++) {
-		if (str[i] < 32) {
-			str[i] = '_';
-			change = 1;
-		}
-	}
-
-	return change;
-}
-
-//----------------------------------------------------------------------
-// Determine if an account (id) is a GM account
-// and returns its level (or 0 if it isn't a GM account or if not found)
-//----------------------------------------------------------------------
-// Removed since nothing GM related goes on in the char server [CLOWNISIUS]
-int isGM(int account_id) {
-	int i;
-
-	for(i = 0; i < GM_num; i++)
-		if (gm_account[i].account_id == account_id)
-			return gm_account[i].level;
-	return 0;
-}
-
-void read_gm_account(void) {
-	if (gm_account != NULL)
-		free(gm_account);
-	GM_num = 0;
-
-	sprintf(tmp_lsql, "SELECT `%s`,`%s` FROM `%s` WHERE `%s`>='%d'",login_db_account_id,login_db_level,login_db,login_db_level,lowest_gm_level);
-	if (mysql_query(&lmysql_handle, tmp_lsql)) {
-		printf("DB server Error (select %s to Memory)- %s\n",login_db,mysql_error(&lmysql_handle));
-	}
-	lsql_res = mysql_store_result(&lmysql_handle);
-	if (lsql_res) {
-		gm_account = calloc(sizeof(struct gm_account) * mysql_num_rows(lsql_res), 1);
-		while ((lsql_row = mysql_fetch_row(lsql_res))) {
-			gm_account[GM_num].account_id = atoi(lsql_row[0]);
-			gm_account[GM_num].level = atoi(lsql_row[1]);
-			GM_num++;
-		}
-	}
-
-	mysql_free_result(lsql_res);
-}
-
-//=====================================================================================================
-int mmo_char_tosql(int char_id, struct mmo_charstatus *p){
-	int i=0,party_exist,guild_exist;
-	int eqcount=1;
-	int noteqcount=1;
-	char temp_str[32];
-
-	struct itemtemp mapitem;
-	if (char_id!=p->char_id) return 0;
-
-	save_flag = p->char_id;
-	printf("(\033[1;32m%d\033[0m) %s \trequest save char data - ",char_id,char_dat[0].name);
-
-
-
-//for(testcount=1;testcount<50;testcount++){//---------------------------test count--------------------
-//	printf("test count : %d\n", testcount);
-//	eqcount=1;
-//	noteqcount=1;
-//	dbeqcount=1;
-//	dbnoteqcount=1;
-//-----------------------------------------------------------------------------------------------------
-
-//=========================================map  inventory data > memory ===============================
-	//map inventory data
-	for(i=0;i<MAX_INVENTORY;i++){
-		if(p->inventory[i].nameid>0){
-			if(itemdb_isequip(p->inventory[i].nameid)==1){
-				mapitem.equip[eqcount].flag=0;
-				mapitem.equip[eqcount].id = p->inventory[i].id;
-				mapitem.equip[eqcount].nameid=p->inventory[i].nameid;
-				mapitem.equip[eqcount].amount = p->inventory[i].amount;
-				mapitem.equip[eqcount].equip = p->inventory[i].equip;
-				mapitem.equip[eqcount].identify = p->inventory[i].identify;
-				mapitem.equip[eqcount].refine = p->inventory[i].refine;
-				mapitem.equip[eqcount].attribute = p->inventory[i].attribute;
-				mapitem.equip[eqcount].card[0] = p->inventory[i].card[0];
-				mapitem.equip[eqcount].card[1] = p->inventory[i].card[1];
-				mapitem.equip[eqcount].card[2] = p->inventory[i].card[2];
-				mapitem.equip[eqcount].card[3] = p->inventory[i].card[3];
-                mapitem.equip[eqcount].broken = p->inventory[i].broken;
-				eqcount++;
-			}
-			else if(itemdb_isequip(p->inventory[i].nameid)==0){
-				mapitem.notequip[noteqcount].flag=0;
-				mapitem.notequip[noteqcount].id = p->inventory[i].id;
-				mapitem.notequip[noteqcount].nameid=p->inventory[i].nameid;
-				mapitem.notequip[noteqcount].amount = p->inventory[i].amount;
-				mapitem.notequip[noteqcount].equip = p->inventory[i].equip;
-				mapitem.notequip[noteqcount].identify = p->inventory[i].identify;
-				mapitem.notequip[noteqcount].refine = p->inventory[i].refine;
-				mapitem.notequip[noteqcount].attribute = p->inventory[i].attribute;
-				mapitem.notequip[noteqcount].card[0] = p->inventory[i].card[0];
-				mapitem.notequip[noteqcount].card[1] = p->inventory[i].card[1];
-				mapitem.notequip[noteqcount].card[2] = p->inventory[i].card[2];
-				mapitem.notequip[noteqcount].card[3] = p->inventory[i].card[3];
-		                mapitem.notequip[noteqcount].broken = p->inventory[i].broken;
-				noteqcount++;
-			}
-		}
-	}
-	//printf("- Save item data to MySQL!\n");
-	memitemdata_to_sql(mapitem, eqcount, noteqcount, p->char_id,TABLE_INVENTORY);
-
-//=========================================map  cart data > memory ====================================
-	eqcount=1;
-	noteqcount=1;
-
-	//map cart data
-	for(i=0;i<MAX_CART;i++){
-		if(p->cart[i].nameid>0){
-			if(itemdb_isequip(p->cart[i].nameid)==1){
-				mapitem.equip[eqcount].flag=0;
-				mapitem.equip[eqcount].id = p->cart[i].id;
-				mapitem.equip[eqcount].nameid=p->cart[i].nameid;
-				mapitem.equip[eqcount].amount = p->cart[i].amount;
-				mapitem.equip[eqcount].equip = p->cart[i].equip;
-				mapitem.equip[eqcount].identify = p->cart[i].identify;
-				mapitem.equip[eqcount].refine = p->cart[i].refine;
-				mapitem.equip[eqcount].attribute = p->cart[i].attribute;
-				mapitem.equip[eqcount].card[0] = p->cart[i].card[0];
-				mapitem.equip[eqcount].card[1] = p->cart[i].card[1];
-				mapitem.equip[eqcount].card[2] = p->cart[i].card[2];
-				mapitem.equip[eqcount].card[3] = p->cart[i].card[3];
-				mapitem.equip[eqcount].broken = p->cart[i].broken;
-				eqcount++;
-			}
-			else if(itemdb_isequip(p->cart[i].nameid)==0){
-				mapitem.notequip[noteqcount].flag=0;
-				mapitem.notequip[noteqcount].id = p->cart[i].id;
-				mapitem.notequip[noteqcount].nameid=p->cart[i].nameid;
-				mapitem.notequip[noteqcount].amount = p->cart[i].amount;
-				mapitem.notequip[noteqcount].equip = p->cart[i].equip;
-				mapitem.notequip[noteqcount].identify = p->cart[i].identify;
-				mapitem.notequip[noteqcount].refine = p->cart[i].refine;
-				mapitem.notequip[noteqcount].attribute = p->cart[i].attribute;
-				mapitem.notequip[noteqcount].card[0] = p->cart[i].card[0];
-				mapitem.notequip[noteqcount].card[1] = p->cart[i].card[1];
-				mapitem.notequip[noteqcount].card[2] = p->cart[i].card[2];
-				mapitem.notequip[noteqcount].card[3] = p->cart[i].card[3];
-				mapitem.notequip[noteqcount].broken = p->cart[i].broken;
-				noteqcount++;
-			}
-		}
-	}
-
-	//printf("- Save cart data to MySQL!\n");
-	memitemdata_to_sql(mapitem, eqcount, noteqcount, p->char_id,TABLE_CART);
-
-//=====================================================================================================
-
-//}//---------------------------test count------------------------------
-	//check party_exist
-	party_exist=0;
-	sprintf(tmp_sql, "SELECT count(*) FROM `%s` WHERE `party_id` = '%d'",party_db, p->party_id);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-	}
-	sql_res = mysql_store_result(&mysql_handle);
-	sql_row = mysql_fetch_row(sql_res);
-	if (sql_row) party_exist = atoi(sql_row[0]);
-	mysql_free_result(sql_res);
-
-	//check guild_exist
-	guild_exist=0;
-	sprintf(tmp_sql, "SELECT count(*) FROM `%s` WHERE `guild_id` = '%d'",guild_db, p->guild_id);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-	}
-	sql_res = mysql_store_result(&mysql_handle);
-	sql_row = mysql_fetch_row(sql_res);
-	if (sql_row) guild_exist = atoi(sql_row[0]);
-	mysql_free_result(sql_res);
-
-	if (guild_exist==0) p->guild_id=0;
-	if (party_exist==0) p->party_id=0;
-
-	//sql query
-	//`char`( `char_id`,`account_id`,`char_num`,`name`,`class`,`base_level`,`job_level`,`base_exp`,`job_exp`,`zeny`, //9
-	//`str`,`agi`,`vit`,`int`,`dex`,`luk`, //15
-	//`max_hp`,`hp`,`max_sp`,`sp`,`status_point`,`skill_point`, //21
-	//`option`,`karma`,`manner`,`party_id`,`guild_id`,`pet_id`, //27
-	//`hair`,`hair_color`,`clothes_color`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`, //35
-	//`last_map`,`last_x`,`last_y`,`save_map`,`save_x`,`save_y`)
-	//printf("- Save char data to MySQL!\n");
-	sprintf(tmp_sql ,"UPDATE `%s` SET `class`='%d', `base_level`='%d', `job_level`='%d',"
-		"`base_exp`='%d', `job_exp`='%d', `zeny`='%d',"
-		"`max_hp`='%d',`hp`='%d',`max_sp`='%d',`sp`='%d',`status_point`='%d',`skill_point`='%d',"
-		"`str`='%d',`agi`='%d',`vit`='%d',`int`='%d',`dex`='%d',`luk`='%d',"
-		"`option`='%d',`karma`='%d',`manner`='%d',`party_id`='%d',`guild_id`='%d',`pet_id`='%d',"
-		"`hair`='%d',`hair_color`='%d',`clothes_color`='%d',`weapon`='%d',`shield`='%d',`head_top`='%d',`head_mid`='%d',`head_bottom`='%d',"
-		"`last_map`='%s',`last_x`='%d',`last_y`='%d',`save_map`='%s',`save_x`='%d',`save_y`='%d',`partner_id`='%d' WHERE  `account_id`='%d' AND `char_id` = '%d'",
-		char_db, p->class, p->base_level, p->job_level,
-		p->base_exp, p->job_exp, p->zeny,
-		p->max_hp, p->hp, p->max_sp, p->sp, p->status_point, p->skill_point,
-		p->str, p->agi, p->vit, p->int_, p->dex, p->luk,
-		p->option, p->karma, p->manner, p->party_id, p->guild_id, p->pet_id,
-		p->hair, p->hair_color, p->clothes_color,
-		p->weapon, p->shield, p->head_top, p->head_mid, p->head_bottom,
-		p->last_point.map, p->last_point.x, p->last_point.y,
-		p->save_point.map, p->save_point.x, p->save_point.y, p->partner_id, p->account_id, p->char_id
-	);
-
-	if(mysql_query(&mysql_handle, tmp_sql)) {
-			printf("DB server Error (update `char`)- %s\n", mysql_error(&mysql_handle));
-	}
-
-	//printf("- Save memo data to MySQL!\n");
-	//`memo` (`memo_id`,`char_id`,`map`,`x`,`y`)
-	sprintf(tmp_sql,"DELETE FROM `%s` WHERE `char_id`='%d'",memo_db, p->char_id);
-	if(mysql_query(&mysql_handle, tmp_sql)) {
-			printf("DB server Error (delete `memo`)- %s\n", mysql_error(&mysql_handle));
-	}
-
-	//insert here.
-	for(i=0;i<10;i++){
-		if(p->memo_point[i].map[0]){
-			sprintf(tmp_sql,"INSERT INTO `%s`(`char_id`,`map`,`x`,`y`) VALUES ('%d', '%s', '%d', '%d')",
-				memo_db, char_id, p->memo_point[i].map, p->memo_point[i].x, p->memo_point[i].y);
-			if(mysql_query(&mysql_handle, tmp_sql))
-				printf("DB server Error (insert `memo`)- %s\n", mysql_error(&mysql_handle));
-		}
-	}
-
-	//printf("- Save skill data to MySQL!\n");
-	//`skill` (`char_id`, `id`, `lv`)
-	sprintf(tmp_sql,"DELETE FROM `%s` WHERE `char_id`='%d'",skill_db, p->char_id);
-	if(mysql_query(&mysql_handle, tmp_sql)) {
-			printf("DB server Error (delete `skill`)- %s\n", mysql_error(&mysql_handle));
-	}
-	//printf("- Insert skill \n");
-	//insert here.
-	for(i=0;i<MAX_SKILL;i++){
-		if(p->skill[i].id){
-			if (p->skill[i].id && p->skill[i].flag!=1) {
-				sprintf(tmp_sql,"INSERT delayed INTO `%s`(`char_id`, `id`, `lv`) VALUES ('%d', '%d','%d')",
-					skill_db, char_id, p->skill[i].id, (p->skill[i].flag==0)?p->skill[i].lv:p->skill[i].flag-2);
-				if(mysql_query(&mysql_handle, tmp_sql)) {
-					printf("DB server Error (insert `skill`)- %s\n", mysql_error(&mysql_handle));
-				}
-			}
-		}
-	}
-
-
-	//printf("- Save global_reg_value data to MySQL!\n");
-	//`global_reg_value` (`char_id`, `str`, `value`)
-	sprintf(tmp_sql,"DELETE FROM `%s` WHERE `type`=3 AND `char_id`='%d'",reg_db, p->char_id);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-			printf("DB server Error (delete `global_reg_value`)- %s\n", mysql_error(&mysql_handle));
-	}
-
-	//insert here.
-	for(i=0;i<p->global_reg_num;i++){
-		if (p->global_reg[i].str) {
-			if(p->global_reg[i].value !=0){
-					sprintf(tmp_sql,"INSERT INTO `%s` (`char_id`, `str`, `value`) VALUES ('%d', '%s','%d')",
-					         reg_db, char_id, jstrescapecpy(temp_str,(unsigned char*)p->global_reg[i].str), p->global_reg[i].value);
-					if(mysql_query(&mysql_handle, tmp_sql)) {
-						printf("DB server Error (insert `global_reg_value`)- %s\n", mysql_error(&mysql_handle));
-					}
-			}
-		}
-	}
-	printf("saving char is done.\n");
-	save_flag = 0;
-
-	return 0;
-}
-
-int memitemdata_to_sql(struct itemtemp mapitem, int eqcount, int noteqcount, int char_id, int tableswitch){
-	//equ
-	int i, j;
-	int dbeqcount = 1;
-	int dbnoteqcount = 1;
-	struct itemtemp dbitem;
-	char tablename[16];
-	char selectoption[16];
-
-	switch (tableswitch){
-	case TABLE_INVENTORY:
-		sprintf(tablename,"%s",inventory_db);
-		sprintf(selectoption,"char_id");
-		break;
-	case TABLE_CART:
-		sprintf(tablename,"%s",cart_db);
-		sprintf(selectoption,"char_id");
-		break;
-	case TABLE_STORAGE:
-		sprintf(tablename,"%s",storage_db);
-		sprintf(selectoption,"account_id");
-		break;
-	case TABLE_GUILD_STORAGE:
-		sprintf(tablename,"%s",guild_storage_db);
-		sprintf(selectoption,"guild_id");
-		break;
-	}
-	//printf("Working Table : %s \n",tablename);
-
-	//=======================================mysql database data > memory===============================================
-
-	sprintf(tmp_sql, "SELECT `id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3` , `broken` "
-		"FROM `%s` WHERE `%s`='%d'",tablename ,selectoption ,char_id);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error (select `%s` to Memory)- %s\n",tablename ,mysql_error(&mysql_handle));
-	}
-	sql_res = mysql_store_result(&mysql_handle);
-	if (sql_res) {
-		for(i=0;(sql_row = mysql_fetch_row(sql_res));i++){
-			if (itemdb_isequip(atoi(sql_row[1]))==1){
-				dbitem.equip[dbeqcount].flag=0;
-				dbitem.equip[dbeqcount].id = atoi(sql_row[0]);
-				dbitem.equip[dbeqcount].nameid = atoi(sql_row[1]);
-				dbitem.equip[dbeqcount].amount = atoi(sql_row[2]);
-				dbitem.equip[dbeqcount].equip = atoi(sql_row[3]);
-				dbitem.equip[dbeqcount].identify = atoi(sql_row[4]);
-				dbitem.equip[dbeqcount].refine = atoi(sql_row[5]);
-				dbitem.equip[dbeqcount].attribute = atoi(sql_row[6]);
-				dbitem.equip[dbeqcount].card[0] = atoi(sql_row[7]);
-				dbitem.equip[dbeqcount].card[1] = atoi(sql_row[8]);
-				dbitem.equip[dbeqcount].card[2] = atoi(sql_row[9]);
-				dbitem.equip[dbeqcount].card[3] = atoi(sql_row[10]);
-				dbitem.equip[dbeqcount].broken = atoi(sql_row[11]);
-				dbeqcount++;
-			}else {
-				dbitem.notequip[dbnoteqcount].flag=0;
-				dbitem.notequip[dbnoteqcount].id = atoi(sql_row[0]);
-				dbitem.notequip[dbnoteqcount].nameid = atoi(sql_row[1]);
-				dbitem.notequip[dbnoteqcount].amount = atoi(sql_row[2]);
-				dbitem.notequip[dbnoteqcount].equip = atoi(sql_row[3]);
-				dbitem.notequip[dbnoteqcount].identify = atoi(sql_row[4]);
-				dbitem.notequip[dbnoteqcount].refine = atoi(sql_row[5]);
-				dbitem.notequip[dbnoteqcount].attribute = atoi(sql_row[6]);
-				dbitem.notequip[dbnoteqcount].card[0] = atoi(sql_row[7]);
-				dbitem.notequip[dbnoteqcount].card[1] = atoi(sql_row[8]);
-				dbitem.notequip[dbnoteqcount].card[2] = atoi(sql_row[9]);
-				dbitem.notequip[dbnoteqcount].card[3] = atoi(sql_row[10]);
-				dbitem.notequip[dbnoteqcount].broken = atoi(sql_row[11]);
-				dbnoteqcount++;
-			}
-		}
-		mysql_free_result(sql_res);
-	}
-
-	//==============================================Memory data > SQL ===============================
-	//======================================Equip ITEM=======================================
-	if((eqcount==1) && (dbeqcount==1)){//printf("%s Equip Empty\n",tablename);
-	//item empty
-	} else {
-
-		for(i=1;i<eqcount;i++){
-			for(j=1;j<dbeqcount;j++){
-				if(mapitem.equip[i].flag==1) break;
-				if(!(dbitem.equip[j].flag==1)){
-					if(mapitem.equip[i].nameid==dbitem.equip[j].nameid){
-						if ((mapitem.equip[i].equip==dbitem.equip[j].equip) && (mapitem.equip[i].identify==dbitem.equip[j].identify) && (mapitem.equip[i].amount==dbitem.equip[j].amount) &&
-
-						    (mapitem.equip[i].refine==dbitem.equip[j].refine) && (mapitem.equip[i].attribute==dbitem.equip[j].attribute) && (mapitem.equip[i].card[0]==dbitem.equip[j].card[0]) &&
-						    (mapitem.equip[i].card[1]==dbitem.equip[j].card[1]) && (mapitem.equip[i].card[2]==dbitem.equip[j].card[2]) && (mapitem.equip[i].card[3]==dbitem.equip[j].card[3]) &&
-						    (mapitem.equip[i].broken == dbitem.equip[j].broken)) {
-							mapitem.equip[i].flag = 1;
-							dbitem.equip[j].flag = 1;
-							//printf("the same item : %d , equip : %d , i : %d , flag :  %d\n", mapitem.equip[i].nameid,mapitem.equip[i].equip , i, mapitem.equip[i].flag); //DEBUG-STRING
-						} else {
-							sprintf(tmp_sql,"UPDATE `%s` SET `equip`='%d', `identify`='%d', `refine`='%d',"
-							"`attribute`='%d', `card0`='%d', `card1`='%d', `card2`='%d', `card3`='%d', `broken`='%d', `amount`='%d' WHERE `id`='%d' LIMIT 1",
-							tablename, mapitem.equip[i].equip, mapitem.equip[i].identify, mapitem.equip[i].refine,mapitem.equip[i].attribute, mapitem.equip[i].card[0],
-							mapitem.equip[i].card[1], mapitem.equip[i].card[2], mapitem.equip[i].card[3], mapitem.equip[i].broken, mapitem.equip[i].amount, dbitem.equip[j].id);
-							//printf("%s\n",tmp_sql);
-							if(mysql_query(&mysql_handle, tmp_sql))
-								printf("DB server Error (UPdate `equ %s`)- %s\n", tablename, mysql_error(&mysql_handle));
-							mapitem.equip[i].flag=1;
-							dbitem.equip[j].flag=1;
-							//printf("not the same item : %d ; i : %d ; flag :  %d\n", mapitem.equip[i].nameid, i, mapitem.equip[i].flag);
-						}
-					}
-				}
-			}
-		}
-
-		//printf("dbeqcount = %d\n",dbeqcount);
-
-		for(i=1;i<dbeqcount;i++){
-			//printf("dbitem.equip[i].flag = %d , dbitem.equip[i].id = %d\n",dbitem.equip[i].flag,dbitem.equip[i].id);
-			if (!(dbitem.equip[i].flag == 1)) {
-				sprintf(tmp_sql,"DELETE from `%s` where `id`='%d'",tablename , dbitem.equip[i].id);
-				//printf("%s", tmp_sql);
-				if(mysql_query(&mysql_handle, tmp_sql))
-					printf("DB server Error (DELETE `equ %s`)- %s\n", tablename ,mysql_error(&mysql_handle));
-			}
-		}
-		for(i=1;i<eqcount;i++){
-			if(!(mapitem.equip[i].flag==1)){
-				sprintf(tmp_sql,"INSERT INTO `%s`(`%s`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`, `broken`)"
-				" VALUES ( '%d','%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d')",
-				tablename, selectoption,  char_id, mapitem.equip[i].nameid, mapitem.equip[i].amount, mapitem.equip[i].equip, mapitem.equip[i].identify, mapitem.equip[i].refine,
-				mapitem.equip[i].attribute, mapitem.equip[i].card[0], mapitem.equip[i].card[1], mapitem.equip[i].card[2], mapitem.equip[i].card[3], mapitem.equip[i].broken);
-				//printf("%s", tmp_sql);
-				if(mysql_query(&mysql_handle, tmp_sql))
-					printf("DB server Error (INSERT `equ %s`)- %s\n",tablename ,mysql_error(&mysql_handle));
-			}
-		}
-
-		//======================================DEBUG=================================================
-
-//		gettimeofday(&tv,NULL);
-//		strftime(tmpstr,24,"%Y-%m-%d %H:%M:%S",localtime(&(tv.tv_sec)));
-//		printf("\n\n");
-//		printf("Working Table Name : EQU %s,  Count : map %3d | db %3d \n",tablename ,eqcount ,dbeqcount);
-//		printf("*********************************************************************************\n");
-//		printf("======================================MAP===================Char ID %10d===\n",char_id);
-//		printf("==flag ===name ===equip===ident===amoun===attri===card0===card1===card2===card3==\n");
-//		for(j=1;j<eqcount;j++)
-//			printf("| %5d | %5d | %5d | %5d | %5d | %5d | %5d | %5d | %5d | %5d |\n", mapitem.equip[j].flag,mapitem.equip[j].nameid, mapitem.equip[j].equip, mapitem.equip[j].identify, mapitem.equip[j].refine,mapitem.equip[j].attribute, mapitem.equip[j].card[0], mapitem.equip[j].card[1], mapitem.equip[j].card[2], mapitem.equip[j].card[3]);
-//		printf("======================================DB=========================================\n");
-//		printf("==flag ===name ===equip===ident===refin===attri===card0===card1===card2===card3==\n");
-//		for(j=1;j<dbeqcount;j++)
-//			printf("| %5d | %5d | %5d | %5d | %5d | %5d | %5d | %5d | %5d | %5d |\n", dbitem.equip[j].flag ,dbitem.equip[j].nameid, dbitem.equip[j].equip, dbitem.equip[j].identify, dbitem.equip[j].amount,dbitem.equip[j].attribute, dbitem.equip[j].card[0], dbitem.equip[j].card[1], dbitem.equip[j].card[2], dbitem.equip[j].card[3]);
-//		printf("=================================================================================\n");
-//		printf("=================================================Data Time %s===\n", tmpstr);
-//		printf("=================================================================================\n");
-
-	}
-
-	//======================================DEBUG==================================================
-
-		//=============================Not Equip ITEM==========================================
-	if((noteqcount==1) && (dbnoteqcount==1)){
-		//printf("%s Not Equip Empty\n",tablename);
-	//item empty
-	} else {
-
-		for(i=1;i<noteqcount;i++){
-			for(j=1;j<dbnoteqcount;j++){
-				if(mapitem.notequip[i].flag==1) break;
-				if(!(dbitem.notequip[j].flag==1)){
-					if(mapitem.notequip[i].nameid==dbitem.notequip[j].nameid){
-						if ((mapitem.notequip[i].amount==dbitem.notequip[j].amount) && (mapitem.notequip[i].equip==dbitem.notequip[j].equip) && (mapitem.notequip[i].identify==dbitem.notequip[j].identify)
-						&& (mapitem.notequip[i].attribute==dbitem.notequip[j].attribute))
-						{	mapitem.notequip[i].flag=1;
-							dbitem.notequip[j].flag=1;
-							//printf("the same item : %d ; i : %d ; flag :  %d\n", mapitem.notequip[i].nameid, i, mapitem.notequip[i].flag); //DEBUG-STRING
-						}
-						else{
-							sprintf(tmp_sql,"UPDATE `%s` SET `amount`='%d', `equip`='%d', `identify`='%d',"
-							"`attribute`='%d' WHERE `%s`='%d' AND `nameid`='%d'",
-							tablename, mapitem.notequip[i].amount, mapitem.notequip[i].equip, mapitem.notequip[i].identify, mapitem.notequip[i].attribute,
-							selectoption, char_id, mapitem.notequip[i].nameid);
-							//printf("%s",tmp_sql);
-							if(mysql_query(&mysql_handle, tmp_sql))
-								printf("DB server Error (UPdate `notequ %s`)- %s\n",tablename ,mysql_error(&mysql_handle));
-
-							mapitem.notequip[i].flag=1;
-							dbitem.notequip[j].flag=1;
-						}
-					}
-				}
-			}
-		}
-
-		//printf("dbnoteqcount = %d\n",dbnoteqcount);
-
-		for(i=1;i<dbnoteqcount;i++){
-			//printf("dbitem.notequip[i].flag = %d , dbitem.notequip[i].id = %d\n",dbitem.notequip[i].flag,dbitem.notequip[i].id);
-			if(!(dbitem.notequip[i].flag==1)){
-				sprintf(tmp_sql,"DELETE from `%s` where `id`='%d'", tablename, dbitem.notequip[i].id);
-				//printf("%s", tmp_sql);
-				if(mysql_query(&mysql_handle, tmp_sql))
-					printf("DB server Error (DELETE `notequ %s`)- %s\n", tablename ,mysql_error(&mysql_handle));
-			}
-		}
-		for(i=1;i<noteqcount;i++){
-			if(!(mapitem.notequip[i].flag==1)){
-				sprintf(tmp_sql,"INSERT INTO `%s`( `%s`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`, `broken`)"
-				" VALUES ('%d','%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d')",
-				tablename ,selectoption , char_id, mapitem.notequip[i].nameid, mapitem.notequip[i].amount, mapitem.notequip[i].equip, mapitem.notequip[i].identify, mapitem.notequip[i].refine,
-				mapitem.notequip[i].attribute, mapitem.notequip[i].card[0], mapitem.notequip[i].card[1], mapitem.notequip[i].card[2], mapitem.notequip[i].card[3], mapitem.equip[i].broken);
-				//printf("%s", tmp_sql);
-				if(mysql_query(&mysql_handle, tmp_sql))
-					printf("DB server Error (INSERT `notequ %s`)- %s\n", tablename, mysql_error(&mysql_handle));
-			}
-		}
-
-		//======================================DEBUG=================================================
-
-//		gettimeofday(&tv,NULL);
-//		strftime(tmpstr,24,"%Y-%m-%d %H:%M:%S",localtime(&(tv.tv_sec)));
-//		printf("\n\n");
-//		printf("Working Table Name : Not EQU %s,  Count : map %3d | db %3d \n",tablename ,noteqcount ,dbnoteqcount);
-//		printf("*********************************************************************************\n");
-//		printf("======================================MAP===================Char ID %10d===\n",char_id);
-//		printf("==flag ===name ===equip===ident===refin===attri===card0===card1===card2===card3==\n");
-//		for(j=1;j<noteqcount;j++)
-//			printf("| %5d | %5d | %5d | %5d | %5d | %5d | %5d | %5d | %5d | %5d |\n", mapitem.notequip[j].flag,mapitem.notequip[j].nameid, mapitem.notequip[j].equip, mapitem.notequip[j].identify, mapitem.notequip[j].refine,mapitem.notequip[j].attribute, mapitem.notequip[j].card[0], mapitem.notequip[j].card[1], mapitem.notequip[j].card[2], mapitem.notequip[j].card[3]);
-//		printf("======================================DB=========================================\n");
-//		printf("==flag ===name ===equip===ident===refin===attri===card0===card1===card2===card3==\n");
-//		for(j=1;j<dbnoteqcount;j++)
-//			printf("| %5d | %5d | %5d | %5d | %5d | %5d | %5d | %5d | %5d | %5d |\n", dbitem.notequip[j].flag ,dbitem.notequip[j].nameid, dbitem.notequip[j].equip, dbitem.notequip[j].identify, dbitem.notequip[j].refine,dbitem.notequip[j].attribute, dbitem.notequip[j].card[0], dbitem.notequip[j].card[1], dbitem.notequip[j].card[2], dbitem.notequip[j].card[3]);
-//		printf("=================================================================================\n");
-//		printf("=================================================Data Time %s===\n", tmpstr);
-//		printf("=================================================================================\n");
-//
-	}
-	return 0;
-}
-//=====================================================================================================
-int mmo_char_fromsql(int char_id, struct mmo_charstatus *p, int online){
-	int i, n;
-
-	memset(p, 0, sizeof(struct mmo_charstatus));
-
-	p->char_id = char_id;
-	printf("Loaded: ");
-	//`char`( `char_id`,`account_id`,`char_num`,`name`,`class`,`base_level`,`job_level`,`base_exp`,`job_exp`,`zeny`, //9
-	//`str`,`agi`,`vit`,`int`,`dex`,`luk`, //15
-	//`max_hp`,`hp`,`max_sp`,`sp`,`status_point`,`skill_point`, //21
-	//`option`,`karma`,`manner`,`party_id`,`guild_id`,`pet_id`, //27
-	//`hair`,`hair_color`,`clothes_color`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`, //35
-	//`last_map`,`last_x`,`last_y`,`save_map`,`save_x`,`save_y`)
-	//splite 2 parts. cause veeeery long SQL syntax
-
-	sprintf(tmp_sql, "SELECT `char_id`,`account_id`,`char_num`,`name`,`class`,`base_level`,`job_level`,`base_exp`,`job_exp`,`zeny`,"
-		"`str`,`agi`,`vit`,`int`,`dex`,`luk`, `max_hp`,`hp`,`max_sp`,`sp`,`status_point`,`skill_point` FROM `%s` WHERE `char_id` = '%d'",char_db, char_id);
-
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error (select `char`)- %s\n", mysql_error(&mysql_handle));
-	}
-
-	sql_res = mysql_store_result(&mysql_handle);
-
-	if (sql_res) {
-		sql_row = mysql_fetch_row(sql_res);
-
-		p->char_id = char_id;
-		p->account_id = atoi(sql_row[1]);
-		p->char_num = atoi(sql_row[2]);
-		strcpy(p->name, sql_row[3]);
-		p->class = atoi(sql_row[4]);
-		p->base_level = atoi(sql_row[5]);
-		p->job_level = atoi(sql_row[6]);
-		p->base_exp = atoi(sql_row[7]);
-		p->job_exp = atoi(sql_row[8]);
-		p->zeny = atoi(sql_row[9]);
-		p->str = atoi(sql_row[10]);
-		p->agi = atoi(sql_row[11]);
-		p->vit = atoi(sql_row[12]);
-		p->int_ = atoi(sql_row[13]);
-		p->dex = atoi(sql_row[14]);
-		p->luk = atoi(sql_row[15]);
-		p->max_hp = atoi(sql_row[16]);
-		p->hp = atoi(sql_row[17]);
-		p->max_sp = atoi(sql_row[18]);
-		p->sp = atoi(sql_row[19]);
-		p->status_point = atoi(sql_row[20]);
-		p->skill_point = atoi(sql_row[21]);
-		//free mysql result.
-		mysql_free_result(sql_res);
-	} else
-		printf("char1 - failed\n");	//Error?! ERRRRRR WHAT THAT SAY!?
-	printf("(\033[1;32m%d\033[0m)\033[1;32m%s\033[0m\t[",p->char_id,p->name);
-	printf("char1 ");
-
-	sprintf(tmp_sql, "SELECT `option`,`karma`,`manner`,`party_id`,`guild_id`,`pet_id`,`hair`,`hair_color`,"
-		"`clothes_color`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`,"
-		"`last_map`,`last_x`,`last_y`,`save_map`,`save_x`,`save_y`, `partner_id` FROM `%s` WHERE `char_id` = '%d'",char_db, char_id);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error (select `char2`)- %s\n", mysql_error(&mysql_handle));
-	}
-
-	sql_res = mysql_store_result(&mysql_handle);
-	if (sql_res) {
-		sql_row = mysql_fetch_row(sql_res);
-
-
-		p->option = atoi(sql_row[0]);	p->karma = atoi(sql_row[1]);	p->manner = atoi(sql_row[2]);
-			p->party_id = atoi(sql_row[3]);	p->guild_id = atoi(sql_row[4]);	p->pet_id = atoi(sql_row[5]);
-
-		p->hair = atoi(sql_row[6]);	p->hair_color = atoi(sql_row[7]);	p->clothes_color = atoi(sql_row[8]);
-		p->weapon = atoi(sql_row[9]);	p->shield = atoi(sql_row[10]);
-		p->head_top = atoi(sql_row[11]);	p->head_mid = atoi(sql_row[12]);	p->head_bottom = atoi(sql_row[13]);
-		strcpy(p->last_point.map,sql_row[14]); p->last_point.x = atoi(sql_row[15]);	p->last_point.y = atoi(sql_row[16]);
-		strcpy(p->save_point.map,sql_row[17]); p->save_point.x = atoi(sql_row[18]);	p->save_point.y = atoi(sql_row[19]);
-		p->partner_id = atoi(sql_row[20]);
-
-		//free mysql result.
-		mysql_free_result(sql_res);
-	} else
-		printf("char2 - failed\n");	//Error?! ERRRRRR WHAT THAT SAY!?
-
-	printf("char2 ");
-
-	//read memo data
-	//`memo` (`memo_id`,`char_id`,`map`,`x`,`y`)
-	sprintf(tmp_sql, "SELECT `map`,`x`,`y` FROM `%s` WHERE `char_id`='%d'",memo_db, char_id);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error (select `memo`)- %s\n", mysql_error(&mysql_handle));
-	}
-	sql_res = mysql_store_result(&mysql_handle);
-
-	if (sql_res) {
-		for(i=0;(sql_row = mysql_fetch_row(sql_res));i++){
-			strcpy (p->memo_point[i].map,sql_row[0]);
-			p->memo_point[i].x=atoi(sql_row[1]);
-			p->memo_point[i].y=atoi(sql_row[2]);
-			//i ++;
-		}
-		mysql_free_result(sql_res);
-	}
-	printf("memo ");
-
-	//read inventory
-	//`inventory` (`id`,`char_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`)
-	sprintf(tmp_sql, "SELECT `id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`, `broken` "
-		"FROM `%s` WHERE `char_id`='%d'",inventory_db, char_id);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error (select `inventory`)- %s\n", mysql_error(&mysql_handle));
-	}
-	sql_res = mysql_store_result(&mysql_handle);
-	if (sql_res) {
-		for(i=0;(sql_row = mysql_fetch_row(sql_res));i++){
-			p->inventory[i].id = atoi(sql_row[0]);
-			p->inventory[i].nameid = atoi(sql_row[1]);
-			p->inventory[i].amount = atoi(sql_row[2]);
-			p->inventory[i].equip = atoi(sql_row[3]);
-			p->inventory[i].identify = atoi(sql_row[4]);
-			p->inventory[i].refine = atoi(sql_row[5]);
-			p->inventory[i].attribute = atoi(sql_row[6]);
-			p->inventory[i].card[0] = atoi(sql_row[7]);
-			p->inventory[i].card[1] = atoi(sql_row[8]);
-			p->inventory[i].card[2] = atoi(sql_row[9]);
-			p->inventory[i].card[3] = atoi(sql_row[10]);
-			p->inventory[i].broken = atoi(sql_row[11]);
-		}
-		mysql_free_result(sql_res);
-	}
-	printf("inventory ");
-
-
-	//read cart.
-	//`cart_inventory` (`id`,`char_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`)
-	sprintf(tmp_sql, "SELECT `id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`, `broken` "
-		"FROM `%s` WHERE `char_id`='%d'",cart_db, char_id);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error (select `cart_inventory`)- %s\n", mysql_error(&mysql_handle));
-	}
-	sql_res = mysql_store_result(&mysql_handle);
-	if (sql_res) {
-		for(i=0;(sql_row = mysql_fetch_row(sql_res));i++){
-			p->cart[i].id = atoi(sql_row[0]);
-			p->cart[i].nameid = atoi(sql_row[1]);
-			p->cart[i].amount = atoi(sql_row[2]);
-			p->cart[i].equip = atoi(sql_row[3]);
-			p->cart[i].identify = atoi(sql_row[4]);
-			p->cart[i].refine = atoi(sql_row[5]);
-			p->cart[i].attribute = atoi(sql_row[6]);
-			p->cart[i].card[0] = atoi(sql_row[7]);
-			p->cart[i].card[1] = atoi(sql_row[8]);
-			p->cart[i].card[2] = atoi(sql_row[9]);
-			p->cart[i].card[3] = atoi(sql_row[10]);
-			p->cart[i].broken = atoi(sql_row[11]);
-		}
-		mysql_free_result(sql_res);
-	}
-	printf("cart ");
-
-	//read skill
-	//`skill` (`char_id`, `id`, `lv`)
-	sprintf(tmp_sql, "SELECT `id`, `lv` FROM `%s` WHERE `char_id`='%d'",skill_db, char_id);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error (select `skill`)- %s\n", mysql_error(&mysql_handle));
-	}
-	sql_res = mysql_store_result(&mysql_handle);
-	if (sql_res) {
-		for(i=0;(sql_row = mysql_fetch_row(sql_res));i++){
-			n = atoi(sql_row[0]);
-			p->skill[n].id = n; //memory!? shit!.
-			p->skill[n].lv = atoi(sql_row[1]);
-		}
-		mysql_free_result(sql_res);
-	}
-	printf("skill ");
-
-	//global_reg
-	//`global_reg_value` (`char_id`, `str`, `value`)
-	sprintf(tmp_sql, "SELECT `str`, `value` FROM `%s` WHERE `type`=3 AND `char_id`='%d'",reg_db, char_id);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error (select `global_reg_value`)- %s\n", mysql_error(&mysql_handle));
-	}
-	i = 0;
-	sql_res = mysql_store_result(&mysql_handle);
-	if (sql_res) {
-		for(i=0;(sql_row = mysql_fetch_row(sql_res));i++){
-			strcpy (p->global_reg[i].str, sql_row[0]);
-			p->global_reg[i].value = atoi (sql_row[1]);
-		}
-		mysql_free_result(sql_res);
-	}
-	p->global_reg_num=i;
-
-	if (online) {
-		sprintf(tmp_sql, "UPDATE `%s` SET `online`='%d' WHERE `char_id`='%d'",char_db,online,char_id);
-		if (mysql_query(&mysql_handle, tmp_sql)) {
-			printf("DB server Error (set char online)- %s\n", mysql_error(&mysql_handle));
-		}
-	}
-
-	printf("global_reg]\n");	//ok. all data load successfuly!
-
-	//printf("char cloade");
-
-	return 1;
-}
-//==========================================================================================================
-int mmo_char_sql_init(void) {
-	int i;
-
-	printf("init start.......\n");
-	// memory initialize
-	// no need to set twice size in this routine. but some cause segmentation error. :P
-	printf("initializing char memory...(%d byte)\n",sizeof(struct mmo_charstatus)*2);
-	CREATE(char_dat, struct mmo_charstatus, 2);
-
-	memset(char_dat, 0, sizeof(struct mmo_charstatus)*2);
-/*	Initialized in inter.c already [Wizputer]
-	// DB connection initialized
-	// for char-server session only
-	mysql_init(&mysql_handle);
-	printf("Connect DB server....(char server)\n");
-	if(!mysql_real_connect(&mysql_handle, char_server_ip, char_server_id, char_server_pw, char_server_db ,char_server_port, (char *)NULL, 0)) {
-		// SQL connection pointer check
-		printf("%s\n",mysql_error(&mysql_handle));
-		exit(1);
-	} else {
-		printf("connect success! (char server)\n");
-	}
-*/
-	sprintf(tmp_sql , "SELECT count(*) FROM `%s`", char_db);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	sql_row = mysql_fetch_row(sql_res);
-	printf("total char data -> '%s'.......\n",sql_row[0]);
-	i = atoi (sql_row[0]);
-	mysql_free_result(sql_res);
-
-	if (i !=0) {
-		sprintf(tmp_sql , "SELECT max(`char_id`) FROM `%s`", char_db);
-		if (mysql_query(&mysql_handle, tmp_sql)) {
-			printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-		}
-		sql_res = mysql_store_result(&mysql_handle) ;
-		sql_row = mysql_fetch_row(sql_res);
-		char_id_count = atoi (sql_row[0]);
-
-		mysql_free_result(sql_res);
-	} else
-		printf("set char_id_count: %d.......\n",char_id_count);
-
-	sprintf(tmp_sql,"UPDATE `%s` SET `online`='0' WHERE `online`='1'", char_db);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error (reset_online `%s`)- %s\n", char_db, mysql_error(&mysql_handle));
-	}
-	printf("init end.......\n");
-
-	return 0;
-}
-
-//==========================================================================================================
-
-int make_new_char_sql(int fd, unsigned char *dat) {
-	struct char_session_data *sd;
-	char t_name[100];
-	int i;
-	//aphostropy error check! - fixed!
-	jstrescapecpy(t_name, dat);
-	printf("making new char -");
-
-	sd = session[fd]->session_data;
-
-	// Check Authorised letters/symbols in the name of the character
-	if (char_name_option == 1) { // only letters/symbols in char_name_letters are authorised
-		for (i = 0; i < strlen(dat); i++)
-			if (strchr(char_name_letters, dat[i]) == NULL)
-				return -1;
-	} else if (char_name_option == 2) { // letters/symbols in char_name_letters are forbidden
-		for (i = 0; i < strlen(dat); i++)
-			if (strchr(char_name_letters, dat[i]) != NULL)
-				return -1;
-	} // else, all letters/symbols are authorised (except control char removed before)
-
-	//check stat error
-	if ((dat[24]+dat[25]+dat[26]+dat[27]+dat[28]+dat[29]!=5*6 ) ||
-	    (dat[30] >= 9) ||
-	    (dat[33] <= 0) || (dat[33] >= 20) ||
-	    (dat[31] >= 9)) {
-
-		// check individual stat value
-		for(i = 24; i <= 29; i++) {
-			if (dat[i] < 1 || dat[i] > 9) {
-				return -1;
-			}
-		}
-
-		// char.log to charlog
-		sprintf(tmp_sql,"INSERT INTO `%s` (`time`, `char_msg`,`account_id`,`char_num`,`name`,`str`,`agi`,`vit`,`int`,`dex`,`luk`,`hair`,`hair_color`)"
-			"VALUES (NOW(), '%s', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d')",
-			charlog_db,"make new char error", sd->account_id, dat[30], dat, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[33], dat[31]);
-		//query
-		if (mysql_query(&mysql_handle, tmp_sql)) {
-			printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-		}
-		printf("make new char error %d-%d %s %d, %d, %d, %d, %d, %d %d, %d" RETCODE,
-			fd, dat[30], dat, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[33], dat[31]);
-		return -1;
-	}
-
-	// char.log to charlog
-	sprintf(tmp_sql,"INSERT INTO `%s`(`time`, `char_msg`,`account_id`,`char_num`,`name`,`str`,`agi`,`vit`,`int`,`dex`,`luk`,`hair`,`hair_color`)"
-		"VALUES (NOW(), '%s', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d')",
-		charlog_db,"make new char", sd->account_id, dat[30], dat, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[33], dat[31]);
-	//query
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-	}
-	printf("make new char %d-%d %s %d, %d, %d, %d, %d, %d - %d, %d" RETCODE,
-		fd, dat[30], dat, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29], dat[33], dat[31]);
-
-	sprintf(tmp_sql, "SELECT count(*) FROM `%s` WHERE `name` = '%s'",char_db, t_name);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-		return -1;
-	}
-	sql_res = mysql_store_result(&mysql_handle);
-	sql_row = mysql_fetch_row(sql_res);
-	printf("\033[1;32m name check result : %s -\033[0m ",sql_row[0]);
-	if (atoi(sql_row[0]) > 0) {
-		mysql_free_result(sql_res);
-		return -1;
-	} else
-		mysql_free_result(sql_res);
-
-	// check char slot.
-	sprintf(tmp_sql, "SELECT count(*) FROM `%s` WHERE `account_id` = '%d' AND `char_num` = '%d'",char_db, sd->account_id, dat[30]);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-	}
-	sql_res = mysql_store_result(&mysql_handle);
-	sql_row = mysql_fetch_row(sql_res);
-
-	//printf("slot check result : %s\n",sql_row[0]);
-	if (atoi(sql_row[0]) > 0) {
-		mysql_free_result(sql_res);
-		return -1;
-	} else
-		mysql_free_result(sql_res);
-
-	char_id_count++;
-
-	// make new char.
-	sprintf(tmp_sql,"INSERT INTO `%s` (`char_id`,`account_id`,`char_num`,`name`,`zeny`,`str`,`agi`,`vit`,`int`,`dex`,`luk`,`max_hp`,`hp`,`max_sp`,`sp`,`hair`,`hair_color`)"
-		" VALUES ('%d', '%d', '%d', '%s', '%d',  '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d','%d', '%d','%d', '%d')",
-		 char_db, char_id_count, sd->account_id , dat[30] , t_name, start_zeny, dat[24], dat[25], dat[26], dat[27], dat[28], dat[29],
-		(40 * (100 + dat[26])/100) , (40 * (100 + dat[26])/100 ),  (11 * (100 + dat[27])/100), (11 * (100 + dat[27])/100), dat[33], dat[31]);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error (insert `char`)- %s\n", mysql_error(&mysql_handle));
-	}
-
-	//`inventory` (`id`,`char_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`)
-	sprintf(tmp_sql,"INSERT INTO `%s` (`char_id`,`nameid`, `amount`, `equip`, `identify`) VALUES ('%d', '%d', '%d', '%d', '%d')",
-		inventory_db, char_id_count, 1201,1,0x02,1); //add Knife
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error (insert `inventory`)- %s\n", mysql_error(&mysql_handle));
-	}
-
-	sprintf(tmp_sql,"INSERT INTO `%s` (`char_id`,`nameid`, `amount`, `equip`, `identify`) VALUES ('%d', '%d', '%d', '%d', '%d')",
-		inventory_db, char_id_count, 2301,1,0x10,1); //add Cotton Shirt
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error (insert `inventory`)- %s\n", mysql_error(&mysql_handle));
-	}
-	// respawn map and start point set
-	sprintf(tmp_sql,"UPDATE `%s` SET `last_map`='%s',`last_x`='%d',`last_y`='%d',`save_map`='%s',`save_x`='%d',`save_y`='%d'  WHERE  `char_id` = '%d'",
-		char_db, start_point.map,start_point.x,start_point.y, start_point.map,start_point.x,start_point.y, char_id_count);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error (update `char`)- %s\n", mysql_error(&mysql_handle));
-	}
-	printf("making new char success - id:(\033[1;32m%d\033[0m\tname:\033[1;32%s\033[0m\n", char_id_count, t_name);
-	return char_id_count;
-}
-
-//==========================================================================================================
-
-void mmo_char_sync(void){
-	printf("mmo_char_sync() - nothing to do\n");
-}
-
-// to do
-///////////////////////////
-
-int mmo_char_sync_timer(int tid, unsigned int tick, int id, int data) {
-	printf("mmo_char_sync_timer() tic - no works to do\n");
-	return 0;
-}
-
-int count_users(void) {
-	int i, users;
-
-	if (login_fd > 0 && session[login_fd]){
-		users = 0;
-		for(i = 0; i < MAX_MAP_SERVERS; i++) {
-			if (server_fd[i] >= 0) {
-				users += server[i].users;
-			}
-		}
-		return users;
-	}
-	return 0;
-}
-
-int mmo_char_send006b(int fd, struct char_session_data *sd) {
-	int i, j, found_num = 0;
-	struct mmo_charstatus *p = NULL;
-// hehe. commented other. anyway there's no need to use older version.
-// if use older packet version just uncomment that!
-//#ifdef NEW_006b
-	const int offset = 24;
-//#else
-//	int offset = 4;
-//#endif
-
-	printf("mmo_char_send006b start.. (account:%d)\n",sd->account_id);
-//	printf("offset -> %d...\n",offset);
-
-	//search char.
-	sprintf(tmp_sql, "SELECT `char_id` FROM `%s` WHERE `account_id` = '%d'",char_db, sd->account_id);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-	}
-	sql_res = mysql_store_result(&mysql_handle);
-	if (sql_res) {
-		found_num = mysql_num_rows(sql_res);
-		printf("number of chars: %d\n", found_num);
-		i = 0;
-		while((sql_row = mysql_fetch_row(sql_res))) {
-			sd->found_char[i] = atoi(sql_row[0]);
-			i++;
-		}
-		mysql_free_result(sql_res);
-	}
-
-//	printf("char fetching end (total: %d)....\n", found_num);
-
-	for(i = found_num; i < 9; i++)
-		sd->found_char[i] = -1;
-
-	memset(WFIFOP(fd, 0), 0, offset + found_num * 106);
-	WFIFOW(fd, 0) = 0x6b;
-	WFIFOW(fd, 2) = offset + found_num * 106;
-
-	printf("(\033[1;13m%d\033[0m) Request Char Data:\n",sd->account_id);
-
-	for(i = 0; i < found_num; i++) {
-		mmo_char_fromsql(sd->found_char[i], char_dat, 0);
-
-		p = &char_dat[0];
-
-		j = offset + (i * 106); // increase speed of code
-
-		WFIFOL(fd,j) = p->char_id;
-		WFIFOL(fd,j+4) = p->base_exp;
-		WFIFOL(fd,j+8) = p->zeny;
-		WFIFOL(fd,j+12) = p->job_exp;
-		WFIFOL(fd,j+16) = p->job_level;
-
-		WFIFOL(fd,j+20) = 0;
-		WFIFOL(fd,j+24) = 0;
-		WFIFOL(fd,j+28) = p->option;
-
-		WFIFOL(fd,j+32) = p->karma;
-		WFIFOL(fd,j+36) = p->manner;
-
-		WFIFOW(fd,j+40) = p->status_point;
-		WFIFOW(fd,j+42) = (p->hp > 0x7fff) ? 0x7fff : p->hp;
-		WFIFOW(fd,j+44) = (p->max_hp > 0x7fff) ? 0x7fff : p->max_hp;
-		WFIFOW(fd,j+46) = (p->sp > 0x7fff) ? 0x7fff : p->sp;
-		WFIFOW(fd,j+48) = (p->max_sp > 0x7fff) ? 0x7fff : p->max_sp;
-		WFIFOW(fd,j+50) = DEFAULT_WALK_SPEED; // p->speed;
-		WFIFOW(fd,j+52) = p->class;
-		WFIFOW(fd,j+54) = p->hair;
-		WFIFOW(fd,j+56) = p->weapon;
-		WFIFOW(fd,j+58) = p->base_level;
-		WFIFOW(fd,j+60) = p->skill_point;
-		WFIFOW(fd,j+62) = p->head_bottom;
-		WFIFOW(fd,j+64) = p->shield;
-		WFIFOW(fd,j+66) = p->head_top;
-		WFIFOW(fd,j+68) = p->head_mid;
-		WFIFOW(fd,j+70) = p->hair_color;
-		WFIFOW(fd,j+72) = p->clothes_color;
-
-		memcpy(WFIFOP(fd,j+74), p->name, 24);
-
-		WFIFOB(fd,j+98) = (p->str > 255) ? 255 : p->str;
-		WFIFOB(fd,j+99) = (p->agi > 255) ? 255 : p->agi;
-		WFIFOB(fd,j+100) = (p->vit > 255) ? 255 : p->vit;
-		WFIFOB(fd,j+101) = (p->int_ > 255) ? 255 : p->int_;
-		WFIFOB(fd,j+102) = (p->dex > 255) ? 255 : p->dex;
-		WFIFOB(fd,j+103) = (p->luk > 255) ? 255 : p->luk;
-		WFIFOB(fd,j+104) = p->char_num;
-	}
-
-	WFIFOSET(fd,WFIFOW(fd,2));
-//	printf("mmo_char_send006b end..\n");
-	return 0;
-}
-
-int parse_tologin(int fd) {
-	int i;
-	struct char_session_data *sd;
-
-	// only login-server can have an access to here.
-	// so, if it isn't the login-server, we disconnect the session.
-	//session eof check!
-	if (fd != login_fd || session[fd]->eof) {
-		if (fd == login_fd) {
-			printf("Char-server can't connect to login-server (connection #%d).\n", fd);
-			login_fd = -1;
-		}
-		close(fd);
-		delete_session(fd);
-		return 0;
-	}
-
-	sd = session[fd]->session_data;
-
-	// hehe. no need to set user limite on SQL version. :P
-	// but char limitation is good way to maintain server. :D
-	while(RFIFOREST(fd) >= 2) {
-//		printf("parse_tologin : %d %d %x\n", fd, RFIFOREST(fd), RFIFOW(fd, 0));
-
-		switch(RFIFOW(fd, 0)){
-		case 0x2711:
-			if (RFIFOREST(fd) < 3)
-				return 0;
-			if (RFIFOB(fd, 2)) {
-				//printf("connect login server error : %d\n", RFIFOB(fd, 2));
-				printf("Can not connect to login-server.\n");
-				printf("The server communication passwords (default s1/p1) is probably invalid.\n");
-				printf("Also, please make sure your login db has the username/password present and the sex of the account is S.\n");
-				printf("If you changed the communication passwords, change them back at map_athena.conf and char_athena.conf\n");
-				return 0;
-				//exit(1); //fixed for server shutdown.
-			}else {
-				printf("Connected to login-server (connection #%d).\n", fd);
-				// if no map-server already connected, display a message...
-				for(i = 0; i < MAX_MAP_SERVERS; i++)
-					if (server_fd[i] >= 0 && server[i].map[0][0]) // if map-server online and at least 1 map
-						break;
-				if (i == MAX_MAP_SERVERS)
-					printf("Awaiting maps from map-server.\n");
-			}
-			RFIFOSKIP(fd, 3);
-			break;
-
-		case 0x2713:
-			if(RFIFOREST(fd)<51)
-				return 0;
-			for(i = 0; i < fd_max; i++) {
-				if (session[i] && (sd = session[i]->session_data) && sd->account_id == RFIFOL(fd,2)) {
-					if (RFIFOB(fd,6) != 0) {
-						WFIFOW(i,0) = 0x6c;
-						WFIFOB(i,2) = 0x42;
-						WFIFOSET(i,3);
-					} else if (max_connect_user == 0 || count_users() < max_connect_user) {
-//						if (max_connect_user == 0)
-//							printf("max_connect_user (unlimited) -> accepted.\n");
-//						else
-//							printf("count_users(): %d < max_connect_user (%d) -> accepted.\n", count_users(), max_connect_user);
-						sd->connect_until_time = (time_t)RFIFOL(fd,47);
-						// send characters to player
-						mmo_char_send006b(i, sd);
-					} else {
-						// refuse connection: too much online players
-//						printf("count_users(): %d < max_connect_use (%d) -> fail...\n", count_users(), max_connect_user);
-						WFIFOW(i,0) = 0x6c;
-						WFIFOW(i,2) = 0;
-						WFIFOSET(i,3);
-					}
-				}
-			}
-			RFIFOSKIP(fd,51);
-			break;
-
-		case 0x2717:
-			if (RFIFOREST(fd) < 50)
-				return 0;
-			for(i = 0; i < fd_max; i++) {
-				if (session[i] && (sd = session[i]->session_data)) {
-					if (sd->account_id == RFIFOL(fd,2)) {
-					sd->connect_until_time = (time_t)RFIFOL(fd,46);
-					break;
-					}
-				}
-			}
-			RFIFOSKIP(fd,50);
-			break;
-
-/*		case 0x2721:	// gm reply. I don't want to support this function.
-			printf("0x2721:GM reply\n");
-		  {
-			int oldacc, newacc;
-			unsigned char buf[64];
-			if (RFIFOREST(fd) < 10)
-				return 0;
-			oldacc = RFIFOL(fd, 2);
-			newacc = RFIFOL(fd, 6);
-			RFIFOSKIP(fd, 10);
-			if (newacc > 0) {
-				for(i=0;i<char_num;i++){
-					if(char_dat[i].account_id==oldacc)
-						char_dat[i].account_id=newacc;
-				}
-			}
-			WBUFW(buf,0)=0x2b0b;
-			WBUFL(buf,2)=oldacc;
-			WBUFL(buf,6)=newacc;
-			mapif_sendall(buf,10);
-//			printf("char -> map\n");
-		  }
-			break;
-*/
-		case 0x2723:	// changesex reply (modified by [Yor])
-			if (RFIFOREST(fd) < 7)
-				return 0;
-		  {
-			int acc, sex;
-			unsigned char buf[16];
-
-			acc = RFIFOL(fd,2);
-			sex = RFIFOB(fd,6);
-			RFIFOSKIP(fd, 7);
-			if (acc > 0) {
-				sprintf(tmp_sql, "SELECT `char_id`,`class`,`skill_point` FROM `%s` WHERE `account_id` = '%d'",char_db, acc);
-				if (mysql_query(&mysql_handle, tmp_sql)) {
-						printf("DB server Error (select `char`)- %s\n", mysql_error(&mysql_handle));
-				}
-				sql_res = mysql_store_result(&mysql_handle);
-
-				if (sql_res) {
-						sql_row = mysql_fetch_row(sql_res);
-						int char_id = atoi(sql_row[0]);
-						int jobclass = atoi(sql_row[1]);
-						int skill_point = atoi(sql_row[2]);
-						int class = jobclass;
-						if (jobclass == 19 || jobclass == 20 ||
-						    jobclass == 4020 || jobclass == 4021 ||
-						    jobclass == 4042 || jobclass == 4043) {
-							// job modification
-							if (jobclass == 19 || jobclass == 20) {
-								class = (sex) ? 19 : 20;
-							} else if (jobclass == 4020 || jobclass == 4021) {
-								class = (sex) ? 4020 : 4021;
-							} else if (jobclass == 4042 || jobclass == 4043) {
-								class = (sex) ? 4042 : 4043;
-							}
-							// remove specifical skills of classes 19,20 4020,4021 and 4042,4043
-							sprintf(tmp_sql, "SELECT `lv` FROM `%s` WHERE `char_id` = '%d' AND `id` >= '315' AND `id` <= '330'",skill_db, char_id);
-							if (mysql_query(&mysql_handle, tmp_sql)) {
-								printf("DB server Error (select `char`)- %s\n", mysql_error(&mysql_handle));
-							}
-							sql_res = mysql_store_result(&mysql_handle);
-							if (sql_res) {
-								while(( sql_row = mysql_fetch_row(sql_res))) {
-									skill_point += atoi(sql_row[0]);
-								}
-							}
-							sprintf(tmp_sql, "DELETE FROM `%s` WHERE `char_id` = '%d' AND `id` >= '315' AND `id` <= '330'",skill_db, char_id);
-							if (mysql_query(&mysql_handle, tmp_sql)) {
-								printf("DB server Error (select `char`)- %s\n", mysql_error(&mysql_handle));
-							}
-						}
-						// to avoid any problem with equipment and invalid sex, equipment is unequiped.
-						sprintf(tmp_sql, "UPDATE `%s` SET `equip` = '0' WHERE `char_id` = '%d'",inventory_db, char_id);
-						if (mysql_query(&mysql_handle, tmp_sql)) {
-							printf("DB server Error (select `char`)- %s\n", mysql_error(&mysql_handle));
-						}
-						sprintf(tmp_sql, "UPDATE `%s` SET `class`='%d' , `skill_point`='%d' , `weapon`='0' , `shield='0' , `head_top`='0' , `head_mid`='0' , `head_bottom`='0' WHERE `char_id` = '%d'",char_db, class, skill_point, char_id);
-						if (mysql_query(&mysql_handle, tmp_sql)) {
-							printf("DB server Error (select `char`)- %s\n", mysql_error(&mysql_handle));
-						}
-					}
-				}
-				// disconnect player if online on char-server
-				for(i = 0; i < fd_max; i++) {
-					if (session[i] && (sd = session[i]->session_data)) {
-						if (sd->account_id == acc) {
-							session[i]->eof = 1;
-							break;
-						}
-					}
-				}
-
-			WBUFW(buf,0) = 0x2b0d;
-			WBUFL(buf,2) = acc;
-			WBUFB(buf,6) = sex;
-
-			mapif_sendall(buf, 7);
-		  }
-			break;
-
-		// account_reg2�ύX�ʒm
-		case 0x2729:
-			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-		  {
-			struct global_reg reg[ACCOUNT_REG2_NUM];
-			unsigned char buf[4096];
-			int j, p, acc;
-			acc = RFIFOL(fd,4);
-			for(p = 8, j = 0; p < RFIFOW(fd,2) && j < ACCOUNT_REG2_NUM; p += 36, j++) {
-				memcpy(reg[j].str, RFIFOP(fd,p), 32);
-				reg[j].value = RFIFOL(fd,p+32);
-			}
-			// set_account_reg2(acc,j,reg);
-			// ���C���O�C�����֎~���Ă���Α���K�v�͖���
-			memcpy(buf,RFIFOP(fd,0), RFIFOW(fd,2));
-			WBUFW(buf,0) = 0x2b11;
-			mapif_sendall(buf, WBUFW(buf,2));
-			RFIFOSKIP(fd, RFIFOW(fd,2));
-//			printf("char: save_account_reg_reply\n");
-		  }
-			break;
-
-		// State change of account/ban notification (from login-server) by [Yor]
-		case 0x2731:
-			if (RFIFOREST(fd) < 11)
-				return 0;
-			// send to all map-servers to disconnect the player
-		  {
-			unsigned char buf[16];
-			WBUFW(buf,0) = 0x2b14;
-			WBUFL(buf,2) = RFIFOL(fd,2);
-			WBUFB(buf,6) = RFIFOB(fd,6); // 0: change of statut, 1: ban
-			WBUFL(buf,7) = RFIFOL(fd,7); // status or final date of a banishment
-			mapif_sendall(buf, 11);
-		  }
-			// disconnect player if online on char-server
-			for(i = 0; i < fd_max; i++) {
-				if (session[i] && (sd = session[i]->session_data)) {
-					if (sd->account_id == RFIFOL(fd,2)) {
-						session[i]->eof = 1;
-						break;
-					}
-				}
-			}
-			RFIFOSKIP(fd,11);
-			break;
-
-		default:
-			printf("set eof.\n");
-			session[fd]->eof = 1;
-			return 0;
-		}
-	}
-
-	RFIFOFLUSH(fd);
-
-	return 0;
-}
-
-//--------------------------------
-// Map-server anti-freeze system
-//--------------------------------
-int map_anti_freeze_system(int tid, unsigned int tick, int id, int data) {
-	int i;
-
-	for(i = 0; i < MAX_MAP_SERVERS; i++) {
-		if (server_fd[i] >= 0) {// if map-server is online
-			printf("map_anti_freeze_system: server #%d, flag: %d.\n", i, server_freezeflag[i]);
-			if (server_freezeflag[i]-- < 1) {// Map-server anti-freeze system. Counter. 5 ok, 4...0 freezed
-				printf("Map-server anti-freeze system: char-server #%d is frozen -> disconnection.\n", i);
-				session[server_fd[i]]->eof = 1;
-				sprintf(tmp_sql, "DELETE FROM `ragsrvinfo` WHERE `index`='%d'", server_fd[i]);
-				if (mysql_query(&mysql_handle, tmp_sql)) {
-				    printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-				}
-			}
-		}
-	}
-
-	return 0;
-}
-
-int parse_frommap(int fd) {
-	int i = 0, j = 0;
-	int id;
-
-	// Sometimes fd=0, and it will cause server crash. Don't know why. :(
-	if (fd <= 0) {
-		printf("parse_frommap error fd=0\n");
-		return 0;
-	}
-
-	for(id = 0; id < MAX_MAP_SERVERS; id++)
-		if (server_fd[id] == fd)
-			break;
-	if(id == MAX_MAP_SERVERS || session[fd]->eof) {
-		if (id < MAX_MAP_SERVERS) {
-			memset(&server[id], 0, sizeof(struct mmo_map_server));
-			printf("Map-server %d (session #%d) has disconnected.\n", id, fd);
-			sprintf(tmp_sql, "DELETE FROM `ragsrvinfo` WHERE `index`='%d'", server_fd[id]);
-			if (mysql_query(&mysql_handle, tmp_sql)) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
-			server_fd[id] = -1;
-		}
-		close(fd);
-		delete_session(fd);
-		return 0;
-	}
-
-	while(RFIFOREST(fd) >= 2) {
-//		printf("parse_frommap : %d %d %x\n", fd, RFIFOREST(fd), RFIFOW(fd,0));
-
-		switch(RFIFOW(fd, 0)) {
-		case 0x2af7:
-			RFIFOSKIP(fd,2);
-			read_gm_account();
-			break;
-
-		// mapserver -> map names recv.
-		case 0x2afa:
-			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-			memset(server[id].map, 0, sizeof(server[id].map));
-			j = 0;
-			for(i = 4; i < RFIFOW(fd,2); i += 16) {
-				memcpy(server[id].map[j], RFIFOP(fd,i), 16);
-//				printf("set map %d.%d : %s\n", id, j, server[id].map[j]);
-				j++;
-			}
-			i = server[id].ip;
-			{
-				unsigned char *p = (unsigned char *)&server[id].ip;
-				printf("Map-Server %d connected: %d maps, from IP %d.%d.%d.%d port %d.\n",
-				       id, j, p[0], p[1], p[2], p[3], server[id].port);
-				printf("Map-server %d loading complete.\n", id);
-			}
-			WFIFOW(fd,0) = 0x2afb;
-			WFIFOB(fd,2) = 0;
-			memcpy(WFIFOP(fd,3), wisp_server_name, 24); // name for wisp to player
-			WFIFOSET(fd,27);
-			{
-				unsigned char buf[16384];
-				int x;
-				if (j == 0) {
-					printf("WARNING: Map-Server %d have NO maps.\n", id);
-				// Transmitting maps information to the other map-servers
-				} else {
-					WBUFW(buf,0) = 0x2b04;
-					WBUFW(buf,2) = j * 16 + 10;
-					WBUFL(buf,4) = server[id].ip;
-					WBUFW(buf,8) = server[id].port;
-					memcpy(WBUFP(buf,10), RFIFOP(fd,4), j * 16);
-					mapif_sendallwos(fd, buf, WBUFW(buf,2));
-				}
-				// Transmitting the maps of the other map-servers to the new map-server
-				for(x = 0; x < MAX_MAP_SERVERS; x++) {
-					if (server_fd[x] >= 0 && x != id) {
-						WFIFOW(fd,0) = 0x2b04;
-						WFIFOL(fd,4) = server[x].ip;
-						WFIFOW(fd,8) = server[x].port;
-						j = 0;
-						for(i = 0; i < MAX_MAP_PER_SERVER; i++)
-							if (server[x].map[i][0])
-								memcpy(WFIFOP(fd,10+(j++)*16), server[x].map[i], 16);
-						if (j > 0) {
-							WFIFOW(fd,2) = j * 16 + 10;
-							WFIFOSET(fd,WFIFOW(fd,2));
-						}
-					}
-				}
-			}
-			RFIFOSKIP(fd,RFIFOW(fd,2));
-			break;
-
-		// auth request
-		case 0x2afc:
-			if (RFIFOREST(fd) < 22)
-				return 0;
-//			printf("(AUTH request) auth_fifo search %d %d %d\n", RFIFOL(fd, 2), RFIFOL(fd, 6), RFIFOL(fd, 10));
-			for(i = 0; i < AUTH_FIFO_SIZE; i++) {
-				if (auth_fifo[i].account_id == RFIFOL(fd,2) &&
-				    auth_fifo[i].char_id == RFIFOL(fd,6) &&
-				    auth_fifo[i].login_id1 == RFIFOL(fd,10) &&
-#if CMP_AUTHFIFO_LOGIN2 != 0
-				    // here, it's the only area where it's possible that we doesn't know login_id2 (map-server asks just after 0x72 packet, that doesn't given the value)
-				    (auth_fifo[i].login_id2 == RFIFOL(fd,14) || RFIFOL(fd,14) == 0) && // relate to the versions higher than 18
-#endif
-				    (!check_ip_flag || auth_fifo[i].ip == RFIFOL(fd,18)) &&
-				    !auth_fifo[i].delflag) {
-					auth_fifo[i].delflag = 1;
-					WFIFOW(fd,0) = 0x2afd;
-					WFIFOW(fd,2) = 16 + sizeof(struct mmo_charstatus);
-					WFIFOL(fd,4) = RFIFOL(fd,2);
-					WFIFOL(fd,8) = auth_fifo[i].login_id2;
-					WFIFOL(fd,12) = (unsigned long)auth_fifo[i].connect_until_time;
-					mmo_char_fromsql(auth_fifo[i].char_id, char_dat, 1);
-					char_dat[0].sex = auth_fifo[i].sex;
-					memcpy(WFIFOP(fd,16), &char_dat[0], sizeof(struct mmo_charstatus));
-					WFIFOSET(fd, WFIFOW(fd,2));
-					//printf("auth_fifo search success (auth #%d, account %d, character: %d).\n", i, RFIFOL(fd,2), RFIFOL(fd,6));
-					break;
-				}
-			}
-			if (i == AUTH_FIFO_SIZE) {
-				WFIFOW(fd,0) = 0x2afe;
-				WFIFOL(fd,2) = RFIFOL(fd,2);
-				WFIFOSET(fd,6);
-//				printf("(AUTH request) auth_fifo search error!\n");
-			}
-			RFIFOSKIP(fd,22);
-			break;
-
-		// set MAP user
-		case 0x2aff:
-			if (RFIFOREST(fd) < 6 || RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-			if (RFIFOW(fd,4) != server[id].users)
-				printf("map user: %d\n", RFIFOW(fd,4));
-			server[id].users = RFIFOW(fd,4);
-			if(anti_freeze_enable)
-				server_freezeflag[id] = 5; // Map anti-freeze system. Counter. 5 ok, 4...0 freezed
-			RFIFOSKIP(fd,RFIFOW(fd,2));
-			break;
-
-		// char saving
-		case 0x2b01:
-			i = 0;
-			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-			//check account
-			sprintf(tmp_sql, "SELECT count(*) FROM `%s` WHERE `account_id` = '%d' AND `char_id`='%d'",char_db, RFIFOL(fd,4),RFIFOL(fd,8));
-			if (mysql_query(&mysql_handle, tmp_sql)) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
-			sql_res = mysql_store_result(&mysql_handle);
-			if (sql_res) {
-				sql_row = mysql_fetch_row(sql_res);
-				if (sql_row)
-					i = atoi(sql_row[0]);
-			}
-			mysql_free_result(sql_res);
-
-			if (i == 1) {
-				memcpy(&char_dat[0], RFIFOP(fd,12), sizeof(struct mmo_charstatus));
-				mmo_char_tosql(RFIFOL(fd,8), char_dat);
-				//save to DB
-			}
-			RFIFOSKIP(fd,RFIFOW(fd,2));
-			break;
-
-		// req char selection
-		case 0x2b02:
-			if (RFIFOREST(fd) < 18)
-				return 0;
-
-			if (auth_fifo_pos >= AUTH_FIFO_SIZE)
-				auth_fifo_pos = 0;
-
-//			printf("(charselect) auth_fifo set %d - account_id:%08x login_id1:%08x\n", auth_fifo_pos, RFIFOL(fd, 2), RFIFOL(fd, 6));
-			auth_fifo[auth_fifo_pos].account_id = RFIFOL(fd, 2);
-			auth_fifo[auth_fifo_pos].char_id = 0;
-			auth_fifo[auth_fifo_pos].login_id1 = RFIFOL(fd, 6);
-			auth_fifo[auth_fifo_pos].login_id2 = RFIFOL(fd,10);
-			auth_fifo[auth_fifo_pos].delflag = 2;
-			auth_fifo[auth_fifo_pos].char_pos = 0;
-			auth_fifo[auth_fifo_pos].connect_until_time = 0; // unlimited/unknown time by default (not display in map-server)
-			auth_fifo[auth_fifo_pos].ip = RFIFOL(fd,14);
-			auth_fifo_pos++;
-
-			WFIFOW(fd, 0) = 0x2b03;
-			WFIFOL(fd, 2) = RFIFOL(fd, 2);
-			WFIFOB(fd, 6) = 0;
-			WFIFOSET(fd, 7);
-
-			RFIFOSKIP(fd, 18);
-			break;
-
-		// request "change map server"
-		case 0x2b05:
-			if (RFIFOREST(fd) < 49)
-				return 0;
-
-			if (auth_fifo_pos >= AUTH_FIFO_SIZE)
-				auth_fifo_pos = 0;
-
-			WFIFOW(fd, 0) = 0x2b06;
-			memcpy(WFIFOP(fd,2), RFIFOP(fd,2), 42);
-//			printf("(map change) auth_fifo set %d - account_id:%08x login_id1:%08x\n", auth_fifo_pos, RFIFOL(fd, 2), RFIFOL(fd, 6));
-			auth_fifo[auth_fifo_pos].account_id = RFIFOL(fd, 2);
-			auth_fifo[auth_fifo_pos].login_id1 = RFIFOL(fd, 6);
-			auth_fifo[auth_fifo_pos].login_id2 = RFIFOL(fd,10);
-			auth_fifo[auth_fifo_pos].char_id = RFIFOL(fd,14);
-			auth_fifo[auth_fifo_pos].delflag = 0;
-			auth_fifo[auth_fifo_pos].sex = RFIFOB(fd,44);
-			auth_fifo[auth_fifo_pos].ip = RFIFOL(fd,45);
-
-			sprintf(tmp_sql, "SELECT count(*) FROM `%s` WHERE `account_id` = '%d' AND `char_id`='%d'", char_db, RFIFOL(fd,2), RFIFOL(fd,14));
-			if (mysql_query(&mysql_handle, tmp_sql)) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
-			sql_res = mysql_store_result(&mysql_handle);
-
-			if (( sql_row = mysql_fetch_row(sql_res))) {
-				i = atoi(sql_row[0]);
-				mysql_free_result(sql_res);
-
-				auth_fifo[auth_fifo_pos].char_pos = auth_fifo[auth_fifo_pos].char_id;
-				auth_fifo_pos++;
-
-				WFIFOL(fd,6) = 0;
-				break;
-			}
-			if (i == 0)
-				WFIFOW(fd,6) = 1;
-
-			WFIFOSET(fd,44);
-			RFIFOSKIP(fd,49);
-			break;
-
-		// char name check
-		case 0x2b08:
-			if (RFIFOREST(fd) < 6)
-				return 0;
-
-			sprintf(tmp_sql, "SELECT `name` FROM `%s` WHERE `char_id`='%d'", char_db, RFIFOL(fd,2));
-			if (mysql_query(&mysql_handle, tmp_sql)) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
-			sql_res = mysql_store_result(&mysql_handle);
-
-			sql_row = mysql_fetch_row(sql_res);
-
-			WFIFOW(fd,0) = 0x2b09;
-			WFIFOL(fd,2) = RFIFOL(fd,2);
-
-			if (sql_row)
-				memcpy(WFIFOP(fd,6), sql_row[0], 24);
-			else
-				memcpy(WFIFOP(fd,6), unknown_char_name, 24);
-			mysql_free_result(sql_res);
-
-			WFIFOSET(fd,30);
-
-			RFIFOSKIP(fd,6);
-			break;
-
-/*		// I want become GM - fuck!
-		case 0x2b0a:
-			if(RFIFOREST(fd)<4)
-				return 0;
-			if(RFIFOREST(fd)<RFIFOW(fd,2))
-				return 0;
-			memcpy(WFIFOP(login_fd,2),RFIFOP(fd,2),RFIFOW(fd,2)-2);
-			WFIFOW(login_fd,0)=0x2720;
-			WFIFOSET(login_fd,RFIFOW(fd,2));
-//			printf("char : change gm -> login %d %s %d\n", RFIFOL(fd, 4), RFIFOP(fd, 8), RFIFOW(fd, 2));
-			RFIFOSKIP(fd, RFIFOW(fd, 2));
-			break;
-		*/
-
-		// account_reg�ۑ��v��
-		case 0x2b10:
-			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-		  {
-			struct global_reg reg[ACCOUNT_REG2_NUM];
-			int j,p,acc;
-			acc=RFIFOL(fd,4);
-			for(p=8,j=0;p<RFIFOW(fd,2) && j<ACCOUNT_REG2_NUM;p+=36,j++){
-				memcpy(reg[j].str,RFIFOP(fd,p),32);
-				reg[j].value=RFIFOL(fd,p+32);
-			}
-			// set_account_reg2(acc,j,reg);
-			// login�T�[�o�[�֑���
-			if (login_fd > 0) { // don't send request if no login-server
-				WFIFOW(login_fd, 0) = 0x2728;
-				memcpy(WFIFOP(login_fd,0), RFIFOP(fd,0), RFIFOW(fd,2));
-				WFIFOSET(login_fd, WFIFOW(login_fd,2));
-			}
-			// ���[���h�ւ̓��C���O�C�����Ȃ����map�T�[�o�[�ɑ���K�v�͂Ȃ�
-			//memcpy(buf,RFIFOP(fd,0),RFIFOW(fd,2));
-			//WBUFW(buf,0)=0x2b11;
-			//mapif_sendall(buf,WBUFW(buf,2));
-			RFIFOSKIP(fd,RFIFOW(fd,2));
-//			printf("char: save_account_reg (from map)\n");
-		  }
-			break;
-
-		// Map server send information to change an email of an account -> login-server
-		case 0x2b0c:
-			if (RFIFOREST(fd) < 86)
-				return 0;
-			if (login_fd > 0) { // don't send request if no login-server
-				memcpy(WFIFOP(login_fd,0), RFIFOP(fd,0), 86); // 0x2722 <account_id>.L <actual_e-mail>.40B <new_e-mail>.40B
-				WFIFOW(login_fd,0) = 0x2722;
-				WFIFOSET(login_fd, 86);
-			}
-			RFIFOSKIP(fd, 86);
-			break;
-
-		// Receiving from map-server a status change resquest. Transmission to login-server (by Yor)
-		case 0x2b0e:
-			if (RFIFOREST(fd) < 44)
-				return 0;
-		  {
-			char character_name[24];
-			int acc = RFIFOL(fd,2); // account_id of who ask (-1 if nobody)
-			memcpy(character_name, RFIFOP(fd,6), 24);
-			character_name[sizeof(character_name) -1] = '\0';
-			// prepare answer
-			WFIFOW(fd,0) = 0x2b0f; // answer
-			WFIFOL(fd,2) = acc; // who want do operation
-			WFIFOW(fd,30) = RFIFOW(fd, 30); // type of operation: 1-block, 2-ban, 3-unblock, 4-unban
-			sprintf(tmp_sql, "SELECT `account_id`,`name` FROM `%s` WHERE `name` = '%s'",char_db, character_name);
-			if (mysql_query(&mysql_handle, tmp_sql)) {
-				printf("DB server Error (select `char`)- %s\n", mysql_error(&mysql_handle));
-			}
-
-			sql_res = mysql_store_result(&mysql_handle);
-
-			if (sql_res) {
-				if (mysql_num_rows(sql_res)) {
-					sql_row = mysql_fetch_row(sql_res);
-					memcpy(WFIFOP(fd,6), sql_row[1], 24); // put correct name if found
-					WFIFOW(fd,32) = 0; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-					switch(RFIFOW(fd, 30)) {
-					case 1: // block
-						if (acc == -1 || isGM(acc) >= isGM(atoi(sql_row[0]))) {
-							if (login_fd > 0) { // don't send request if no login-server
-								WFIFOW(login_fd,0) = 0x2724;
-								WFIFOL(login_fd,2) = atoi(sql_row[0]); // account value
-								WFIFOL(login_fd,6) = 5; // status of the account
-								WFIFOSET(login_fd, 10);
-//								printf("char : status -> login: account %d, status: %d \n", char_dat[i].account_id, 5);
-							} else
-								WFIFOW(fd,32) = 3; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-						} else
-							WFIFOW(fd,32) = 2; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-						break;
-					case 2: // ban
-						if (acc == -1 || isGM(acc) >= isGM(atoi(sql_row[0]))) {
-							if (login_fd > 0) { // don't send request if no login-server
-								WFIFOW(login_fd, 0) = 0x2725;
-								WFIFOL(login_fd, 2) = atoi(sql_row[0]); // account value
-								WFIFOW(login_fd, 6) = RFIFOW(fd,32); // year
-								WFIFOW(login_fd, 8) = RFIFOW(fd,34); // month
-								WFIFOW(login_fd,10) = RFIFOW(fd,36); // day
-								WFIFOW(login_fd,12) = RFIFOW(fd,38); // hour
-								WFIFOW(login_fd,14) = RFIFOW(fd,40); // minute
-								WFIFOW(login_fd,16) = RFIFOW(fd,42); // second
-								WFIFOSET(login_fd,18);
-//								printf("char : status -> login: account %d, ban: %dy %dm %dd %dh %dmn %ds\n",
-//								       char_dat[i].account_id, (short)RFIFOW(fd,32), (short)RFIFOW(fd,34), (short)RFIFOW(fd,36), (short)RFIFOW(fd,38), (short)RFIFOW(fd,40), (short)RFIFOW(fd,42));
-							} else
-								WFIFOW(fd,32) = 3; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-						} else
-							WFIFOW(fd,32) = 2; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-						break;
-					case 3: // unblock
-						if (acc == -1 || isGM(acc) >= isGM(atoi(sql_row[0]))) {
-							if (login_fd > 0) { // don't send request if no login-server
-								WFIFOW(login_fd,0) = 0x2724;
-								WFIFOL(login_fd,2) = atoi(sql_row[0]); // account value
-								WFIFOL(login_fd,6) = 0; // status of the account
-								WFIFOSET(login_fd, 10);
-//								printf("char : status -> login: account %d, status: %d \n", char_dat[i].account_id, 0);
-							} else
-								WFIFOW(fd,32) = 3; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-						} else
-							WFIFOW(fd,32) = 2; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-						break;
-					case 4: // unban
-						if (acc == -1 || isGM(acc) >= isGM(atoi(sql_row[0]))) {
-							if (login_fd > 0) { // don't send request if no login-server
-								WFIFOW(login_fd, 0) = 0x272a;
-								WFIFOL(login_fd, 2) = atoi(sql_row[0]); // account value
-								WFIFOSET(login_fd, 6);
-//								printf("char : status -> login: account %d, unban request\n", char_dat[i].account_id);
-							} else
-								WFIFOW(fd,32) = 3; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-						} else
-							WFIFOW(fd,32) = 2; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-						break;
-					case 5: // changesex
-						if (acc == -1 || isGM(acc) >= isGM(atoi(sql_row[0]))) {
-							if (login_fd > 0) { // don't send request if no login-server
-								WFIFOW(login_fd, 0) = 0x2727;
-								WFIFOL(login_fd, 2) = atoi(sql_row[0]); // account value
-								WFIFOSET(login_fd, 6);
-//								printf("char : status -> login: account %d, change sex request\n", char_dat[i].account_id);
-							} else
-								WFIFOW(fd,32) = 3; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-						} else
-							WFIFOW(fd,32) = 2; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-						break;
-					}
-				} else {
-					// character name not found
-					memcpy(WFIFOP(fd,6), character_name, 24);
-					WFIFOW(fd,32) = 1; // answer: 0-login-server resquest done, 1-player not found, 2-gm level too low, 3-login-server offline
-				}
-				// send answer if a player ask, not if the server ask
-				if (acc != -1) {
-					WFIFOSET(fd, 34);
-				}
-			}
-		  }
-			RFIFOSKIP(fd, 44);
-			break;
-
-		// Recieve rates [Wizputer]
-		case 0x2b16:
-			if (RFIFOREST(fd) < 6 || RFIFOREST(fd) < RFIFOW(fd,8))
-				return 0;
-			sprintf(tmp_sql, "INSERT INTO `ragsrvinfo` SET `index`='%d',`name`='%s',`exp`='%d',`jexp`='%d',`drop`='%d',`motd`='%s'",
-			        fd, server_name, RFIFOW(fd,2), RFIFOW(fd,4), RFIFOW(fd,6), RFIFOP(fd,10));
-			if (mysql_query(&mysql_handle, tmp_sql)) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
-			RFIFOSKIP(fd,RFIFOW(fd,8));
-			break;
-
-		// Character disconnected set online 0 [Wizputer]
-		case 0x2b17:
-			if (RFIFOREST(fd) < 6 )
-				return 0;
-			//printf("Setting %d char offline\n",RFIFOL(fd,2));
-			sprintf(tmp_sql,"UPDATE `%s` SET `online`='0' WHERE `char_id`='%d'", char_db, RFIFOL(fd,2));
-			if (mysql_query(&mysql_handle, tmp_sql))
-				printf("DB server Error (update online `%s`)- %s\n", char_db, mysql_error(&mysql_handle));
-			RFIFOSKIP(fd,6);
-			break;
-
-		default:
-			// inter server - packet
-			{
-				int r = inter_parse_frommap(fd);
-				if (r == 1) break;		// processed
-				if (r == 2) return 0;	// need more packet
-			}
-
-			// no inter server packet. no char server packet -> disconnect
-			printf("parse_frommap: unknown packet %x! \n", RFIFOW(fd,0));
-			session[fd]->eof = 1;
-			return 0;
-		}
-	}
-	return 0;
-}
-
-int search_mapserver(char *map) {
-	int i, j;
-	char temp_map[16];
-	int temp_map_len;
-
-//	printf("Searching the map-server for map '%s'... ", map);
-	strncpy(temp_map, map, sizeof(temp_map));
-	temp_map[sizeof(temp_map)-1] = '\0';
-	if (strchr(temp_map, '.') != NULL)
-		temp_map[strchr(temp_map, '.') - temp_map + 1] = '\0'; // suppress the '.gat', but conserve the '.' to be sure of the name of the map
-
-	temp_map_len = strlen(temp_map);
-	for(i = 0; i < MAX_MAP_SERVERS; i++)
-		if (server_fd[i] >= 0)
-			for (j = 0; server[i].map[j][0]; j++)
-				//printf("%s : %s = %d\n", server[i].map[j], map, strncmp(server[i].map[j], temp_map, temp_map_len));
-				if (strncmp(server[i].map[j], temp_map, temp_map_len) == 0) {
-//					printf("found -> server #%d.\n", i);
-					return i;
-				}
-
-//	printf("not found.\n");
-	return -1;
-}
-
-int char_mapif_init(int fd) {
-	return inter_mapif_init(fd);
-}
-
-//-----------------------------------------------------
-// Test to know if an IP come from LAN or WAN. by [Yor]
-//-----------------------------------------------------
-int lan_ip_check(unsigned char *p){
-	int i;
-	int lancheck = 1;
-	int subneti[4];
-	unsigned int k0, k1, k2, k3;
-
-	sscanf(lan_map_ip, "%d.%d.%d.%d", &k0, &k1, &k2, &k3);
-	subneti[0] = k0; subneti[1] = k1; subneti[2] = k2; subneti[3] = k3;
-
-//	printf("lan_ip_check: to compare: %d.%d.%d.%d, network: %d.%d.%d.%d/%d.%d.%d.%d\n",
-//	       p[0], p[1], p[2], p[3],
-//	       subneti[0], subneti[1], subneti[2], subneti[3],
-//	       subnetmaski[0], subnetmaski[1], subnetmaski[2], subnetmaski[3]);
-	for(i = 0; i < 4; i++) {
-		if ((subneti[i] & subnetmaski[i]) != (p[i] & subnetmaski[i])) {
-			lancheck = 0;
-			break;
-		}
-	}
-//	printf("LAN test (result): %s source\033[0m.\n", (lancheck) ? "\033[1;36mLAN" : "\033[1;32mWAN");
-	return lancheck;
-}
-
-int parse_char(int fd) {
-	int i, ch = 0;
-	char email[40];
-	struct char_session_data *sd;
-	unsigned char *p = (unsigned char *) &session[fd]->client_addr.sin_addr;
-
-	if(login_fd < 0 || session[fd]->eof) {
-		if (fd == login_fd)
-			login_fd = -1;
-		close(fd);
-		delete_session(fd);
-		return 0;
-	}
-
-	sd = session[fd]->session_data;
-
-	while(RFIFOREST(fd) >= 2) {
-//		if (RFIFOW(fd, 0) < 30000)
-//			printf("parse_char : %d %d %x\n", fd, RFIFOREST(fd), RFIFOW(fd, 0));
-
-		switch(RFIFOW(fd, 0)) {
-		case 0x20b: //20040622 encryption ragexe correspondence
-			if (RFIFOREST(fd) < 19)
-				return 0;
-			RFIFOSKIP(fd,19);
-			break;
-
-		case 0x65: // request to connect
-			printf("request connect - account_id:%d/login_id1:%d/login_id2:%d\n", RFIFOL(fd, 2), RFIFOL(fd, 6), RFIFOL(fd, 10));
-			if (RFIFOREST(fd) < 17)
-				return 0;
-		  {
-/*removed from isGM setup
-			if (isGM(RFIFOL(fd,2)))
-				printf("Account Logged On; Account ID: %d (GM level %d).\n", RFIFOL(fd,2), isGM(RFIFOL(fd,2)));
-			else
-				printf("Account Logged On; Account ID: %d.\n", RFIFOL(fd,2));
-*/
-			if (sd == NULL) {
-				CREATE(session[fd]->session_data, struct char_session_data, 1);
-				sd = session[fd]->session_data;
-				sd->connect_until_time = 0; // unknow or illimited (not displaying on map-server)
-			}
-			sd->account_id = RFIFOL(fd, 2);
-			sd->login_id1 = RFIFOL(fd, 6);
-			sd->login_id2 = RFIFOL(fd, 10);
-			sd->sex = RFIFOB(fd, 16);
-
-			WFIFOL(fd, 0) = RFIFOL(fd, 2);
-			WFIFOSET(fd, 4);
-
-			for(i = 0; i < AUTH_FIFO_SIZE; i++) {
-				if (auth_fifo[i].account_id == sd->account_id &&
-				    auth_fifo[i].login_id1 == sd->login_id1 &&
-#if CMP_AUTHFIFO_LOGIN2 != 0
-				    auth_fifo[i].login_id2 == sd->login_id2 && // relate to the versions higher than 18
-#endif
-				    (!check_ip_flag || auth_fifo[i].ip == session[fd]->client_addr.sin_addr.s_addr) &&
-				    auth_fifo[i].delflag == 2) {
-					auth_fifo[i].delflag = 1;
-
-				if (max_connect_user == 0 || count_users() < max_connect_user) {
-					if (login_fd > 0) { // don't send request if no login-server
-						// request to login-server to obtain e-mail/time limit
-						WFIFOW(login_fd,0) = 0x2716;
-						WFIFOL(login_fd,2) = sd->account_id;
-						WFIFOSET(login_fd,6);
-					}
-					// send characters to player
-					mmo_char_send006b(fd, sd);
-				} else {
-					// refuse connection (over populated)
-					WFIFOW(fd,0) = 0x6c;
-					WFIFOW(fd,2) = 0;
-					WFIFOSET(fd,3);
-				}
-//				printf("connection request> set delflag 1(o:2)- account_id:%d/login_id1:%d(fifo_id:%d)\n", sd->account_id, sd->login_id1, i);
-				break;
-				}
-			}
-			if (i == AUTH_FIFO_SIZE) {
-				if (login_fd > 0) { // don't send request if no login-server
-					WFIFOW(login_fd,0) = 0x2712; // ask login-server to authentify an account
-					WFIFOL(login_fd,2) = sd->account_id;
-					WFIFOL(login_fd,6) = sd->login_id1;
-					WFIFOL(login_fd,10) = sd->login_id2;
-					WFIFOB(login_fd,14) = sd->sex;
-					WFIFOL(login_fd,15) = session[fd]->client_addr.sin_addr.s_addr;
-					WFIFOSET(login_fd,19);
-				} else { // if no login-server, we must refuse connection
-					WFIFOW(fd,0) = 0x6c;
-					WFIFOW(fd,2) = 0;
-					WFIFOSET(fd,3);
-				}
-			}
-		  }
-			RFIFOSKIP(fd, 17);
-			break;
-
-		case 0x66: // char select
-//			printf("0x66> request connect - account_id:%d/char_num:%d\n",sd->account_id,RFIFOB(fd, 2));
-			if (RFIFOREST(fd) < 3)
-				return 0;
-
-			sprintf(tmp_sql, "SELECT `char_id` FROM `%s` WHERE `account_id`='%d' AND `char_num`='%d'",char_db, sd->account_id, RFIFOB(fd, 2));
-			if (mysql_query(&mysql_handle, tmp_sql)) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
-			sql_res = mysql_store_result(&mysql_handle);
-
-			sql_row = mysql_fetch_row(sql_res);
-
-			if (sql_row)
-				mmo_char_fromsql(atoi(sql_row[0]), char_dat, 0);
-			else {
-				mysql_free_result(sql_res);
-				RFIFOSKIP(fd, 3);
-				break;
-			}
-
-			sprintf(tmp_sql,"INSERT INTO `%s`(`time`, `account_id`,`char_num`,`name`) VALUES (NOW(), '%d', '%d', '%s')",
-				charlog_db, sd->account_id, RFIFOB(fd, 2), char_dat[0].name);
-			//query
-			if(mysql_query(&mysql_handle, tmp_sql)) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
-			printf("(\033[1;64m%d\033[0m) char selected (\033[1;32m%d\033[0m) \033[1;32m%s\033[0m" RETCODE, sd->account_id, RFIFOB(fd, 2), char_dat[0].name);
-
-			i = search_mapserver(char_dat[0].last_point.map);
-
-			// if map is not found, we check major cities
-			if (i < 0) {
-				if ((i = search_mapserver("prontera.gat")) >= 0) { // check is done without 'gat'.
-					memcpy(char_dat[0].last_point.map, "prontera.gat", 16);
-					char_dat[0].last_point.x = 273; // savepoint coordonates
-					char_dat[0].last_point.y = 354;
-				} else if ((i = search_mapserver("geffen.gat")) >= 0) { // check is done without 'gat'.
-					memcpy(char_dat[0].last_point.map, "geffen.gat", 16);
-					char_dat[0].last_point.x = 120; // savepoint coordonates
-					char_dat[0].last_point.y = 100;
-				} else if ((i = search_mapserver("morocc.gat")) >= 0) { // check is done without 'gat'.
-					memcpy(char_dat[0].last_point.map, "morocc.gat", 16);
-					char_dat[0].last_point.x = 160; // savepoint coordonates
-					char_dat[0].last_point.y = 94;
-				} else if ((i = search_mapserver("alberta.gat")) >= 0) { // check is done without 'gat'.
-					memcpy(char_dat[0].last_point.map, "alberta.gat", 16);
-					char_dat[0].last_point.x = 116; // savepoint coordonates
-					char_dat[0].last_point.y = 57;
-				} else if ((i = search_mapserver("payon.gat")) >= 0) { // check is done without 'gat'.
-					memcpy(char_dat[0].last_point.map, "payon.gat", 16);
-					char_dat[0].last_point.x = 87; // savepoint coordonates
-					char_dat[0].last_point.y = 117;
-				} else if ((i = search_mapserver("izlude.gat")) >= 0) { // check is done without 'gat'.
-					memcpy(char_dat[0].last_point.map, "izlude.gat", 16);
-					char_dat[0].last_point.x = 94; // savepoint coordonates
-					char_dat[0].last_point.y = 103;
-				} else {
-					int j;
-					// get first online server
-					i = 0;
-					for(j = 0; j < MAX_MAP_SERVERS; j++)
-						if (server_fd[j] >= 0 && server[j].map[0][0])  {
-							i = j;
-							printf("Map-server #%d found with a map: '%s'.\n", j, server[j].map[0]);
-							break;
-						}
-					// if no map-servers are connected, we send: server closed
-					if (j == MAX_MAP_SERVERS) {
-						WFIFOW(fd,0) = 0x81;
-						WFIFOL(fd,2) = 1; // 01 = Server closed
-						WFIFOSET(fd,3);
-						RFIFOSKIP(fd,3);
-						break;
-					}
-				}
-			}
-			WFIFOW(fd, 0) =0x71;
-			WFIFOL(fd, 2) =char_dat[0].char_id;
-			memcpy(WFIFOP(fd, 6), char_dat[0].last_point.map, 16);
-			//Lan check added by Kashy
-			if (lan_ip_check(p))
-				WFIFOL(fd, 22) = inet_addr(lan_map_ip);
-			else
-				WFIFOL(fd, 22) = server[i].ip;
-			WFIFOW(fd, 26) = server[i].port;
-			WFIFOSET(fd, 28);
-
-			if (auth_fifo_pos >= AUTH_FIFO_SIZE) {
-				auth_fifo_pos = 0;
-			}
-//			printf("auth_fifo set (auth_fifo_pos:%d) - account_id:%d char_id:%d login_id1:%d\n", auth_fifo_pos, sd->account_id, char_dat[0].char_id, sd->login_id1);
-			auth_fifo[auth_fifo_pos].account_id = sd->account_id;
-			auth_fifo[auth_fifo_pos].char_id = char_dat[0].char_id;
-			auth_fifo[auth_fifo_pos].login_id1 = sd->login_id1;
-			auth_fifo[auth_fifo_pos].login_id2 = sd->login_id2;
-			auth_fifo[auth_fifo_pos].delflag = 0;
-			//auth_fifo[auth_fifo_pos].char_pos = sd->found_char[ch];
-			auth_fifo[auth_fifo_pos].char_pos = 0;
-			auth_fifo[auth_fifo_pos].sex = sd->sex;
-			auth_fifo[auth_fifo_pos].connect_until_time = sd->connect_until_time;
-			auth_fifo[auth_fifo_pos].ip = session[fd]->client_addr.sin_addr.s_addr;
-			auth_fifo_pos++;
-//			printf("0x66> end\n");
-			RFIFOSKIP(fd, 3);
-			break;
-
-		case 0x67:	// make new
-//			printf("0x67>request make new char\n");
-			if (RFIFOREST(fd) < 37)
-				return 0;
-			i = make_new_char_sql(fd, RFIFOP(fd, 2));
-			if (i < 0) {
-				WFIFOW(fd, 0) = 0x6e;
-				WFIFOB(fd, 2) = 0x00;
-				WFIFOSET(fd, 3);
-				RFIFOSKIP(fd, 37);
-				break;
-			}
-
-			WFIFOW(fd, 0) = 0x6d;
-			memset(WFIFOP(fd, 2), 0x00, 106);
-
-			mmo_char_fromsql(i, char_dat, 0);
-			i = 0;
-			WFIFOL(fd, 2) = char_dat[i].char_id;
-			WFIFOL(fd,2+4) = char_dat[i].base_exp;
-			WFIFOL(fd,2+8) = char_dat[i].zeny;
-			WFIFOL(fd,2+12) = char_dat[i].job_exp;
-			WFIFOL(fd,2+16) = char_dat[i].job_level;
-
-			WFIFOL(fd,2+28) = char_dat[i].karma;
-			WFIFOL(fd,2+32) = char_dat[i].manner;
-
-			WFIFOW(fd,2+40) = 0x30;
-			WFIFOW(fd,2+42) = (char_dat[i].hp > 0x7fff) ? 0x7fff : char_dat[i].hp;
-			WFIFOW(fd,2+44) = (char_dat[i].max_hp > 0x7fff) ? 0x7fff : char_dat[i].max_hp;
-			WFIFOW(fd,2+46) = (char_dat[i].sp > 0x7fff) ? 0x7fff : char_dat[i].sp;
-			WFIFOW(fd,2+48) = (char_dat[i].max_sp > 0x7fff) ? 0x7fff : char_dat[i].max_sp;
-			WFIFOW(fd,2+50) = DEFAULT_WALK_SPEED; // char_dat[i].speed;
-			WFIFOW(fd,2+52) = char_dat[i].class;
-			WFIFOW(fd,2+54) = char_dat[i].hair;
-
-			WFIFOW(fd,2+58) = char_dat[i].base_level;
-			WFIFOW(fd,2+60) = char_dat[i].skill_point;
-
-			WFIFOW(fd,2+64) = char_dat[i].shield;
-			WFIFOW(fd,2+66) = char_dat[i].head_top;
-			WFIFOW(fd,2+68) = char_dat[i].head_mid;
-			WFIFOW(fd,2+70) = char_dat[i].hair_color;
-
-			memcpy(WFIFOP(fd,2+74), char_dat[i].name, 24);
-
-			WFIFOB(fd,2+98) = char_dat[i].str;
-			WFIFOB(fd,2+99) = char_dat[i].agi;
-			WFIFOB(fd,2+100) = char_dat[i].vit;
-			WFIFOB(fd,2+101) = char_dat[i].int_;
-			WFIFOB(fd,2+102) = char_dat[i].dex;
-			WFIFOB(fd,2+103) = char_dat[i].luk;
-			WFIFOB(fd,2+104) = char_dat[i].char_num;
-
-			WFIFOSET(fd, 108);
-			RFIFOSKIP(fd, 37);
-			//to do
-			for(ch = 0; ch < 9; ch++) {
-				if (sd->found_char[ch] == -1) {
-					sd->found_char[ch] = char_dat[i].char_id;
-					break;
-				}
-			}
-
-		case 0x68: // delete
-			if (RFIFOREST(fd) < 46)
-				return 0;
-			printf("\033[1;31m Request Char Del:\033[0m \033[1;32m%d\033[0m(\033[1;32m%d\033[0m)\n", sd->account_id, RFIFOL(fd, 2));
-			memcpy(email, RFIFOP(fd,6), 40);
-			sprintf(tmp_sql, "SELECT `email` FROM `%s` WHERE `%s`='%d'",login_db, login_db_account_id, sd->account_id);
-			if (mysql_query(&lmysql_handle, tmp_sql)) {
-				printf("\033[1;31m DB server Error Delete Char data - %s \033[0m  \n", mysql_error(&lmysql_handle));
-			}
-			sql_res = mysql_store_result(&lmysql_handle);
-			if (sql_res) {
-				sql_row = mysql_fetch_row(sql_res);
-				if (strcmp(email,sql_row[0]) == 0) {
-					mysql_free_result(sql_res);
-				} else {
-					WFIFOW(fd, 0) = 0x70;
-					WFIFOB(fd, 2) = 0;
-					WFIFOSET(fd, 3);
-					RFIFOSKIP(fd, 46);
-					mysql_free_result(sql_res);
-					break;
-				}
-			} else {
-				WFIFOW(fd, 0) = 0x70;
-				WFIFOB(fd, 2) = 0;
-				WFIFOSET(fd, 3);
-				RFIFOSKIP(fd, 46);
-				mysql_free_result(sql_res);
-				break;
-			}
-			sprintf(tmp_sql, "SELECT `name`,`partner_id` FROM `%s` WHERE `char_id`='%d'",char_db, RFIFOL(fd,2));
-			if (mysql_query(&mysql_handle, tmp_sql)) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
-			sql_res = mysql_store_result(&mysql_handle);
-			if(sql_res)
-				sql_row = mysql_fetch_row(sql_res);
-
-			if (sql_res && sql_row[0]) {
-				//delete char from SQL
-				sprintf(tmp_sql,"DELETE FROM `%s` WHERE `char_id`='%d'",pet_db, RFIFOL(fd, 2));
-				if(mysql_query(&mysql_handle, tmp_sql)) {
-						printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-				}
-				sprintf(tmp_sql,"DELETE FROM `%s` WHERE `char_id`='%d'",inventory_db, RFIFOL(fd, 2));
-				if(mysql_query(&mysql_handle, tmp_sql)) {
-						printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-				}
-
-				sprintf(tmp_sql,"DELETE FROM `%s` WHERE `char_id`='%d'",cart_db, RFIFOL(fd, 2));
-				if(mysql_query(&mysql_handle, tmp_sql)) {
-						printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-				}
-
-				sprintf(tmp_sql,"DELETE FROM `%s` WHERE `char_id`='%d'",memo_db, RFIFOL(fd, 2));
-				if(mysql_query(&mysql_handle, tmp_sql)) {
-						printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-				}
-
-				sprintf(tmp_sql,"DELETE FROM `%s` WHERE `char_id`='%d'",skill_db, RFIFOL(fd, 2));
-				if(mysql_query(&mysql_handle, tmp_sql)) {
-						printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-				}
-
-				sprintf(tmp_sql,"DELETE FROM `%s` WHERE `char_id`='%d'",char_db, RFIFOL(fd, 2));
-				if(mysql_query(&mysql_handle, tmp_sql)) {
-						printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-				}
-
-				//Divorce [Wizputer]
-				if (sql_row[1] != 0) {
-					char buf[64];
-					sprintf(tmp_sql,"UPDATE `%s` SET `partner_id`='0' WHERE `char_id`='%d'",char_db,atoi(sql_row[1]));
-					if(mysql_query(&mysql_handle, tmp_sql)) {
-						printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-					}
-					sprintf(tmp_sql,"DELETE FROM `%s` WHERE (`nameid`='%d' OR `nameid`='%d') AND `char_id`='%d'",inventory_db,WEDDING_RING_M,WEDDING_RING_F,atoi(sql_row[1]));
-					if(mysql_query(&mysql_handle, tmp_sql)) {
-						printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-					}
-					WBUFW(buf,0) = 0x2b12;
-					WBUFL(buf,2) = atoi(sql_row[0]);
-					WBUFL(buf,6) = atoi(sql_row[1]);
-					mapif_sendall(buf,10);
-				}
-				// Also delete info from guildtables.
-				sprintf(tmp_sql,"DELETE FROM `%s` WHERE `char_id`='%d'",guild_member_db, RFIFOL(fd,2));
-				if (mysql_query(&mysql_handle, tmp_sql)) {
-					printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-				}
-
-				sprintf(tmp_sql, "SELECT `guild_id` FROM `%s` WHERE `master` = '%s'", guild_db, sql_row[0]);
-
-				if (mysql_query(&mysql_handle, tmp_sql) == 0) {
-					sql_res = mysql_store_result(&mysql_handle);
-
-					if (sql_res != NULL) {
-						if (mysql_num_rows(sql_res) != 0) {
-							sql_row = mysql_fetch_row(sql_res);
-
-							sprintf(tmp_sql,"DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_db, atoi(sql_row[0]));
-							if (mysql_query(&mysql_handle, tmp_sql)) {
-								printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-							}
-
-							sprintf(tmp_sql,"DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_member_db, atoi(sql_row[0]));
-							if (mysql_query(&mysql_handle, tmp_sql)) {
-								printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-							}
-
-							sprintf(tmp_sql,"DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_castle_db, atoi(sql_row[0]));
-							if (mysql_query(&mysql_handle, tmp_sql)) {
-								printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-							}
-
-							sprintf(tmp_sql,"DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_storage_db, atoi(sql_row[0]));
-							if (mysql_query(&mysql_handle, tmp_sql)) {
-								printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-							}
-
-							sprintf(tmp_sql,"DELETE FROM `%s` WHERE `guild_id` = '%d' OR `alliance_id` = '%d'", guild_alliance_db, atoi(sql_row[0]), atoi(sql_row[0]));
-							if (mysql_query(&mysql_handle, tmp_sql)) {
-								printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-							}
-
-							sprintf(tmp_sql,"DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_position_db, atoi(sql_row[0]));
-							if (mysql_query(&mysql_handle, tmp_sql)) {
-								printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-							}
-
-							sprintf(tmp_sql,"DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_skill_db, atoi(sql_row[0]));
-							if (mysql_query(&mysql_handle, tmp_sql)) {
-								printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-							}
-
-							sprintf(tmp_sql,"DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_expulsion_db, atoi(sql_row[0]));
-							if (mysql_query(&mysql_handle, tmp_sql)) {
-								printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-							}
-
-							mysql_free_result(sql_res);
-						}
-					} else {
-						if (mysql_errno(&mysql_handle) != 0) {
-							printf("Database server error: %s\n", mysql_error(&mysql_handle));
-						}
-					}
-				} else {
-					printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-				}
-			}
-
-			for(i = 0; i < 9; i++) {
-				printf("char comp: %d - %d (%d)\n", sd->found_char[i], RFIFOL(fd, 2), sd->account_id);
-				if (sd->found_char[i] == RFIFOL(fd, 2)) {
-					for(ch = i; ch < 9-1; ch++)
-						sd->found_char[ch] = sd->found_char[ch+1];
-					sd->found_char[8] = -1;
-					break;
-				}
-			}
-			if (i == 9) { // reject
-				WFIFOW(fd, 0) = 0x70;
-				WFIFOB(fd, 2) = 0;
-				WFIFOSET(fd, 3);
-			} else { // deleted!
-				WFIFOW(fd, 0) = 0x6f;
-				WFIFOSET(fd, 2);
-			}
-			RFIFOSKIP(fd, 46);
-			break;
-
-		case 0x2af8: // login as map-server
-			if (RFIFOREST(fd) < 60)
-				return 0;
-			WFIFOW(fd, 0) = 0x2af9;
-			for(i = 0; i < MAX_MAP_SERVERS; i++) {
-				if (server_fd[i] < 0)
-					break;
-			}
-			if (i == MAX_MAP_SERVERS || strcmp(RFIFOP(fd,2), userid) || strcmp(RFIFOP(fd,26), passwd)) {
-				WFIFOB(fd,2) = 3;
-				WFIFOSET(fd, 3);
-			} else {
-//				int len;
-				WFIFOB(fd,2) = 0;
-				WFIFOSET(fd, 3);
-				session[fd]->func_parse = parse_frommap;
-				server_fd[i] = fd;
-				if(anti_freeze_enable)
-					server_freezeflag[i] = 5; // Map anti-freeze system. Counter. 5 ok, 4...0 freezed
-				server[i].ip = RFIFOL(fd, 54);
-				server[i].port = RFIFOW(fd, 58);
-				server[i].users = 0;
-				memset(server[i].map, 0, sizeof(server[i].map));
-				realloc_fifo(fd, FIFOSIZE_SERVERLINK, FIFOSIZE_SERVERLINK);
-				char_mapif_init(fd);
-				// send gm acccounts level to map-servers
-/* removed by CLOWNISIUS due to isGM
-				len = 4;
-				WFIFOW(fd,0) = 0x2b15;
-				for(i = 0; i < GM_num; i++) {
-					WFIFOL(fd,len) = gm_account[i].account_id;
-					WFIFOB(fd,len+4) = (unsigned char)gm_account[i].level;
-					len += 5;
-				}
-				WFIFOW(fd,2) = len;
-				WFIFOSET(fd,len);*/
-			}
-			RFIFOSKIP(fd,60);
-			break;
-
-		case 0x187:	// Alive?
-			if (RFIFOREST(fd) < 6) {
-				return 0;
-			}
-			RFIFOSKIP(fd, 6);
-			break;
-
-		case 0x7530:	// Athena info get
-			WFIFOW(fd, 0) = 0x7531;
-			WFIFOB(fd, 2) = ATHENA_MAJOR_VERSION;
-			WFIFOB(fd, 3) = ATHENA_MINOR_VERSION;
-			WFIFOB(fd, 4) = ATHENA_REVISION;
-			WFIFOB(fd, 5) = ATHENA_RELEASE_FLAG;
-			WFIFOB(fd, 6) = ATHENA_OFFICIAL_FLAG;
-			WFIFOB(fd, 7) = ATHENA_SERVER_INTER | ATHENA_SERVER_CHAR;
-			WFIFOW(fd, 8) = ATHENA_MOD_VERSION;
-			WFIFOSET(fd, 10);
-			RFIFOSKIP(fd, 2);
-			return 0;
-
-		case 0x7532:	// disconnect(default also disconnect)
-		default:
-			session[fd]->eof = 1;
-			return 0;
-		}
-	}
-	RFIFOFLUSH(fd);
-
-	return 0;
-}
-
-// MAP send all
-int mapif_sendall(unsigned char *buf, unsigned int len) {
-	int i, c;
-	int fd;
-
-	c = 0;
-	for(i = 0; i < MAX_MAP_SERVERS; i++) {
-		if ((fd = server_fd[i]) >= 0) {
-			memcpy(WFIFOP(fd,0), buf, len);
-			WFIFOSET(fd,len);
-			c++;
-		}
-	}
-
-	return c;
-}
-
-int mapif_sendallwos(int sfd, unsigned char *buf, unsigned int len) {
-	int i, c;
-	int fd;
-
-	c = 0;
-	for(i=0, c=0;i<MAX_MAP_SERVERS;i++){
-		if ((fd = server_fd[i]) >= 0 && fd != sfd) {
-			memcpy(WFIFOP(fd,0), buf, len);
-			WFIFOSET(fd, len);
-			c++;
-		}
-	}
-
-	return c;
-}
-
-int mapif_send(int fd, unsigned char *buf, unsigned int len) {
-	int i;
-
-	if (fd >= 0) {
-		for(i = 0; i < MAX_MAP_SERVERS; i++) {
-			if (fd == server_fd[i]) {
-				memcpy(WFIFOP(fd,0), buf, len);
-				WFIFOSET(fd,len);
-				return 1;
-			}
-		}
-	}
-	return 0;
-}
-
-int send_users_tologin(int tid, unsigned int tick, int id, int data) {
-	int users = count_users();
-	char buf[16];
-
-	if (login_fd > 0 && session[login_fd]) {
-		// send number of user to login server
-		WFIFOW(login_fd,0) = 0x2714;
-		WFIFOL(login_fd,2) = users;
-		WFIFOSET(login_fd,6);
-	}
-	// send number of players to all map-servers
-	WBUFW(buf,0) = 0x2b00;
-	WBUFL(buf,2) = users;
-	mapif_sendall(buf, 6);
-
-	return 0;
-}
-
-int check_connect_login_server(int tid, unsigned int tick, int id, int data) {
-	if (login_fd <= 0 || session[login_fd] == NULL) {
-		printf("Attempt to connect to login-server...\n");
-		login_fd = make_connection(login_ip, login_port);
-		session[login_fd]->func_parse = parse_tologin;
-		realloc_fifo(login_fd, FIFOSIZE_SERVERLINK, FIFOSIZE_SERVERLINK);
-		WFIFOW(login_fd,0) = 0x2710;
-		memset(WFIFOP(login_fd,2), 0, 24);
-		memcpy(WFIFOP(login_fd,2), userid, strlen(userid) < 24 ? strlen(userid) : 24);
-		memset(WFIFOP(login_fd,26), 0, 24);
-		memcpy(WFIFOP(login_fd,26), passwd, strlen(passwd) < 24 ? strlen(passwd) : 24);
-		WFIFOL(login_fd,50) = 0;
-		WFIFOL(login_fd,54) = char_ip;
-		WFIFOL(login_fd,58) = char_port;
-		memset(WFIFOP(login_fd,60), 0, 20);
-		memcpy(WFIFOP(login_fd,60), server_name, strlen(server_name) < 20 ? strlen(server_name) : 20);
-		WFIFOW(login_fd,80) = 0;
-		WFIFOW(login_fd,82) = char_maintenance;
-		WFIFOW(login_fd,84) = char_new;
-		WFIFOSET(login_fd,86);
-	}
-	return 0;
-}
-
-//----------------------------------------------------------
-// Return numerical value of a switch configuration by [Yor]
-// on/off, english, fran�ais, deutsch, espa�ol
-//----------------------------------------------------------
-int config_switch(const char *str) {
-	if (strcmpi(str, "on") == 0 || strcmpi(str, "yes") == 0 || strcmpi(str, "oui") == 0 || strcmpi(str, "ja") == 0 || strcmpi(str, "si") == 0)
-		return 1;
-	if (strcmpi(str, "off") == 0 || strcmpi(str, "no") == 0 || strcmpi(str, "non") == 0 || strcmpi(str, "nein") == 0)
-		return 0;
-
-	return atoi(str);
-}
-
-// Lan Support conf reading added by Kashy
-int char_lan_config_read(const char *lancfgName){
-	char subnetmask[128];
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp;
-	struct hostent * h = NULL;
-
-	if ((fp = fopen(lancfgName, "r")) == NULL) {
-		printf("file not found: %s\n", lancfgName);
-		return 1;
-	}
-
-	printf("Start reading of Lan Support configuration file\n");
-
-	while(fgets(line, sizeof(line)-1, fp)){
-		if (line[0] == '/' && line[1] == '/')
-			continue;
-
-		if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2)
-			continue;
-
-		else if (strcmpi(w1, "lan_map_ip") == 0) {
-			h = gethostbyname(w2);
-			if (h != NULL) {
-				sprintf(lan_map_ip, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-			} else {
-				strncpy(lan_map_ip, w2, sizeof(lan_map_ip));
-				lan_map_ip[sizeof(lan_map_ip)-1] = 0;
-			}
-			printf("set Lan_map_IP : %s\n", lan_map_ip);
-		}
-
-		else if (strcmpi(w1, "subnetmask") == 0) {
-			unsigned int k0, k1, k2, k3;
-			strcpy(subnetmask, w2);
-			sscanf(subnetmask, "%d.%d.%d.%d", &k0, &k1, &k2, &k3);
-			subnetmaski[0] = k0; subnetmaski[1] = k1; subnetmaski[2] = k2; subnetmaski[3] = k3;
-			printf("set subnetmask : %s\n", w2);
-		}
-	}
-	fclose(fp);
-
-	printf("End reading of Lan Support configuration file\n");
-	return 0;
-}
-
-void do_final(void) {
-	printf("Doing final stage...\n");
-	//mmo_char_sync();
-	//inter_save();
-	do_final_itemdb();
-	//check SQL save progress.
-	//wait until save char complete
-	printf("waiting until char saving complete...\n");
-	do {
-		sleep (0);
-	}while (save_flag != 0);
-
-	sprintf(tmp_sql,"UPDATE `%s` SET `online`='0' WHERE `online`='1'", char_db);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error (insert `char`)- %s\n", mysql_error(&mysql_handle));
-	}
-
-	sprintf(tmp_sql,"DELETE FROM `ragsrvinfo");
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error (insert `char`)- %s\n", mysql_error(&mysql_handle));
-	}
-
-	if (gm_account != NULL)
-		free(gm_account);
-
-	free(char_dat);
-	free(gm_account);
-	delete_session(login_fd);
-	delete_session(char_fd);
-
-	mysql_close(&mysql_handle);
-	mysql_close(&lmysql_handle);
-
-	printf("ok! all done...\n");
-}
-
-void sql_config_read(const char *cfgName){ /* Kalaspuff, to get login_db */
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp;
-
-	printf("reading configure: %s\n", cfgName);
-
-	if ((fp = fopen(cfgName, "r")) == NULL) {
-		printf("file not found: %s\n", cfgName);
-		exit(1);
-	}
-
-	while(fgets(line, sizeof(line)-1, fp)){
-		if(line[0] == '/' && line[1] == '/')
-			continue;
-
-		if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2)
-			continue;
-
-		if(strcmpi(w1, "login_db") == 0) {
-			strcpy(login_db, w2);
-		}else if(strcmpi(w1,"char_db")==0){
-			strcpy(char_db,w2);
-		}else if(strcmpi(w1,"cart_db")==0){
-			strcpy(cart_db,w2);
-		}else if(strcmpi(w1,"inventory_db")==0){
-			strcpy(inventory_db,w2);
-		}else if(strcmpi(w1,"charlog_db")==0){
-			strcpy(charlog_db,w2);
-		}else if(strcmpi(w1,"storage_db")==0){
-			strcpy(storage_db,w2);
-		}else if(strcmpi(w1,"reg_db")==0){
-			strcpy(reg_db,w2);
-		}else if(strcmpi(w1,"skill_db")==0){
-			strcpy(skill_db,w2);
-		}else if(strcmpi(w1,"interlog_db")==0){
-			strcpy(interlog_db,w2);
-		}else if(strcmpi(w1,"memo_db")==0){
-			strcpy(memo_db,w2);
-		}else if(strcmpi(w1,"guild_db")==0){
-			strcpy(guild_db,w2);
-		}else if(strcmpi(w1,"guild_alliance_db")==0){
-			strcpy(guild_alliance_db,w2);
-		}else if(strcmpi(w1,"guild_castle_db")==0){
-			strcpy(guild_castle_db,w2);
-		}else if(strcmpi(w1,"guild_expulsion_db")==0){
-			strcpy(guild_expulsion_db,w2);
-		}else if(strcmpi(w1,"guild_member_db")==0){
-			strcpy(guild_member_db,w2);
-		}else if(strcmpi(w1,"guild_skill_db")==0){
-			strcpy(guild_skill_db,w2);
-		}else if(strcmpi(w1,"guild_position_db")==0){
-			strcpy(guild_position_db,w2);
-		}else if(strcmpi(w1,"guild_storage_db")==0){
-			strcpy(guild_storage_db,w2);
-		}else if(strcmpi(w1,"party_db")==0){
-			strcpy(party_db,w2);
-		}else if(strcmpi(w1,"pet_db")==0){
-			strcpy(pet_db,w2);
-		//Map server option to use SQL db or not
-		}else if(strcmpi(w1,"use_sql_db")==0){ // added for sql item_db read for char server [Valaris]
-			if (strcmpi(w2, "yes")) {
-				db_use_sqldbs = 1;
-			} else if (strcmpi(w2, "no")) {
-				db_use_sqldbs = 0;
-			}
-			printf("Using SQL dbs: %s\n",w2);
-		//custom columns for login database
-		}else if(strcmpi(w1,"login_db_level")==0){
-			strcpy(login_db_level,w2);
-		}else if(strcmpi(w1,"login_db_account_id")==0){
-			strcpy(login_db_account_id,w2);
-		}else if(strcmpi(w1,"lowest_gm_level")==0){
-			lowest_gm_level = atoi(w2);
-			printf("set lowest_gm_level : %s\n",w2);
-		}
-	}
-	fclose(fp);
-	printf("reading configure done.....\n");
-}
-
-int char_config_read(const char *cfgName) {
-	struct hostent *h = NULL;
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp;
-
-	if ((fp = fopen(cfgName, "r")) == NULL) {
-		printf("Configuration file not found: %s.\n", cfgName);
-		exit(1);
-	}
-
-	while(fgets(line, sizeof(line)-1, fp)) {
-		if (line[0] == '/' && line[1] == '/')
-			continue;
-
-		line[sizeof(line)-1] = '\0';
-		if (sscanf(line,"%[^:]: %[^\r\n]", w1, w2) != 2)
-			continue;
-
-		remove_control_chars(w1);
-		remove_control_chars(w2);
-		if (strcmpi(w1, "userid") == 0) {
-			memcpy(userid, w2, 24);
-		} else if (strcmpi(w1, "passwd") == 0) {
-			memcpy(passwd, w2, 24);
-		} else if (strcmpi(w1, "server_name") == 0) {
-			memcpy(server_name, w2, 16);
-			printf("%s server has been intialized\n", w2);
-		} else if (strcmpi(w1, "wisp_server_name") == 0) {
-			if (strlen(w2) >= 4) {
-				memcpy(wisp_server_name, w2, sizeof(wisp_server_name));
-				wisp_server_name[sizeof(wisp_server_name) - 1] = '\0';
-			}
-		} else if (strcmpi(w1, "login_ip") == 0) {
-			h = gethostbyname (w2);
-			if (h != NULL) {
-				printf("Login server IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				sprintf(login_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-			} else
-				memcpy(login_ip_str,w2,16);
-		} else if (strcmpi(w1, "login_port") == 0) {
-			login_port=atoi(w2);
-		} else if (strcmpi(w1, "char_ip") == 0) {
-			h = gethostbyname (w2);
-			if(h != NULL) {
-				printf("Character server IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				sprintf(char_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-			} else
-				memcpy(char_ip_str, w2, 16);
-		} else if (strcmpi(w1, "char_port") == 0) {
-			char_port = atoi(w2);
-		} else if (strcmpi(w1, "char_maintenance") == 0) {
-			char_maintenance = atoi(w2);
-		} else if (strcmpi(w1, "char_new")==0){
-			char_new = atoi(w2);
-		} else if (strcmpi(w1, "max_connect_user") == 0) {
-			max_connect_user = atoi(w2);
-			if (max_connect_user < 0)
-				max_connect_user = 0; // unlimited online players
-		} else if (strcmpi(w1, "check_ip_flag") == 0) {
-			check_ip_flag = config_switch(w2);
-		} else if (strcmpi(w1, "autosave_time") == 0) {
-			autosave_interval = atoi(w2)*1000;
-			if (autosave_interval <= 0)
-				autosave_interval = DEFAULT_AUTOSAVE_INTERVAL;
-		} else if (strcmpi(w1, "start_point") == 0) {
-			char map[32];
-			int x, y;
-			if (sscanf(w2,"%[^,],%d,%d", map, &x, &y) < 3)
-				continue;
-			if (strstr(map, ".gat") != NULL) { // Verify at least if '.gat' is in the map name
-				memcpy(start_point.map, map, 16);
-				start_point.x = x;
-				start_point.y = y;
-			}
-		} else if (strcmpi(w1, "start_zeny") == 0) {
-			start_zeny = atoi(w2);
-			if (start_zeny < 0)
-				start_zeny = 0;
-		} else if (strcmpi(w1, "start_weapon") == 0) {
-			start_zeny = atoi(w2);
-			if (start_weapon < 0)
-				start_weapon = 0;
-		} else if (strcmpi(w1, "start_armor") == 0) {
-			start_zeny = atoi(w2);
-			if (start_armor < 0)
-				start_armor = 0;
-		} else if (strcmpi(w1, "unknown_char_name") == 0) {
-			strcpy(unknown_char_name, w2);
-			unknown_char_name[24] = 0;
-		} else if (strcmpi(w1, "name_ignoring_case") == 0) {
-			name_ignoring_case = config_switch(w2);
-		} else if (strcmpi(w1, "char_name_option") == 0) {
-			char_name_option = atoi(w2);
-		} else if (strcmpi(w1, "char_name_letters") == 0) {
-			strcpy(char_name_letters, w2);
-		} else if (strcmpi(w1, "check_ip_flag") == 0) {
-			check_ip_flag = config_switch(w2);
-		// anti-freeze options [Valaris]
-		} else if(strcmpi(w1,"anti_freeze_enable")==0){
-			anti_freeze_enable = config_switch(w2);
-		} else if (strcmpi(w1, "anti_freeze_interval") == 0) {
-			ANTI_FREEZE_INTERVAL = atoi(w2);
-			if (ANTI_FREEZE_INTERVAL < 5)
-				ANTI_FREEZE_INTERVAL = 5; // minimum 5 seconds
-		} else if (strcmpi(w1, "import") == 0) {
-			char_config_read(w2);
-		}
-	}
-	fclose(fp);
-
-//Read ItemDB
-	do_init_itemdb();
-
-	return 0;
-}
-
-int do_init(int argc, char **argv){
-	int i;
-
-	for(i = 0; i < MAX_MAP_SERVERS; i++) {
-		memset(&server[i], 0, sizeof(struct mmo_map_server));
-		server_fd[i] = -1;
-	}
-
-	char_config_read((argc < 2) ? CHAR_CONF_NAME : argv[1]);
-	char_lan_config_read((argc > 1) ? argv[1] : LAN_CONF_NAME);
-	sql_config_read(SQL_CONF_NAME);
-
-	printf("charserver configuration reading done.....\n");
-
-	inter_init((argc > 2) ? argv[2] : inter_cfgName); // inter server �ʱ�ȭ
-	printf("interserver configuration reading done.....\n");
-
-	printf("start char server initializing.....\n");
-	mmo_char_sql_init();
-	printf("char server initializing done.....\n");
-
-	printf("set parser -> parse_char().....\n");
-	set_defaultparse(parse_char);
-
-	printf("set terminate function -> do_final().....\n");
-	set_termfunc(do_final);
-
-	printf("open port %d.....\n",char_port);
-	char_fd = make_listen_port(char_port);
-
-	login_ip = inet_addr(login_ip_str);
-	char_ip = inet_addr(char_ip_str);
-
-	// send ALIVE PING to login server.
-	printf("add interval tic (check_connect_login_server)....\n");
-	i = add_timer_interval(gettick() + 10, check_connect_login_server, 0, 0, 10 * 1000);
-
-	// send USER COUNT PING to login server.
-	printf("add interval tic (send_users_tologin)....\n");
-	i = add_timer_interval(gettick() + 10, send_users_tologin, 0, 0, 5 * 1000);
-
-	//no need to set sync timer on SQL version.
-	//printf("add interval tic (mmo_char_sync_timer)....\n");
-	//i = add_timer_interval(gettick() + 10, mmo_char_sync_timer, 0, 0, autosave_interval);
-
-	if(anti_freeze_enable > 0) {
-		add_timer_func_list(map_anti_freeze_system, "map_anti_freeze_system");
-		i = add_timer_interval(gettick() + 1000, map_anti_freeze_system, 0, 0, ANTI_FREEZE_INTERVAL * 1000); // checks every X seconds user specifies
-	}
-
-	read_gm_account();
-
-	printf("char server init func end (now unlimited loop start!)....\n");
-	printf("The char-server is \033[1;32mready\033[0m (Server is listening on the port %d).\n\n", char_port);
-	return 0;
-}
-
-
diff --git a/misc/src/char_sql/char.h b/misc/src/char_sql/char.h
deleted file mode 100644
index 116a301..0000000
--- a/misc/src/char_sql/char.h
+++ /dev/null
@@ -1,82 +0,0 @@
-#include "../common/core.h"
-#include "../common/socket.h"
-#include "../common/timer.h"
-#include "../common/mmo.h"
-#include "../common/version.h"
-#include "../common/db.h"
-
-#ifndef _CHAR_H_
-#define _CHAR_H_
-
-#define MAX_MAP_SERVERS 30
-
-#define LAN_CONF_NAME	"conf/lan_support.conf"
-
-#define DEFAULT_AUTOSAVE_INTERVAL 300*1000
-
-struct mmo_map_server{
-  long ip;
-  short port;
-  int users;
-  char map[MAX_MAP_PER_SERVER][16];
-};
-struct itemtmp {
-	int flag;//checked = 1 else 0
-	int id;
-	short nameid;
-	short amount;
-	unsigned short equip;
-	char identify;
-	char refine;
-	char attribute;
-	short card[4];
-	short broken;
-};
-enum {
-	TABLE_INVENTORY,
-	TABLE_CART,
-	TABLE_STORAGE,
-	TABLE_GUILD_STORAGE,
-};
-struct itemtemp{
-	struct itemtmp equip[MAX_GUILD_STORAGE],notequip[MAX_GUILD_STORAGE];
-};
-int memitemdata_to_sql(struct itemtemp mapitem, int eqcount, int noteqcount, int char_id,int tableswitch);
-int mapif_sendall(unsigned char *buf,unsigned int len);
-int mapif_sendallwos(int fd,unsigned char *buf,unsigned int len);
-int mapif_send(int fd,unsigned char *buf,unsigned int len);
-
-extern int autosave_interval;
-extern char char_db[256];
-extern char cart_db[256];
-extern char inventory_db[256];
-extern char charlog_db[256];
-extern char storage_db[256];
-extern char interlog_db[256];
-extern char reg_db[256];
-extern char skill_db[256];
-extern char memo_db[256];
-extern char guild_db[256];
-extern char guild_alliance_db[256];
-extern char guild_castle_db[256];
-extern char guild_expulsion_db[256];
-extern char guild_member_db[256];
-extern char guild_position_db[256];
-extern char guild_skill_db[256];
-extern char guild_storage_db[256];
-extern char party_db[256];
-extern char pet_db[256];
-
-int db_use_sqldbs; // added for sql item_db read for char server [Valaris]
-extern char login_db_level[32];
-extern char login_db_account_id[32];
-
-extern int lowest_gm_level;
-
-#endif
-
-#include "inter.h"
-#include "int_pet.h"
-#include "int_guild.h"
-#include "int_party.h"
-#include "int_storage.h"
diff --git a/misc/src/char_sql/int_guild.c b/misc/src/char_sql/int_guild.c
deleted file mode 100644
index 1983896..0000000
--- a/misc/src/char_sql/int_guild.c
+++ /dev/null
@@ -1,1604 +0,0 @@
-//
-// original code from athena
-// SQL conversion by hack
-//
-
-#include "char.h"
-#include "strlib.h"
-#include "int_storage.h"
-#include "inter.h"
-#include "int_guild.h"
-#include "int_storage.h"
-#include "mmo.h"
-#include "socket.h"
-
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static struct guild *guild_pt;
-static struct guild *guild_pt2;
-static struct guild_castle * guildcastle_pt;
-static int guild_newid=10000;
-
-static int guild_exp[100];
-
-int mapif_parse_GuildLeave(int fd,int guild_id,int account_id,int char_id,int flag,const char *mes);
-int mapif_guild_broken(int guild_id,int flag);
-int guild_check_empty(struct guild *g);
-int guild_calcinfo(struct guild *g);
-int mapif_guild_basicinfochanged(int guild_id,int type,const void *data,int len);
-int mapif_guild_info(int fd,struct guild *g);
-int guild_break_sub(void *key,void *data,va_list ap);
-
-
-// Save guild into sql
-int inter_guild_tosql(struct guild *g,int flag)
-{
-	// 1 `guild` (`guild_id`, `name`,`master`,`guild_lv`,`connect_member`,`max_member`,`average_lv`,`exp`,`next_exp`,`skill_point`,`castle_id`,`mes1`,`mes2`,`emblem_len`,`emblem_id`,`emblem_data`)
-	// 2 `guild_member` (`guild_id`,`account_id`,`char_id`,`hair`,`hair_color`,`gender`,`class`,`lv`,`exp`,`exp_payper`,`online`,`position`,`rsv1`,`rsv2`,`name`)
-	// 4 `guild_position` (`guild_id`,`position`,`name`,`mode`,`exp_mode`)
-	// 8 `guild_alliance` (`guild_id`,`opposition`,`alliance_id`,`name`)
-	// 16 `guild_expulsion` (`guild_id`,`name`,`mes`,`acc`,`account_id`,`rsv1`,`rsv2`,`rsv3`) 
-	// 32 `guild_skill` (`guild_id`,`id`,`lv`)
-	
-	char t_name[100],t_master[24],t_mes1[60],t_mes2[120],t_member[24],t_position[24],t_alliance[24];  // temporay storage for str convertion;
-	char t_ename[24],t_emes[40];
-	char emblem_data[4096];
-	int i=0;
-	int guild_exist=0,guild_member=0,guild_online_member=0;
-	
-	if (g->guild_id<=0) return -1;
-	
-	printf("(\033[1;35m%d\033[0m)  Request save guild - ",g->guild_id);
-	
-	jstrescapecpy(t_name, g->name);
-	
-	//printf("- Check if guild %d exists\n",g->guild_id);
-	sprintf(tmp_sql, "SELECT count(*) FROM `%s` WHERE `guild_id`='%d'",guild_db,g->guild_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (delete `guild`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-		sql_row = mysql_fetch_row(sql_res);
-		guild_exist =  atoi (sql_row[0]);
-		//printf("- Check if guild %d exists : %s\n",g->guild_id,((guild_exist==0)?"No":"Yes"));
-	}
-	mysql_free_result(sql_res) ; //resource free
-	
-	if (guild_exist >0){
-		// Check members in party
-		sprintf(tmp_sql,"SELECT count(*) FROM `%s` WHERE `guild_id`='%d'",guild_member_db, g->guild_id);
-		if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-			return -1;
-		}
-		sql_res = mysql_store_result(&mysql_handle) ;
-		if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-			sql_row = mysql_fetch_row(sql_res);
-			
-			guild_member =  atoi (sql_row[0]);
-		//	printf("- Check members in guild %d : %d \n",g->guild_id,guild_member);
-
-		}
-		mysql_free_result(sql_res) ; //resource free
-		
-		// Delete old guild from sql
-		if (flag&1||guild_member==0){
-		//	printf("- Delete guild %d from guild\n",g->guild_id);
-			sprintf(tmp_sql, "DELETE FROM `%s` WHERE `guild_id`='%d'",guild_db, g->guild_id);
-			if(mysql_query(&mysql_handle, tmp_sql) ) {
-				printf("DB server Error (delete `guild`)- %s\n", mysql_error(&mysql_handle) );
-			}
-		}
-		if (flag&2||guild_member==0){
-		//	printf("- Delete guild %d from guild_member\n",g->guild_id);
-			sprintf(tmp_sql, "DELETE FROM `%s` WHERE `guild_id`='%d'",guild_member_db, g->guild_id);
-			if(mysql_query(&mysql_handle, tmp_sql) ) {
-				printf("DB server Error (delete `guild_member`)- %s\n", mysql_error(&mysql_handle) );
-			}
-			sprintf(tmp_sql, "UPDATE `%s` SET `guild_id`='0' WHERE `guild_id`='%d'",char_db, g->guild_id);
-			if(mysql_query(&mysql_handle, tmp_sql) ) {
-				printf("DB server Error (update `char`)- %s\n", mysql_error(&mysql_handle) );
-			}
-		}
-		if (flag&32||guild_member==0){
-		//	printf("- Delete guild %d from guild_skill\n",g->guild_id);
-			sprintf(tmp_sql, "DELETE FROM `%s` WHERE `guild_id`='%d'",guild_skill_db, g->guild_id);
-			if(mysql_query(&mysql_handle, tmp_sql) ) {
-				printf("DB server Error (delete `guild_skill`)- %s\n", mysql_error(&mysql_handle) );
-			}
-		}
-		if (flag&4||guild_member==0){
-		//	printf("- Delete guild %d from guild_position\n",g->guild_id);
-			sprintf(tmp_sql, "DELETE FROM `%s` WHERE `guild_id`='%d'",guild_position_db, g->guild_id);
-			if(mysql_query(&mysql_handle, tmp_sql) ) {
-				printf("DB server Error (delete `guild_position`)- %s\n", mysql_error(&mysql_handle) );
-			}
-		}
-		if (flag&16||guild_member==0){
-		//	printf("- Delete guild %d from guild_expulsion\n",g->guild_id);
-			sprintf(tmp_sql, "DELETE FROM `%s` WHERE `guild_id`='%d'",guild_expulsion_db, g->guild_id);
-			if(mysql_query(&mysql_handle, tmp_sql) ) {
-				printf("DB server Error (delete `guild_expulsion`)- %s\n", mysql_error(&mysql_handle) );
-			}
-		}
-		if (flag&8||guild_member==0){
-		//	printf("- Delete guild %d from guild_alliance\n",g->guild_id);
-			sprintf(tmp_sql, "DELETE FROM `%s` WHERE `guild_id`='%d' OR `alliance_id`='%d'",guild_alliance_db, g->guild_id,g->guild_id);
-			if(mysql_query(&mysql_handle, tmp_sql) ) {
-				printf("DB server Error (delete `guild_alliance`)- %s\n", mysql_error(&mysql_handle) );
-			}
-		}
-		if (flag&2||guild_member==0){
-		//	printf("- Delete guild %d from char\n",g->guild_id);
-			sprintf(tmp_sql, "UPDATE `%s` SET `guild_id`='0' WHERE `guild_id`='%d'",char_db, g->guild_id);
-			if(mysql_query(&mysql_handle, tmp_sql) ) {
-				printf("DB server Error (delete `guild_alliance`)- %s\n", mysql_error(&mysql_handle) );
-			}
-		}
-		if (guild_member==0){
-		//	printf("- Delete guild %d from guild_castle\n",g->guild_id);
-			sprintf(tmp_sql, "DELETE FROM `%s` WHERE `guild_id`='%d'",guild_castle_db, g->guild_id);
-			if(mysql_query(&mysql_handle, tmp_sql) ) {
-				printf("DB server Error (delete `guild_castle`)- %s\n", mysql_error(&mysql_handle) );
-			}			
-		}
-	}
-
-	guild_online_member = 0;
-	i=0;
-	while (i<g->max_member) {
-		if (g->member[i].account_id>0) guild_online_member++;
-		i++;
-	}
-	
-	// No member in guild , no need to create it in sql
-	if (guild_member <= 0 && guild_online_member <=0) {
-		inter_guild_storage_delete(g->guild_id);
-		printf("No member in guild %d , break it! \n",g->guild_id);
-		return -2;
-	}
-	
-	// Insert new guild to sqlserver
-	if (flag&1||guild_member==0){
-		int len=0;
-		//printf("- Insert guild %d to guild\n",g->guild_id);
-		for(i=0;i<g->emblem_len;i++){
-			len+=sprintf(emblem_data+len,"%02x",(unsigned char)(g->emblem_data[i]));
-			//printf("%02x",(unsigned char)(g->emblem_data[i]));
-		}	
-                emblem_data[len] = '\0';
-		//printf("- emblem_len = %d \n",g->emblem_len);
-		sprintf(tmp_sql,"INSERT INTO `%s` "
-			"(`guild_id`, `name`,`master`,`guild_lv`,`connect_member`,`max_member`,`average_lv`,`exp`,`next_exp`,`skill_point`,`castle_id`,`mes1`,`mes2`,`emblem_len`,`emblem_id`,`emblem_data`) "
-			"VALUES ('%d', '%s', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s', '%s', '%d', '%d', '%s')",
-			guild_db, g->guild_id,t_name,jstrescapecpy(t_master,g->master),
-			g->guild_lv,g->connect_member,g->max_member,g->average_lv,g->exp,g->next_exp,g->skill_point,g->castle_id,
-			jstrescapecpy(t_mes1,g->mes1),jstrescapecpy(t_mes2,g->mes2),g->emblem_len,g->emblem_id,emblem_data);
-		//printf(" %s\n",tmp_sql);
-		if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error (insert `guild`)- %s\n", mysql_error(&mysql_handle) );
-		}
-	}
-	
-	if (flag&2||guild_member==0){
-		//printf("- Insert guild %d to guild_member\n",g->guild_id);
-		for(i=0;i<g->max_member;i++){
-			if (g->member[i].account_id>0){
-				struct guild_member *m = &g->member[i];
-				sprintf(tmp_sql,"DELETE FROM `%s` WHERE `char_id`='%d'",guild_member_db, m->char_id);
-				if(mysql_query(&mysql_handle, tmp_sql) ) {
-					printf("DB server Error (delete `guild_member`)- %s\n", mysql_error(&mysql_handle) );
-				}
-				sprintf(tmp_sql,"INSERT INTO `%s` "
-					"(`guild_id`,`account_id`,`char_id`,`hair`,`hair_color`,`gender`,`class`,`lv`,`exp`,`exp_payper`,`online`,`position`,`rsv1`,`rsv2`,`name`) "
-					"VALUES ('%d','%d','%d','%d','%d', '%d','%d','%d','%d','%d','%d','%d','%d','%d','%s')",
-					guild_member_db, g->guild_id,
-					m->account_id,m->char_id,
-					m->hair,m->hair_color,m->gender,
-					m->class,m->lv,m->exp,m->exp_payper,m->online,m->position,
-					0,0,
-					jstrescapecpy(t_member,m->name));
-				//printf(" %s\n",tmp_sql);
-				if(mysql_query(&mysql_handle, tmp_sql) ) {
-					printf("DB server Error (insert `guild_member`)- %s\n", mysql_error(&mysql_handle) );
-				}
-				sprintf(tmp_sql, "UPDATE `%s` SET `guild_id`='%d' WHERE `account_id`='%d' AND `char_id`='%d'",char_db, g->guild_id,m->account_id,m->char_id);
-				if(mysql_query(&mysql_handle, tmp_sql) ) {
-					printf("DB server Error (update `char`)- %s\n", mysql_error(&mysql_handle) );
-				}
-			}
-		}
-	}
-	
-	if (flag&4||guild_member==0){
-		//printf("- Insert guild %d to guild_position\n",g->guild_id);
-		for(i=0;i<MAX_GUILDPOSITION;i++){
-			struct guild_position *p = &g->position[i];
-			sprintf(tmp_sql,"INSERT INTO `%s` (`guild_id`,`position`,`name`,`mode`,`exp_mode`) VALUES ('%d','%d', '%s','%d','%d')",
-				guild_position_db, g->guild_id, i, jstrescapecpy(t_position,p->name),p->mode,p->exp_mode);
-			//printf(" %s\n",tmp_sql);
-			if(mysql_query(&mysql_handle, tmp_sql) ) {
-				printf("DB server Error (insert `guild_position`)- %s\n", mysql_error(&mysql_handle) );
-			}
-		}
-	}
-
-	if (flag&8||guild_member==0){
-		//printf("- Insert guild %d to guild_alliance\n",g->guild_id);
-		for(i=0;i<MAX_GUILDALLIANCE;i++){
-			struct guild_alliance *a=&g->alliance[i];
-			if(a->guild_id>0){
-				sprintf(tmp_sql,"INSERT INTO `%s` (`guild_id`,`opposition`,`alliance_id`,`name`) "
-					"VALUES ('%d','%d','%d','%s')",
-					guild_alliance_db, g->guild_id,a->opposition,a->guild_id,jstrescapecpy(t_alliance,a->name));
-				//printf(" %s\n",tmp_sql);
-				if(mysql_query(&mysql_handle, tmp_sql) ) {
-					printf("DB server Error (insert `guild_alliance`)- %s\n", mysql_error(&mysql_handle) );
-				}
-				sprintf(tmp_sql,"INSERT INTO `%s` (`guild_id`,`opposition`,`alliance_id`,`name`) "
-					"VALUES ('%d','%d','%d','%s')",
-					guild_alliance_db, a->guild_id,a->opposition,g->guild_id,t_name);
-				//printf(" %s\n",tmp_sql);
-				if(mysql_query(&mysql_handle, tmp_sql) ) {
-					printf("DB server Error (insert `guild_alliance`)- %s\n", mysql_error(&mysql_handle) );
-				}		
-			}
-		}
-	}
-
-	if (flag&16||guild_member==0){
-		//printf("- Insert guild %d to guild_expulsion\n",g->guild_id);
-		for(i=0;i<MAX_GUILDEXPLUSION;i++){
-			struct guild_explusion *e=&g->explusion[i];
-			if(e->account_id>0){
-				sprintf(tmp_sql,"INSERT INTO `%s` (`guild_id`,`name`,`mes`,`acc`,`account_id`,`rsv1`,`rsv2`,`rsv3`) "
-					"VALUES ('%d','%s','%s','%s','%d','%d','%d','%d')",
-					guild_expulsion_db, g->guild_id,
-					jstrescapecpy(t_ename,e->name),jstrescapecpy(t_emes,e->mes),e->acc,e->account_id,e->rsv1,e->rsv2,e->rsv3 );
-				//printf(" %s\n",tmp_sql);
-				if(mysql_query(&mysql_handle, tmp_sql) ) {
-					printf("DB server Error (insert `guild_expulsion`)- %s\n", mysql_error(&mysql_handle) );
-				}
-			}
-		}
-	}
-
-	if (flag&32||guild_member==0){
-		//printf("- Insert guild %d to guild_skill\n",g->guild_id);
-		for(i=0;i<MAX_GUILDSKILL;i++){
-			if (g->skill[i].id>0){
-				sprintf(tmp_sql,"INSERT INTO `%s` (`guild_id`,`id`,`lv`) VALUES ('%d','%d','%d')",
-					guild_skill_db, g->guild_id,g->skill[i].id,g->skill[i].lv);
-				//printf("%s\n",tmp_sql);
-				if(mysql_query(&mysql_handle, tmp_sql) ) {
-					printf("DB server Error (insert `guild_skill`)- %s\n", mysql_error(&mysql_handle) );
-				}
-			}
-		}
-	}
-	
-	printf("Save guild done\n");
-	return 0;
-}
-
-// Read guild from sql
-int inter_guild_fromsql(int guild_id,struct guild *g)
-{
-	int i;
-	char emblem_data[4096];
-	char *pstr;
-	
-	if (g==NULL) return 0;
-	memset(g,0,sizeof(struct guild));
-	if (guild_id==0) return 0;
-	
-//	printf("Retrieve guild information from sql ......\n");
-//	printf("- Read guild %d from sql \n",guild_id);
-
-	sprintf(tmp_sql,"SELECT `guild_id`, `name`,`master`,`guild_lv`,`connect_member`,`max_member`,`average_lv`,`exp`,`next_exp`,`skill_point`,`castle_id`,`mes1`,`mes2`,`emblem_len`,`emblem_id`,`emblem_data` "
-		"FROM `%s` WHERE `guild_id`='%d'",guild_db, guild_id);
-	//printf("  %s\n",tmp_sql);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (select `guild`)- %s\n", mysql_error(&mysql_handle) );
-		return 0;
-	}
-	
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-		sql_row = mysql_fetch_row(sql_res);
-		if (sql_row==NULL) {
-			mysql_free_result(sql_res);
-			return 0;
-		}
-		
-		g->guild_id=atoi(sql_row[0]);
-		strncpy(g->name,sql_row[1],24);
-		strncpy(g->master,sql_row[2],24);
-		g->guild_lv=atoi(sql_row[3]);
-		g->connect_member=atoi(sql_row[4]);
-		g->max_member=atoi(sql_row[5]);
-		g->average_lv=atoi(sql_row[6]);
-		g->exp=atoi(sql_row[7]);
-		g->next_exp=atoi(sql_row[8]);
-		g->skill_point=atoi(sql_row[9]);
-		g->castle_id=atoi(sql_row[10]);
-		strncpy(g->mes1,sql_row[11],60);
-		strncpy(g->mes2,sql_row[12],120);
-		g->emblem_len=atoi(sql_row[13]);
-		g->emblem_id=atoi(sql_row[14]);
-		strncpy(emblem_data,sql_row[15],4096);
-		for(i=0,pstr=emblem_data;i<g->emblem_len;i++,pstr+=2){
-			int c1=pstr[0],c2=pstr[1],x1=0,x2=0;
-			if(c1>='0' && c1<='9')x1=c1-'0';
-			if(c1>='a' && c1<='f')x1=c1-'a'+10;
-			if(c1>='A' && c1<='F')x1=c1-'A'+10;
-			if(c2>='0' && c2<='9')x2=c2-'0';
-			if(c2>='a' && c2<='f')x2=c2-'a'+10;
-			if(c2>='A' && c2<='F')x2=c2-'A'+10;
-			g->emblem_data[i]=(x1<<4)|x2;
-		}	
-	}
-	mysql_free_result(sql_res);
-
-	//printf("- Read guild_member %d from sql \n",guild_id);
-	sprintf(tmp_sql,"SELECT `guild_id`,`account_id`,`char_id`,`hair`,`hair_color`,`gender`,`class`,`lv`,`exp`,`exp_payper`,`online`,`position`,`rsv1`,`rsv2`,`name` "
-		"FROM `%s` WHERE `guild_id`='%d'  ORDER BY `position`", guild_member_db, guild_id);
-	//printf("  %s\n",tmp_sql);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (select `guild_member`)- %s\n", mysql_error(&mysql_handle) );
-		return 0;
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-		int i;
-		for(i=0;((sql_row = mysql_fetch_row(sql_res))&&i<g->max_member);i++){
-			struct guild_member *m = &g->member[i];
-			m->account_id=atoi(sql_row[1]);
-			m->char_id=atoi(sql_row[2]);
-			m->hair=atoi(sql_row[3]);
-			m->hair_color=atoi(sql_row[4]);
-			m->gender=atoi(sql_row[5]);
-			m->class=atoi(sql_row[6]);
-			m->lv=atoi(sql_row[7]);
-			m->exp=atoi(sql_row[8]);
-			m->exp_payper=atoi(sql_row[9]);
-			m->online=atoi(sql_row[10]);
-			m->position=atoi(sql_row[11]);
-			strncpy(m->name,sql_row[14],24);
-		}
-	}
-	mysql_free_result(sql_res);
-	
-	//printf("- Read guild_position %d from sql \n",guild_id);
-	sprintf(tmp_sql,"SELECT `guild_id`,`position`,`name`,`mode`,`exp_mode` FROM `%s` WHERE `guild_id`='%d'",guild_position_db, guild_id);
-	//printf("  %s\n",tmp_sql);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (select `guild_position`)- %s\n", mysql_error(&mysql_handle) );
-		return 0;
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-		int i;
-		for(i=0;((sql_row = mysql_fetch_row(sql_res))&&i<MAX_GUILDPOSITION);i++){
-			int position = atoi(sql_row[1]);	
-			struct guild_position *p = &g->position[position];
-			strncpy(p->name,sql_row[2],24);	
-			p->mode=atoi(sql_row[3]);
-			p->exp_mode=atoi(sql_row[4]);	
-		}
-	}
-	mysql_free_result(sql_res);	
-
-	//printf("- Read guild_alliance %d from sql \n",guild_id);
-	sprintf(tmp_sql,"SELECT `guild_id`,`opposition`,`alliance_id`,`name` FROM `%s` WHERE `guild_id`='%d'",guild_alliance_db, guild_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (select `guild_alliance`)- %s\n", mysql_error(&mysql_handle) );
-		return 0;
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-		int i;
-		for(i=0;((sql_row = mysql_fetch_row(sql_res))&&i<MAX_GUILDALLIANCE);i++){
-			struct guild_alliance *a = &g->alliance[i];
-			a->opposition=atoi(sql_row[1]);
-			a->guild_id=atoi(sql_row[2]);
-			strncpy(a->name,sql_row[3],24);
-		}
-	}
-	mysql_free_result(sql_res);
-	
-	//printf("- Read guild_expulsion %d from sql \n",guild_id);
-	sprintf(tmp_sql,"SELECT `guild_id`,`name`,`mes`,`acc`,`account_id`,`rsv1`,`rsv2`,`rsv3` FROM `%s` WHERE `guild_id`='%d'",guild_expulsion_db, guild_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (select `guild_expulsion`)- %s\n", mysql_error(&mysql_handle) );
-		return 0;
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-		int i;
-		for(i=0;((sql_row = mysql_fetch_row(sql_res))&&i<MAX_GUILDEXPLUSION);i++){
-			struct guild_explusion *e = &g->explusion[i];
-
-			strncpy(e->name,sql_row[1],24);
-			strncpy(e->mes,sql_row[2],40);
-			strncpy(e->acc,sql_row[3],24);
-			e->account_id=atoi(sql_row[4]);
-			e->rsv1=atoi(sql_row[5]);
-			e->rsv2=atoi(sql_row[6]);
-			e->rsv3=atoi(sql_row[7]);
-			
-		}
-	}
-	mysql_free_result(sql_res);
-	
-	//printf("- Read guild_skill %d from sql \n",guild_id);
-	sprintf(tmp_sql,"SELECT `guild_id`,`id`,`lv` FROM `%s` WHERE `guild_id`='%d' ORDER BY `id`",guild_skill_db, guild_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (select `guild_skill`)- %s\n", mysql_error(&mysql_handle) );
-		return 0;
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-		int i;
-		for(i=0;((sql_row = mysql_fetch_row(sql_res))&&i<MAX_GUILDSKILL);i++){
-			g->skill[i].id=atoi(sql_row[1]);
-			g->skill[i].lv=atoi(sql_row[2]);
-		}
-	}
-	mysql_free_result(sql_res);
-							
-//	printf("Successfully retrieve guild information from sql!\n");
-
-	return 0;
-	
-}
-
-// Save guild_castle to sql
-int inter_guildcastle_tosql(struct guild_castle *gc)
-{
-	// `guild_castle` (`castle_id`, `guild_id`, `economy`, `defense`, `triggerE`, `triggerD`, `nextTime`, `payTime`, `createTime`, `visibleC`, `visibleG0`, `visibleG1`, `visibleG2`, `visibleG3`, `visibleG4`, `visibleG5`, `visibleG6`, `visibleG7`)
-	
-	if (gc==NULL) return 0;
-	//printf("Save to guild_castle\n");
-	sprintf(tmp_sql,"DELETE FROM `%s` WHERE `castle_id`='%d'",guild_castle_db, gc->castle_id);
-	//printf(" %s\n",tmp_sql);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-		return 0;
-	}
-	
-	sprintf(tmp_sql,"INSERT INTO `%s` "
-		"(`castle_id`, `guild_id`, `economy`, `defense`, `triggerE`, `triggerD`, `nextTime`, `payTime`, `createTime`,"
-		"`visibleC`, `visibleG0`, `visibleG1`, `visibleG2`, `visibleG3`, `visibleG4`, `visibleG5`, `visibleG6`, `visibleG7`,"
-		"`Ghp0`, `Ghp1`, `Ghp2`, `Ghp3`, `Ghp4`, `Ghp5`, `Ghp6`, `Ghp7`)"
-		"VALUES ('%d','%d','%d','%d','%d','%d','%d','%d','%d','%d','%d','%d','%d','%d','%d','%d','%d','%d','%d','%d','%d','%d','%d','%d','%d','%d')", 
-		guild_castle_db, gc->castle_id, gc->guild_id,  gc->economy, gc->defense, gc->triggerE, gc->triggerD, gc->nextTime, gc->payTime, 
-		gc->createTime, gc->visibleC, gc->visibleG0, gc->visibleG1, gc->visibleG2, gc->visibleG3, gc->visibleG4, gc->visibleG5,
-		gc->visibleG6, gc->visibleG7, gc->Ghp0, gc->Ghp1, gc->Ghp2, gc->Ghp3, gc->Ghp4, gc->Ghp5, gc->Ghp6, gc->Ghp7);
-	//printf(" %s\n",tmp_sql);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-		return 0;
-	}
-
-	sprintf(tmp_sql,"UPDATE `%s` SET `castle_id`='-1' WHERE `castle_id`='%d'",guild_db, gc->castle_id);
-	//printf(" %s\n",tmp_sql);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-		return 0;
-	}
-		
-	sprintf(tmp_sql,"UPDATE `%s` SET `castle_id`='%d' WHERE `guild_id`='%d'",guild_db, gc->castle_id,gc->guild_id);
-	//printf(" %s\n",tmp_sql);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-		return 0;
-	}
-	
-	return 0;
-}
-// Read guild_castle from sql
-int inter_guildcastle_fromsql(int castle_id,struct guild_castle *gc)
-{
-	
-	if (gc==NULL) return 0;
-	//printf("Read from guild_castle\n");
-	memset(gc,0,sizeof(struct guild_castle));
-	gc->castle_id=castle_id;
-	if (castle_id==-1) return 0;
-	sprintf(tmp_sql,"SELECT `castle_id`, `guild_id`, `economy`, `defense`, `triggerE`, `triggerD`, `nextTime`, `payTime`, `createTime`, "
-		"`visibleC`, `visibleG0`, `visibleG1`, `visibleG2`, `visibleG3`, `visibleG4`, `visibleG5`, `visibleG6`, `visibleG7`,"
-		"`Ghp0`, `Ghp1`, `Ghp2`, `Ghp3`, `Ghp4`, `Ghp5`, `Ghp6`, `Ghp7`"
-        	" FROM `%s` WHERE `castle_id`='%d'",guild_castle_db, castle_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-		return 0;
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-		sql_row = mysql_fetch_row(sql_res);
-		if (sql_row==NULL){
-			mysql_free_result(sql_res);
-			return 0;
-		}
-		
-		gc->guild_id =  atoi (sql_row[1]);
-		gc->economy = atoi (sql_row[2]);
-		gc->defense = atoi (sql_row[3]);
-		gc->triggerE = atoi (sql_row[4]);
-		gc->triggerD = atoi (sql_row[5]);
-		gc->nextTime = atoi (sql_row[6]);
-		gc->payTime = atoi (sql_row[7]);
-		gc->createTime = atoi (sql_row[8]);
-		gc->visibleC = atoi (sql_row[9]);
-		gc->visibleG0 = atoi (sql_row[10]);
-		gc->visibleG1 = atoi (sql_row[11]);
-		gc->visibleG2 = atoi (sql_row[12]);
-		gc->visibleG3 = atoi (sql_row[13]);
-		gc->visibleG4 = atoi (sql_row[14]);
-		gc->visibleG5 = atoi (sql_row[15]);
-		gc->visibleG6 = atoi (sql_row[16]);
-		gc->visibleG7 = atoi (sql_row[17]);
-		gc->Ghp0 = atoi (sql_row[18]);
-		gc->Ghp1 = atoi (sql_row[19]);
-		gc->Ghp2 = atoi (sql_row[20]);
-		gc->Ghp3 = atoi (sql_row[21]);
-		gc->Ghp4 = atoi (sql_row[22]);
-		gc->Ghp5 = atoi (sql_row[23]);
-		gc->Ghp6 = atoi (sql_row[24]);
-		gc->Ghp7 = atoi (sql_row[25]);
-		
-		//printf("Read Castle %d of guild %d from sql \n",castle_id,gc->guild_id);
-
-	}
-	mysql_free_result(sql_res) ; //resource free
-	return 0;
-}
-
-// Read exp_guild.txt
-int inter_guild_readdb()
-{
-	int i;
-	FILE *fp;
-	char line[1024];
-	for (i=0;i<100;i++) guild_exp[i]=0;
-	
-	fp=fopen("db/exp_guild.txt","r");
-	if(fp==NULL){
-		printf("can't read db/exp_guild.txt\n");
-		return 1;
-	}
-	i=0;
-	while(fgets(line,256,fp) && i<100){
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		guild_exp[i]=atoi(line);
-		i++;
-	}
-	fclose(fp);
-
-	return 0;
-}
-
-
-// Initialize guild sql
-int inter_guild_sql_init()
-{
-	int i;
-	
-	printf("interserver guild memory initialize.... (%d byte)\n",sizeof(struct guild));
-	guild_pt = calloc(sizeof(struct guild), 1);
-	guild_pt2= calloc(sizeof(struct guild), 1);
-	guildcastle_pt=calloc(sizeof(struct guild_castle), 1);
-	
-	inter_guild_readdb(); // Read exp
-	
-	sprintf(tmp_sql,"UPDATE `%s` SET `online`='0'",guild_member_db);	
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (update `char`)- %s\n", mysql_error(&mysql_handle) );
-		exit(0);
-	}
-	
-	sprintf (tmp_sql , "SELECT count(*) FROM `%s`",guild_db);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-		exit(0);
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	sql_row = mysql_fetch_row(sql_res);
-	printf("total guild data -> '%s'.......\n",sql_row[0]);
-	i = atoi (sql_row[0]);
-	mysql_free_result(sql_res);
-
-	if (i > 0) {
-		//set party_newid
-		sprintf (tmp_sql , "SELECT max(`guild_id`) FROM `%s`",guild_db);
-		if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-			exit(0);
-		}
-		
-		sql_res = mysql_store_result(&mysql_handle) ;
-		sql_row = mysql_fetch_row(sql_res);
-		guild_newid = atoi(sql_row[0])+1;
-		mysql_free_result(sql_res);
-	}
-	
-	printf("set guild_newid: %d.......\n",guild_newid);
-
-	return 0;
-}
-
-
-// Get guild by its name
-struct guild* search_guildname(char *str)
-{
-	struct guild *g=guild_pt;
-	char t_name[24];
-	int guild_id=0;
-	printf("search_guildname\n");
-	sprintf (tmp_sql , "SELECT `guild_id` FROM `%s` WHERE `name`='%s'",guild_db, jstrescapecpy(t_name,str));
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-		sql_row = mysql_fetch_row(sql_res);
-		guild_id = atoi (sql_row[0]);
-	}
-	mysql_free_result(sql_res);
-	inter_guild_fromsql(guild_id,g);
-	return g;
-}
-
-// Check if guild is empty
-int guild_check_empty(struct guild *g)
-{
-	int i;
-	for(i=0;i<g->max_member;i++){
-		if(g->member[i].account_id>0){
-			return 0;
-		}
-	}
-	
-	// �N�����Ȃ��̂ʼn��U
-	mapif_guild_broken(g->guild_id,0);
-	inter_guild_storage_delete(g->guild_id);
-	inter_guild_tosql(g,255);
-	memset(g,0,sizeof(struct guild));
-	return 1;
-}
-
-int guild_nextexp(int level)
-{
-	if(level < 100 && level >0) // Change by hack
-		return guild_exp[level-1];
-
-	return 0;
-}
-
-// �M���h�X�L�������邩�m�F
-int guild_checkskill(struct guild *g,int id){ return g->skill[id-10000].lv; }
-
-// �M���h�̏��̍Čv�Z
-int guild_calcinfo(struct guild *g)
-{
-	int i,c,nextexp;
-	struct guild before=*g;
-
-	// �X�L��ID�̐ݒ�
-	for(i=0;i<5;i++)
-		g->skill[i].id=i+10000;
-
-	// �M���h���x��
-	if(g->guild_lv<=0) g->guild_lv=1;
-	nextexp = guild_nextexp(g->guild_lv);
-	if(nextexp > 0) {
-		while(g->exp >= nextexp && nextexp>0){	// Change by hack
-			g->exp-=nextexp;
-			g->guild_lv++;
-			g->skill_point++;
-			nextexp = guild_nextexp(g->guild_lv);
-		}
-	}
-	
-	// �M���h�̎��̌o���l
-	g->next_exp = guild_nextexp(g->guild_lv);
-
-	// �����o����i�M���h�g���K�p�j
-	g->max_member=16+guild_checkskill(g,10004)*2; // Updated max_members [PoW]
-
-	// ���σ��x���ƃI�����C���l��
-	g->average_lv=0;
-	g->connect_member=0;
-	for(i=c=0;i<g->max_member;i++){
-		if(g->member[i].account_id>0){
-			g->average_lv+=g->member[i].lv;
-			c++;
-			
-			if(g->member[i].online>0)
-				g->connect_member++;
-		}
-	}
-	g->average_lv/=c;
-	
-	// �S�f�[�^�𑗂�K�v�����肻��
-	if(	g->max_member!=before.max_member	||
-		g->guild_lv!=before.guild_lv		||
-		g->skill_point!=before.skill_point	){
-		mapif_guild_info(-1,g);
-		return 1;
-	}
-		
-	return 0;
-}
-
-//-------------------------------------------------------------------
-// map server�ւ̒ʐM
-
-// �M���h�쐬�”�
-int mapif_guild_created(int fd,int account_id,struct guild *g)
-{
-	WFIFOW(fd,0)=0x3830;
-	WFIFOL(fd,2)=account_id;
-	if(g!=NULL){
-		WFIFOL(fd,6)=g->guild_id;
-		printf("int_guild: created! %d %s\n",g->guild_id,g->name);
-	}else{
-		WFIFOL(fd,6)=0;
-	}
-	WFIFOSET(fd,10);
-	return 0;
-}
-// �M���h��񌩂‚��炸
-int mapif_guild_noinfo(int fd,int guild_id)
-{
-	WFIFOW(fd,0)=0x3831;
-	WFIFOW(fd,2)=8;
-	WFIFOL(fd,4)=guild_id;
-	WFIFOSET(fd,8);
-	printf("int_guild: info not found %d\n",guild_id);
-	return 0;
-}
-// �M���h���܂Ƃߑ���
-int mapif_guild_info(int fd,struct guild *g)
-{
-	unsigned char buf[16384];
-	WBUFW(buf,0)=0x3831;
-	memcpy(buf+4,g,sizeof(struct guild));
-	WBUFW(buf,2)=4+sizeof(struct guild);
-//	printf("int_guild: sizeof(guild)=%d\n",sizeof(struct guild));
-	if(fd<0)
-		mapif_sendall(buf,WBUFW(buf,2));
-	else
-		mapif_send(fd,buf,WBUFW(buf,2));
-//	printf("int_guild: info %d %s\n",p->guild_id,p->name);
-	return 0;
-}
-
-// �����o�lj��”�
-int mapif_guild_memberadded(int fd,int guild_id,int account_id,int char_id,int flag)
-{
-	WFIFOW(fd,0)=0x3832;
-	WFIFOL(fd,2)=guild_id;
-	WFIFOL(fd,6)=account_id;
-	WFIFOL(fd,10)=char_id;
-	WFIFOB(fd,14)=flag;
-	WFIFOSET(fd,15);
-	return 0;
-}
-// �E��/�Ǖ��ʒm
-int mapif_guild_leaved(int guild_id,int account_id,int char_id,int flag,
-	const char *name,const char *mes)
-{
-	unsigned char buf[128];
-	WBUFW(buf, 0)=0x3834;
-	WBUFL(buf, 2)=guild_id;
-	WBUFL(buf, 6)=account_id;
-	WBUFL(buf,10)=char_id;
-	WBUFB(buf,14)=flag;
-	memcpy(WBUFP(buf,15),mes,40);
-	memcpy(WBUFP(buf,55),name,24);
-	mapif_sendall(buf,79);
-	printf("int_guild: guild leaved %d %d %s %s\n",guild_id,account_id,name,mes);
-	return 0;
-}
-
-// �I�����C����Ԃ�Lv�X�V�ʒm
-int mapif_guild_memberinfoshort(struct guild *g,int idx)
-{
-	unsigned char buf[32];
-	WBUFW(buf, 0)=0x3835;
-	WBUFL(buf, 2)=g->guild_id;
-	WBUFL(buf, 6)=g->member[idx].account_id;
-	WBUFL(buf,10)=g->member[idx].char_id;
-	WBUFB(buf,14)=g->member[idx].online;
-	WBUFW(buf,15)=g->member[idx].lv;
-	WBUFW(buf,17)=g->member[idx].class;
-	mapif_sendall(buf,19);
-	return 0;
-}
-
-// ���U�ʒm
-int mapif_guild_broken(int guild_id,int flag)
-{
-	unsigned char buf[16];
-	WBUFW(buf,0)=0x3836;
-	WBUFL(buf,2)=guild_id;
-	WBUFB(buf,6)=flag;
-	mapif_sendall(buf,7);
-	printf("int_guild: broken %d\n",guild_id);
-	return 0;
-}
-
-// �M���h������
-int mapif_guild_message(int guild_id,int account_id,char *mes,int len)
-{
-	unsigned char buf[512];
-	WBUFW(buf,0)=0x3837;
-	WBUFW(buf,2)=len+12;
-	WBUFL(buf,4)=guild_id;
-	WBUFL(buf,8)=account_id;
-	memcpy(WBUFP(buf,12),mes,len);
-	mapif_sendall(buf,len+12);
-	return 0;
-}
-
-// �M���h��{���ύX�ʒm
-int mapif_guild_basicinfochanged(int guild_id,int type,const void *data,int len)
-{
-	unsigned char buf[2048];
-	WBUFW(buf, 0)=0x3839;
-	WBUFW(buf, 2)=len+10;
-	WBUFL(buf, 4)=guild_id;
-	WBUFW(buf, 8)=type;
-	memcpy(WBUFP(buf,10),data,len);
-	mapif_sendall(buf,len+10);
-	return 0;
-}
-// �M���h�����o���ύX�ʒm
-int mapif_guild_memberinfochanged(int guild_id,int account_id,int char_id,
-	int type,const void *data,int len)
-{
-	unsigned char buf[2048];
-	WBUFW(buf, 0)=0x383a;
-	WBUFW(buf, 2)=len+18;
-	WBUFL(buf, 4)=guild_id;
-	WBUFL(buf, 8)=account_id;
-	WBUFL(buf,12)=char_id;
-	WBUFW(buf,16)=type;
-	memcpy(WBUFP(buf,18),data,len);
-	mapif_sendall(buf,len+18);
-	return 0;
-}
-// �M���h�X�L���A�b�v�ʒm
-int mapif_guild_skillupack(int guild_id,int skill_num,int account_id)
-{
-	unsigned char buf[16];
-	WBUFW(buf, 0)=0x383c;
-	WBUFL(buf, 2)=guild_id;
-	WBUFL(buf, 6)=skill_num;
-	WBUFL(buf,10)=account_id;
-	mapif_sendall(buf,14);
-	return 0;
-}
-// �M���h����/�G�Βʒm
-int mapif_guild_alliance(int guild_id1,int guild_id2,int account_id1,int account_id2,
-	int flag,const char *name1,const char *name2)
-{
-	unsigned char buf[128];
-	WBUFW(buf, 0)=0x383d;
-	WBUFL(buf, 2)=guild_id1;
-	WBUFL(buf, 6)=guild_id2;
-	WBUFL(buf,10)=account_id1;
-	WBUFL(buf,14)=account_id2;
-	WBUFB(buf,18)=flag;
-	memcpy(WBUFP(buf,19),name1,24);
-	memcpy(WBUFP(buf,43),name2,24);
-	mapif_sendall(buf,67);
-	return 0;
-}
-
-// �M���h��E�ύX�ʒm
-int mapif_guild_position(struct guild *g,int idx)
-{
-	unsigned char buf[128];
-	WBUFW(buf,0)=0x383b;
-	WBUFW(buf,2)=sizeof(struct guild_position)+12;
-	WBUFL(buf,4)=g->guild_id;
-	WBUFL(buf,8)=idx;
-	memcpy(WBUFP(buf,12),&g->position[idx],sizeof(struct guild_position));
-	mapif_sendall(buf,WBUFW(buf,2));
-	return 0;
-}
-
-// �M���h���m�ύX�ʒm
-int mapif_guild_notice(struct guild *g)
-{
-	unsigned char buf[256];
-	WBUFW(buf,0)=0x383e;
-	WBUFL(buf,2)=g->guild_id;
-	memcpy(WBUFP(buf,6),g->mes1,60);
-	memcpy(WBUFP(buf,66),g->mes2,120);
-	mapif_sendall(buf,186);
-	return 0;
-}
-// �M���h�G���u�����ύX�ʒm
-int mapif_guild_emblem(struct guild *g)
-{
-	unsigned char buf[2048];
-	WBUFW(buf,0)=0x383f;
-	WBUFW(buf,2)=g->emblem_len+12;
-	WBUFL(buf,4)=g->guild_id;
-	WBUFL(buf,8)=g->emblem_id;
-	memcpy(WBUFP(buf,12),g->emblem_data,g->emblem_len);
-	mapif_sendall(buf,WBUFW(buf,2));
-	return 0;
-}
-
-int mapif_guild_castle_dataload(int castle_id,int index,int value)      // <Agit>
-{
-	unsigned char buf[16];
-	WBUFW(buf, 0)=0x3840;
-	WBUFW(buf, 2)=castle_id;
-	WBUFB(buf, 4)=index;
-	WBUFL(buf, 5)=value;
-	mapif_sendall(buf,9);
-	return 0;
-}
-
-int mapif_guild_castle_datasave(int castle_id,int index,int value)      // <Agit>
-{
-	unsigned char buf[16];
-	WBUFW(buf, 0)=0x3841;
-	WBUFW(buf, 2)=castle_id;
-	WBUFB(buf, 4)=index;
-	WBUFL(buf, 5)=value;
-	mapif_sendall(buf,9);
-	return 0;
-}
-
-int mapif_guild_castle_alldataload(int fd) {
-	struct guild_castle* gc = guildcastle_pt;
-	int i, len = 4;
-
-	WFIFOW(fd,0) = 0x3842;
-	sprintf(tmp_sql, "SELECT * FROM `%s` ORDER BY `castle_id`", guild_castle_db);
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-	}
-	sql_res = mysql_store_result(&mysql_handle);
-	if (sql_res != NULL && mysql_num_rows(sql_res) > 0) {
-		for(i = 0; ((sql_row = mysql_fetch_row(sql_res)) && i < MAX_GUILDCASTLE); i++) {
-			memset(gc, 0, sizeof(struct guild_castle));
-			gc->castle_id = atoi(sql_row[0]);
-			gc->guild_id =  atoi(sql_row[1]);
-			gc->economy = atoi(sql_row[2]);
-			gc->defense = atoi(sql_row[3]);
-			gc->triggerE = atoi(sql_row[4]);
-			gc->triggerD = atoi(sql_row[5]);
-			gc->nextTime = atoi(sql_row[6]);
-			gc->payTime = atoi(sql_row[7]);
-			gc->createTime = atoi(sql_row[8]);
-			gc->visibleC = atoi(sql_row[9]);
-			gc->visibleG0 = atoi(sql_row[10]);
-			gc->visibleG1 = atoi(sql_row[11]);
-			gc->visibleG2 = atoi(sql_row[12]);
-			gc->visibleG3 = atoi(sql_row[13]);
-			gc->visibleG4 = atoi(sql_row[14]);
-			gc->visibleG5 = atoi(sql_row[15]);
-			gc->visibleG6 = atoi(sql_row[16]);
-			gc->visibleG7 = atoi(sql_row[17]);
-			gc->Ghp0 = atoi(sql_row[18]);
-			gc->Ghp1 = atoi(sql_row[19]);
-			gc->Ghp2 = atoi(sql_row[20]);
-			gc->Ghp3 = atoi(sql_row[21]);
-			gc->Ghp4 = atoi(sql_row[22]);
-			gc->Ghp5 = atoi(sql_row[23]);
-			gc->Ghp6 = atoi(sql_row[24]);
-			gc->Ghp7 = atoi(sql_row[25]);
-			memcpy(WFIFOP(fd,len), gc, sizeof(struct guild_castle));
-			len += sizeof(struct guild_castle);
-		}
-	}
-	mysql_free_result(sql_res);
-	WFIFOW(fd,2) = len;
-	WFIFOSET(fd,len);
-
-	return 0;
-}
-
-
-//-------------------------------------------------------------------
-// map server����̒ʐM
-
-
-// �M���h�쐬�v��
-int mapif_parse_CreateGuild(int fd,int account_id,char *name,struct guild_member *master)
-{
-	struct guild *g;
-	int i;
-	
-	printf("CreateGuild\n");
-	g=search_guildname(name);
-	if(g!=NULL&&g->guild_id>0){
-		printf("int_guild: same name guild exists [%s]\n",name);
-		mapif_guild_created(fd,account_id,NULL);
-		return 0;
-	}
-	g=guild_pt;
-	memset(g,0,sizeof(struct guild));
-	g->guild_id=guild_newid++;
-	memcpy(g->name,name,24);
-	memcpy(g->master,master->name,24);
-	memcpy(&g->member[0],master,sizeof(struct guild_member));
-	
-	g->position[0].mode=0x11;
-	strcpy(g->position[                  0].name,"GuildMaster");
-	strcpy(g->position[MAX_GUILDPOSITION-1].name,"Newbie");
-	for(i=1;i<MAX_GUILDPOSITION-1;i++)
-		sprintf(g->position[i].name,"Position %d",i+1);
-	
-	// Initialize guild property
-	g->max_member=16;
-	g->average_lv=master->lv;
-	g->castle_id=-1;
-	for(i=0;i<5;i++)
-		g->skill[i].id=i+10000;
-	
-	// Save to sql
-	printf("Create initialize OK!\n");
-	i=inter_guild_tosql(g,255);
-	
-	if (i<0) {
-		mapif_guild_created(fd,account_id,NULL);
-		return 0;
-	}
-	
-	// Report to client
-	mapif_guild_created(fd,account_id,g);
-	mapif_guild_info(fd,g);
-	
-	inter_log("guild %s (id=%d) created by master %s (id=%d)" RETCODE,
-		name, g->guild_id, master->name, master->account_id );
-	
-	
-	return 0;
-}
-// Return guild info to client
-int mapif_parse_GuildInfo(int fd,int guild_id)
-{
-	struct guild *g;
-	g=guild_pt;
-	inter_guild_fromsql(guild_id,g);
-	if(g!=NULL&&g->guild_id>0){
-		guild_calcinfo(g);
-		mapif_guild_info(fd,g);
-		//inter_guild_tosql(g,1); // Change guild
-	}else
-		mapif_guild_noinfo(fd,guild_id);
-	return 0;
-}
-// Add member to guild
-int mapif_parse_GuildAddMember(int fd,int guild_id,struct guild_member *m)
-{
-	struct guild *g;
-	int i;
-	g=guild_pt;
-	inter_guild_fromsql(guild_id,g);
-	
-	if(g==NULL||g->guild_id<=0){
-		mapif_guild_memberadded(fd,guild_id,m->account_id,m->char_id,1);
-		return 0;
-	}
-	
-	for(i=0;i<g->max_member;i++){
-		if(g->member[i].account_id==0){
-			
-			memcpy(&g->member[i],m,sizeof(struct guild_member));
-			mapif_guild_memberadded(fd,guild_id,m->account_id,m->char_id,0);
-			guild_calcinfo(g);
-			mapif_guild_info(-1,g);
-			inter_guild_tosql(g,3); // Change guild & guild_member
-			return 0;
-		}
-	}
-	mapif_guild_memberadded(fd,guild_id,m->account_id,m->char_id,1);
-	//inter_guild_tosql(g,3); // Change guild & guild_member
-	return 0;
-}
-// Delete member from guild
-int mapif_parse_GuildLeave(int fd,int guild_id,int account_id,int char_id,int flag,const char *mes)
-{
-	struct guild *g=NULL;
-	g=guild_pt;
-	inter_guild_fromsql(guild_id,g);
-	
-	if(g!=NULL&&g->guild_id>0){
-		int i;
-		for(i=0;i<g->max_member;i++){
-			if( g->member[i].account_id==account_id &&
-				g->member[i].char_id==char_id){
-				printf("%d %d\n",i, (int)(&g->member[i]));
-				printf("%d %s\n",i, g->member[i].name);
-				
-				if(flag){	// �Ǖ��̏ꍇ�Ǖ����X�g�ɓ����
-					int j;
-					for(j=0;j<MAX_GUILDEXPLUSION;j++){
-						if(g->explusion[j].account_id==0)
-							break;
-					}
-					if(j==MAX_GUILDEXPLUSION){	// ��t�Ȃ̂ŌÂ��̂�����
-						for(j=0;j<MAX_GUILDEXPLUSION-1;j++)
-							g->explusion[j]=g->explusion[j+1];
-						j=MAX_GUILDEXPLUSION-1;
-					}
-					g->explusion[j].account_id=account_id;
-					memcpy(g->explusion[j].acc,"dummy",24);
-					memcpy(g->explusion[j].name,g->member[i].name,24);
-					memcpy(g->explusion[j].mes,mes,40);
-				}
-				
-				mapif_guild_leaved(guild_id,account_id,char_id,flag,g->member[i].name,mes);
-				printf("%d %d\n",i, (int)(&g->member[i]));
-				printf("%d %s\n",i, (&g->member[i])->name);
-				memset(&g->member[i],0,sizeof(struct guild_member));
-				
-				if( guild_check_empty(g)==0 )
-					mapif_guild_info(-1,g);// �܂��l������̂Ńf�[�^���M
-				/*
-				else
-					inter_guild_save();	// ���U�����̂ňꉞ�Z�[�u
-				return 0;*/
-			}
-		}
-		guild_calcinfo(g);
-		inter_guild_tosql(g,19); // Change guild & guild_member & guild_expulsion
-	}else{
-		sprintf(tmp_sql, "UPDATE `%s` SET `guild_id`='0' WHERE `account_id`='%d' AND `char_id`='%d'",char_db, account_id,char_id);
-		if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error (update `char`)- %s\n", mysql_error(&mysql_handle) );
-		}
-		/* mapif_guild_leaved(guild_id,account_id,char_id,flag,g->member[i].name,mes);	*/
-	}
-	
-	
-	return 0;
-}
-// Change member info
-int mapif_parse_GuildChangeMemberInfoShort(int fd,int guild_id,
-	int account_id,int char_id,int online,int lv,int class)
-{
-	// Could speed up by manipulating only guild_member
-	struct guild *g;
-	int i,alv,c;
-	g=guild_pt;
-	inter_guild_fromsql(guild_id,g);
-	
-	if(g==NULL||g->guild_id<=0){
-		return 0;
-	}
-	
-	g->connect_member=0;
-	
-	for(i=0,alv=0,c=0;i<g->max_member;i++){
-		if(	g->member[i].account_id==account_id &&
-			g->member[i].char_id==char_id){
-			
-			g->member[i].online=online;
-			g->member[i].lv=lv;
-			g->member[i].class=class;
-			mapif_guild_memberinfoshort(g,i);
-		}
-		if( g->member[i].account_id>0 ){
-			alv+=g->member[i].lv;
-			c++;
-		}
-		if( g->member[i].online )
-			g->connect_member++;
-	}
-	// ���σ��x��
-	g->average_lv=alv/c;
-	
-	inter_guild_tosql(g,3); // Change guild & guild_member
-	
-	return 0;
-}
-
-// BreakGuild
-int mapif_parse_BreakGuild(int fd,int guild_id)
-{
-	struct guild *g;
-	g=guild_pt;
-	inter_guild_fromsql(guild_id,g);
-	if(g==NULL){
-		return 0;
-	}			
-	
-	// Delete guild from sql
-	//printf("- Delete guild %d from guild\n",guild_id);
-	sprintf(tmp_sql, "DELETE FROM `%s` WHERE `guild_id`='%d'",guild_db, guild_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (delete `guild`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	//printf("- Delete guild %d from guild_member\n",guild_id);
-	sprintf(tmp_sql, "DELETE FROM `%s` WHERE `guild_id`='%d'",guild_member_db, guild_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (delete `guild_member`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	//printf("- Delete guild %d from guild_skill\n",guild_id);
-	sprintf(tmp_sql, "DELETE FROM `%s` WHERE `guild_id`='%d'",guild_skill_db, guild_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (delete `guild_skill`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	//printf("- Delete guild %d from guild_position\n",guild_id);
-	sprintf(tmp_sql, "DELETE FROM `%s` WHERE `guild_id`='%d'",guild_position_db, guild_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (delete `guild_position`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	//printf("- Delete guild %d from guild_expulsion\n",guild_id);
-	sprintf(tmp_sql, "DELETE FROM `%s` WHERE `guild_id`='%d'",guild_expulsion_db, guild_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (delete `guild_expulsion`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	//printf("- Delete guild %d from guild_alliance\n",guild_id);
-	sprintf(tmp_sql, "DELETE FROM `%s` WHERE `guild_id`='%d' OR `alliance_id`='%d'",guild_alliance_db, guild_id,guild_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (delete `guild_position`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	
-	//printf("- Delete guild %d from guild_castle\n",guild_id);
-	sprintf(tmp_sql, "DELETE FROM `%s` WHERE `guild_id`='%d'",guild_castle_db, guild_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (delete `guild_position`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	
-	//printf("- Update guild %d of char\n",guild_id);
-	sprintf(tmp_sql, "UPDATE `%s` SET `guild_id`='0' WHERE `guild_id`='%d'",char_db, guild_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (delete `guild_position`)- %s\n", mysql_error(&mysql_handle) );
-	}
-		
-	inter_guild_storage_delete(guild_id);
-	mapif_guild_broken(guild_id,0);
-	
-	inter_log("guild %s (id=%d) broken" RETCODE,g->name,guild_id);
-	
-	return 0;
-}
-
-// �M���h���b�Z�[�W���M
-int mapif_parse_GuildMessage(int fd,int guild_id,int account_id,char *mes,int len)
-{
-	return mapif_guild_message(guild_id,account_id,mes,len);
-}
-// �M���h��{�f�[�^�ύX�v��
-int mapif_parse_GuildBasicInfoChange(int fd,int guild_id,
-	int type,const char *data,int len)
-{
-	struct guild *g;
-//	int dd=*((int *)data);
-	short dw=*((short *)data);
-	g=guild_pt;
-	inter_guild_fromsql(guild_id,g);
-	
-	if(g==NULL||g->guild_id<=0){
-		return 0;
-	}
-	switch(type){
-	case GBI_GUILDLV: {
-		printf("GBI_GUILDLV\n");
-			if(dw>0 && g->guild_lv+dw<=50){
-				g->guild_lv+=dw;
-				g->skill_point+=dw;
-			}else if(dw<0 && g->guild_lv+dw>=1)
-				g->guild_lv+=dw;
-			mapif_guild_info(-1,g);
-			inter_guild_tosql(g,1);
-		} return 0;
-	default:
-		printf("int_guild: GuildBasicInfoChange: Unknown type %d\n",type);
-		break;
-	}
-	mapif_guild_basicinfochanged(guild_id,type,data,len);
-	//inter_guild_tosql(g,1); // Change guild
-	return 0;
-}
-
-// �M���h�����o�f�[�^�ύX�v��
-int mapif_parse_GuildMemberInfoChange(int fd,int guild_id,int account_id,int char_id,
-	int type,const char *data,int len)
-{
-	// Could make some improvement in speed, because only change guild_member
-	int i;
-	struct guild *g;
-	g=guild_pt;
-	inter_guild_fromsql(guild_id,g);
-	//printf("GuildMemberInfoChange %s \n",(type==GMI_EXP)?"GMI_EXP":"OTHER");
-	
-	if(g==NULL){
-		return 0;
-	}
-	for(i=0;i<g->max_member;i++)
-		if(	g->member[i].account_id==account_id &&
-			g->member[i].char_id==char_id )
-				break;
-	if(i==g->max_member){
-		printf("int_guild: GuildMemberChange: Not found %d,%d in %d[%s]\n",
-			account_id,char_id,guild_id,g->name);
-		return 0;
-	}
-	switch(type){
-	case GMI_POSITION:	// ��E
-		g->member[i].position=*((int *)data);
-		break;
-	case GMI_EXP:	{	// EXP
-			int exp,oldexp=g->member[i].exp;
-			exp=g->member[i].exp=*((unsigned int *)data);
-			g->exp+=(exp-oldexp);
-			guild_calcinfo(g);	// Lv�A�b�v���f
-			mapif_guild_basicinfochanged(guild_id,GBI_EXP,&g->exp,4);
-		}break;
-	default:
-		printf("int_guild: GuildMemberInfoChange: Unknown type %d\n",type);
-		break;
-	}
-	mapif_guild_memberinfochanged(guild_id,account_id,char_id,type,data,len);
-	inter_guild_tosql(g,3); // Change guild & guild_member
-	return 0;
-}
-
-// �M���h��E���ύX�v��
-int mapif_parse_GuildPosition(int fd,int guild_id,int idx,struct guild_position *p)
-{
-	// Could make some improvement in speed, because only change guild_position
-	struct guild *g;
-	g=guild_pt;
-	inter_guild_fromsql(guild_id,g);	
-
-	if(g==NULL || idx<0 || idx>=MAX_GUILDPOSITION){
-		return 0;
-	}
-	memcpy(&g->position[idx],p,sizeof(struct guild_position));
-	mapif_guild_position(g,idx);
-	printf("int_guild: position changed %d\n",idx);
-	inter_guild_tosql(g,4); // Change guild_position
-	return 0;
-}
-// �M���h�X�L���A�b�v�v��
-int mapif_parse_GuildSkillUp(int fd,int guild_id,int skill_num,int account_id)
-{
-	// Could make some improvement in speed, because only change guild_position
-	struct guild *g;
-	g=guild_pt;
-	inter_guild_fromsql(guild_id,g);
-	int idx=skill_num-10000;
-	if(g==NULL || skill_num<10000)
-		return 0;
-	//printf("GuildSkillUp\n");
-	
-	if(	g->skill_point>0 && g->skill[idx].id>0 &&
-		g->skill[idx].lv<10 ){
-		g->skill[idx].lv++;
-		g->skill_point--;
-		if(guild_calcinfo(g)==0)
-			mapif_guild_info(-1,g);
-		mapif_guild_skillupack(guild_id,skill_num,account_id);
-		printf("int_guild: skill %d up\n",skill_num);
-		inter_guild_tosql(g,33); // Change guild & guild_skill
-	}
-
-	return 0;
-}
-// �M���h�����v��
-int mapif_parse_GuildAlliance(int fd,int guild_id1,int guild_id2,
-	int account_id1,int account_id2,int flag)
-{
-	// Could speed up
-	struct guild *g[2];
-	int j,i;
-	g[0]=guild_pt;
-	g[1]=guild_pt2;
-	inter_guild_fromsql(guild_id1,g[0]);
-	inter_guild_fromsql(guild_id2,g[1]);
-	
-	if(g[0]==NULL || g[1]==NULL || g[0]->guild_id ==0 || g[1]->guild_id==0)
-		return 0;
-		
-	if(!(flag&0x8)){
-		for(i=0;i<2-(flag&1);i++){
-			for(j=0;j<MAX_GUILDALLIANCE;j++)
-				if(g[i]->alliance[j].guild_id==0){
-					g[i]->alliance[j].guild_id=g[1-i]->guild_id;
-					memcpy(g[i]->alliance[j].name,g[1-i]->name,24);
-					g[i]->alliance[j].opposition=flag&1;
-					break;
-				}
-		}
-	}else{	// �֌W����
-		for(i=0;i<2-(flag&1);i++){
-			for(j=0;j<MAX_GUILDALLIANCE;j++)
-				if(	g[i]->alliance[j].guild_id==g[1-i]->guild_id &&
-					g[i]->alliance[j].opposition==(flag&1)){
-					g[i]->alliance[j].guild_id=0;
-					break;
-				}
-		}
-	}
-	mapif_guild_alliance(guild_id1,guild_id2,account_id1,account_id2,flag,
-		g[0]->name,g[1]->name);
-	inter_guild_tosql(g[0],8); // Change guild_alliance
-	inter_guild_tosql(g[1],8); // Change guild_alliance
-	return 0;
-}
-// �M���h���m�ύX�v��
-int mapif_parse_GuildNotice(int fd,int guild_id,const char *mes1,const char *mes2)
-{
-	struct guild *g;
-	g=guild_pt;
-	inter_guild_fromsql(guild_id,g);
-	
-	if(g==NULL||g->guild_id<=0)
-		return 0;
-	memcpy(g->mes1,mes1,60);
-	memcpy(g->mes2,mes2,120);
-	inter_guild_tosql(g,1); // Change mes of guild
-	return mapif_guild_notice(g);
-}
-// �M���h�G���u�����ύX�v��
-int mapif_parse_GuildEmblem(int fd,int len,int guild_id,int dummy,const char *data)
-{
-	struct guild *g;
-	g=guild_pt;
-	inter_guild_fromsql(guild_id,g);
-	
-	if(g==NULL||g->guild_id<=0)
-		return 0;
-	memcpy(g->emblem_data,data,len);
-	g->emblem_len=len;
-	g->emblem_id++;
-	inter_guild_tosql(g,1); // Change guild
-	return mapif_guild_emblem(g);
-}
-
-int mapif_parse_GuildCastleDataLoad(int fd,int castle_id,int index)     // <Agit>
-{
-	struct guild_castle *gc=guildcastle_pt;
-	inter_guildcastle_fromsql(castle_id, gc);
-	if(gc==NULL||gc->castle_id==-1){
-		return mapif_guild_castle_dataload(castle_id,0,0);
-	}
-	switch(index){
-	case 1: return mapif_guild_castle_dataload(gc->castle_id,index,gc->guild_id); break;
-	case 2: return mapif_guild_castle_dataload(gc->castle_id,index,gc->economy); break;
-	case 3: return mapif_guild_castle_dataload(gc->castle_id,index,gc->defense); break;
-	case 4: return mapif_guild_castle_dataload(gc->castle_id,index,gc->triggerE); break;
-	case 5: return mapif_guild_castle_dataload(gc->castle_id,index,gc->triggerD); break;
-	case 6: return mapif_guild_castle_dataload(gc->castle_id,index,gc->nextTime); break;
-	case 7: return mapif_guild_castle_dataload(gc->castle_id,index,gc->payTime); break;
-	case 8: return mapif_guild_castle_dataload(gc->castle_id,index,gc->createTime); break;
-	case 9: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleC); break;
-	case 10: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleG0); break;
-	case 11: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleG1); break;
-	case 12: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleG2); break;
-	case 13: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleG3); break;
-	case 14: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleG4); break;
-	case 15: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleG5); break;
-	case 16: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleG6); break;
-	case 17: return mapif_guild_castle_dataload(gc->castle_id,index,gc->visibleG7); break;
-	case 18: return mapif_guild_castle_dataload(gc->castle_id,index,gc->Ghp0); break;	// guardian HP [Valaris]
-	case 19: return mapif_guild_castle_dataload(gc->castle_id,index,gc->Ghp1); break;
-	case 20: return mapif_guild_castle_dataload(gc->castle_id,index,gc->Ghp2); break;
-	case 21: return mapif_guild_castle_dataload(gc->castle_id,index,gc->Ghp3); break;
-	case 22: return mapif_guild_castle_dataload(gc->castle_id,index,gc->Ghp4); break;
-	case 23: return mapif_guild_castle_dataload(gc->castle_id,index,gc->Ghp5); break;
-	case 24: return mapif_guild_castle_dataload(gc->castle_id,index,gc->Ghp6); break;
-	case 25: return mapif_guild_castle_dataload(gc->castle_id,index,gc->Ghp7); break;	// end additions [Valaris]
-	default:
-		printf("mapif_parse_GuildCastleDataLoad ERROR!! (Not found index=%d)\n", index);
-		return 0;
-	}
-}
-
-int mapif_parse_GuildCastleDataSave(int fd,int castle_id,int index,int value)   // <Agit>
-{
-	struct guild_castle *gc=guildcastle_pt;
-	inter_guildcastle_fromsql(castle_id, gc);
-	if(gc==NULL||gc->castle_id==-1){
-		return mapif_guild_castle_datasave(castle_id,index,value);
-	}
-	switch(index){
-	case 1:
-		if( gc->guild_id!=value ){
-			int gid=(value)?value:gc->guild_id;
-			struct guild *g=guild_pt;
-			inter_guild_fromsql(gid, g);
-			inter_log("guild %s (id=%d) %s castle id=%d" RETCODE,
-				(g)?g->name:"??" ,gid, (value)?"occupy":"abandon", index);
-		}
-		gc->guild_id = value;
-		break;
-	case 2: gc->economy = value; break;
-	case 3: gc->defense = value; break;
-	case 4: gc->triggerE = value; break;
-	case 5: gc->triggerD = value; break;
-	case 6: gc->nextTime = value; break;
-	case 7: gc->payTime = value; break;
-	case 8: gc->createTime = value; break;
-	case 9: gc->visibleC = value; break;
-	case 10: gc->visibleG0 = value; break;
-	case 11: gc->visibleG1 = value; break;
-	case 12: gc->visibleG2 = value; break;
-	case 13: gc->visibleG3 = value; break;
-	case 14: gc->visibleG4 = value; break;
-	case 15: gc->visibleG5 = value; break;
-	case 16: gc->visibleG6 = value; break;
-	case 17: gc->visibleG7 = value; break;
-	case 18: gc->Ghp0 = value; break;	// guardian HP [Valaris]
-	case 19: gc->Ghp1 = value; break;
-	case 20: gc->Ghp2 = value; break;
-	case 21: gc->Ghp3 = value; break;
-	case 22: gc->Ghp4 = value; break;
-	case 23: gc->Ghp5 = value; break;
-	case 24: gc->Ghp6 = value; break;
-	case 25: gc->Ghp7 = value; break;	// end additions [Valaris]
-	default:
-		printf("mapif_parse_GuildCastleDataSave ERROR!! (Not found index=%d)\n", index);
-		return 0;
-	}
-	inter_guildcastle_tosql(gc);
-	return mapif_guild_castle_datasave(gc->castle_id,index,value);
-}
-
-// �M���h�`�F�b�N�v��
-int mapif_parse_GuildCheck(int fd,int guild_id,int account_id,int char_id)
-{
-	// What does this mean? Check if belong to another guild?
-	return 0;
-}
-
-// map server ����̒ʐM
-// �E�P�p�P�b�g�̂݉�͂��邱��
-// �E�p�P�b�g���f�[�^��inter.c�ɃZ�b�g���Ă�������
-// �E�p�P�b�g���`�F�b�N��ARFIFOSKIP�͌Ăяo�����ōs����̂ōs���Ă͂Ȃ�Ȃ�
-// �E�G���[�Ȃ�0(false)�A�����łȂ��Ȃ�1(true)���������Ȃ���΂Ȃ�Ȃ�
-int inter_guild_parse_frommap(int fd)
-{
-	switch(RFIFOW(fd,0)){
-	case 0x3030: mapif_parse_CreateGuild(fd,RFIFOL(fd,4),RFIFOP(fd,8),(struct guild_member *)RFIFOP(fd,32)); break;
-	case 0x3031: mapif_parse_GuildInfo(fd,RFIFOL(fd,2)); break;
-	case 0x3032: mapif_parse_GuildAddMember(fd,RFIFOL(fd,4),(struct guild_member *)RFIFOP(fd,8)); break;
-	case 0x3034: mapif_parse_GuildLeave(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),RFIFOP(fd,15)); break;
-	case 0x3035: mapif_parse_GuildChangeMemberInfoShort(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),RFIFOW(fd,15),RFIFOW(fd,17)); break;
-	case 0x3036: mapif_parse_BreakGuild(fd,RFIFOL(fd,2)); break;
-	case 0x3037: mapif_parse_GuildMessage(fd,RFIFOL(fd,4),RFIFOL(fd,8),RFIFOP(fd,12),RFIFOW(fd,2)-12); break;
-	case 0x3038: mapif_parse_GuildCheck(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10)); break;
-	case 0x3039: mapif_parse_GuildBasicInfoChange(fd,RFIFOL(fd,4),RFIFOW(fd,8),RFIFOP(fd,10),RFIFOW(fd,2)-10); break;
-	case 0x303A: mapif_parse_GuildMemberInfoChange(fd,RFIFOL(fd,4),RFIFOL(fd,8),RFIFOL(fd,12),RFIFOW(fd,16),RFIFOP(fd,18),RFIFOW(fd,2)-18); break;
-	case 0x303B: mapif_parse_GuildPosition(fd,RFIFOL(fd,4),RFIFOL(fd,8),(struct guild_position *)RFIFOP(fd,12)); break;
-	case 0x303C: mapif_parse_GuildSkillUp(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10)); break;
-	case 0x303D: mapif_parse_GuildAlliance(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOL(fd,14),RFIFOB(fd,18)); break;
-	case 0x303E: mapif_parse_GuildNotice(fd,RFIFOL(fd,2),RFIFOP(fd,6),RFIFOP(fd,66)); break;
-	case 0x303F: mapif_parse_GuildEmblem(fd,RFIFOW(fd,2)-12,RFIFOL(fd,4),RFIFOL(fd,8),RFIFOP(fd,12)); break;
-	case 0x3040: mapif_parse_GuildCastleDataLoad(fd,RFIFOW(fd,2),RFIFOB(fd,4)); break;
-	case 0x3041: mapif_parse_GuildCastleDataSave(fd,RFIFOW(fd,2),RFIFOB(fd,4),RFIFOL(fd,5)); break;
-
-	default:
-		return 0;
-	}
-	return 1;
-}
-
-int inter_guild_mapif_init(int fd)
-{
-	return mapif_guild_castle_alldataload(fd);
-}
-
-// �T�[�o�[����E�ޗv���i�L�����폜�p�j
-int inter_guild_leave(int guild_id,int account_id,int char_id)
-{
-	return mapif_parse_GuildLeave(-1,guild_id,account_id,char_id,0,"**�T�[�o�[����**");
-}
diff --git a/misc/src/char_sql/int_guild.h b/misc/src/char_sql/int_guild.h
deleted file mode 100644
index 8f4203d..0000000
--- a/misc/src/char_sql/int_guild.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _INT_GUILD_H_
-#define _INT_GUILD_H_
-
-int inter_guild_parse_frommap(int fd);
-int inter_guild_sql_init();
-int inter_guild_mapif_init(int fd);
-
-int inter_guild_leave(int guild_id,int account_id,int char_id);
-
-#endif
diff --git a/misc/src/char_sql/int_party.c b/misc/src/char_sql/int_party.c
deleted file mode 100644
index 84de078..0000000
--- a/misc/src/char_sql/int_party.c
+++ /dev/null
@@ -1,755 +0,0 @@
-//
-// original code from athena
-// SQL conversion by hack
-//
-
-#include "char.h"
-#include "strlib.h"
-#include "socket.h"	
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-static struct party *party_pt;
-static int party_newid=100;
-
-int mapif_party_broken(int party_id,int flag);
-int party_check_empty(struct party *p);
-int mapif_parse_PartyLeave(int fd,int party_id,int account_id);
-
-// Save party to mysql
-int inter_party_tosql(int party_id,struct party *p)
-{
-	// 'party' ('party_id','name','exp','item','leader')
-	
-	char t_name[100];
-	char t_member[24];
-	int party_member = 0, party_online_member = 0;
-	int party_exist = 0;
-	int leader_id = 0;
-	int i = 0;
-	
-	printf("(\033[1;64m%d\033[0m)    Request save party - ",party_id);
-	
-	jstrescapecpy(t_name, p->name);
-	
-	if (p==NULL || party_id==0 || p->party_id ==0 || party_id!=p->party_id) {
-		printf("- Party pointer or party_id error \n");
-		return 0;
-	}
-	
-	// Check if party exists	
-	sprintf(tmp_sql,"SELECT count(*) FROM `%s` WHERE `party_id`='%d'",party_db, party_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-		return 0;
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-		sql_row = mysql_fetch_row(sql_res);
-		party_exist =  atoi (sql_row[0]);
-		//printf("- Check if party %d exists : %s\n",party_id,party_exist==0?"No":"Yes");
-	}
-	mysql_free_result(sql_res) ; //resource free
-
-	if (party_exist >0){
-		// Check members in party
-		sprintf(tmp_sql,"SELECT count(*) FROM `%s` WHERE `party_id`='%d'",char_db, party_id);
-		if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-			return 0;
-		}
-		sql_res = mysql_store_result(&mysql_handle) ;
-		if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-			sql_row = mysql_fetch_row(sql_res);
-			
-			party_member =  atoi (sql_row[0]);
-		//	printf("- Check members in party %d : %d \n",party_id,party_member);
-
-		}
-		mysql_free_result(sql_res) ; //resource free
-	
-		party_online_member = 0;
-		i=0;
-		while (i<MAX_PARTY){
-			if (p->member[i].account_id>0) party_online_member++;
-			i++;
-		}
-		
-		//if (party_online_member==0) printf("- No member online \n"); else printf("- Some member %d online \n", party_online_member);
-			
-		if (party_member <= 0 && party_online_member == 0) {
-
-			// Delete the party, if has no member.
-			sprintf(tmp_sql,"DELETE FROM `%s` WHERE `party_id`='%d'",party_db, party_id);
-			if(mysql_query(&mysql_handle, tmp_sql) ) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-			}
-		//	printf("No member in party %d, break it \n",party_id);
-			memset(p, 0, sizeof(struct party));
-			return 0;
-		} else {
-			// Update party information, if exists
-			
-			int i=0;
-				
-			for (i=0;i<MAX_PARTY;i++){
-
-				if (p->member[i].account_id>0){
-					sprintf(tmp_sql,"UPDATE `%s` SET `party_id`='%d', `online`='%d' WHERE `account_id`='%d' AND `name`='%s'",
-						char_db, party_id, p->member[i].online, p->member[i].account_id,jstrescapecpy(t_member,p->member[i].name));	
-					//printf("%s",tmp_sql);
-					if(mysql_query(&mysql_handle, tmp_sql) ) {
-						printf("DB server Error (update `char`)- %s\n", mysql_error(&mysql_handle) );
-					}
-				}
-			}
-			
-			
-			sprintf(tmp_sql,"UPDATE `%s` SET `name`='%s', `exp`='%d', `item`='%d', `leader_id`=`leader_id` WHERE `party_id`='%d'",
-				party_db, t_name,p->exp,p->item,party_id);	
-			if(mysql_query(&mysql_handle, tmp_sql) ) {
-				printf("DB server Error (inset/update `party`)- %s\n", mysql_error(&mysql_handle) );
-			}
-
-			
-		//	printf("- Update party %d information \n",party_id);
-		}
-	} else {
-		// Add new party, if not exist
-		int i = 0;
-		while (i<MAX_PARTY&&((p->member[i].account_id>0&&p->member[i].leader==0)||(p->member[i].account_id<0))) i++;
-		if (i<MAX_PARTY) leader_id = p->member[i].account_id;
-		sprintf(tmp_sql,"INSERT INTO `%s`  (`party_id`, `name`, `exp`, `item`, `leader_id`) VALUES ('%d', '%s', '%d', '%d', '%d')",
-			party_db, party_id, t_name, p->exp, p->item,leader_id);
-		if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error (inset/update `party`)- %s\n", mysql_error(&mysql_handle) );
-			return 0;
-		}
-		
-		sprintf(tmp_sql,"UPDATE `%s` SET `party_id`='%d', `online`='1'  WHERE `account_id`='%d' AND `name`='%s'",
-			char_db, party_id,leader_id, jstrescapecpy(t_member,p->member[i].name));	
-		if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error (inset/update `party`)- %s\n", mysql_error(&mysql_handle) );
-		}
-		
-		//printf("- Insert new party %d  \n",party_id);	
-	}
-	
-	printf("Party save success\n");
-	return 0;	
-
-}
-
-// Read party from mysql
-int inter_party_fromsql(int party_id,struct party *p)
-{
-	int leader_id=0;
-	printf("(\033[1;64m%d\033[0m)    Request load party - ",party_id);
-	
-	memset(p, 0, sizeof(struct party));
-	
-	sprintf(tmp_sql,"SELECT `party_id`, `name`,`exp`,`item`, `leader_id` FROM `%s` WHERE `party_id`='%d'",party_db, party_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (select `party`)- %s\n", mysql_error(&mysql_handle) );
-		return 0;
-	}
-	
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-		sql_row = mysql_fetch_row(sql_res);
-	//	printf("- Read party %d from MySQL\n",party_id);
-		p->party_id = party_id;
-		strcpy(p->name, sql_row[1]);
-		p->exp = atoi(sql_row[2]);
-		p->item = atoi(sql_row[3]);
-		leader_id = atoi(sql_row[4]);
-	} else {
-		mysql_free_result(sql_res);
-	//	printf("- Cannot find party %d \n",party_id);
-		return 0;
-	}
-		
-	mysql_free_result(sql_res);
-	
-	// Load members
-	sprintf(tmp_sql,"SELECT `account_id`, `name`,`base_level`,`last_map`,`online` FROM `%s` WHERE `party_id`='%d'",char_db, party_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (select `party`)- %s\n", mysql_error(&mysql_handle) );
-		return 0;
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-		int i;
-		for(i=0;(sql_row = mysql_fetch_row(sql_res));i++){
-			struct party_member *m = &p->member[i];
-			m->account_id = atoi(sql_row[0]);
-			if (m->account_id == leader_id) m->leader = 1; else m->leader = 0;
-			strncpy(m->name,sql_row[1],sizeof(m->name));
-			m->lv = atoi(sql_row[2]);
-			strncpy(m->map,sql_row[3],sizeof(m->map));
-			m->online = atoi(sql_row[4]);
-		}
-	//	printf("- %d members found in party %d \n",i,party_id);
-	}
-	mysql_free_result(sql_res);
-		
-	
-	printf("Party load success\n");
-	return 0;
-	
-}
-
-int inter_party_sql_init(){
-	int i;
-	
-	//memory alloc
-	printf("interserver party memory initialize.... (%d byte)\n",sizeof(struct party));
-	party_pt = calloc(sizeof(struct party), 1);
-	
-	sprintf(tmp_sql,"UPDATE `%s` SET `online`='0'", char_db);	
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (update `char`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	
-	sprintf (tmp_sql , "SELECT count(*) FROM `%s`",party_db);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	sql_row = mysql_fetch_row(sql_res);
-	printf("total party data -> '%s'.......\n",sql_row[0]);
-	i = atoi (sql_row[0]);
-	mysql_free_result(sql_res);
-
-	if (i > 0) {
-		//set party_newid
-		sprintf (tmp_sql , "SELECT max(`party_id`) FROM `%s`", party_db);
-		if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-		}
-		
-		sql_res = mysql_store_result(&mysql_handle) ;
-		
-		sql_row = mysql_fetch_row(sql_res);
-		party_newid = atoi (sql_row[0])+1;
-		mysql_free_result(sql_res);
-	}
-	
-	printf("set party_newid: %d.......\n",party_newid);
-	
-	return 0;
-}
-
-
-// Search for the party according to its name
-struct party* search_partyname(char *str)
-{
-	struct party *p=NULL;
-	int leader_id = 0;
-	char t_name[24];
-	
-	sprintf(tmp_sql,"SELECT `party_id`, `name`,`exp`,`item`,`leader_id` FROM `%s` WHERE `name`='%s'",party_db, jstrescapecpy(t_name,str));	
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error (select `party`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res==NULL || mysql_num_rows(sql_res)<=0) { mysql_free_result(sql_res); return p; }
-	sql_row = mysql_fetch_row(sql_res);
-	p = party_pt;
-	p->party_id = atoi(sql_row[0]);
-	strcpy(p->name, sql_row[1]);
-	p->exp = atoi(sql_row[2]);
-	p->item = atoi(sql_row[3]);
-	leader_id = atoi(sql_row[4]);
-	mysql_free_result(sql_res);
-
-	// Load members
-	sprintf(tmp_sql,"SELECT `account_id`, `name`,`base_level`,`last_map`,`online` FROM `%s` WHERE `party_id`='%d'",char_db, p->party_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (select `party`)- %s\n", mysql_error(&mysql_handle) );
-		return 0;
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-		int i;
-		for(i=0;(sql_row = mysql_fetch_row(sql_res));i++){
-			struct party_member *m = &p->member[i];
-			m->account_id = atoi(sql_row[0]);
-			if (m->account_id == leader_id) m->leader = 1; else m->leader = 0;
-			strncpy(m->name,sql_row[1],sizeof(m->name));
-			m->lv = atoi(sql_row[2]);
-			strncpy(m->map,sql_row[3],sizeof(m->map));
-			m->online = atoi(sql_row[4]);
-		}
-		printf("- %d members found in party %d \n",i,p->party_id);
-	}
-	mysql_free_result(sql_res);
-
-	return p;
-}
-
-// EXP�������z�ł��邩�`�F�b�N
-int party_check_exp_share(struct party *p)
-{
-	int i;
-	int maxlv=0,minlv=0x7fffffff;
-	for(i=0;i<MAX_PARTY;i++){
-		int lv=p->member[i].lv;
-		if( p->member[i].online ){
-			if( lv < minlv ) minlv=lv;
-			if( maxlv < lv ) maxlv=lv;
-		}
-	}
-	return (maxlv==0 || maxlv-minlv<=party_share_level);
-}
-// Is there any member in the party?
-int party_check_empty(struct party *p)
-{
-	int i;
-	if (p==NULL||p->party_id==0) return 1;
-//	printf("party check empty %08X\n",(int)p);
-	for(i=0;i<MAX_PARTY;i++){
-//		printf("%d acc=%d\n",i,p->member[i].account_id);
-		if(p->member[i].account_id>0){
-			return 0;
-		}
-	}
-	// If there is no member, then break the party
-	mapif_party_broken(p->party_id,0);
-	inter_party_tosql(p->party_id,p);
-	return 1;
-}
-
-
-// Check if a member is in two party, not necessary :)
-int party_check_conflict(int party_id,int account_id,char *nick)
-{
-	return 0;
-}
-
-//-------------------------------------------------------------------
-// map server�ւ̒ʐM
-
-// �p�[�e�B�쐬�”�
-int mapif_party_created(int fd,int account_id,struct party *p)
-{
-	WFIFOW(fd,0)=0x3820;
-	WFIFOL(fd,2)=account_id;
-	if(p!=NULL){
-		WFIFOB(fd,6)=0;
-		WFIFOL(fd,7)=p->party_id;
-		memcpy(WFIFOP(fd,11),p->name,24);
-		printf("int_party: created! %d %s\n",p->party_id,p->name);
-	}else{
-		WFIFOB(fd,6)=1;
-		WFIFOL(fd,7)=0;
-		memcpy(WFIFOP(fd,11),"error",24);
-	}
-	WFIFOSET(fd,35);
-	return 0;
-}
-
-// �p�[�e�B��񌩂‚��炸
-int mapif_party_noinfo(int fd,int party_id)
-{
-	WFIFOW(fd,0)=0x3821;
-	WFIFOW(fd,2)=8;
-	WFIFOL(fd,4)=party_id;
-	WFIFOSET(fd,8);
-	printf("int_party: info not found %d\n",party_id);
-	return 0;
-}
-// �p�[�e�B���܂Ƃߑ���
-int mapif_party_info(int fd,struct party *p)
-{
-	unsigned char buf[1024];
-	WBUFW(buf,0)=0x3821;
-	memcpy(buf+4,p,sizeof(struct party));
-	WBUFW(buf,2)=4+sizeof(struct party);
-	if(fd<0)
-		mapif_sendall(buf,WBUFW(buf,2));
-	else
-		mapif_send(fd,buf,WBUFW(buf,2));
-//	printf("int_party: info %d %s\n",p->party_id,p->name);
-	return 0;
-}
-// �p�[�e�B�����o�lj��”�
-int mapif_party_memberadded(int fd,int party_id,int account_id,int flag)
-{
-	WFIFOW(fd,0)=0x3822;
-	WFIFOL(fd,2)=party_id;
-	WFIFOL(fd,6)=account_id;
-	WFIFOB(fd,10)=flag;
-	WFIFOSET(fd,11);
-	return 0;
-}
-// �p�[�e�B�ݒ�ύX�ʒm
-int mapif_party_optionchanged(int fd,struct party *p,int account_id,int flag)
-{
-	unsigned char buf[16];
-	WBUFW(buf,0)=0x3823;
-	WBUFL(buf,2)=p->party_id;
-	WBUFL(buf,6)=account_id;
-	WBUFW(buf,10)=p->exp;
-	WBUFW(buf,12)=p->item;
-	WBUFB(buf,14)=flag;
-	if(flag==0)
-		mapif_sendall(buf,15);
-	else
-		mapif_send(fd,buf,15);
-	//printf("int_party: option changed %d %d %d %d %d\n",p->party_id,account_id,p->exp,p->item,flag);
-	return 0;
-}
-// �p�[�e�B�E�ޒʒm
-int mapif_party_leaved(int party_id,int account_id,char *name)
-{
-	unsigned char buf[64];
-	WBUFW(buf,0)=0x3824;
-	WBUFL(buf,2)=party_id;
-	WBUFL(buf,6)=account_id;
-	memcpy(WBUFP(buf,10),name,24);
-	mapif_sendall(buf,34);
-	//printf("int_party: party leaved %d %d %s\n",party_id,account_id,name);
-	return 0;
-}
-// �p�[�e�B�}�b�v�X�V�ʒm
-int mapif_party_membermoved(struct party *p,int idx)
-{
-	unsigned char buf[32];
-	WBUFW(buf,0)=0x3825;
-	WBUFL(buf,2)=p->party_id;
-	WBUFL(buf,6)=p->member[idx].account_id;
-	memcpy(WBUFP(buf,10),p->member[idx].map,16);
-	WBUFB(buf,26)=p->member[idx].online;
-	WBUFW(buf,27)=p->member[idx].lv;
-	mapif_sendall(buf,29);
-	return 0;
-}
-// �p�[�e�B���U�ʒm
-int mapif_party_broken(int party_id,int flag)
-{
-	unsigned char buf[16];
-	WBUFW(buf,0)=0x3826;
-	WBUFL(buf,2)=party_id;
-	WBUFB(buf,6)=flag;
-	mapif_sendall(buf,7);
-	//printf("int_party: broken %d\n",party_id);
-	return 0;
-}
-// �p�[�e�B������
-int mapif_party_message(int party_id,int account_id,char *mes,int len)
-{
-	unsigned char buf[512];
-	WBUFW(buf,0)=0x3827;
-	WBUFW(buf,2)=len+12;
-	WBUFL(buf,4)=party_id;
-	WBUFL(buf,8)=account_id;
-	memcpy(WBUFP(buf,12),mes,len);
-	mapif_sendall(buf,len+12);
-	return 0;
-}
-
-//-------------------------------------------------------------------
-// map server����̒ʐM
-
-
-// Create Party
-int mapif_parse_CreateParty(int fd,int account_id,char *name,char *nick,char *map,int lv)
-{
-	struct party *p;
-	if( (p=search_partyname(name))!=NULL){
-//		printf("int_party: same name party exists [%s]\n",name);
-		mapif_party_created(fd,account_id,NULL);
-		return 0;
-	}
-	p=party_pt;
-	if(p==NULL){
-		printf("int_party: out of memory !\n");
-		mapif_party_created(fd,account_id,NULL);
-		return 0;
-	}
-	memset(p,0,sizeof(struct party));
-	p->party_id=party_newid++;
-	memcpy(p->name,name,24);
-	p->exp=0;
-	p->item=0;
-	p->member[0].account_id=account_id;
-	memcpy(p->member[0].name,nick,24);
-	memcpy(p->member[0].map,map,16);
-	p->member[0].leader=1;
-	p->member[0].online=1;
-	p->member[0].lv=lv;
-	
-	inter_party_tosql(p->party_id,p);
-	
-	mapif_party_created(fd,account_id,p);
-	mapif_party_info(fd,p);
-	
-	return 0;
-}
-// �p�[�e�B���v��
-int mapif_parse_PartyInfo(int fd,int party_id)
-{
-	struct party *p = party_pt;
-	if(p==NULL){
-		printf("int_party: out of memory !\n");
-		return 0;
-	}
-	inter_party_fromsql(party_id, p);
-	
-	if(p->party_id >= 0)
-		mapif_party_info(fd,p);
-	else
-		mapif_party_noinfo(fd,party_id);
-	return 0;
-}
-// �p�[�e�B�lj��v��
-int mapif_parse_PartyAddMember(int fd,int party_id,int account_id,char *nick,char *map,int lv)
-{
-	struct party *p;
-	int i;
-	
-	p = party_pt;
-	if(p==NULL){
-		printf("int_party: out of memory !\n");
-		return 0;
-	}
-	inter_party_fromsql(party_id, p);
-	
-	if(p->party_id <= 0){
-		mapif_party_memberadded(fd,party_id,account_id,1);
-		return 0;
-	}
-	
-	for(i=0;i<MAX_PARTY;i++){
-		if(p->member[i].account_id==0){
-			int flag=0;
-			
-			p->member[i].account_id=account_id;
-			memcpy(p->member[i].name,nick,24);
-			memcpy(p->member[i].map,map,16);
-			p->member[i].leader=0;
-			p->member[i].online=1;
-			p->member[i].lv=lv;
-			mapif_party_memberadded(fd,party_id,account_id,0);
-			mapif_party_info(-1,p);
-
-			if( p->exp>0 && !party_check_exp_share(p) ){
-				p->exp=0;
-				flag=0x01;
-			}
-			if(flag)
-				mapif_party_optionchanged(fd,p,0,0);
-				
-			inter_party_tosql(party_id, p);
-			return 0;
-		}
-	}
-	mapif_party_memberadded(fd,party_id,account_id,1);
-	//inter_party_tosql(party_id, p);
-	return 0;
-}
-// �p�[�e�B�[�ݒ�ύX�v��
-int mapif_parse_PartyChangeOption(int fd,int party_id,int account_id,int exp,int item)
-{
-	struct party *p;
-	int flag=0;
-	
-	p = party_pt;
-	if(p==NULL){
-		printf("int_party: out of memory !\n");
-		return 0;
-	}
-	
-	inter_party_fromsql(party_id, p);
-	
-	if(p->party_id <= 0){
-		return 0;
-	}
-	
-	p->exp=exp;
-	if( exp>0 && !party_check_exp_share(p) ){
-		flag|=0x01;
-		p->exp=0;
-	}
-	
-	p->item=item;
-
-	mapif_party_optionchanged(fd,p,account_id,flag);
-	inter_party_tosql(party_id, p);
-	return 0;
-}
-// �p�[�e�B�E�ޗv��
-int mapif_parse_PartyLeave(int fd,int party_id,int account_id)
-{
-	char t_member[24];
-	struct party *p = party_pt;
-	if(p==NULL){
-		printf("int_party: out of memory !\n");
-		return 0;
-	}
-	
-	inter_party_fromsql(party_id, p);
-	
-	if(p->party_id >= 0){
-		int i,j;
-		for(i=0;i<MAX_PARTY;i++){
-			
-			if(p->member[i].account_id==account_id){
-				//printf("p->member[i].account_id = %d , account_id = %d \n",p->member[i].account_id,account_id);
-				mapif_party_leaved(party_id,account_id,p->member[i].name);
-				
-				
-				
-				// Update char information, does the name need encoding?
-				sprintf(tmp_sql,"UPDATE `%s` SET `party_id`='0', `online`='1' WHERE `party_id`='%d' AND `name`='%s'", 
-					char_db, party_id, jstrescapecpy(t_member,p->member[i].name));
-				if(mysql_query(&mysql_handle, tmp_sql) ) {
-					printf("DB server Error (update `char`)- %s\n", mysql_error(&mysql_handle) );
-				}
-//				printf("Delete member %s from MySQL \n", p->member[i].name);	
-						
-				if (p->member[i].leader==1){
-					for(j=0;j<MAX_PARTY;j++)
-					{
-						//printf("j = %d , p->member[j].account_id = %d , p->member[j].account_id = %d \n",j,p->member[j].account_id,p->member[j].account_id);
-						if(p->member[j].account_id>0&&j!=i){
-							mapif_party_leaved(party_id,p->member[j].account_id,p->member[j].name);
-							// Update char information, does the name need encoding?
-							sprintf(tmp_sql,"UPDATE `%s` SET `party_id`='0', `online`='1' WHERE `party_id`='%d' AND `name`='%s'", 
-								char_db, party_id, jstrescapecpy(t_member,p->member[i].name));
-							if(mysql_query(&mysql_handle, tmp_sql) ) {
-								printf("DB server Error (update `char`)- %s\n", mysql_error(&mysql_handle) );
-							}
-//							printf("Delete member %s from MySQL \n", p->member[j].name);	
-						}
-					}
-					// Delete the party, if has no member.
-					sprintf(tmp_sql,"DELETE FROM `%s` WHERE `party_id`='%d'",party_db, party_id);
-					if(mysql_query(&mysql_handle, tmp_sql) ) {
-						printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-					}
-//					printf("Leader breaks party %d \n",party_id);
-					memset(p, 0, sizeof(struct party));					
-				}else memset(&p->member[i],0,sizeof(struct party_member));
-				
-				break;
-
-			}
-		}
-		if( party_check_empty(p)==0 )
-			mapif_party_info(-1,p);// �܂��l������̂Ńf�[�^���M
-		/*
-		else
-			inter_party_tosql(party_id,p);	// Break the party if no member
-		*/
-	}else{
-		sprintf(tmp_sql,"UPDATE `%s` SET `party_id`='0' WHERE `party_id`='%d' AND `account_id`='%d' AND `online`='1'", 
-			char_db, party_id, account_id);	
-		if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error (update `char`)- %s\n", mysql_error(&mysql_handle) );
-		}
-	}
-	return 0;
-}
-// When member goes to other map
-int mapif_parse_PartyChangeMap(int fd,int party_id,int account_id,char *map,int online,int lv)
-{
-	struct party *p;
-	int i;
-	
-	p = party_pt;
-	if(p==NULL){
-		printf("int_party: out of memory !\n");
-		return 0;
-	}
-	inter_party_fromsql(party_id, p);
-	
-	if(p->party_id <= 0){
-		return 0;
-	}
-	for(i=0;i<MAX_PARTY;i++){
-		if(p->member[i].account_id==account_id){
-			int flag=0;
-			
-			memcpy(p->member[i].map,map,16);
-			p->member[i].online=online;
-			p->member[i].lv=lv;
-			mapif_party_membermoved(p,i);
-
-			if( p->exp>0 && !party_check_exp_share(p) ){
-				p->exp=0;
-				flag=1;
-			}
-			if(flag)
-				mapif_party_optionchanged(fd,p,0,0);
-			break;
-		}
-	}
-	inter_party_tosql(party_id, p);
-	return 0;
-}
-// �p�[�e�B���U�v��
-int mapif_parse_BreakParty(int fd,int party_id)
-{
-	struct party *p;
-	
-	p = party_pt;
-	if(p==NULL){
-		printf("int_party: out of memory !\n");
-		return 0;
-	}
-	
-	inter_party_fromsql(party_id, p);
-	
-	if(p->party_id <= 0){
-		return 0;
-	}
-	inter_party_tosql(party_id,p);
-	
-	mapif_party_broken(fd,party_id);
-	return 0;
-}
-// �p�[�e�B���b�Z�[�W���M
-int mapif_parse_PartyMessage(int fd,int party_id,int account_id,char *mes,int len)
-{
-	return mapif_party_message(party_id,account_id,mes,len);
-}
-// �p�[�e�B�`�F�b�N�v��
-int mapif_parse_PartyCheck(int fd,int party_id,int account_id,char *nick)
-{
-	return party_check_conflict(party_id,account_id,nick);
-}
-
-// map server ����̒ʐM
-// �E�P�p�P�b�g�̂݉�͂��邱��
-// �E�p�P�b�g���f�[�^��inter.c�ɃZ�b�g���Ă�������
-// �E�p�P�b�g���`�F�b�N��ARFIFOSKIP�͌Ăяo�����ōs����̂ōs���Ă͂Ȃ�Ȃ�
-// �E�G���[�Ȃ�0(false)�A�����łȂ��Ȃ�1(true)���������Ȃ���΂Ȃ�Ȃ�
-int inter_party_parse_frommap(int fd)
-{
-	switch(RFIFOW(fd,0)){
-	case 0x3020: mapif_parse_CreateParty(fd,RFIFOL(fd,2),RFIFOP(fd,6),RFIFOP(fd,30),RFIFOP(fd,54),RFIFOW(fd,70)); break;
-	case 0x3021: mapif_parse_PartyInfo(fd,RFIFOL(fd,2)); break;
-	case 0x3022: mapif_parse_PartyAddMember(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOP(fd,10),RFIFOP(fd,34),RFIFOW(fd,50)); break;
-	case 0x3023: mapif_parse_PartyChangeOption(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOW(fd,10),RFIFOW(fd,12)); break;
-	case 0x3024: mapif_parse_PartyLeave(fd,RFIFOL(fd,2),RFIFOL(fd,6)); break;
-	case 0x3025: mapif_parse_PartyChangeMap(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOP(fd,10),RFIFOB(fd,26),RFIFOW(fd,27)); break;
-	case 0x3026: mapif_parse_BreakParty(fd,RFIFOL(fd,2)); break;
-	case 0x3027: mapif_parse_PartyMessage(fd,RFIFOL(fd,4),RFIFOL(fd,8),RFIFOP(fd,12),RFIFOW(fd,2)-12); break;
-	case 0x3028: mapif_parse_PartyCheck(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOP(fd,10)); break;
-	default:
-		return 0;
-	}
-	return 1;
-}
-
-// �T�[�o�[����E�ޗv���i�L�����폜�p�j
-int inter_party_leave(int party_id,int account_id)
-{
-	return mapif_parse_PartyLeave(-1,party_id,account_id);
-}
-
-
-
diff --git a/misc/src/char_sql/int_party.h b/misc/src/char_sql/int_party.h
deleted file mode 100644
index 04f71c8..0000000
--- a/misc/src/char_sql/int_party.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _INT_PARTY_H_
-#define _INT_PARTY_H_
-
-int inter_party_parse_frommap(int fd);
-int inter_party_sql_init();
-int inter_party_leave(int party_id,int account_id);
-
-#endif
diff --git a/misc/src/char_sql/int_pet.c b/misc/src/char_sql/int_pet.c
deleted file mode 100644
index 9b5566d..0000000
--- a/misc/src/char_sql/int_pet.c
+++ /dev/null
@@ -1,324 +0,0 @@
-//
-// original code from athena
-// SQL conversion by Jioh L. Jung
-//
-#include "char.h"
-#include "strlib.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-struct s_pet *pet_pt;
-static int pet_newid = 100;
-
-
-//---------------------------------------------------------
-int inter_pet_tosql(int pet_id, struct s_pet *p) {
-	//`pet` (`pet_id`, `class`,`name`,`account_id`,`char_id`,`level`,`egg_id`,`equip`,`intimate`,`hungry`,`rename_flag`,`incuvate`)
-	char t_name[100];
-	
-	printf("request save pet: %d.......\n",pet_id);
-	
-	jstrescapecpy(t_name, p->name);
-	
-	if(p->hungry < 0)
-		p->hungry = 0;
-	else if(p->hungry > 100)
-		p->hungry = 100;
-	if(p->intimate < 0)
-		p->intimate = 0;
-	else if(p->intimate > 1000)
-		p->intimate = 1000;
-	sprintf(tmp_sql,"SELECT * FROM `%s` WHERE `pet_id`='%d'",pet_db, pet_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res!=NULL && mysql_num_rows(sql_res)>0) 
-		//row reside -> updating
-		sprintf(tmp_sql, "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',`incuvate`='%d' WHERE `pet_id`='%d'",
-			pet_db, p->class, t_name, p->account_id, p->char_id, p->level, p->egg_id,
-			p->equip, p->intimate, p->hungry, p->rename_flag, p->incuvate, p->pet_id);
-	else //no row -> insert
-		sprintf(tmp_sql,"INSERT INTO `%s` (`pet_id`, `class`,`name`,`account_id`,`char_id`,`level`,`egg_id`,`equip`,`intimate`,`hungry`,`rename_flag`,`incuvate`) VALUES ('%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d')",
-			pet_db, pet_id, p->class, t_name, p->account_id, p->char_id, p->level, p->egg_id,
-			p->equip, p->intimate, p->hungry, p->rename_flag, p->incuvate);
-	mysql_free_result(sql_res) ; //resource free
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (inset/update `pet`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	
-	printf("pet save success.......\n");
-	return 0;
-}
-
-int inter_pet_fromsql(int pet_id, struct s_pet *p){
-	
-	printf("request load pet: %d.......\n",pet_id);
-	
-	memset(p, 0, sizeof(struct s_pet));
-	
-	//`pet` (`pet_id`, `class`,`name`,`account_id`,`char_id`,`level`,`egg_id`,`equip`,`intimate`,`hungry`,`rename_flag`,`incuvate`)
-	
-	sprintf(tmp_sql,"SELECT `pet_id`, `class`,`name`,`account_id`,`char_id`,`level`,`egg_id`,`equip`,`intimate`,`hungry`,`rename_flag`,`incuvate` FROM `%s` WHERE `pet_id`='%d'",pet_db, pet_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error (select `pet`)- %s\n", mysql_error(&mysql_handle) );
-			return 0;
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-		sql_row = mysql_fetch_row(sql_res);
-		
-		p->pet_id = pet_id;
-		p->class = atoi(sql_row[1]);
-		memcpy(p->name, sql_row[2],24);
-		p->account_id = atoi(sql_row[3]);
-		p->char_id = atoi(sql_row[4]);
-		p->level = atoi(sql_row[5]);
-		p->egg_id = atoi(sql_row[6]);
-		p->equip = atoi(sql_row[7]);
-		p->intimate = atoi(sql_row[8]);
-		p->hungry = atoi(sql_row[9]);
-		p->rename_flag = atoi(sql_row[10]);
-		p->incuvate = atoi(sql_row[11]);
-	}
-	if(p->hungry < 0)
-		p->hungry = 0;
-	else if(p->hungry > 100)
-		p->hungry = 100;
-	if(p->intimate < 0)
-		p->intimate = 0;
-	else if(p->intimate > 1000)
-		p->intimate = 1000;
-	
-	mysql_free_result(sql_res);
-	
-	printf("pet load success.......\n");
-	return 0;
-}
-//----------------------------------------------
-	
-int inter_pet_sql_init(){
-	int i;
-		
-	//memory alloc
-	printf("interserver pet memory initialize.... (%d byte)\n",sizeof(struct s_pet));
-	pet_pt = calloc(sizeof(struct s_pet), 1);
-
-	sprintf (tmp_sql , "SELECT count(*) FROM `%s`", pet_db);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-		exit(0);
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	sql_row = mysql_fetch_row(sql_res);
-	printf("total pet data -> '%s'.......\n",sql_row[0]);
-	i = atoi (sql_row[0]);
-	mysql_free_result(sql_res);
-
-	if (i > 0) {
-		//set pet_newid
-		sprintf (tmp_sql , "SELECT max(`pet_id`) FROM `%s`",pet_db );
-		if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-		}
-		
-		sql_res = mysql_store_result(&mysql_handle) ;
-		
-		sql_row = mysql_fetch_row(sql_res);
-		pet_newid = atoi (sql_row[0]);
-		mysql_free_result(sql_res);
-	}
-	
-	printf("set pet_newid: %d.......\n",pet_newid);
-	
-	return 0;
-}
-//----------------------------------
-int inter_pet_delete(int pet_id){
-	printf("request delete pet: %d.......\n",pet_id);
-	
-	sprintf(tmp_sql,"DELETE FROM `%s` WHERE `pet_id`='%d'",pet_db, pet_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-	}
-	return 0;
-}
-//------------------------------------------------------
-int mapif_pet_created(int fd, int account_id, struct s_pet *p)
-{
-	WFIFOW(fd, 0) =0x3880;
-	WFIFOL(fd, 2) =account_id;
-	if(p!=NULL){
-		WFIFOB(fd, 6)=0;
-		WFIFOL(fd, 7) =p->pet_id;
-		printf("int_pet: created! %d %s\n", p->pet_id, p->name);
-	}else{
-		WFIFOB(fd, 6)=1;
-		WFIFOL(fd, 7)=0;
-	}
-	WFIFOSET(fd, 11);
-
-	return 0;
-}
-
-int mapif_pet_info(int fd, int account_id, struct s_pet *p){
-	WFIFOW(fd, 0) =0x3881;
-	WFIFOW(fd, 2) =sizeof(struct s_pet) + 9;
-	WFIFOL(fd, 4) =account_id;
-	WFIFOB(fd, 8)=0;
-	memcpy(WFIFOP(fd, 9), p, sizeof(struct s_pet));
-	WFIFOSET(fd, WFIFOW(fd, 2));
-
-	return 0;
-}
-
-int mapif_pet_noinfo(int fd, int account_id){
-	WFIFOW(fd, 0) =0x3881;
-	WFIFOW(fd, 2) =sizeof(struct s_pet) + 9;
-	WFIFOL(fd, 4) =account_id;
-	WFIFOB(fd, 8)=1;
-	memset(WFIFOP(fd, 9), 0, sizeof(struct s_pet));
-	WFIFOSET(fd, WFIFOW(fd, 2));
-
-	return 0;
-}
-
-int mapif_save_pet_ack(int fd, int account_id, int flag){
-	WFIFOW(fd, 0) =0x3882;
-	WFIFOL(fd, 2) =account_id;
-	WFIFOB(fd, 6) =flag;
-	WFIFOSET(fd, 7);
-
-	return 0;
-}
-
-int mapif_delete_pet_ack(int fd, int flag){
-	WFIFOW(fd, 0) =0x3883;
-	WFIFOB(fd, 2) =flag;
-	WFIFOSET(fd, 3);
-
-	return 0;
-}
-
-int mapif_create_pet(int fd, int account_id, int char_id, short pet_class, short pet_lv, short pet_egg_id,
-	short pet_equip, short intimate, short hungry, char rename_flag, char incuvate, char *pet_name){
-
-	memset(pet_pt, 0, sizeof(struct s_pet));
-	pet_pt->pet_id = pet_newid++;
-	memcpy(pet_pt->name, pet_name, 24);
-	if(incuvate == 1)
-		pet_pt->account_id = pet_pt->char_id = 0;
-	else {
-		pet_pt->account_id = account_id;
-		pet_pt->char_id = char_id;
-	}
-	pet_pt->class = pet_class;
-	pet_pt->level = pet_lv;
-	pet_pt->egg_id = pet_egg_id;
-	pet_pt->equip = pet_equip;
-	pet_pt->intimate = intimate;
-	pet_pt->hungry = hungry;
-	pet_pt->rename_flag = rename_flag;
-	pet_pt->incuvate = incuvate;
-
-	if(pet_pt->hungry < 0)
-		pet_pt->hungry = 0;
-	else if(pet_pt->hungry > 100)
-		pet_pt->hungry = 100;
-	if(pet_pt->intimate < 0)
-		pet_pt->intimate = 0;
-	else if(pet_pt->intimate > 1000)
-		pet_pt->intimate = 1000;
-	
-	inter_pet_tosql(pet_pt->pet_id,pet_pt);
-	
-	mapif_pet_created(fd, account_id, pet_pt);
-	
-	return 0;
-}
-
-int mapif_load_pet(int fd, int account_id, int char_id, int pet_id){
-	memset(pet_pt, 0, sizeof(struct s_pet));
-	
-	inter_pet_fromsql(pet_id, pet_pt);
-	
-	if(pet_pt!=NULL) {
-		if(pet_pt->incuvate == 1) {
-			pet_pt->account_id = pet_pt->char_id = 0;
-			mapif_pet_info(fd, account_id, pet_pt);
-		}
-		else if(account_id == pet_pt->account_id && char_id == pet_pt->char_id)
-			mapif_pet_info(fd, account_id, pet_pt);
-		else
-			mapif_pet_noinfo(fd, account_id);
-	}
-	else
-		mapif_pet_noinfo(fd, account_id);
-
-	return 0;
-}
-
-int mapif_save_pet(int fd, int account_id, struct s_pet *data) {
-	//here process pet save request.
-	int len=RFIFOW(fd, 2);
-	if(sizeof(struct s_pet)!=len-8) {
-		printf("inter pet: data size error %d %d\n", sizeof(struct s_pet), len-8);
-	}
-	
-	else{
-		if(data->hungry < 0)
-			data->hungry = 0;
-		else if(data->hungry > 100)
-			data->hungry = 100;
-		if(data->intimate < 0)
-			data->intimate = 0;
-		else if(data->intimate > 1000)
-			data->intimate = 1000;
-		inter_pet_tosql(data->pet_id,data);
-		mapif_save_pet_ack(fd, account_id, 0);
-	}
-
-	return 0;
-}
-
-int mapif_delete_pet(int fd, int pet_id){
-	mapif_delete_pet_ack(fd, inter_pet_delete(pet_id));
-
-	return 0;
-}
-
-int mapif_parse_CreatePet(int fd){
-	mapif_create_pet(fd, RFIFOL(fd, 2), RFIFOL(fd, 6), RFIFOW(fd, 10), RFIFOW(fd, 12), RFIFOW(fd, 14), RFIFOW(fd, 16), RFIFOL(fd, 18),
-		RFIFOL(fd, 20), RFIFOB(fd, 22), RFIFOB(fd, 23), RFIFOP(fd, 24));
-	return 0;
-}
-
-int mapif_parse_LoadPet(int fd){
-	mapif_load_pet(fd, RFIFOL(fd, 2), RFIFOL(fd, 6), RFIFOL(fd, 10));
-	return 0;
-}
-
-int mapif_parse_SavePet(int fd){
-	mapif_save_pet(fd, RFIFOL(fd, 4), (struct s_pet *) RFIFOP(fd, 8));
-	return 0;
-}
-
-int mapif_parse_DeletePet(int fd){
-	mapif_delete_pet(fd, RFIFOL(fd, 2));
-	return 0;
-}
-
-int inter_pet_parse_frommap(int fd){
-	switch(RFIFOW(fd, 0)){
-	case 0x3080: mapif_parse_CreatePet(fd); break;
-	case 0x3081: mapif_parse_LoadPet(fd); break;
-	case 0x3082: mapif_parse_SavePet(fd); break;
-	case 0x3083: mapif_parse_DeletePet(fd); break;
-	default:
-		return 0;
-	}
-	return 1;
-}
-
diff --git a/misc/src/char_sql/int_pet.h b/misc/src/char_sql/int_pet.h
deleted file mode 100644
index b6e3f1b..0000000
--- a/misc/src/char_sql/int_pet.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef _INT_PET_H_
-#define _INT_PET_H_
-
-int inter_pet_init();
-int inter_pet_save();
-int inter_pet_delete(int pet_id);
-
-int inter_pet_parse_frommap(int fd);
-int inter_pet_sql_init();
-//extern char pet_txt[256];
-
-#endif
diff --git a/misc/src/char_sql/int_storage.c b/misc/src/char_sql/int_storage.c
deleted file mode 100644
index fdf85ae..0000000
--- a/misc/src/char_sql/int_storage.c
+++ /dev/null
@@ -1,366 +0,0 @@
-//
-// original code from athena
-// SQL conversion by Jioh L. Jung
-//
-#include "char.h"
-#include "itemdb.h"
-#include <string.h>
-#include <stdlib.h>
-
-#define STORAGE_MEMINC	16
-
-// reset by inter_config_read()
-struct storage *storage_pt=NULL;
-struct guild_storage *guild_storage_pt=NULL;
-
-
-// storage data -> DB conversion
-int storage_tosql(int account_id,struct storage *p){
-	int i;
-	int eqcount=1;
-	int noteqcount=1;
-	struct itemtemp mapitem;
-	for(i=0;i<MAX_STORAGE;i++){
-		if(p->storage[i].nameid>0){
-			if(itemdb_isequip(p->storage[i].nameid)==1){				
-				mapitem.equip[eqcount].flag=0;
-				mapitem.equip[eqcount].id = p->storage[i].id;
-				mapitem.equip[eqcount].nameid=p->storage[i].nameid;
-				mapitem.equip[eqcount].amount = p->storage[i].amount;
-				mapitem.equip[eqcount].equip = p->storage[i].equip;
-				mapitem.equip[eqcount].identify = p->storage[i].identify;
-				mapitem.equip[eqcount].refine = p->storage[i].refine;
-				mapitem.equip[eqcount].attribute = p->storage[i].attribute;
-				mapitem.equip[eqcount].card[0] = p->storage[i].card[0];
-				mapitem.equip[eqcount].card[1] = p->storage[i].card[1];
-				mapitem.equip[eqcount].card[2] = p->storage[i].card[2];
-				mapitem.equip[eqcount].card[3] = p->storage[i].card[3];
-                mapitem.equip[eqcount].broken = p->storage[i].broken;				
-				eqcount++;
-			}
-			else if(itemdb_isequip(p->storage[i].nameid)==0){				
-				mapitem.notequip[noteqcount].flag=0;
-				mapitem.notequip[noteqcount].id = p->storage[i].id;
-				mapitem.notequip[noteqcount].nameid=p->storage[i].nameid;
-				mapitem.notequip[noteqcount].amount = p->storage[i].amount;
-				mapitem.notequip[noteqcount].equip = p->storage[i].equip;
-				mapitem.notequip[noteqcount].identify = p->storage[i].identify;
-				mapitem.notequip[noteqcount].refine = p->storage[i].refine;
-				mapitem.notequip[noteqcount].attribute = p->storage[i].attribute;
-				mapitem.notequip[noteqcount].card[0] = p->storage[i].card[0];
-				mapitem.notequip[noteqcount].card[1] = p->storage[i].card[1];
-				mapitem.notequip[noteqcount].card[2] = p->storage[i].card[2];
-				mapitem.notequip[noteqcount].card[3] = p->storage[i].card[3];
-                mapitem.notequip[noteqcount].broken = p->storage[i].broken;				
-				noteqcount++;
-			}
-		}
-	}
-
-	memitemdata_to_sql(mapitem, eqcount, noteqcount, account_id,TABLE_STORAGE);
-
-	//printf ("storage dump to DB - id: %d (total: %d)\n", account_id, j);
-	return 0;
-}
-
-// DB -> storage data conversion
-int storage_fromsql(int account_id, struct storage *p){
-	int i=0;
-	
-	memset(p,0,sizeof(struct storage)); //clean up memory
-	p->storage_amount = 0;
-	p->account_id = account_id;
-	
-	// storage {`account_id`/`id`/`nameid`/`amount`/`equip`/`identify`/`refine`/`attribute`/`card0`/`card1`/`card2`/`card3`}
-	sprintf(tmp_sql,"SELECT `id`,`nameid`,`amount`,`equip`,`identify`,`refine`,`attribute`,`card0`,`card1`,`card2`,`card3`,`broken` FROM `%s` WHERE `account_id`='%d'",storage_db, account_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	
-	if (sql_res) {
-		while((sql_row = mysql_fetch_row(sql_res))) {	//start to fetch
-			p->storage[i].id= atoi(sql_row[0]);
-			p->storage[i].nameid= atoi(sql_row[1]);
-			p->storage[i].amount= atoi(sql_row[2]);
-			p->storage[i].equip= atoi(sql_row[3]);
-			p->storage[i].identify= atoi(sql_row[4]);
-			p->storage[i].refine= atoi(sql_row[5]);
-			p->storage[i].attribute= atoi(sql_row[6]);
-			p->storage[i].card[0]= atoi(sql_row[7]);
-			p->storage[i].card[1]= atoi(sql_row[8]);
-			p->storage[i].card[2]= atoi(sql_row[9]);
-			p->storage[i].card[3]= atoi(sql_row[10]);
-			p->storage[i].broken = atoi(sql_row[11]);
-			p->storage_amount = ++i;
-		}
-		mysql_free_result(sql_res);
-	}
-	
-	printf ("storage load complete from DB - id: %d (total: %d)\n", account_id, p->storage_amount);
-	return 1;
-}
-
-// Save guild_storage data to sql
-int guild_storage_tosql(int guild_id, struct guild_storage *p){
-	int i;
-	int eqcount=1;
-	int noteqcount=1;
-	struct itemtemp mapitem;
-	for(i=0;i<MAX_GUILD_STORAGE;i++){
-		if(p->storage[i].nameid>0){
-			if(itemdb_isequip(p->storage[i].nameid)==1){				
-				mapitem.equip[eqcount].flag=0;
-				mapitem.equip[eqcount].id = p->storage[i].id;
-				mapitem.equip[eqcount].nameid=p->storage[i].nameid;
-				mapitem.equip[eqcount].amount = p->storage[i].amount;
-				mapitem.equip[eqcount].equip = p->storage[i].equip;
-				mapitem.equip[eqcount].identify = p->storage[i].identify;
-				mapitem.equip[eqcount].refine = p->storage[i].refine;
-				mapitem.equip[eqcount].attribute = p->storage[i].attribute;
-				mapitem.equip[eqcount].card[0] = p->storage[i].card[0];
-				mapitem.equip[eqcount].card[1] = p->storage[i].card[1];
-				mapitem.equip[eqcount].card[2] = p->storage[i].card[2];
-				mapitem.equip[eqcount].card[3] = p->storage[i].card[3];
-                mapitem.equip[eqcount].broken = p->storage[i].broken;					
-				eqcount++;
-			}
-			else if(itemdb_isequip(p->storage[i].nameid)==0){				
-				mapitem.notequip[noteqcount].flag=0;
-				mapitem.notequip[noteqcount].id = p->storage[i].id;
-				mapitem.notequip[noteqcount].nameid=p->storage[i].nameid;
-				mapitem.notequip[noteqcount].amount = p->storage[i].amount;
-				mapitem.notequip[noteqcount].equip = p->storage[i].equip;
-				mapitem.notequip[noteqcount].identify = p->storage[i].identify;
-				mapitem.notequip[noteqcount].refine = p->storage[i].refine;
-				mapitem.notequip[noteqcount].attribute = p->storage[i].attribute;
-				mapitem.notequip[noteqcount].card[0] = p->storage[i].card[0];
-				mapitem.notequip[noteqcount].card[1] = p->storage[i].card[1];
-				mapitem.notequip[noteqcount].card[2] = p->storage[i].card[2];
-				mapitem.notequip[noteqcount].card[3] = p->storage[i].card[3];
-				mapitem.notequip[noteqcount].broken = p->storage[i].broken;				
-				noteqcount++;
-			}
-		}
-	}
-
-	memitemdata_to_sql(mapitem, eqcount, noteqcount, guild_id,TABLE_GUILD_STORAGE);
-
-	printf ("guild storage save to DB - id: %d (total: %d)\n", guild_id,i);
-	return 0;
-}
-
-// Load guild_storage data to mem
-int guild_storage_fromsql(int guild_id, struct guild_storage *p){
-	int i=0;
-	struct guild_storage *gs=guild_storage_pt;
-	p=gs;
-
-	memset(p,0,sizeof(struct guild_storage)); //clean up memory
-	p->storage_amount = 0;
-	p->guild_id = guild_id;
-
-	// storage {`guild_id`/`id`/`nameid`/`amount`/`equip`/`identify`/`refine`/`attribute`/`card0`/`card1`/`card2`/`card3`}
-	sprintf(tmp_sql,"SELECT `id`,`nameid`,`amount`,`equip`,`identify`,`refine`,`attribute`,`card0`,`card1`,`card2`,`card3`,`broken` FROM `%s` WHERE `guild_id`='%d'",guild_storage_db, guild_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	
-	if (sql_res) {
-		while((sql_row = mysql_fetch_row(sql_res))) {	//start to fetch
-			p->storage[i].id= atoi(sql_row[0]);
-			p->storage[i].nameid= atoi(sql_row[1]);
-			p->storage[i].amount= atoi(sql_row[2]);
-			p->storage[i].equip= atoi(sql_row[3]);
-			p->storage[i].identify= atoi(sql_row[4]);
-			p->storage[i].refine= atoi(sql_row[5]);
-			p->storage[i].attribute= atoi(sql_row[6]);
-			p->storage[i].card[0]= atoi(sql_row[7]);
-			p->storage[i].card[1]= atoi(sql_row[8]);
-			p->storage[i].card[2]= atoi(sql_row[9]);
-			p->storage[i].card[3]= atoi(sql_row[10]);
-			p->storage[i].broken =  atoi(sql_row[11]);
-			p->storage_amount = ++i;
-		}
-		mysql_free_result(sql_res);
-	}
-	printf ("guild storage load complete from DB - id: %d (total: %d)\n", guild_id, p->storage_amount);
-	return 0;
-}
-
-//---------------------------------------------------------
-// storage data initialize
-int inter_storage_sql_init(){
-	
-	//memory alloc
-	printf("interserver storage memory initialize....(%d byte)\n",sizeof(struct storage));
-	storage_pt=calloc(sizeof(struct storage), 1);
-	guild_storage_pt=calloc(sizeof(struct guild_storage), 1);
-	memset(storage_pt,0,sizeof(struct storage));
-	memset(guild_storage_pt,0,sizeof(struct guild_storage));
-	
-	return 1;
-}
-// �q�Ƀf�[�^�폜
-int inter_storage_delete(int account_id)
-{
-		sprintf(tmp_sql, "DELETE FROM `%s` WHERE `account_id`='%d'",storage_db, account_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (delete `storage`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	return 0;
-}
-int inter_guild_storage_delete(int guild_id)
-{
-	sprintf(tmp_sql, "DELETE FROM `%s` WHERE `guild_id`='%d'",guild_storage_db, guild_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (delete `guild_storage`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	return 0;
-}
-
-//---------------------------------------------------------
-// packet from map server
-
-// recive packet about storage data
-int mapif_load_storage(int fd,int account_id){
-	//load from DB
-	storage_fromsql(account_id, storage_pt);
-	WFIFOW(fd,0)=0x3810;
-	WFIFOW(fd,2)=sizeof(struct storage)+8;
-	WFIFOL(fd,4)=account_id;
-	memcpy(WFIFOP(fd,8),storage_pt,sizeof(struct storage));
-	WFIFOSET(fd,WFIFOW(fd,2));
-	return 0;
-}
-// send ack to map server which is "storage data save ok."
-int mapif_save_storage_ack(int fd,int account_id){
-	WFIFOW(fd,0)=0x3811;
-	WFIFOL(fd,2)=account_id;
-	WFIFOB(fd,6)=0;
-	WFIFOSET(fd,7);
-	return 0;
-}
-
-int mapif_load_guild_storage(int fd,int account_id,int guild_id)
-{
-	int guild_exist=0;
-	WFIFOW(fd,0)=0x3818;
-	
-	// Check if guild exists, I may write a function for this later, coz I use it several times.
-	//printf("- Check if guild %d exists\n",g->guild_id);
-	sprintf(tmp_sql, "SELECT count(*) FROM `%s` WHERE `guild_id`='%d'",guild_db, guild_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (delete `guild`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-		sql_row = mysql_fetch_row(sql_res);
-		guild_exist =  atoi (sql_row[0]);
-		//printf("- Check if guild %d exists : %s\n",g->guild_id,((guild_exist==0)?"No":"Yes"));
-	}
-	mysql_free_result(sql_res) ; //resource free
-	
-	if(guild_exist==1) {
-		guild_storage_fromsql(guild_id,guild_storage_pt);
-		WFIFOW(fd,2)=sizeof(struct guild_storage)+12;
-		WFIFOL(fd,4)=account_id;
-		WFIFOL(fd,8)=guild_id;
-		memcpy(WFIFOP(fd,12),guild_storage_pt,sizeof(struct guild_storage));
-	}
-	else {
-		WFIFOW(fd,2)=12;
-		WFIFOL(fd,4)=account_id;
-		WFIFOL(fd,8)=0;
-	}
-	WFIFOSET(fd,WFIFOW(fd,2));
-
-	return 0;
-}
-int mapif_save_guild_storage_ack(int fd,int account_id,int guild_id,int fail)
-{
-	WFIFOW(fd,0)=0x3819;
-	WFIFOL(fd,2)=account_id;
-	WFIFOL(fd,6)=guild_id;
-	WFIFOB(fd,10)=fail;
-	WFIFOSET(fd,11);
-	return 0;
-}
-
-//---------------------------------------------------------
-// packet from map server
-
-// recive request about storage data
-int mapif_parse_LoadStorage(int fd){
-	mapif_load_storage(fd,RFIFOL(fd,2));
-	return 0;
-}
-// storage data recive and save
-int mapif_parse_SaveStorage(int fd){
-	int account_id=RFIFOL(fd,4);
-	int len=RFIFOW(fd,2);
-	
-	if(sizeof(struct storage)!=len-8){
-		printf("inter storage: data size error %d %d\n",sizeof(struct storage),len-8);
-	}else{
-		memcpy(&storage_pt[0],RFIFOP(fd,8),sizeof(struct storage));
-		storage_tosql(account_id, storage_pt);
-		mapif_save_storage_ack(fd,account_id);
-	}
-	return 0;
-}
-
-int mapif_parse_LoadGuildStorage(int fd)
-{
-	mapif_load_guild_storage(fd,RFIFOL(fd,2),RFIFOL(fd,6));
-	return 0;
-}
-
-int mapif_parse_SaveGuildStorage(int fd)
-{
-	int guild_exist=0;
-	int guild_id=RFIFOL(fd,8);
-	int len=RFIFOW(fd,2);
-	if(sizeof(struct guild_storage)!=len-12){
-		printf("inter storage: data size error %d %d\n",sizeof(struct guild_storage),len-12);
-	}
-	else {
-		// Check if guild exists, I may write a function for this later, coz I use it several times.
-		//printf("- Check if guild %d exists\n",g->guild_id);
-		sprintf(tmp_sql, "SELECT count(*) FROM `%s` WHERE `guild_id`='%d'",guild_db, guild_id);
-		if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error (delete `guild`)- %s\n", mysql_error(&mysql_handle) );
-		}
-		sql_res = mysql_store_result(&mysql_handle) ;
-		if (sql_res!=NULL && mysql_num_rows(sql_res)>0) {
-			sql_row = mysql_fetch_row(sql_res);
-			guild_exist =  atoi (sql_row[0]);
-			//printf("- Check if guild %d exists : %s\n",g->guild_id,((guild_exist==0)?"No":"Yes"));
-		}
-		mysql_free_result(sql_res) ; //resource free
-		
-		if(guild_exist==1) {
-			memcpy(guild_storage_pt,RFIFOP(fd,12),sizeof(struct guild_storage));
-			guild_storage_tosql(guild_id,guild_storage_pt);
-			mapif_save_guild_storage_ack(fd,RFIFOL(fd,4),guild_id,0);
-		}
-		else
-			mapif_save_guild_storage_ack(fd,RFIFOL(fd,4),guild_id,1);
-	}
-	return 0;
-}
-
-
-int inter_storage_parse_frommap(int fd){
-	switch(RFIFOW(fd,0)){
-	case 0x3010: mapif_parse_LoadStorage(fd); break;
-	case 0x3011: mapif_parse_SaveStorage(fd); break;
-	case 0x3018: mapif_parse_LoadGuildStorage(fd); break;
-	case 0x3019: mapif_parse_SaveGuildStorage(fd); break;
-	default:
-		return 0;
-	}
-	return 1;
-}
-
diff --git a/misc/src/char_sql/int_storage.h b/misc/src/char_sql/int_storage.h
deleted file mode 100644
index f9f37db..0000000
--- a/misc/src/char_sql/int_storage.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _INT_STORAGE_H_
-#define _INT_STORAGE_H_
-
-int inter_storage_sql_init();
-int inter_storage_delete(int account_id);
-int inter_guild_storage_delete(int guild_id);
-
-int inter_storage_parse_frommap(int fd);
-
-
-//extern char storage_txt[256];
-
-#endif
diff --git a/misc/src/char_sql/inter.c b/misc/src/char_sql/inter.c
deleted file mode 100644
index c8fa9b4..0000000
--- a/misc/src/char_sql/inter.c
+++ /dev/null
@@ -1,573 +0,0 @@
-//
-// original code from athena
-// SQL conversion by Jioh L. Jung
-//
-
-#include <string.h>
-#include <stdlib.h>
-
-#include "char.h"
-#include "strlib.h"
-#include "inter.h"
-#include "int_party.h"
-#include "int_guild.h"
-#include "int_storage.h"
-#include "int_pet.h"
-#include "lock.h"
-
-#define WISDATA_TTL		(60*1000)	// Wis�f�[�^�̐�������(60�b)
-#define WISDELLIST_MAX	256			// Wis�f�[�^�폜���X�g�̗v�f��
-
-
-struct accreg {
-	int account_id,reg_num;
-	struct global_reg reg[ACCOUNT_REG_NUM];
-};
-
-static struct accreg *accreg_pt;
-
-
-int party_share_level = 10;
-MYSQL mysql_handle;
-MYSQL_RES* 	sql_res ;
-MYSQL_ROW	sql_row ;
-int sql_fields, sql_cnt;
-char tmp_sql[65535];
-
-MYSQL lmysql_handle;
-char tmp_lsql[65535];
-MYSQL_RES* 	lsql_res ;
-MYSQL_ROW	lsql_row ;
-
-int char_server_port = 3306;
-char char_server_ip[32] = "127.0.0.1";
-char char_server_id[32] = "ragnarok";
-char char_server_pw[32] = "ragnarok";
-char char_server_db[32] = "ragnarok";
-
-int login_server_port = 3306;
-char login_server_ip[32] = "127.0.0.1";
-char login_server_id[32] = "ragnarok";
-char login_server_pw[32] = "ragnarok";
-char login_server_db[32] = "ragnarok";
-
-// sending packet list
-int inter_send_packet_length[]={
-	-1,-1,27, 0, -1, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	-1, 7, 0, 0,  0, 0, 0, 0, -1,11, 0, 0,  0, 0,  0, 0,
-	35,-1,11,15, 34,29, 7,-1,  0, 0, 0, 0,  0, 0,  0, 0,
-	10,-1,15, 0, 79,19, 7,-1,  0,-1,-1,-1, 14,67,186,-1,
-	 9, 9,-1, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	 0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	 0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	 0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	11,-1, 7, 3,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-};
-// recv. packet list
-int inter_recv_packet_length[]={
-	-1,-1, 7, 0, -1, 6, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	 6,-1, 0, 0,  0, 0, 0, 0, 10,-1, 0, 0,  0, 0,  0, 0,
-	72, 6,52,14, 10,29, 6,-1, 34, 0, 0, 0,  0, 0,  0, 0,
-	-1, 6,-1, 0, 55,19, 6,-1, 14,-1,-1,-1, 14,19,186,-1,
-	 5, 9, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	 0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	 0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	 0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	48,14,-1, 6,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-};
-
-struct WisData {
-	int id,fd,count,len;
-	unsigned long tick;
-	unsigned char src[24],dst[24],msg[512];
-};
-static struct dbt * wis_db = NULL;
-static int wis_dellist[WISDELLIST_MAX], wis_delnum;
-
-//--------------------------------------------------------
-// Save account_reg to sql (type=2)
-int inter_accreg_tosql(int account_id,struct accreg *reg){
-	
-	int j;
-	char temp_str[32];
-	if (account_id<=0) return 0;
-	reg->account_id=account_id;
-	
-	//`global_reg_value` (`type`, `account_id`, `char_id`, `str`, `value`)
-	sprintf(tmp_sql,"DELETE FROM `%s` WHERE `type`=2 AND `account_id`='%d'",reg_db, account_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (delete `global_reg_value`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	
-	if (reg->reg_num<=0) return 0;
-	
-	for(j=0;j<reg->reg_num;j++){
-		if(reg->reg[j].str != NULL){
-			sprintf(tmp_sql,"INSERT INTO `%s` (`type`, `account_id`, `str`, `value`) VALUES (2,'%d', '%s','%d')",
-				reg_db, reg->account_id, jstrescapecpy(temp_str,reg->reg[j].str), reg->reg[j].value);
-			if(mysql_query(&mysql_handle, tmp_sql) ) {
-				printf("DB server Error (insert `global_reg_value`)- %s\n", mysql_error(&mysql_handle) );
-			}
-		}
-	}
-	return 0;
-}
-
-// Load account_reg from sql (type=2)
-int inter_accreg_fromsql(int account_id,struct accreg *reg)
-{
-	int j=0;
-	if (reg==NULL) return 0;
-	memset(reg, 0, sizeof(struct accreg));
-	reg->account_id=account_id;
-	
-	//`global_reg_value` (`type`, `account_id`, `char_id`, `str`, `value`)
-	sprintf (tmp_sql, "SELECT `str`, `value` FROM `%s` WHERE `type`=2 AND `account_id`='%d'",reg_db, reg->account_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (select `global_reg_value`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	sql_res = mysql_store_result(&mysql_handle);
-
-	if (sql_res) {
-		for(j=0;(sql_row = mysql_fetch_row(sql_res));j++){	
-			memcpy(reg->reg[j].str, sql_row[0],32);
-			reg->reg[j].value = atoi(sql_row[1]);
-		}
-		mysql_free_result(sql_res);
-	}
-	reg->reg_num=j;
-	return 0;
-}
-
-// Initialize
-int inter_accreg_sql_init()
-{
-	CREATE(accreg_pt, struct accreg, 1);
-	return 0;
-	
-}
-
-/*==========================================
- * read config file
- *------------------------------------------
- */
-int inter_config_read(const char *cfgName) {
-	printf ("start reading interserver configuration: %s\n",cfgName);
-	int i;
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp;
-
-	fp=fopen(cfgName,"r");
-	if(fp==NULL){
-		printf("file not found: %s\n", cfgName);
-		return 1;
-	}
-	while(fgets(line, 1020, fp)){
-		i=sscanf(line,"%[^:]: %[^\r\n]",w1,w2);
-		if(i!=2)
-			continue;
-
-		if(strcmpi(w1,"char_server_ip")==0){
-			strcpy(char_server_ip, w2);
-			printf ("set char_server_ip : %s\n",w2);
-		}
-		else if(strcmpi(w1,"char_server_port")==0){
-			char_server_port=atoi(w2);
-			printf ("set char_server_port : %s\n",w2);
-		}
-		else if(strcmpi(w1,"char_server_id")==0){
-			strcpy(char_server_id, w2);
-			printf ("set char_server_id : %s\n",w2);
-		}
-		else if(strcmpi(w1,"char_server_pw")==0){
-			strcpy(char_server_pw, w2);
-			printf ("set char_server_pw : %s\n",w2);
-		}
-		else if(strcmpi(w1,"char_server_db")==0){
-			strcpy(char_server_db, w2);
-			printf ("set char_server_db : %s\n",w2);
-		}
-		//Logins information to be read from the inter_athena.conf
-		//for character deletion (checks email in the loginDB)
-		
-		else if(strcmpi(w1,"login_server_ip")==0){
-			strcpy(login_server_ip, w2);
-			printf ("set login_server_ip : %s\n",w2);
-		}
-		else if(strcmpi(w1,"login_server_port")==0){
-			login_server_port=atoi(w2);
-			printf ("set login_server_port : %s\n",w2);
-		}
-		else if(strcmpi(w1,"login_server_id")==0){
-			strcpy(login_server_id, w2);
-			printf ("set login_server_id : %s\n",w2);
-		}
-		else if(strcmpi(w1,"login_server_pw")==0){
-			strcpy(login_server_pw, w2);
-			printf ("set login_server_pw : %s\n",w2);
-		}
-		else if(strcmpi(w1,"login_server_db")==0){
-			strcpy(login_server_db, w2);
-			printf ("set login_server_db : %s\n",w2);
-		}
-		else if(strcmpi(w1,"party_share_level")==0){
-			party_share_level=atoi(w2);
-			if(party_share_level < 0) party_share_level = 0;
-		}else if(strcmpi(w1,"import")==0){
-			inter_config_read(w2);
-		}
-		else if(strcmpi(w1,"login_server_db")==0){
-			strcpy(login_server_db, w2);
-			printf ("set login_server_db : %s\n",w2);
-		}
-	}
-	fclose(fp);
-	
-	printf ("success reading interserver configuration\n");
-
-	return 0;
-}
-
-// Save interlog into sql
-int inter_log(char *fmt,...)
-{
-	char str[255];
-	char temp_str[255];
-	va_list ap;
-	va_start(ap,fmt);
-
-	vsprintf(str,fmt,ap);
-	sprintf(tmp_sql,"INSERT INTO `%s` (`time`, `log`) VALUES (NOW(),  '%s')",interlog_db, jstrescapecpy(temp_str,str));
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error (insert `interlog`)- %s\n", mysql_error(&mysql_handle) );
-	}	
-
-	va_end(ap);
-	return 0;
-}
-
-
-// initialize
-int inter_init(const char *file)
-{
-	//int i;
-	
-	printf ("interserver initialize...\n");
-	inter_config_read(file);
-	
-	//DB connection initialized
-	mysql_init(&mysql_handle);
-	printf("Connect Character DB server.... (Character Server)\n");
-	if(!mysql_real_connect(&mysql_handle, char_server_ip, char_server_id, char_server_pw,
-		char_server_db ,char_server_port, (char *)NULL, 0)) {
-			//pointer check
-			printf("%s\n",mysql_error(&mysql_handle));
-			exit(1);
-	}
-	else {
-		printf ("Connect Success! (Character Server)\n");
-	}
-	
-	mysql_init(&lmysql_handle);
-	printf("Connect Character DB server.... (login server)\n");
-	if(!mysql_real_connect(&lmysql_handle, login_server_ip, login_server_id, login_server_pw,
-		login_server_db ,login_server_port, (char *)NULL, 0)) {
-			//pointer check
-			printf("%s\n",mysql_error(&lmysql_handle));
-			exit(1);
-	}else {
-		printf ("Connect Success! (Login Server)");
-	}
-	wis_db = numdb_init();
-	inter_guild_sql_init();
-	inter_storage_sql_init();
-	inter_party_sql_init();
-	
-	inter_pet_sql_init();
-	inter_accreg_sql_init();
-
-	//printf ("interserver timer initializing : %d sec...\n",autosave_interval);
-	//i=add_timer_interval(gettick()+autosave_interval,inter_save_timer,0,0,autosave_interval);
-
-	return 0;
-}
-
-int inter_mapif_init(int fd) {
-	inter_guild_mapif_init(fd);
-
-	return 0;
-}
-
-
-//--------------------------------------------------------
-
-// GM message sending
-int mapif_GMmessage(unsigned char *mes, int len) {
-	unsigned char buf[len];
-
-	WBUFW(buf, 0) = 0x3800;
-	WBUFW(buf, 2) = len;
-	memcpy(WBUFP(buf, 4), mes, len-4);
-	mapif_sendall(buf, len);
-	printf("\033[1;34m inter server: GM[len:%d] - '%s' \033[0m\n", len, mes);
-	return 0;
-}
-
-// Wis sending
-int mapif_wis_message(struct WisData *wd) {
-	unsigned char buf[56 + wd->len];
-
-	WBUFW(buf, 0) = 0x3801;
-	WBUFW(buf, 2) = 56 +wd->len;
-	WBUFL(buf, 4) = wd->id;
-	memcpy(WBUFP(buf, 8), wd->src, 24);
-	memcpy(WBUFP(buf,32), wd->dst, 24);
-	memcpy(WBUFP(buf,56), wd->msg, wd->len);
-	wd->count = mapif_sendall(buf,WBUFW(buf,2));
-
-	return 0;
-}
-// Wis sending result
-int mapif_wis_end(struct WisData *wd,int flag)
-{
-	unsigned char buf[27];
-	
-	WBUFW(buf, 0)=0x3802;
-	memcpy(WBUFP(buf, 2),wd->src,24);
-	WBUFB(buf,26)=flag;
-	mapif_send(wd->fd,buf,27);
-//	printf("inter server wis_end %d\n",flag);
-	return 0;
-}
-
-int mapif_account_reg(int fd,unsigned char *src)
-{
-	unsigned char buf[WBUFW(src,2)];
-	memcpy(WBUFP(buf,0),src,WBUFW(src,2));
-	WBUFW(buf, 0)=0x3804;
-	mapif_sendallwos(fd,buf,WBUFW(buf,2));
-	return 0;
-}
-
-// Send the requested account_reg
-int mapif_account_reg_reply(int fd,int account_id)
-{
-	struct accreg *reg=accreg_pt;
-	inter_accreg_fromsql(account_id,reg);
-	
-	WFIFOW(fd,0)=0x3804;
-	WFIFOL(fd,4)=account_id;
-	if(reg->reg_num==0){
-		WFIFOW(fd,2)=8;
-	}else{
-		int j,p;
-		for(j=0,p=8;j<reg->reg_num;j++,p+=36){
-			memcpy(WFIFOP(fd,p),reg->reg[j].str,32);
-			WFIFOL(fd,p+32)=reg->reg[j].value;
-		}
-		WFIFOW(fd,2)=p;
-	}
-	WFIFOSET(fd,WFIFOW(fd,2));
-	return 0;
-}
-
-//--------------------------------------------------------
-
-// Existence check of WISP data
-int check_ttl_wisdata_sub(void *key, void *data, va_list ap) {
-	unsigned long tick;
-	struct WisData *wd = (struct WisData *)data;
-	tick = va_arg(ap, unsigned long);
-
-	if (DIFF_TICK(tick, wd->tick) > WISDATA_TTL && wis_delnum < WISDELLIST_MAX)
-		wis_dellist[wis_delnum++] = wd->id;
-
-	return 0;
-}
-
-int check_ttl_wisdata() {
-	unsigned long tick = gettick();
-	int i;
-
-	do {
-		wis_delnum = 0;
-		numdb_foreach(wis_db, check_ttl_wisdata_sub, tick);
-		for(i = 0; i < wis_delnum; i++) {
-			struct WisData *wd = numdb_search(wis_db, wis_dellist[i]);
-			printf("inter: wis data id=%d time out : from %s to %s\n", wd->id, wd->src, wd->dst);
-			// removed. not send information after a timeout. Just no answer for the player
-			//mapif_wis_end(wd, 1); // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-			numdb_erase(wis_db, wd->id);
-			free(wd);
-		}
-	} while(wis_delnum >= WISDELLIST_MAX);
-
-	return 0;
-}
-
-//--------------------------------------------------------
-
-// GM message sending
-int mapif_parse_GMmessage(int fd)
-{
-	mapif_GMmessage(RFIFOP(fd, 4), RFIFOW(fd, 2));
-	return 0;
-}
-
-
-// Wisp/page request to send
-int mapif_parse_WisRequest(int fd) {
-	struct WisData* wd;
-	static int wisid = 0;
-
-	if (RFIFOW(fd,2)-52 >= sizeof(wd->msg)) {
-		printf("inter: Wis message size too long.\n");
-		return 0;
-	} else if (RFIFOW(fd,2)-52 <= 0) { // normaly, impossible, but who knows...
-		printf("inter: Wis message doesn't exist.\n");
-		return 0;
-	}
-	sprintf (tmp_sql, "SELECT `name` FROM `%s` WHERE `char_id`='%d'",char_db, (int) RFIFOP(fd,28));
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-	}
-	sql_res = mysql_store_result(&mysql_handle);
-
-	// search if character exists before to ask all map-servers
-	if (!(sql_row = mysql_fetch_row(sql_res))) {
-		unsigned char buf[27];
-		WBUFW(buf, 0) = 0x3802;
-		memcpy(WBUFP(buf, 2), RFIFOP(fd, 4), 24);
-		WBUFB(buf,26) = 1; // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-		mapif_send(fd, buf, 27);
-	// Character exists. So, ask all map-servers
-	} else {
-		// to be sure of the correct name, rewrite it
-		memset(RFIFOP(fd,28), 0, 24);
-		strncpy(RFIFOP(fd,28), sql_row[0], 24);
-		// if source is destination, don't ask other servers.
-		if (strcmp(RFIFOP(fd,4),RFIFOP(fd,28)) == 0) {
-			unsigned char buf[27];
-			WBUFW(buf, 0) = 0x3802;
-			memcpy(WBUFP(buf, 2), RFIFOP(fd, 4), 24);
-			WBUFB(buf,26) = 1; // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-			mapif_send(fd, buf, 27);
-		} else {
-
-	CREATE(wd, struct WisData, 1);
-
-			// Whether the failure of previous wisp/page transmission (timeout)
-			check_ttl_wisdata();
-
-			wd->id = ++wisid;
-			wd->fd = fd;
-			wd->len= RFIFOW(fd,2)-52;
-			memcpy(wd->src, RFIFOP(fd, 4), 24);
-			memcpy(wd->dst, RFIFOP(fd,28), 24);
-			memcpy(wd->msg, RFIFOP(fd,52), wd->len);
-			wd->tick = gettick();
-			numdb_insert(wis_db, wd->id, wd);
-			mapif_wis_message(wd);
-		}
-	}
-
-	return 0;
-}
-
-
-// Wisp/page transmission result
-int mapif_parse_WisReply(int fd) {
-	int id = RFIFOL(fd,2), flag = RFIFOB(fd,6);
-	struct WisData *wd = numdb_search(wis_db, id);
-
-	if (wd == NULL)
-		return 0;	// This wisp was probably suppress before, because it was timeout of because of target was found on another map-server
-
-	if ((--wd->count) <= 0 || flag != 1) {
-		mapif_wis_end(wd, flag); // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-		numdb_erase(wis_db, id);
-		free(wd);
-	}
-
-	return 0;
-}
-
-
-// Save account_reg into sql (type=2)
-int mapif_parse_AccReg(int fd)
-{
-	int j,p;
-	struct accreg *reg=accreg_pt;
-	int account_id = RFIFOL(fd,4);
-	memset(accreg_pt,0,sizeof(struct accreg));
-	
-	for(j=0,p=8;j<ACCOUNT_REG_NUM && p<RFIFOW(fd,2);j++,p+=36){
-		memcpy(reg->reg[j].str,RFIFOP(fd,p),32);
-		reg->reg[j].value=RFIFOL(fd,p+32);
-	}
-	reg->reg_num=j;
-	
-	inter_accreg_tosql(account_id,reg);
-	mapif_account_reg(fd,RFIFOP(fd,0));	// Send confirm message to map
-	return 0;
-}
-
-// Request the value of account_reg
-int mapif_parse_AccRegRequest(int fd)
-{
-//	printf("mapif: accreg request\n");
-	return mapif_account_reg_reply(fd,RFIFOL(fd,2));
-}
-
-
-
-//--------------------------------------------------------
-int inter_parse_frommap(int fd)
-{
-	int cmd=RFIFOW(fd,0);
-	int len=0;
-
-	// inter�I�NJ����𒲂ׂ�
-	if(cmd<0x3000 || cmd>=0x3000+( sizeof(inter_recv_packet_length)/
-		sizeof(inter_recv_packet_length[0]) ) )
-		return 0;
-
-	// �p�P�b�g���𒲂ׂ�
-	if(	(len=inter_check_length(fd,inter_recv_packet_length[cmd-0x3000]))==0 )
-		return 2;
-	
-	switch(cmd){
-	case 0x3000: mapif_parse_GMmessage(fd); break;
-	case 0x3001: mapif_parse_WisRequest(fd); break;
-	case 0x3002: mapif_parse_WisReply(fd); break;
-	case 0x3004: mapif_parse_AccReg(fd); break;
-	case 0x3005: mapif_parse_AccRegRequest(fd); break;
-	default:
-		if( inter_party_parse_frommap(fd) )
-			break;
-		if( inter_guild_parse_frommap(fd) )
-			break;
-		if( inter_storage_parse_frommap(fd) )
-			break;
-		if( inter_pet_parse_frommap(fd) )
-			break;
-		return 0;
-	}
-	RFIFOSKIP(fd, len );
-	return 1;
-}
-
-// RFIFO check
-int inter_check_length(int fd, int length)
-{
-	if(length==-1){	// v-len packet
-		if(RFIFOREST(fd)<4)	// packet not yet
-			return 0;
-		length = RFIFOW(fd, 2);
-	}
-	
-	if(RFIFOREST(fd)<length)	// packet not yet
-		return 0;
-	
-	return length;
-}
diff --git a/misc/src/char_sql/inter.h b/misc/src/char_sql/inter.h
deleted file mode 100644
index 841d534..0000000
--- a/misc/src/char_sql/inter.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef _INTER_H_
-#define _INTER_H_
-
-int inter_init(const char *file);
-int inter_parse_frommap(int fd);
-int inter_mapif_init(int fd);
-
-
-int inter_check_length(int fd,int length);
-
-int inter_log(char *fmt,...);
-
-#define inter_cfgName "conf/inter_athena.conf"
-
-extern int party_share_level;
-extern char inter_log_filename[1024];
-
-//add include for DBMS(mysql)
-#include <mysql.h>
-
-extern MYSQL mysql_handle;
-extern char tmp_sql[65535];
-extern MYSQL_RES* 	sql_res ;
-extern MYSQL_ROW	sql_row ;
-extern int 	sql_cnt;
-
-extern MYSQL lmysql_handle;
-extern char tmp_lsql[65535];
-extern MYSQL_RES* 	lsql_res ;
-extern MYSQL_ROW	lsql_row ;
-
-extern int char_server_port;
-extern char char_server_ip[32];
-extern char char_server_id[32];
-extern char char_server_pw[32];
-extern char char_server_db[32];
-
-extern int login_db_server_port;
-extern char login_db_server_ip[32];
-extern char login_db_server_id[32];
-extern char login_db_server_pw[32];
-extern char login_db_server_db[32];
-
-#endif
diff --git a/misc/src/char_sql/itemdb.c b/misc/src/char_sql/itemdb.c
deleted file mode 100644
index 0bed07c..0000000
--- a/misc/src/char_sql/itemdb.c
+++ /dev/null
@@ -1,247 +0,0 @@
-// $Id: itemdb.c,v 1.1.1.1 2004/09/10 17:44:48 MagicalTux Exp $
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "itemdb.h"
-#include "db.h"
-#include "inter.h"
-#include "char.h"
-#include "utils.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-#define MAX_RANDITEM	2000
-
-// ** ITEMDB_OVERRIDE_NAME_VERBOSE **
-//   ��`����ƁAitemdb.txt��grf�Ŗ��O���قȂ�ꍇ�A�\�����܂�.
-//#define ITEMDB_OVERRIDE_NAME_VERBOSE	1
-
-char item_db_db[256]="item_db"; // added to specify item_db sql table [Valaris]
-
-static struct dbt* item_db;
-
-/*==========================================
- * DB�̌���
- *------------------------------------------
- */
-struct item_data* itemdb_search(int nameid)
-{
-	struct item_data *id;
-
-	id=numdb_search(item_db,nameid);
-	if(id) return id;
-
-	CREATE(id, struct item_data, 1);
-
-	numdb_insert(item_db,nameid,id);
-
-
-	if(nameid>500 && nameid<600)
-		id->type=0;   //heal item
-	else if(nameid>600 && nameid<700)
-		id->type=2;   //use item
-	else if((nameid>700 && nameid<1100) ||
-			(nameid>7000 && nameid<8000))
-		id->type=3;   //correction
-	else if(nameid>=1750 && nameid<1771)
-		id->type=10;  //arrow
-	else if(nameid>1100 && nameid<2000)
-		id->type=4;   //weapon
-	else if((nameid>2100 && nameid<3000) ||
-			(nameid>5000 && nameid<6000))
-		id->type=5;   //armor
-	else if(nameid>4000 && nameid<5000)
-		id->type=6;   //card
-	else if(nameid>9000 && nameid<10000)
-		id->type=7;   //egg
-	else if(nameid>10000)
-		id->type=8;   //petequip
-
-	return id;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int itemdb_isequip(int nameid)
-{
-	int type=itemdb_type(nameid);
-	if(type==0 || type==2 || type==3 || type==6 || type==10)
-		return 0;
-	return 1;
-}
-/*==========================================
- *
- *------------------------------------------
- */
-int itemdb_isequip2(struct item_data *data)
-{
-	if(data) {
-		int type=data->type;
-		if(type==0 || type==2 || type==3 || type==6 || type==10)
-			return 0;
-		else
-			return 1;
-	}
-	return 0;
-}
-
-
-
-/*==========================================
- * �A�C�e���f�[�^�x�[�X�̓ǂݍ���
- *------------------------------------------
- */
-static int itemdb_readdb(void)
-{
-	FILE *fp;
-	char line[1024];
-	int ln=0;
-	int nameid,j;
-	char *str[32],*p,*np;
-	struct item_data *id;
-
-	fp=fopen("db/item_db.txt","r");
-	if(fp==NULL){
-		printf("can't read db/item_db.txt\n");
-		exit(1);
-	}
-	while(fgets(line,1020,fp)){
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		memset(str,0,sizeof(str));
-		for(j=0,np=p=line;j<17 && p;j++){
-			str[j]=p;
-			p=strchr(p,',');
-			if(p){ *p++=0; np=p; }
-		}
-		if(str[0]==NULL)
-			continue;
-		
-		nameid=atoi(str[0]);
-		if(nameid<=0 || nameid>=20000)
-			continue;
-		ln++;
-
-		//ID,Name,Jname,Type,Price,Sell,Weight,ATK,DEF,Range,Slot,Job,Gender,Loc,wLV,eLV,View
-		id=itemdb_search(nameid);
-		memcpy(id->name,str[1],24);
-		memcpy(id->jname,str[2],24);
-		id->type=atoi(str[3]);
-
-	}
-	fclose(fp);
-	printf("read db/item_db.txt done (count=%d)\n",ln);
-	return 0;
-}
-
-static int itemdb_read_sqldb(void) // sql item_db read, shortened version of map-server item_db read [Valaris]
-{
-	unsigned int nameid; 	// Type should be "unsigned short int", but currently isn't for compatibility with numdb_insert()
-	struct item_data *id;
-
-	// ----------
-
-	// Output query to retrieve all rows from the item database table
-	sprintf(tmp_sql, "SELECT * FROM `%s`", item_db_db);
-
-	// Execute the query; if the query execution fails, output an error
-	if (mysql_query(&mysql_handle, tmp_sql)) {
-		printf("Database server error (executing query for %s): %s\n", item_db_db, mysql_error(&mysql_handle));
-	}
-
-	// Store the query result
-	sql_res = mysql_store_result(&mysql_handle);
-
-	// If the storage of the query result succeeded
-	if (sql_res) {
-		// Parse each row in the query result into sql_row
-		while ((sql_row = mysql_fetch_row(sql_res))) {
-			nameid = atoi(sql_row[0]);
-
-			// If the identifier is not within the valid range, process the next row
-			if (nameid == 0 || nameid >= 20000)	{	// Should ">= 20000" be "> 20000"?
-				continue;
-			}
-
-			// ----------
-
-			// Insert a new row into the item database
-/*
-			id = calloc(sizeof(struct item_data), 1);
-
-			if (id == NULL) {
-				printf("out of memory : itemdb_read_sqldb\n");
-				exit(1);
-			}
-
-			memset(id, 0, sizeof(struct item_data));
-			numdb_insert(item_db, nameid, id);
-
-			// ----------
-*/
-            id=itemdb_search(nameid);
-             
-			memcpy(id->name, sql_row[1], 24);
-			memcpy(id->jname, sql_row[2], 24);
-
-			id->type = atoi(sql_row[3]);
-		}
-
-		// If the retrieval failed, output an error
-		if (mysql_errno(&mysql_handle)) {
-			printf("Database server error (retrieving rows from %s): %s\n", item_db_db, mysql_error(&mysql_handle));
-		}
-
-		printf("read %s done (count = %lu)\n", item_db_db, (unsigned long) mysql_num_rows(sql_res));
-
-		// Free the query result
-		mysql_free_result(sql_res);
-	} else {
-		printf("MySQL error (storing query result for %s): %s\n", item_db_db, mysql_error(&mysql_handle));
-	}
-
-	return 0;
-}
-
-static int itemdb_final(void *key,void *data,va_list ap)
-{
-	struct item_data *id;
-
-	id=data;
-	if(id->use_script)
-		free(id->use_script);
-	if(id->equip_script)
-		free(id->equip_script);
-	free(id);
-
-	return 0;
-}
-
-
-/*==========================================
- *
- *------------------------------------------
- */
-void do_final_itemdb(void)
-{
-	if(item_db){
-		numdb_final(item_db,itemdb_final);
-		item_db=NULL;
-	}
-}
-int do_init_itemdb(void)
-{
-	item_db = numdb_init();
-
-	if (db_use_sqldbs) // it db_use_sqldbs in inter config are yes, will read from item_db for char server display [Valaris]
-		itemdb_read_sqldb();
-	else
-	itemdb_readdb();
-	return 0;
-}
-
diff --git a/misc/src/char_sql/itemdb.h b/misc/src/char_sql/itemdb.h
deleted file mode 100644
index dea835e..0000000
--- a/misc/src/char_sql/itemdb.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef _ITEMDB_H_
-#define _ITEMDB_H_
-
-struct item_data {
-	int nameid;
-	char name[24],jname[24];
-	int value_buy,value_sell,value_notdc,value_notoc;
-	int type;
-	int class;
-	int sex;
-	int equip;
-	int weight;
-	int atk;
-	int def;
-	int range;
-	int slot;
-	int look;
-	int elv;
-	int wlv;
-	char *use_script;	// �񕜂Ƃ����S�����̒��ł�낤���Ȃ�
-	char *equip_script;	// �U��,�h��̑����ݒ�����̒��ʼn”\����?
-	char available;
-};
-
-struct item_data* itemdb_search(int nameid);
-#define itemdb_type(n) itemdb_search(n)->type
-
-int itemdb_isequip(int);
-int itemdb_isequip2(struct item_data *);
-
-void do_final_itemdb(void);
-int do_init_itemdb(void);
-
-#endif
diff --git a/misc/src/char_sql/make.sh b/misc/src/char_sql/make.sh
deleted file mode 100644
index a4ca8b5..0000000
--- a/misc/src/char_sql/make.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-	rsqlt=`rm -rf *.o`
-	gcc -c char.c -I/usr/local/include/mysql/
-	gcc -c int_guild.c -I/usr/local/include/mysql/
-	gcc -c int_party.c -I/usr/local/include/mysql/
-	gcc -c int_pet.c -I/usr/local/include/mysql/
-	gcc -c int_storage.c -I/usr/local/include/mysql/
-	gcc -c inter.c -I/usr/local/include/mysql/
-	gcc -c strlib.c
-	gcc -c itemdb.c -I../common/
-	gcc -o ../char-server inter.o char.o int_pet.o int_storage.o int_guild.o int_party.o strlib.o itemdb.o ../common/core.o ../common/socket.o ../common/timer.o ../common/db.o -L/usr/local/lib/mysql -lmysqlclient -lz
diff --git a/misc/src/char_sql/readme.txt b/misc/src/char_sql/readme.txt
deleted file mode 100644
index 41b1144..0000000
--- a/misc/src/char_sql/readme.txt
+++ /dev/null
@@ -1,250 +0,0 @@
-//Encoded with UTF-8 (UNICODE)
-//---------------------------------------------
-// V.018 - Aarlex
-1. ADD Makefile & GNUmakefile
-2. fix guild_leave.
-3. fix char select windows HP & SP value error.
-
-// V.017 - Aarlex
-1. fix guild member view job update.(For mod-0728)
-   inter.c
-   int_guild.c
-
-// V.016 - by Aarlex
-1. Add e-mail check when you Delete char data.
-2. modify storage save func like 014.
-2. remove Lan_support func.
-
-// v.014 - by Aarlex
-I rewrite save function.
-besause myfriend find that Mysql will use more than 40% CPU.
-And log file is too big (4 days 22G ..= =+)
-(maybe he sets autosave_time less then 1 min.)
-but. i still rewrite save func.
-char server will delete all of user item(inventory & Cart) data then insert them again before.
-so i use two struct to save item data from map & database.
-then compare two struct to get different .
-AND add some debug message.but message maybe too much XD.
-
-
-1. ADDED itemdb.c itemdb.h
-2. modify mmo_char_tosql().
-3. ADDED memitemdata_to_sql().
-4. ADDED some debug message in memitemdata_to_sql().
-5. modify make.sh 
-
-// v.013 - by Aarlex
-1. some SQL sentance fix in old version Mysql .
-
-2. in_guild.c mapif_guild_leaved() 
-   unsigned char buf[64] -> unsigned char buf[128]
-
-3. in_pet.c inter_pet_tosql()
-   if (sql_res) - > if (mysql_num_rows(sql_res)!=0)
-
-4. in_char.c mmo_char_send006b()
-
-   WFIFOW(fd, offset+(i*106)+42) = char_dat[0].hp     -> WFIFOW(fd,offset+(i*106)+42) = (char_dat[j].hp > 0x7fff)? 0x7fff:char_dat[j].hp;
-   WFIFOW(fd, offset+(i*106)+44) = char_dat[0].max_hp -> WFIFOW(fd,offset+(i*106)+44) = (char_dat[j].max_hp > 0x7fff)? 0x7fff:char_dat[j].max_hp;
-   WFIFOW(fd, offset+(i*106)+46) = char_dat[0].sp     -> WFIFOW(fd,offset+(i*106)+46) = (char_dat[j].sp > 0x7fff)? 0x7fff:char_dat[j].sp
-   WFIFOW(fd, offset+(i*106)+48) = char_dat[0].max_sp -> WFIFOW(fd,offset+(i*106)+48) = (char_dat[j].max_sp > 0x7fff)? 0x7fff:char_dat[j].max_sp;
-
-   in_char.c parse_char()  
-
-   WFIFOW(fd, offset+(i*106)+42) = char_dat[0].hp     -> WFIFOW(fd,offset+(i*106)+42) = (char_dat[j].hp > 0x7fff)? 0x7fff:char_dat[j].hp;
-   WFIFOW(fd, offset+(i*106)+44) = char_dat[0].max_hp -> WFIFOW(fd,offset+(i*106)+44) = (char_dat[j].max_hp > 0x7fff)? 0x7fff:char_dat[j].max_hp;
-   WFIFOW(fd, offset+(i*106)+46) = char_dat[0].sp     -> WFIFOW(fd,offset+(i*106)+46) = (char_dat[j].sp > 0x7fff)? 0x7fff:char_dat[j].sp
-   WFIFOW(fd, offset+(i*106)+48) = char_dat[0].max_sp -> WFIFOW(fd,offset+(i*106)+48) = (char_dat[j].max_sp > 0x7fff)? 0x7fff:char_dat[j].max_sp;
-
-// v.012 - by Jazz
-1. 0627 official versionに合わせて修正しました.
-2. no more binary files are supplied.
-
-//---------------------------------------------
-// v.011 - by Mark
-1. Fixed a couple bugs which would cause segfaults under linux :)
-
-//---------------------------------------------
-// v.010 - by Jazz
-1. added some debug info - for reporting.
-
-//---------------------------------------------
-// v.009 - by Jazz
-1. code added for debug.
-2. some SQL sentance fix.
-
-//---------------------------------------------
-// v.009 - by Jazz
-1. fix crash bug. - pet db.
-
-//---------------------------------------------
-// v.008 - by Jazz
-1. DB table fix. - char.fix-from.007.to.008.sql
-
-既存の table 構造には矢が装着解除される場合があります.
-
-item.equipは 'unsigned short' 形式です. 
-このために SQL tableを修正しなければなりません.
-
-修正コードは char.fix-from.007.to.008.sql です.
-MySQLで一度行ってくれれば適用されます. 既存のデータは安全です.
-
-//---------------------------------------------
-// v.007 - by Jazz
-1. domain 解釈に対する問題を修正しました.
-
-//---------------------------------------------
-// v.006 - by Jazz
-1. crash bug fix. - when your pet DB is empty
-
-//---------------------------------------------
-// v.005 - by Jazz
-1. 0590 official versionに合わせて修正しました.
-
-//---------------------------------------------
-// v.004 - by Jazz
-1. 0586 official versionに合わせて修正しました.
-
-//---------------------------------------------
-// v.003 - by Jazz
-1. officialの guild.c と party.c ファイルでまた再修正しました.
-
-//---------------------------------------------
-// v.002 - by Jazz
-1. aphostropy 問題を解決しました. これは保安と連関がある問題です.
-2. SQLの構造を修正しました.
-
-//---------------------------------------------
-// v.001 - by Jazz
-1. 一番目安定 versionです. alpha versionに問題点を多数修正しました.
-
-//------------------------------------------------------------------------
-//For JAPANESE USER
-Athena Char-Server for MySQL. 005
-
-一応 guildと partyはよく呼び出しされる部分なので既存の athena char-serverが使っている file 基盤の構造を持って行きます.
-これは, 一度にメモリーで皆読んで, もう一度に皆 fileで使う方が部下が少なくかかると思います.
-そして char データに比べて, lostになっても問題がもっと少ないと判断してそうしました.
-
-MySQLバージョンの compileは MySQL Clients Libraryが必要です. windows(cygwin) バージョンにコンパイルされた binaryを添付しました.
-
-設置:
-まだ text->DBの converterはまともに支援しないです. 内部的にちょっとバグが発見されてバグを修正中です.
-できるだけ早く uploadをします.
-
-1. char.sqlを MySQLに dumpします.
-
-2. inter_athena.confに次を追加します. そして自分の DBサーバーの情報に合わせてくれます.
-ここで windows(cygwin)の場合には localhostを使ってはいけないです. ipで書いてくれなければなりません.
-localhostで使う場合 UNIX domain socketが作動するから連結が不可能になります.
-
-//3306 is default
-db_server_port: 3306
-//DB ip
-db_server_ip: 127.0.0.1
-//DB id
-db_server_id: ragnarok
-//DB pass
-db_server_pw: ragnarok
-//DB name
-db_server_logindb: ragnarok
-
-3. MySQL バージョンは 2個の MySQL connect sessionを持ちます.
-一つはキャラクターデータを読んで書くのに使われて, 二番目は inter serverのために連結します.
-
-開発とテスト環境は P4 2.4a/1024MB/WinXP pro(MediaCenter Edition 2K4 KR)/Cygwin GCC です.
-本人が韓国人だから韓国語開発者の連絡も歓迎します.
-韓国語と日本語の上手な方は連絡をください. 日本語の使用に難しさを感じています.
-
-現在 DarkWeissが login serverに MySQLを支援し始めました.
-しかし athenaのそれは DarkWeiss よりもっとよく作動すると思います.
-
-contact : jazz@creper.com
-
-//------------------------------------------------------------------------
-//For KOREAN USER
-Athena Char-Server for MySQL. 005
-
-일단 guild와 party는 자주 호출되는 부분이라서 기존의 athena char-server가 사용하고 있는 file 기반의 구조를 가지고 갑니다.
-이 것은, 한번에 메모리로 모두 읽고, 다시 한번에 모두 file로 쓰는 쪽이 부하가 적게 걸린다고 생각합니다.
-그리고 char 데이터에 비해, lost가 되더라도 문제가 더 적다고 판단해서 그렇게 하였습니다.
-
-MySQL버전의 compile은 MySQL Clients Library가 필요합니다. windows(cygwin) 버전으로 컴파일된 binary를 첨부하였습니다.
-
-설치:
-아직 text->DB의 converter는 제대로 지원하지 않습니다. 내부적으로 약간 버그가 발견되어 버그를 수정중입니다.
-되도록 빨리 upload를 하겠습니다.
-
-1. char.sql을 MySQL에 dump합니다.
-
-2. inter_athena.conf에 다음을 추가 합니다. 그리고 자신의 DB서버의 정보에 맞추어 줍니다.
-여기에서 windows(cygwin)의 경우에는 localhost를 쓰면 안됩니다. ip로 적어주어야 합니다.
-localhost로 사용하는 경우 UNIX domain socket이 작동 하기 때문에 연결이 불가능해 집니다.
-
-//3306 is default
-db_server_port: 3306
-//DB ip
-db_server_ip: 127.0.0.1
-//DB id
-db_server_id: ragnarok
-//DB pass
-db_server_pw: ragnarok
-//DB name
-db_server_logindb: ragnarok
-
-3. MySQL 버전은 2개의 MySQL connect session을 가집니다.
-하나는 캐릭터 데이터를 읽고 쓰는데 사용되며, 두번째는 inter server를 위해서 연결합니다.
-
-개발과 테스트 환경은 P4 2.4a/1024MB/WinXP pro(MediaCenter Edition 2K4 KR)/Cygwin GCC 입니다.
-본인이 한국인이기 때문에 한국어 개발자의 연락도 환영합니다.
-한국어와 일본어가 능숙한 분은 연락을 주세요. 일본어의 사용에 어려움을 느끼고 있습니다.
-
-현재 DarkWeiss가 login server에 MySQL을 지원하기 시작했습니다.
-하지만 athena의 그것은 DarkWeiss 보다 더 잘 작동한다고 생각합니다.
-
-contact : jazz@creper.com
-
-//------------------------------------------------------------------------
-//For ENGLISH USER
-Athena Char-Server for MySQL. alpha 005
-
-= hehe. My English is poor. and I have no time to write. :)
-
-anyway this version use guild and party data on text file base system.
-It accesses many times, so memory dumping is useful for less cpu consume.
-
-MySQL version need MySQL Clients Library to compile. This include Win32-binary compiled by cygwin-gcc.
-
-Install:
-not yet text->DB converter. I found some bug on it, so It's under debug progress.
-
-1. dump char.sql to MySQL.
-
-2. add below on inter_athena.conf. and set your own information.
-do not use 'localhost' as domain on cygwin. you must set as ip.
-if you use localhost on cygwin, cygwin tries to connect MySQL as UNIX domain socket.
-but, MySQL does not support UNIX domain socket on windows.
-
-//3306 is default
-db_server_port: 3306
-//DB ip
-db_server_ip: 127.0.0.1
-//DB id
-db_server_id: ragnarok
-//DB pass
-db_server_pw: ragnarok
-//DB name
-db_server_logindb: ragnarok
-
-3. MySQL version has 2 MySQL connect session.
-one is for char-server and the other one is for inter-server.
-
-developement enviroment)
- P4 2.4a/1024MB/WinXP pro(MediaCenter Edition 2K4 KR)/Cygwin GCC
-
-I'm korean, so contect if U're Korean developer.
-Please contact me, If U can use Korean & Japanese well.
-
-DarkWeiss starts to support MySQL version of login server, but Athena's one works better, I thnik.
-
-contact : jazz@creper.com
diff --git a/misc/src/char_sql/strlib.c b/misc/src/char_sql/strlib.c
deleted file mode 100644
index b113d96..0000000
--- a/misc/src/char_sql/strlib.c
+++ /dev/null
@@ -1,79 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "strlib.h"
-#include "utils.h"
-
-//-----------------------------------------------
-// string lib.
-unsigned char* jstrescape (unsigned char* pt) {
-	//copy from here
-	unsigned char * ptr;
-	int i =0, j=0;
-	
-	//copy string to temporary
-	CREATE(ptr, char, J_MAX_MALLOC_SIZE);
-	strcpy (ptr,pt);
-	
-	while (ptr[i] != '\0') {
-		switch (ptr[i]) {
-			case '\'':
-				pt[j++] = '\\';
-				pt[j++] = ptr[i++];
-				break;
-			case '\\':
-				pt[j++] = '\\';
-				pt[j++] = ptr[i++];
-				break;
-			default:
-				pt[j++] = ptr[i++];
-		}
-	}
-	pt[j++] = '\0';
-	free (ptr);
-	return (unsigned char*) &pt[0];
-}
-
-unsigned char* jstrescapecpy (unsigned char* pt,unsigned char* spt) {
-	//copy from here
-	int i =0, j=0;
-	
-	while (spt[i] != '\0') {
-		switch (spt[i]) {
-			case '\'':
-				pt[j++] = '\\';
-				pt[j++] = spt[i++];
-				break;
-			case '\\':
-				pt[j++] = '\\';
-				pt[j++] = spt[i++];
-				break;
-			default:
-				pt[j++] = spt[i++];
-		}
-	}
-	pt[j++] = '\0';
-	return (unsigned char*) &pt[0];
-}
-int jmemescapecpy (unsigned char* pt,unsigned char* spt, int size) {
-	//copy from here
-	int i =0, j=0;
-	
-	while (i < size) {
-		switch (spt[i]) {
-			case '\'':
-				pt[j++] = '\\';
-				pt[j++] = spt[i++];
-				break;
-			case '\\':
-				pt[j++] = '\\';
-				pt[j++] = spt[i++];
-				break;
-			default:
-				pt[j++] = spt[i++];
-		}
-	}
-	// copy size is 0 ~ (j-1)
-	return j;
-}
diff --git a/misc/src/char_sql/strlib.h b/misc/src/char_sql/strlib.h
deleted file mode 100644
index 6b61690..0000000
--- a/misc/src/char_sql/strlib.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _J_STR_LIB_H_
-#define _J_STR_LIB_H_
-#define J_MAX_MALLOC_SIZE 65535
-// String function library.
-// code by Jioh L. Jung (ziozzang@4wish.net)
-// This code is under license "BSD"
-unsigned char* jstrescape (unsigned char* pt);
-unsigned char* jstrescapecpy (unsigned char* pt,unsigned char* spt);
-int jmemescapecpy (unsigned char* pt,unsigned char* spt, int size);
-#endif
diff --git a/misc/src/common/GNUmakefile b/misc/src/common/GNUmakefile
deleted file mode 100644
index 689ac3b..0000000
--- a/misc/src/common/GNUmakefile
+++ /dev/null
@@ -1,13 +0,0 @@
-txt sql all: core.o socket.o timer.o grfio.o db.o lock.o nullpo.o malloc.o
-
-core.o: core.c core.h
-socket.o: socket.c socket.h mmo.h
-timer.o: timer.c timer.h
-grfio.o: grfio.c grfio.h
-db.o: db.c db.h
-lock.o: lock.h
-nullpo.o: nullpo.c nullpo.h
-malloc.o: malloc.c malloc.h
-
-clean:
-	rm -f *.o
diff --git a/misc/src/common/Makefile b/misc/src/common/Makefile
deleted file mode 100644
index 689ac3b..0000000
--- a/misc/src/common/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-txt sql all: core.o socket.o timer.o grfio.o db.o lock.o nullpo.o malloc.o
-
-core.o: core.c core.h
-socket.o: socket.c socket.h mmo.h
-timer.o: timer.c timer.h
-grfio.o: grfio.c grfio.h
-db.o: db.c db.h
-lock.o: lock.h
-nullpo.o: nullpo.c nullpo.h
-malloc.o: malloc.c malloc.h
-
-clean:
-	rm -f *.o
diff --git a/misc/src/common/core.c b/misc/src/common/core.c
deleted file mode 100644
index 62af254..0000000
--- a/misc/src/common/core.c
+++ /dev/null
@@ -1,152 +0,0 @@
-// $Id: core.c,v 1.1.1.1 2004/09/10 17:44:49 MagicalTux Exp $
-// original : core.c 2003/02/26 18:03:12 Rev 1.7
-
-#include <stdio.h>
-#include <stdlib.h>
-#ifndef LCCWIN32
-#include <unistd.h>
-#endif
-#include <signal.h>
-
-#include "core.h"
-#include "socket.h"
-#include "timer.h"
-#include "version.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-static void (*term_func)(void)=NULL;
-
-/*======================================
- *	CORE : Set function
- *--------------------------------------
- */
-void set_termfunc(void (*termfunc)(void))
-{
-	term_func = termfunc;
-}
-
-/*======================================
- *	CORE : Signal Sub Function
- *--------------------------------------
- */
-
-static void sig_proc(int sn)
-{
-	int i;
-	switch(sn){
-	case SIGINT:
-	case SIGTERM:
-		if(term_func)
-			term_func();
-		for(i=0;i<fd_max;i++){
-			if(!session[i])
-				continue;
-			close(i);
-		}
-		exit(0);
-		break;
-	}
-}
-
-/*======================================
- *	CORE : Display title
- *--------------------------------------
- */
-
-static void display_title(void)
-{
-	// for help with the console colors look here:
-	// http://www.edoceo.com/liberum/?doc=printf-with-color
-	// some code explanation (used here):
-	// \033[2J : clear screen and go up/left (0, 0 position)
-	// \033[K  : clear line from actual position to end of the line
-	// \033[0m : reset color parameter
-	// \033[1m : use bold for font
-	printf("\033[2J"); // clear screen and go up/left (0, 0 position in text)
-	printf("\033[37;44m          (=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=)\033[K\033[0m\n"); // white writing (37) on blue background (44), \033[K clean until end of file
-	printf("\033[0;44m          (\033[1;33m        (c)2004 eAthena Development Team presents        \033[0;44m)\033[K\033[0m\n"); // yellow writing (33)
-	printf("\033[0;44m          (\033[1m       ______  __    __                                  \033[0;44m)\033[K\033[0m\n"); // 1: bold char, 0: normal char
-	printf("\033[0;44m          (\033[1m      /\\  _  \\/\\ \\__/\\ \\                     v%2d.%02d.%02d   \033[0;44m)\033[K\033[0m\n", ATHENA_MAJOR_VERSION, ATHENA_MINOR_VERSION, ATHENA_REVISION); // 1: bold char, 0: normal char
-	printf("\033[0;44m          (\033[1m    __\\ \\ \\_\\ \\ \\ ,_\\ \\ \\___      __    ___      __      \033[0;44m)\033[K\033[0m\n"); // 1: bold char, 0: normal char
-	printf("\033[0;44m          (\033[1m  /'__`\\ \\  __ \\ \\ \\/\\ \\  _ `\\  /'__`\\/' _ `\\  /'__`\\    \033[0;44m)\033[K\033[0m\n"); // 1: bold char, 0: normal char
-	printf("\033[0;44m          (\033[1m /\\  __/\\ \\ \\/\\ \\ \\ \\_\\ \\ \\ \\ \\/\\  __//\\ \\/\\ \\/\\ \\_\\.\\_  \033[0;44m)\033[K\033[0m\n"); // 1: bold char, 0: normal char
-	printf("\033[0;44m          (\033[1m \\ \\____\\\\ \\_\\ \\_\\ \\__\\\\ \\_\\ \\_\\ \\____\\ \\_\\ \\_\\ \\__/.\\_\\ \033[0;44m)\033[K\033[0m\n"); // 1: bold char, 0: normal char
-	printf("\033[0;44m          (\033[1m  \\/____/ \\/_/\\/_/\\/__/ \\/_/\\/_/\\/____/\\/_/\\/_/\\/__/\\/_/ \033[0;44m)\033[K\033[0m\n"); // 1: bold char, 0: normal char
-	printf("\033[0;44m          (\033[1m   _   _   _   _   _   _   _     _   _   _   _   _   _   \033[0;44m)\033[K\033[0m\n"); // 1: bold char, 0: normal char
-	printf("\033[0;44m          (\033[1m  / \\ / \\ / \\ / \\ / \\ / \\ / \\   / \\ / \\ / \\ / \\ / \\ / \\  \033[0;44m)\033[K\033[0m\n"); // 1: bold char, 0: normal char
-	printf("\033[0;44m          (\033[1m ( e | n | g | l | i | s | h ) ( A | t | h | e | n | a ) \033[0;44m)\033[K\033[0m\n"); // 1: bold char, 0: normal char
-	printf("\033[0;44m          (\033[1m  \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/   \\_/ \\_/ \\_/ \\_/ \\_/ \\_/  \033[0;44m)\033[K\033[0m\n"); // 1: bold char, 0: normal char
-	printf("\033[37;44m          (=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=)\033[K\033[0m\n\n"); // reset color
-}
-
-// Added by Gabuzomeu
-//
-// This is an implementation of signal() using sigaction() for portability.
-// (sigaction() is POSIX; signal() is not.)  Taken from Stevens' _Advanced
-// Programming in the UNIX Environment_.
-//
-#ifndef SIGPIPE
-#define SIGPIPE SIGINT
-#endif
-
-#ifndef POSIX
-#define compat_signal(signo, func) signal(signo, func)
-#else
-sigfunc *compat_signal(int signo, sigfunc *func)
-{
-  struct sigaction sact, oact;
-
-  sact.sa_handler = func;
-  sigemptyset(&sact.sa_mask);
-  sact.sa_flags = 0;
-#ifdef SA_INTERRUPT
-  sact.sa_flags |= SA_INTERRUPT;	/* SunOS */
-#endif
-
-  if (sigaction(signo, &sact, &oact) < 0)
-    return (SIG_ERR);
-
-  return (oact.sa_handler);
-}
-#endif
-
-
-/*======================================
- *	CORE : MAINROUTINE
- *--------------------------------------
- */
-
-int runflag = 1;
-
-int main(int argc,char **argv)
-{
-	int next;
-
-	Net_Init();
-	do_socket();
-
-	compat_signal(SIGPIPE,SIG_IGN);
-	compat_signal(SIGTERM,sig_proc);
-	compat_signal(SIGINT,sig_proc);
-	
-	// Signal to create coredumps by system when necessary (crash)
-	compat_signal(SIGSEGV, SIG_DFL);
-#ifndef LCCWIN32
-	compat_signal(SIGBUS, SIG_DFL);
-	compat_signal(SIGTRAP, SIG_DFL); 
-#endif
-	compat_signal(SIGILL, SIG_DFL);
-
-	display_title();
-
-	do_init(argc,argv);
-	while(runflag){
-		next=do_timer(gettick_nocache());
-		do_sendrecv(next);
-		do_parsepacket();
-	}
-	return 0;
-}
diff --git a/misc/src/common/core.h b/misc/src/common/core.h
deleted file mode 100644
index bc2be02..0000000
--- a/misc/src/common/core.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// original : core.h 2003/03/14 11:55:25 Rev 1.4
-
-#ifndef	_CORE_H_
-#define	_CORE_H_
-
-extern int runflag;
-
-int do_init(int,char**);
-
-void set_termfunc(void (*termfunc)(void));
-
-#endif	// _CORE_H_
diff --git a/misc/src/common/db.c b/misc/src/common/db.c
deleted file mode 100644
index a2dc695..0000000
--- a/misc/src/common/db.c
+++ /dev/null
@@ -1,500 +0,0 @@
-// $Id: db.c,v 1.2 2004/09/23 14:43:06 MouseJstr Exp $
-// #define MALLOC_DBN
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "db.h"
-#include "utils.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-#define ROOT_SIZE 4096
-#ifdef MALLOC_DBN
-static struct dbn *dbn_root[512], *dbn_free;
-static int dbn_root_rest=0,dbn_root_num=0;
-
-static void * malloc_dbn(void)
-{
-	struct dbn* ret;
-
-	if(dbn_free==NULL){
-		if(dbn_root_rest<=0){
-			CREATE(dbn_root[dbn_root_num], struct dbn, ROOT_SIZE);
-
-			dbn_root_rest=ROOT_SIZE;
-			dbn_root_num++;
-		}
-		return &(dbn_root[dbn_root_num-1][--dbn_root_rest]);
-	}
-	ret=dbn_free;
-	dbn_free = dbn_free->parent;
-	return ret;
-}
-
-static void free_dbn(struct dbn* add_dbn)
-{
-	add_dbn->parent = dbn_free;
-	dbn_free = add_dbn;
-}
-#endif
-
-static int strdb_cmp(struct dbt* table,void* a,void* b)
-{
-	if(table->maxlen)
-		return strncmp(a,b,table->maxlen);
-	return strcmp(a,b);
-}
-
-static unsigned int strdb_hash(struct dbt* table,void* a)
-{
-	int i;
-	unsigned int h;
-	unsigned char *p=a;
-
-	i=table->maxlen;
-	if(i==0) i=0x7fffffff;
-	for(h=0;*p && --i>=0;){
-		h=(h*33 + *p++) ^ (h>>24);
-	}
-	return h;
-}
-
-struct dbt* strdb_init(int maxlen)
-{
-	int i;
-	struct dbt* table;
-
-	CREATE(table, struct dbt, 1);
-
-	table->cmp=strdb_cmp;
-	table->hash=strdb_hash;
-	table->maxlen=maxlen;
-	for(i=0;i<HASH_SIZE;i++)
-		table->ht[i]=NULL;
-	return table;
-}
-
-static int numdb_cmp(struct dbt* table,void* a,void* b)
-{
-	int ia,ib;
-
-	ia=(int)a;
-	ib=(int)b;
-
-	if((ia^ib) & 0x80000000)
-		return ia<0 ? -1 : 1;
-
-	return ia-ib;
-}
-
-static unsigned int numdb_hash(struct dbt* table,void* a)
-{
-	return (unsigned int)a;
-}
-
-struct dbt* numdb_init(void)
-{
-	int i;
-	struct dbt* table;
-
-	CREATE(table, struct dbt, 1);
-
-	table->cmp=numdb_cmp;
-	table->hash=numdb_hash;
-	table->maxlen=sizeof(int);
-	for(i=0;i<HASH_SIZE;i++)
-		table->ht[i]=NULL;
-	return table;
-}
-
-void* db_search(struct dbt *table,void* key)
-{
-	struct dbn *p;
-
-	for(p=table->ht[table->hash(table,key) % HASH_SIZE];p;){
-		int c=table->cmp(table,key,p->key);
-		if(c==0)
-			return p->data;
-		if(c<0)
-			p=p->left;
-		else
-			p=p->right;
-	}
-	return NULL;
-}
-
-void * db_search2(struct dbt *table, const char *key)
-{
-	int i,sp;
-	struct dbn *p,*pn,*stack[64];
-        int slen = strlen(key);
-
-	for(i=0;i<HASH_SIZE;i++){
-		if((p=table->ht[i])==NULL)
-			continue;
-		sp=0;
-		while(1){
-                        if (strncasecmp(key, p->key, slen) == 0)
-                           return p->data;
-			if((pn=p->left)!=NULL){
-				if(p->right){
-					stack[sp++]=p->right;
-				}
-				p=pn;
-			} else {
-				if(p->right){
-					p=p->right;
-				} else {
-					if(sp==0)
-						break;
-					p=stack[--sp];
-				}
-			}
-		}
-	}
-        return 0;
-}
-
-static void db_rotate_left(struct dbn *p,struct dbn **root)
-{
-	struct dbn * y = p->right;
-	p->right = y->left;
-	if (y->left !=0)
-		y->left->parent = p;
-	y->parent = p->parent;
-
-	if (p == *root)
-		*root = y;
-	else if (p == p->parent->left)
-		p->parent->left = y;
-	else
-		p->parent->right = y;
-	y->left = p;
-	p->parent = y;
-}
-
-static void db_rotate_right(struct dbn *p,struct dbn **root)
-{
-	struct dbn * y = p->left;
-	p->left = y->right;
-	if (y->right != 0)
-		y->right->parent = p;
-	y->parent = p->parent;
-
-	if (p == *root)
-		*root = y;
-	else if (p == p->parent->right)
-		p->parent->right = y;
-	else
-		p->parent->left = y;
-	y->right = p;
-	p->parent = y;
-}
-
-static void db_rebalance(struct dbn *p,struct dbn **root)
-{
-	p->color = RED;
-	while(p!=*root && p->parent->color==RED){ // root�͕K�����Őe�͐Ԃ��̂Őe�̐e�͕K�����݂���
-		if (p->parent == p->parent->parent->left) {
-			struct dbn *y = p->parent->parent->right;
-			if (y && y->color == RED) {
-				p->parent->color = BLACK;
-				y->color = BLACK;
-				p->parent->parent->color = RED;
-				p = p->parent->parent;
-			} else {
-				if (p == p->parent->right) {
-					p = p->parent;
-					db_rotate_left(p, root);
-				}
-				p->parent->color = BLACK;
-				p->parent->parent->color = RED;
-				db_rotate_right(p->parent->parent, root);
-			}
-		} else {
-			struct dbn* y = p->parent->parent->left;
-			if (y && y->color == RED) {
-				p->parent->color = BLACK;
-				y->color = BLACK;
-				p->parent->parent->color = RED;
-				p = p->parent->parent;
-			} else {
-				if (p == p->parent->left) {
-					p = p->parent;
-					db_rotate_right(p, root);
-				}
-				p->parent->color = BLACK;
-				p->parent->parent->color = RED;
-				db_rotate_left(p->parent->parent, root);
-			}
-		}
-	}
-	(*root)->color=BLACK;
-}
-
-static void db_rebalance_erase(struct dbn *z,struct dbn **root)
-{
-	struct dbn *y = z, *x = NULL, *x_parent = NULL;
-
-	if (y->left == NULL)
-		x = y->right;
-	else if (y->right == NULL)
-		x = y->left;
-	else {
-		y = y->right;
-		while (y->left != NULL)
-			y = y->left;
-		x = y->right;
-	}
-	if (y != z) { // ���E���������܂��Ă����� y��z�̈ʒu�Ɏ����Ă���z�𕂂�����
-		z->left->parent = y;
-		y->left = z->left;
-		if (y != z->right) {
-			x_parent = y->parent;
-			if (x) x->parent = y->parent;
-			y->parent->left = x;
-			y->right = z->right;
-			z->right->parent = y;
-		} else
-			x_parent = y;
-		if (*root == z)
-			*root = y;
-		else if (z->parent->left == z)
-			z->parent->left = y;
-		else
-			z->parent->right = y;
-		y->parent = z->parent;
-		{ int tmp=y->color; y->color=z->color; z->color=tmp; }
-		y = z;
-	} else { // �ǂ��炩�󂢂Ă����ꍇ x��z�̈ʒu�Ɏ����Ă���z�𕂂�����
-		x_parent = y->parent;
-		if (x) x->parent = y->parent;
-		if (*root == z)
-			*root = x;
-		else if (z->parent->left == z)
-			z->parent->left = x;
-		else
-			z->parent->right = x;
-	}
-	// �����܂ŐF�̈ړ��̏����Ēʏ��2���؂Ɠ���
-	if (y->color != RED) { // �Ԃ������镪�ɂ͉e������
-		while (x != *root && (x == NULL || x->color == BLACK))
-			if (x == x_parent->left) {
-				struct dbn* w = x_parent->right;
-				if (w->color == RED) {
-					w->color = BLACK;
-					x_parent->color = RED;
-					db_rotate_left(x_parent, root);
-					w = x_parent->right;
-				}
-				if ((w->left == NULL ||
-					 w->left->color == BLACK) &&
-					(w->right == NULL ||
-					 w->right->color == BLACK)) {
-					w->color = RED;
-					x = x_parent;
-					x_parent = x_parent->parent;
-				} else {
-					if (w->right == NULL ||
-						w->right->color == BLACK) {
-						if (w->left) w->left->color = BLACK;
-						w->color = RED;
-						db_rotate_right(w, root);
-						w = x_parent->right;
-					}
-					w->color = x_parent->color;
-					x_parent->color = BLACK;
-					if (w->right) w->right->color = BLACK;
-					db_rotate_left(x_parent, root);
-					break;
-				}
-			} else {                  // same as above, with right <-> left.
-				struct dbn* w = x_parent->left;
-				if (w->color == RED) {
-					w->color = BLACK;
-					x_parent->color = RED;
-					db_rotate_right(x_parent, root);
-					w = x_parent->left;
-				}
-				if ((w->right == NULL ||
-					 w->right->color == BLACK) &&
-					(w->left == NULL ||
-					 w->left->color == BLACK)) {
-					w->color = RED;
-					x = x_parent;
-					x_parent = x_parent->parent;
-				} else {
-					if (w->left == NULL ||
-						w->left->color == BLACK) {
-						if (w->right) w->right->color = BLACK;
-						w->color = RED;
-						db_rotate_left(w, root);
-						w = x_parent->left;
-					}
-					w->color = x_parent->color;
-					x_parent->color = BLACK;
-					if (w->left) w->left->color = BLACK;
-					db_rotate_right(x_parent, root);
-					break;
-				}
-			}
-		if (x) x->color = BLACK;
-	}
-}
-
-struct dbn* db_insert(struct dbt *table,void* key,void* data)
-{
-	struct dbn *p,*priv;
-	int c,hash;
-
-	hash = table->hash(table,key) % HASH_SIZE;
-	for(c=0,priv=NULL ,p = table->ht[hash];p;){
-		c=table->cmp(table,key,p->key);
-		if(c==0){ // replace
-                        if (table->release)
-                            table->release(p, 3);
-			p->data=data;
-			p->key=key;
-			return p;
-		}
-		priv=p;
-		if(c<0){
-			p=p->left;
-		} else {
-			p=p->right;
-		}
-	}
-#ifdef MALLOC_DBN
-	p=malloc_dbn();
-#else
-	CREATE(p, struct dbn, 1);
-#endif
-	if(p==NULL){
-		printf("out of memory : db_insert\n");
-		return NULL;
-	}
-	p->parent= NULL;
-	p->left  = NULL;
-	p->right = NULL;
-	p->key   = key;
-	p->data  = data;
-	p->color = RED;
-	if(c==0){ // hash entry is empty
-		table->ht[hash] = p;
-		p->color = BLACK;
-	} else {
-		if(c<0){ // left node
-			priv->left = p;
-			p->parent=priv;
-		} else { // right node
-			priv->right = p;
-			p->parent=priv;
-		}
-		if(priv->color==RED){ // must rebalance
-			db_rebalance(p,&table->ht[hash]);
-		}
-	}
-	return p;
-}
-
-void* db_erase(struct dbt *table,void* key)
-{
-	void *data;
-	struct dbn *p;
-	int c,hash;
-
-	hash = table->hash(table,key) % HASH_SIZE;
-	for(c=0,p = table->ht[hash];p;){
-		c=table->cmp(table,key,p->key);
-		if(c==0)
-			break;
-		if(c<0)
-			p=p->left;
-		else
-			p=p->right;
-	}
-	if(!p)
-		return NULL;
-	data=p->data;
-	db_rebalance_erase(p,&table->ht[hash]);
-#ifdef MALLOC_DBN
-	free_dbn(p);
-#else
-	free(p);
-#endif
-	return data;
-}
-
-void db_foreach(struct dbt *table,int (*func)(void*,void*,va_list),...)
-{
-	int i,sp;
-	// red-black tree�Ȃ̂�64��stack�������2^32�ƒm�[�h�܂ő��v
-	struct dbn *p,*pn,*stack[64];
-	va_list ap;
-
-	va_start(ap,func);
-	for(i=0;i<HASH_SIZE;i++){
-		if((p=table->ht[i])==NULL)
-			continue;
-		sp=0;
-		while(1){
-			func(p->key,p->data,ap);
-			if((pn=p->left)!=NULL){
-				if(p->right){
-					stack[sp++]=p->right;
-				}
-				p=pn;
-			} else {
-				if(p->right){
-					p=p->right;
-				} else {
-					if(sp==0)
-						break;
-					p=stack[--sp];
-				}
-			}
-		}
-	}
-	va_end(ap);
-}
-
-void db_final(struct dbt *table,int (*func)(void*,void*,va_list),...)
-{
-	int i,sp;
-	struct dbn *p,*pn,*stack[64];
-	va_list ap;
-
-	va_start(ap,func);
-	for(i=0;i<HASH_SIZE;i++){
-		if((p=table->ht[i])==NULL)
-			continue;
-		sp=0;
-		while(1){
-			if(func)
-				func(p->key,p->data,ap);
-			if((pn=p->left)!=NULL){
-				if(p->right){
-					stack[sp++]=p->right;
-				}
-			} else {
-				if(p->right){
-					pn=p->right;
-				} else {
-					if(sp==0)
-						break;
-					pn=stack[--sp];
-				}
-			}
-#ifdef MALLOC_DBN
-			free_dbn(p);
-#else
-			free(p);
-#endif
-			p=pn;
-		}
-	}
-	free(table);
-	va_end(ap);
-}
diff --git a/misc/src/common/db.h b/misc/src/common/db.h
deleted file mode 100644
index ea9acea..0000000
--- a/misc/src/common/db.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef _DB_H_
-#define _DB_H_
-
-#include <stdarg.h>
-
-#define HASH_SIZE (256+27)
-
-#define RED 0
-#define BLACK 1
-
-struct dbn {
-	struct dbn *parent,*left,*right;
-	int color;
-	void *key;
-	void *data;
-};
-
-struct dbt {
-	int (*cmp)(struct dbt*,void*,void*);
-	unsigned int (*hash)(struct dbt*,void*);
-    // which 1 - key,   2 - data,  3 - both
-	void (*release)(struct dbn*,int which);
-	int maxlen;
-	struct dbn *ht[HASH_SIZE];
-};
-
-#define strdb_search(t,k)   db_search((t),(void*)(k))
-#define strdb_insert(t,k,d) db_insert((t),(void*)(k),(void*)(d))
-#define strdb_erase(t,k)    db_erase ((t),(void*)(k))
-#define strdb_foreach       db_foreach
-#define strdb_final         db_final
-#define numdb_search(t,k)   db_search((t),(void*)(k))
-#define numdb_insert(t,k,d) db_insert((t),(void*)(k),(void*)(d))
-#define numdb_erase(t,k)    db_erase ((t),(void*)(k))
-#define numdb_foreach       db_foreach
-#define numdb_final         db_final
-
-struct dbt* strdb_init(int maxlen);
-struct dbt* numdb_init(void);
-void* db_search(struct dbt *table,void* key);
-void* db_search2(struct dbt *table, const char *key); // [MouseJstr]
-struct dbn* db_insert(struct dbt *table,void* key,void* data);
-void* db_erase(struct dbt *table,void* key);
-void db_foreach(struct dbt*,int(*)(void*,void*,va_list),...);
-void db_final(struct dbt*,int(*)(void*,void*,va_list),...);
-
-#endif
diff --git a/misc/src/common/grfio.c b/misc/src/common/grfio.c
deleted file mode 100644
index 08a8b2a..0000000
--- a/misc/src/common/grfio.c
+++ /dev/null
@@ -1,948 +0,0 @@
-/*********************************************************************
- *
- *		Ragnarok Online Emulator : grfio.c -- grf file I/O Module
- *--------------------------------------------------------------------
- *		special need library : zlib
- *********************************************************************
- *	$Id: grfio.c,v 1.2 2004/09/29 17:31:49 kalaspuff Exp $
- *
- *	2002/12/18... the original edition
- *	2003/01/23 ... Code correction
- *	2003/02/01 ... An addition and decryption processing are improved for LocalFile and two or more GRF(s) check processing.
- *	2003/02/02 ... Even if there is no grf it does not stop -- as -- correction
- *	2003/02/02... grf reading specification can be added later -- as -- correction (grfio_add function addition)
- *	2003/02 / 03... at the time of grfio_resourcecheck processing the entry addition processing method -- correction
- *	2003/02/05... change of the processing in grfio_init
- *	2003/02/23... a local file check -- GRFIO_LOCAL -- switch (Defoe -- Function Off)
- *      2003/10/21 ... The data of alpha client was read.
- *	2003/11/10 ... Ready new grf format.
- *	2003/11/11 ... version check fix & bug fix
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <sys/stat.h>
-
-#include <zlib.h>
-
-#include "utils.h"
-#include "grfio.h"
-#include "mmo.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-typedef	unsigned char	BYTE;
-typedef	unsigned short	WORD;
-typedef	unsigned long	DWORD;
-
-static char data_file[1024] = "";	// "data.grf";
-static char sdata_file[1024] = "";	// "sdata.grf";
-static char adata_file[1024] = "";	// "adata.grf";
-static char data_dir[1024] = "";	// "../";
-
-// accessor to data_file,adata_file,sdata_file
-char *grfio_setdatafile(const char *str){ strcpy(data_file,str); return data_file; }
-char *grfio_setadatafile(const char *str){ strcpy(adata_file,str); return adata_file; }
-char *grfio_setsdatafile(const char *str){ strcpy(sdata_file,str); return sdata_file; }
-
-//----------------------------
-//	file entry table struct
-//----------------------------
-typedef struct {
-	int 	srclen;				// compressed size
-	int		srclen_aligned;		//
-	int		declen;				// original size
-	int		srcpos;
-	short	next;
-	char	cycle;
-	char	type;
-	char	fn[128-4*5];		// file name
-	char	gentry;				// read grf file select
-} FILELIST;
-//gentry ... 0    : It acquires from a local file.
-//             It acquires from the resource file of 1>=:gentry_table[gentry-1].
-//             1<=: Check a local file.
-//                    If it is, after re-setting to 0, it acquires from a local file.
-//                    If there is nothing, mark reversal will be carried out, and it will re-set, and will acquire from a resource file as well as 1>=.
-
-//Since char defines *FILELIST.gentry, the maximum which can be added by grfio_add becomes by 127 pieces.
-
-#define	GENTRY_LIMIT	127
-#define	FILELIST_LIMIT	32768	// temporary maximum, and a theory top maximum are 2G.
-
-static FILELIST *filelist;
-static int	filelist_entrys;
-static int	filelist_maxentry;
-
-static char **gentry_table;
-static int gentry_entrys;
-static int gentry_maxentry;
-
-//----------------------------
-//	file list hash table
-//----------------------------
-static int filelist_hash[256];
-
-//----------------------------
-//	grf decode data table
-//----------------------------
-static unsigned char BitMaskTable[8] = {
-	0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01
-};
-
-static char	BitSwapTable1[64] = {
-	58, 50, 42, 34, 26, 18, 10,  2, 60, 52, 44, 36, 28, 20, 12,  4,
-	62, 54, 46, 38, 30, 22, 14,  6, 64, 56, 48, 40, 32, 24, 16,  8,
-	57, 49, 41, 33, 25, 17,  9,  1, 59, 51, 43, 35, 27, 19, 11,  3,
-	61, 53, 45, 37, 29, 21, 13,  5, 63, 55, 47, 39, 31, 23, 15,  7
-};
-static char	BitSwapTable2[64] = {
-	40,  8, 48, 16, 56, 24, 64, 32, 39,  7, 47, 15, 55, 23, 63, 31,
-	38,  6, 46, 14, 54, 22, 62, 30, 37,  5, 45, 13, 53, 21, 61, 29,
-	36,  4, 44, 12, 52, 20, 60, 28, 35,  3, 43, 11, 51, 19, 59, 27,
-	34,  2, 42, 10, 50, 18, 58, 26, 33,  1, 41,  9, 49, 17, 57, 25
-};
-static char	BitSwapTable3[32] = {
-	16,  7, 20, 21, 29, 12, 28, 17,  1, 15, 23, 26,  5, 18, 31, 10,
-     2,  8, 24, 14, 32, 27,  3,  9, 19, 13, 30,  6, 22, 11,  4, 25
-};
-
-static unsigned char NibbleData[4][64]={
-	{
-		0xef, 0x03, 0x41, 0xfd, 0xd8, 0x74, 0x1e, 0x47,  0x26, 0xef, 0xfb, 0x22, 0xb3, 0xd8, 0x84, 0x1e,
-		0x39, 0xac, 0xa7, 0x60, 0x62, 0xc1, 0xcd, 0xba,  0x5c, 0x96, 0x90, 0x59, 0x05, 0x3b, 0x7a, 0x85,
-		0x40, 0xfd, 0x1e, 0xc8, 0xe7, 0x8a, 0x8b, 0x21,  0xda, 0x43, 0x64, 0x9f, 0x2d, 0x14, 0xb1, 0x72,
-		0xf5, 0x5b, 0xc8, 0xb6, 0x9c, 0x37, 0x76, 0xec,  0x39, 0xa0, 0xa3, 0x05, 0x52, 0x6e, 0x0f, 0xd9,
-	}, {
-		0xa7, 0xdd, 0x0d, 0x78, 0x9e, 0x0b, 0xe3, 0x95,  0x60, 0x36, 0x36, 0x4f, 0xf9, 0x60, 0x5a, 0xa3,
-		0x11, 0x24, 0xd2, 0x87, 0xc8, 0x52, 0x75, 0xec,  0xbb, 0xc1, 0x4c, 0xba, 0x24, 0xfe, 0x8f, 0x19,
-		0xda, 0x13, 0x66, 0xaf, 0x49, 0xd0, 0x90, 0x06,  0x8c, 0x6a, 0xfb, 0x91, 0x37, 0x8d, 0x0d, 0x78,
-		0xbf, 0x49, 0x11, 0xf4, 0x23, 0xe5, 0xce, 0x3b,  0x55, 0xbc, 0xa2, 0x57, 0xe8, 0x22, 0x74, 0xce,
-	}, {
-		0x2c, 0xea, 0xc1, 0xbf, 0x4a, 0x24, 0x1f, 0xc2,  0x79, 0x47, 0xa2, 0x7c, 0xb6, 0xd9, 0x68, 0x15,
-		0x80, 0x56, 0x5d, 0x01, 0x33, 0xfd, 0xf4, 0xae,  0xde, 0x30, 0x07, 0x9b, 0xe5, 0x83, 0x9b, 0x68,
-		0x49, 0xb4, 0x2e, 0x83, 0x1f, 0xc2, 0xb5, 0x7c,  0xa2, 0x19, 0xd8, 0xe5, 0x7c, 0x2f, 0x83, 0xda,
-		0xf7, 0x6b, 0x90, 0xfe, 0xc4, 0x01, 0x5a, 0x97,  0x61, 0xa6, 0x3d, 0x40, 0x0b, 0x58, 0xe6, 0x3d,
-	}, {
-		0x4d, 0xd1, 0xb2, 0x0f, 0x28, 0xbd, 0xe4, 0x78,  0xf6, 0x4a, 0x0f, 0x93, 0x8b, 0x17, 0xd1, 0xa4,
-		0x3a, 0xec, 0xc9, 0x35, 0x93, 0x56, 0x7e, 0xcb,  0x55, 0x20, 0xa0, 0xfe, 0x6c, 0x89, 0x17, 0x62,
-		0x17, 0x62, 0x4b, 0xb1, 0xb4, 0xde, 0xd1, 0x87,  0xc9, 0x14, 0x3c, 0x4a, 0x7e, 0xa8, 0xe2, 0x7d,
-		0xa0, 0x9f, 0xf6, 0x5c, 0x6a, 0x09, 0x8d, 0xf0,  0x0f, 0xe3, 0x53, 0x25, 0x95, 0x36, 0x28, 0xcb,
-	}
-};
-/*-----------------
- *	long data get
- */
-static unsigned int getlong(unsigned char *p)
-{
-  return *p+p[1]*256+(p[2]+p[3]*256)*65536;
-}
-
-/*==========================================
- *	Grf data decode : Subs
- *------------------------------------------
- */
-static void NibbleSwap(BYTE *Src, int len)
-{
-	for(;0<len;len--,Src++) {
-		*Src = (*Src>>4) | (*Src<<4);
-	}
-}
-
-static void BitConvert(BYTE *Src,char *BitSwapTable)
-{
-	int lop,prm;
-	BYTE tmp[8];
-	*(DWORD*)tmp=*(DWORD*)(tmp+4)=0;
-	for(lop=0;lop!=64;lop++) {
-		prm = BitSwapTable[lop]-1;
-		if (Src[(prm >> 3) & 7] & BitMaskTable[prm & 7]) {
-			tmp[(lop >> 3) & 7] |= BitMaskTable[lop & 7];
-		}
-	}
-	*(DWORD*)Src     = *(DWORD*)tmp;
-	*(DWORD*)(Src+4) = *(DWORD*)(tmp+4);
-}
-
-static void BitConvert4(BYTE *Src)
-{
-	int lop,prm;
-	BYTE tmp[8];
-	tmp[0] = ((Src[7]<<5) | (Src[4]>>3)) & 0x3f;	// ..0 vutsr
-	tmp[1] = ((Src[4]<<1) | (Src[5]>>7)) & 0x3f;	// ..srqpo n
-	tmp[2] = ((Src[4]<<5) | (Src[5]>>3)) & 0x3f;	// ..o nmlkj
-	tmp[3] = ((Src[5]<<1) | (Src[6]>>7)) & 0x3f;	// ..kjihg f
-	tmp[4] = ((Src[5]<<5) | (Src[6]>>3)) & 0x3f;	// ..g fedcb
-	tmp[5] = ((Src[6]<<1) | (Src[7]>>7)) & 0x3f;	// ..cba98 7
-	tmp[6] = ((Src[6]<<5) | (Src[7]>>3)) & 0x3f;	// ..8 76543
-	tmp[7] = ((Src[7]<<1) | (Src[4]>>7)) & 0x3f;	// ..43210 v
-
-	for(lop=0;lop!=4;lop++) {
-		tmp[lop] = (NibbleData[lop][tmp[lop*2]] & 0xf0)
-		         | (NibbleData[lop][tmp[lop*2+1]] & 0x0f);
-	}
-
-	*(DWORD*)(tmp+4)=0;
-	for(lop=0;lop!=32;lop++) {
-		prm = BitSwapTable3[lop]-1;
-		if (tmp[prm >> 3] & BitMaskTable[prm & 7]) {
-			tmp[(lop >> 3) + 4] |= BitMaskTable[lop & 7];
-		}
-	}
-	*(DWORD*)Src ^= *(DWORD*)(tmp+4);
-}
-
-static void decode_des_etc(BYTE *buf,int len,int type,int cycle)
-{
-	int lop,cnt=0;
-	if(cycle<3) cycle=3;
-	else if(cycle<5) cycle++;
-	else if(cycle<7) cycle+=9;
-	else cycle+=15;
-
-	for(lop=0;lop*8<len;lop++,buf+=8) {
-		if(lop<20 || (type==0 && lop%cycle==0)){ // des
-			BitConvert(buf,BitSwapTable1);
-			BitConvert4(buf);
-			BitConvert(buf,BitSwapTable2);
-		} else {
-			if(cnt==7 && type==0){
-				int a;
-				BYTE tmp[8];
-				*(DWORD*)tmp     = *(DWORD*)buf;
-				*(DWORD*)(tmp+4) = *(DWORD*)(buf+4);
-				cnt=0;
-				buf[0]=tmp[3];
-				buf[1]=tmp[4];
-				buf[2]=tmp[6];
-				buf[3]=tmp[0];
-				buf[4]=tmp[1];
-				buf[5]=tmp[2];
-				buf[6]=tmp[5];
-				a=tmp[7];
-				if(a==0x00) a=0x2b;
-				else if(a==0x2b) a=0x00;
-				else if(a==0x01) a=0x68;
-				else if(a==0x68) a=0x01;
-				else if(a==0x48) a=0x77;
-				else if(a==0x77) a=0x48;
-				else if(a==0x60) a=0xff;
-				else if(a==0xff) a=0x60;
-				else if(a==0x6c) a=0x80;
-				else if(a==0x80) a=0x6c;
-				else if(a==0xb9) a=0xc0;
-				else if(a==0xc0) a=0xb9;
-				else if(a==0xeb) a=0xfe;
-				else if(a==0xfe) a=0xeb;
-				buf[7]=a;
-			}
-			cnt++;
-		}
-	}
-}
-/*==========================================
- *	Grf data decode sub : zip
- *------------------------------------------
- */
-static int decode_zip(Bytef* dest, uLongf* destLen, const Bytef* source, uLong sourceLen)
-{
-	z_stream stream;
-	int err;
-
-	stream.next_in = (Bytef*)source;
-	stream.avail_in = (uInt)sourceLen;
-	/* Check for source > 64K on 16-bit machine: */
-	if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-
-	stream.next_out = dest;
-	stream.avail_out = (uInt)*destLen;
-	if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
-
-	stream.zalloc = (alloc_func)0;
-	stream.zfree = (free_func)0;
-
-	err = inflateInit(&stream);
-	if (err != Z_OK) return err;
-
-	err = inflate(&stream, Z_FINISH);
-	if (err != Z_STREAM_END) {
-		inflateEnd(&stream);
-		return err == Z_OK ? Z_BUF_ERROR : err;
-	}
-	*destLen = stream.total_out;
-
-	err = inflateEnd(&stream);
-	return err;
-}
-/***********************************************************
- ***                File List Sobroutines                ***
- ***********************************************************/
-
-/*==========================================
- *	File List : Hash make
- *------------------------------------------
- */
-static int filehash(unsigned char *fname)
-{
-	unsigned int hash=0;
-	while(*fname) {
-		hash = ((hash<<1)+(hash>>7)*9+tolower(*fname));
-		fname++;
-	}
-	return hash & 255;
-}
-
-/*==========================================
- *	File List : Hash initalize
- *------------------------------------------
- */
-static void hashinit(void)
-{
-	int lop;
-	for(lop=0;lop<256;lop++)
-		filelist_hash[lop]=-1;
-}
-
-/*==========================================
- *	File List : File find
- *------------------------------------------
- */
-FILELIST *filelist_find(char *fname)
-{
-	int hash;
-
-	for(hash=filelist_hash[filehash(fname)];hash>=0;hash=filelist[hash].next) {
-		if(strcasecmp(filelist[hash].fn,fname)==0)
-			break;
-	}
-
-	return (hash>=0)? &filelist[hash] : NULL;
-}
-
-/*==========================================
- *	File List : Filelist add
- *------------------------------------------
- */
-#define	FILELIST_ADDS	1024	// number increment of file lists `
-
-static FILELIST* filelist_add(FILELIST *entry)
-{
-	int hash;
-
-	if (filelist_entrys>=FILELIST_LIMIT) {
-		printf("filelist limit : filelist_add\n");
-		exit(1);
-	}
-
-	if (filelist_entrys>=filelist_maxentry) {
-		FILELIST *new_filelist = (FILELIST*)realloc(
-			(void*)filelist, (filelist_maxentry+FILELIST_ADDS)*sizeof(FILELIST) );
-		if (new_filelist != NULL) {
-			filelist = new_filelist;
-			memset(filelist + filelist_maxentry, '\0',
-				FILELIST_ADDS * sizeof(FILELIST));
-			filelist_maxentry += FILELIST_ADDS;
-		} else {
-			printf("out of memory : filelist_add\n");
-			exit(1);
-		}
-	}
-
-	memcpy( &filelist[filelist_entrys], entry, sizeof(FILELIST) );
-
-	hash = filehash(entry->fn);
-	filelist[filelist_entrys].next = filelist_hash[hash];
-	filelist_hash[hash] = filelist_entrys;
-
-	filelist_entrys++;
-
-	return &filelist[filelist_entrys-1];
-}
-
-static FILELIST* filelist_modify(FILELIST *entry)
-{
-	FILELIST *fentry;
-	if ((fentry=filelist_find(entry->fn))!=NULL) {
-		int tmp = fentry->next;
-		memcpy( fentry, entry, sizeof(FILELIST) );
-		fentry->next = tmp;
-	} else {
-		fentry = filelist_add(entry);
-	}
-	return fentry;
-}
-
-/*==========================================
- *	File List : filelist size adjust
- *------------------------------------------
- */
-static void filelist_adjust(void)
-{
-	if (filelist!=NULL) {
-		if (filelist_maxentry>filelist_entrys) {
-			FILELIST *new_filelist = (FILELIST*)realloc(
-				(void*)filelist,filelist_entrys*sizeof(FILELIST) );
-			if (new_filelist != NULL) {
-				filelist = new_filelist;
-				filelist_maxentry = filelist_entrys;
-			} else {
-				printf("out of memory : filelist\n");
-				exit(1);
-			}
-		}
-	}
-}
-
-/***********************************************************
- ***                  Grfio Sobroutines                  ***
- ***********************************************************/
-/*==========================================
- * Grfio : Resnametable replace
- *------------------------------------------
- */
-char* grfio_resnametable(char* fname, char *lfname)
-{
-   	FILE *fp;
-	char *p;
-	char w1[256],w2[256],restable[256],line[512];
-
-	sprintf(restable,"%sdata\\resnametable.txt",data_dir);
-
-	for(p=&restable[0];*p!=0;p++) if (*p=='\\') *p = '/';
-
-	fp = fopen(restable,"rb");
-	if(fp==NULL) {
-		printf("%s not found\n",restable);
-		exit(1);	// 1:not found error
-	}
-
-	while(fgets(line,508,fp)){
-	    if((sscanf(line,"%[^#]#%[^#]#",w1,w2)==2) && (sscanf(fname,"%*5s%s",lfname)==1) &&  (!strcmpi(w1,lfname))){
-	         sprintf(lfname,"data\\%s",w2);
-		 fclose(fp);
-	         return lfname;
-        }
-    }
-    fclose(fp);
-    return fname;
-
-}
-
-/*==========================================
- *	Grfio : Resource file size get
- *------------------------------------------
- */
-int grfio_size(char *fname)
-{
-	FILELIST *entry;
-
-	entry = filelist_find(fname);
-
-	if (entry==NULL || entry->gentry<0) {	// LocalFileCheck
-		char lfname[256],rname[256],*p;
-		FILELIST lentry;
-		struct stat st;
-
-		//printf("%s\t",fname);
-		sprintf(rname,"%s",grfio_resnametable(fname,lfname));
-		//printf("%s\n",rname);
-		sprintf(lfname,"%s%s",data_dir,rname);
-		//printf("%s\n",lfname);
-
-		for(p=&lfname[0];*p!=0;p++) if (*p=='\\') *p = '/';	// * At the time of Unix
-
-		if (stat(lfname,&st)==0) {
-			strncpy(lentry.fn, fname, sizeof(lentry.fn)-1 );
-			lentry.declen = st.st_size;
-			lentry.gentry = 0;	// 0:LocalFile
-			entry = filelist_modify(&lentry);
-		} else if (entry==NULL) {
-			printf("%s not found\n", fname);
-			//exit(1);
-         	return -1;
-		}
-	}
-	return entry->declen;
-}
-
-/*==========================================
- *	Grfio : Resource file read & size get
- *------------------------------------------
- */
-void* grfio_reads(char *fname, int *size)
-{
-	FILE *in = NULL;
-	unsigned char *buf=NULL,*buf2=NULL;
-	char *gfname;
-	FILELIST *entry;
-
-	entry = filelist_find(fname);
-
-	if (entry==NULL || entry->gentry<=0) {	// LocalFileCheck
-		char lfname[256],rname[256],*p;
-		FILELIST lentry;
-
-		strncpy(lfname,fname,255);
-		sprintf(rname,"%s",grfio_resnametable(fname,lfname));
-		sprintf(lfname,"%s%s",data_dir,rname);
-		//printf("%s\n",lfname);
-
-		for(p=&lfname[0];*p!=0;p++) if (*p=='\\') *p = '/';	// * At the time of Unix
-
-		in = fopen(lfname,"rb");
-		if(in!=NULL) {
-			if (entry!=NULL && entry->gentry==0) {
-				lentry.declen=entry->declen;
-			} else {
-				fseek(in,0,2);	// SEEK_END
-				lentry.declen = ftell(in);
-			}
-			fseek(in,0,0);	// SEEK_SET
-			buf2 = calloc(lentry.declen+1024, 1);
-			if (buf2==NULL) {
-				printf("file read memory allocate error : declen\n");
-				goto errret;
-			}
-			fread(buf2,1,lentry.declen,in);
-			fclose(in); in = NULL;
-			strncpy( lentry.fn, fname, sizeof(lentry.fn)-1 );
-			lentry.gentry = 0;	// 0:LocalFile
-			entry = filelist_modify(&lentry);
-		} else {
-			if (entry!=NULL && entry->gentry<0) {
-				entry->gentry = -entry->gentry;	// local file checked
-			} else {
-				printf("%s not found\n", fname);
-				//goto errret;
-				free(buf2);
-				return NULL;
-			}
-		}
-	}
-	if (entry!=NULL && entry->gentry>0) {	// Archive[GRF] File Read
-		buf = calloc(entry->srclen_aligned+1024, 1);
-		if (buf==NULL) {
-			printf("file read memory allocate error : srclen_aligned\n");
-			goto errret;
-		}
-		gfname = gentry_table[entry->gentry-1];
-		in = fopen(gfname,"rb");
-		if(in==NULL) {
-			printf("%s not found\n",gfname);
-			//goto errret;
-			free(buf);
-			return NULL;
-		}
-		fseek(in,entry->srcpos,0);
-		fread(buf,1,entry->srclen_aligned,in);
-		fclose(in);
-		buf2=calloc(entry->declen+1024, 1);
-		if (buf2==NULL) {
-			printf("file decode memory allocate error\n");
-			goto errret;
-		}
-		if(entry->type==1 || entry->type==3 || entry->type==5) {
-			uLongf len;
-			if (entry->cycle>=0) {
-				decode_des_etc(buf,entry->srclen_aligned,entry->cycle==0,entry->cycle);
-			}
-			len=entry->declen;
-			decode_zip(buf2,&len,buf,entry->srclen);
-			if(len!=entry->declen) {
-				printf("decode_zip size miss match err: %d != %d\n",(int)len,entry->declen);
-				goto errret;
-			}
-		} else {
-			memcpy(buf2,buf,entry->declen);
-		}
-		free(buf);
-	}
-	if (size!=NULL && entry!=NULL)
-		*size = entry->declen;
-	return buf2;
-errret:
-	if (buf!=NULL) free(buf);
-	if (buf2!=NULL) free(buf2);
-	if (in!=NULL) fclose(in);
-	exit(1);	//return NULL;
-}
-
-/*==========================================
- *	Grfio : Resource file read
- *------------------------------------------
- */
-void* grfio_read(char *fname)
-{
-	return grfio_reads(fname,NULL);
-}
-
-/*==========================================
- *	Resource filename decode
- *------------------------------------------
- */
-static unsigned char * decode_filename(unsigned char *buf,int len)
-{
-	int lop;
-	for(lop=0;lop<len;lop+=8) {
-		NibbleSwap(&buf[lop],8);
-		BitConvert(&buf[lop],BitSwapTable1);
-		BitConvert4(&buf[lop]);
-		BitConvert(&buf[lop],BitSwapTable2);
-	}
-	return buf;
-}
-
-/*==========================================
- * Grfio : Entry table read
- *------------------------------------------
- */
-static int grfio_entryread(char *gfname,int gentry)
-{
-	FILE *fp;
-	int grf_size,list_size;
-	unsigned char grf_header[0x2e];
-	int lop,entry,entrys,ofs,grf_version;
-	unsigned char *fname;
-	unsigned char *grf_filelist;
-
-	fp = fopen(gfname,"rb");
-	if(fp==NULL) {
-		printf("%s not found\n",gfname);
-		return 1;	// 1:not found error
-	}
-
-	fseek(fp,0,2);	// SEEK_END
-	grf_size = ftell(fp);
-	fseek(fp,0,0);	// SEEK_SET
-	fread(grf_header,1,0x2e,fp);
-	if(strcmp(grf_header,"Master of Magic") || fseek(fp,getlong(grf_header+0x1e),1)){	// SEEK_CUR
-		fclose(fp);
-		printf("%s read error\n",gfname);
-		return 2;	// 2:file format error
-	}
-
-	grf_version = getlong(grf_header+0x2a) >> 8;
-
-	if (grf_version==0x01) {	//****** Grf version 01xx ******
-		list_size = grf_size-ftell(fp);
-		grf_filelist = calloc(list_size, 1);
-		if(grf_filelist==NULL){
-			fclose(fp);
-			printf("out of memory : grf_filelist\n");
-			return 3;	// 3:memory alloc error
-		}
-		fread(grf_filelist,1,list_size,fp);
-		fclose(fp);
-
-		entrys = getlong(grf_header+0x26) - getlong(grf_header+0x22) - 7;
-
-		// Get an entry
-		for(entry=0,ofs=0;entry<entrys;entry++){
-			int ofs2,srclen,srccount,type;
-			char *period_ptr;
-			FILELIST aentry;
-
-			ofs2 = ofs+getlong(grf_filelist+ofs)+4;
-			type = grf_filelist[ofs2+12];
-			if( type!=0 ){	// Directory Index ... skip
-				fname = decode_filename(grf_filelist+ofs+6,grf_filelist[ofs]-6);
-				if(strlen(fname)>sizeof(aentry.fn)-1){
-					printf("file name too long : %s\n",fname);
-					free(grf_filelist);
-					exit(1);
-				}
-				srclen=0;
-				if((period_ptr=rindex(fname,'.'))!=NULL){
-					for(lop=0;lop<4;lop++) {
-						if(strcasecmp(period_ptr,".gnd\0.gat\0.act\0.str"+lop*5)==0)
-							break;
-					}
-					srclen=getlong(grf_filelist+ofs2)-getlong(grf_filelist+ofs2+8)-715;
-					if(lop==4) {
-						for(lop=10,srccount=1;srclen>=lop;lop=lop*10,srccount++);
-					} else {
-						srccount=0;
-					}
-				} else {
-					srccount=0;
-				}
-
-				aentry.srclen         = srclen;
-				aentry.srclen_aligned = getlong(grf_filelist+ofs2+4)-37579;
-				aentry.declen         = getlong(grf_filelist+ofs2+8);
-				aentry.srcpos         = getlong(grf_filelist+ofs2+13)+0x2e;
-				aentry.cycle          = srccount;
-				aentry.type           = type;
-				strncpy(aentry.fn,fname,sizeof(aentry.fn)-1);
-#ifdef	GRFIO_LOCAL
-				aentry.gentry         = -(gentry+1);	// As Flag for making it a negative number carrying out the first time LocalFileCheck
-#else
-				aentry.gentry         = gentry+1;		// With no first time LocalFileCheck
-#endif
-				filelist_modify(&aentry);
-			}
-			ofs = ofs2 + 17;
-		}
-		free(grf_filelist);
-
-	} else if (grf_version==0x02) {	//****** Grf version 02xx ******
-		unsigned char eheader[8];
-		unsigned char *rBuf;
-		uLongf rSize,eSize;
-
-		fread(eheader,1,8,fp);
-		rSize = getlong(eheader);	// Read Size
-		eSize = getlong(eheader+4);	// Extend Size
-
-		if (rSize > grf_size-ftell(fp)) {
-			fclose(fp);
-			printf("Illegal data format : grf compress entry size\n");
-			return 4;
-		}
-
-		rBuf = calloc( rSize , 1);	// Get a Read Size
-		if (rBuf==NULL) {
-			fclose(fp);
-			printf("out of memory : grf compress entry table buffer\n");
-			return 3;
-		}
-		grf_filelist = calloc( eSize , 1);	// Get a Extend Size
-		if (grf_filelist==NULL) {
-			free(rBuf);
-			fclose(fp);
-			printf("out of memory : grf extract entry table buffer\n");
-			return 3;
-		}
-		fread(rBuf,1,rSize,fp);
-		fclose(fp);
-		decode_zip(grf_filelist,&eSize,rBuf,rSize);	// Decode function
-		list_size = eSize;
-		free(rBuf);
-
-		entrys = getlong(grf_header+0x26) - 7;
-
-		// Get an entry
-		for(entry=0,ofs=0;entry<entrys;entry++){
-			int ofs2,srclen,srccount,type;
-			FILELIST aentry;
-
-			fname = grf_filelist+ofs;
-			if (strlen(fname)>sizeof(aentry.fn)-1) {
-				printf("grf : file name too long : %s\n",fname);
-				free(grf_filelist);
-				exit(1);
-			}
-			ofs2 = ofs+strlen(grf_filelist+ofs)+1;
-			type = grf_filelist[ofs2+12];
-			if(type==1 || type==3 || type==5) {
-				srclen=getlong(grf_filelist+ofs2);
-				if (grf_filelist[ofs2+12]==3) {
-					for(lop=10,srccount=1;srclen>=lop;lop=lop*10,srccount++);
-				} else if (grf_filelist[ofs2+12]==5) {
-					srccount = 0;
-				} else {	// if (grf_filelist[ofs2+12]==1) {
-					srccount = -1;
-				}
-
-				aentry.srclen         = srclen;
-				aentry.srclen_aligned = getlong(grf_filelist+ofs2+4);
-				aentry.declen         = getlong(grf_filelist+ofs2+8);
-				aentry.srcpos         = getlong(grf_filelist+ofs2+13)+0x2e;
-				aentry.cycle          = srccount;
-				aentry.type           = type;
-				strncpy(aentry.fn,fname,sizeof(aentry.fn)-1);
-#ifdef	GRFIO_LOCAL
-				aentry.gentry         = -(gentry+1);	// As Flag for making it a negative number carrying out the first time LocalFileCheck
-#else
-				aentry.gentry         = gentry+1;		// With no first time LocalFileCheck
-#endif
-				filelist_modify(&aentry);
-			}
-			ofs = ofs2 + 17;
-		}
-		free(grf_filelist);
-
-	} else {	//****** Grf Other version ******
-		fclose(fp);
-		printf("not support grf versions : %04x\n",getlong(grf_header+0x2a));
-		return 4;
-	}
-
-	filelist_adjust();	// Unnecessary area release of filelist
-
-	return 0;	// 0:no error
-}
-
-/*==========================================
- * Grfio : Resource file check
- *------------------------------------------
- */
-static void grfio_resourcecheck()
-{
-	int size;
-	unsigned char *buf,*ptr;
-	char w1[256],w2[256],src[256],dst[256];
-	FILELIST *entry;
-
-	buf=grfio_reads("data\\resnametable.txt",&size);
-	buf[size] = 0;
-
-	for(ptr=buf;ptr-buf<size;) {
-		if(sscanf(ptr,"%[^#]#%[^#]#",w1,w2)==2){
-			if(strstr(w2,"bmp")){
-				sprintf(src,"data\\texture\\%s",w1);
-				sprintf(dst,"data\\texture\\%s",w2);
-			} else {
-				sprintf(src,"data\\%s",w1);
-				sprintf(dst,"data\\%s",w2);
-			}
-			entry = filelist_find(dst);
-			if (entry!=NULL) {
-				FILELIST fentry;
-				memcpy( &fentry, entry, sizeof(FILELIST) );
-				strncpy( fentry.fn ,src, sizeof(fentry.fn)-1 );
-				filelist_modify(&fentry);
-			} else {
-				//printf("file not found in data.grf : %s < %s\n",dst,src);
-			}
-		}
-		ptr = strchr(ptr,'\n');	// Next line
-		if (!ptr) break;
-		ptr++;
-	}
-	free(buf);
-	filelist_adjust();	// Unnecessary area release of filelist
-}
-
-/*==========================================
- * Grfio : Resource add
- *------------------------------------------
- */
-#define	GENTRY_ADDS	16	// The number increment of gentry_table entries
-
-int grfio_add(char *fname)
-{
-	int len,result;
-	char *buf;
-
-	if (gentry_entrys>=GENTRY_LIMIT) {
-		printf("gentrys limit : grfio_add\n");
-		exit(1);
-	}
-
-	printf("%s file reading...\n",fname);
-
-	if (gentry_entrys>=gentry_maxentry) {
-		char **new_gentry = (char**)realloc(
-			(void*)gentry_table,(gentry_maxentry+GENTRY_ADDS)*sizeof(char*) );
-		if (new_gentry!=NULL) {
-			int lop;
-			gentry_table = new_gentry;
-			gentry_maxentry += GENTRY_ADDS;
-			for(lop=gentry_entrys;lop<gentry_maxentry;lop++)
-				gentry_table[lop] = NULL;
-		} else {
-			printf("out of memory : grfio_add\n");
-			exit(1);
-		}
-	}
-	len = strlen( fname );
-	buf = calloc(len+1, 1);
-	if (buf==NULL) {
-		printf("out of memory : gentry\n");
-		exit(1);
-	}
-	strcpy( buf, fname );
-	gentry_table[gentry_entrys++] = buf;
-
-	result = grfio_entryread(fname,gentry_entrys-1);
-
-	if (result==0) {
-		// Resource check
-		grfio_resourcecheck();
-	}
-
-	return result;
-}
-
-/*==========================================
- * Grfio : Finalize
- *------------------------------------------
- */
-void grfio_final(void)
-{
-	int lop;
-
-	if (filelist!=NULL)	free(filelist);
-	filelist = NULL;
-	filelist_entrys = filelist_maxentry = 0;
-
-	if (gentry_table!=NULL) {
-		for(lop=0;lop<gentry_entrys;lop++) {
-			if (gentry_table[lop]!=NULL) {
-				free(gentry_table[lop]);
-			}
-		}
-		free(gentry_table);
-	}
-	gentry_table = NULL;
-	gentry_entrys = gentry_maxentry = 0;
-}
-
-/*==========================================
- * Grfio : Initialize
- *------------------------------------------
- */
-void grfio_init(char *fname)
-{
-	FILE *data_conf;
-	char line[1024], w1[1024], w2[1024];
-	int result = 0, result2 = 0, result3 = 0;
-
-	data_conf = fopen(fname, "r");
-
-	// It will read, if there is grf-files.txt.
-	if (data_conf) {
-		while(fgets(line, 1020, data_conf)) {
-			if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) == 2) {
-				if(strcmp(w1, "data") == 0)
-					strcpy(data_file, w2);
-				else if(strcmp(w1, "sdata") == 0)
-					strcpy(sdata_file, w2);
-				else if(strcmp(w1, "adata") == 0)
-					strcpy(adata_file, w2);
-				else if(strcmp(w1,"data_dir") == 0)
-					strcpy(data_dir, w2);
-			}
-		}
-
-		fclose(data_conf);
-		printf("read %s done\n",fname);
-	} // end of reading grf-files.txt
-
-	hashinit();	// hash table initialization
-
-	filelist = NULL;     filelist_entrys = filelist_maxentry = 0;
-	gentry_table = NULL; gentry_entrys = gentry_maxentry = 0;
-	atexit(grfio_final);	// End processing definition
-
-	// Entry table reading
-
-	if (strcmp(data_file, "") != 0)			// If data directive exists in grf-files.txt (i.e. data_file is not equal to "")
-		result = grfio_add(data_file);		// Primary data file
-
-	if (strcmp(sdata_file, "") != 0)		// If sdata directive exists in grf-files.txt (i.e. sdata_file is not equal to "")
-		result2 = grfio_add(sdata_file);	// Sakray data file
-
-	if (strcmp(adata_file, "") != 0)		// If data directive exists in grf-files.txt (i.e. adata_file is not equal to "")
-		result3 = grfio_add(adata_file);	// Alpha version data file
-
-	if (result != 0 && result2 != 0 && result3 != 0) {
-		printf("not grf file readed exit!!\n");
-		exit(1);	// It ends, if a resource cannot read one.
-	}
-}
diff --git a/misc/src/common/grfio.h b/misc/src/common/grfio.h
deleted file mode 100644
index 53b9da8..0000000
--- a/misc/src/common/grfio.h
+++ /dev/null
@@ -1,16 +0,0 @@
-// $Id: grfio.h,v 1.1.1.1 2004/09/10 17:44:49 MagicalTux Exp $
-#ifndef	_GRFIO_H_
-#define	_GRFIO_H_
-
-void grfio_init(char*);			// GRFIO Initialize
-int grfio_add(char*);			// GRFIO Resource file add
-void* grfio_read(char*);		// GRFIO data file read
-void* grfio_reads(char*,int*);	// GRFIO data file read & size get
-int grfio_size(char*);			// GRFIO data file size get
-
-// Accessor to GRF filenames
-char *grfio_setdatafile(const char *str);
-char *grfio_setadatafile(const char *str);
-char *grfio_setsdatafile(const char *str);
-
-#endif	// _GRFIO_H_
diff --git a/misc/src/common/lock.c b/misc/src/common/lock.c
deleted file mode 100644
index 9a2205b..0000000
--- a/misc/src/common/lock.c
+++ /dev/null
@@ -1,37 +0,0 @@
-
-#include <stdio.h>
-#include "lock.h"
-
-// �������݃t�@�C���̕ی쏈��
-// �i�������݂��I���܂ŁA���t�@�C����ۊǂ��Ă����j
-
-// �V�����t�@�C���̏������݊J�n
-FILE* lock_fopen(const char* filename,int *info) {
-	char newfile[512];
-	FILE *fp;
-	int  no = 0;
-
-	// ���S�ȃt�@�C�����𓾂�i�蔲���j
-	do {
-		sprintf(newfile,"%s_%04d.tmp",filename,++no);
-	} while((fp = fopen(newfile,"r")) && (fclose(fp), no<9999) );
-	*info = no;
-	return fopen(newfile,"w");
-}
-
-// ���t�@�C�����폜���V�t�@�C�������l�[��
-int lock_fclose(FILE *fp,const char* filename,int *info) {
-	int  ret = 0;
-	char newfile[512];
-	if(fp != NULL) {
-		ret = fclose(fp);
-		sprintf(newfile,"%s_%04d.tmp",filename,*info);
-		remove(filename);
-		// ���̃^�C�~���O�ŗ�����ƍň��B
-		rename(newfile,filename);
-		return ret;
-	} else {
-		return 1;
-	}
-}
-
diff --git a/misc/src/common/lock.h b/misc/src/common/lock.h
deleted file mode 100644
index 795bf88..0000000
--- a/misc/src/common/lock.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _LOCK_H_
-#define _LOCK_H_
-
-FILE* lock_fopen(const char* filename,int *info);
-int   lock_fclose(FILE *fp,const char* filename,int *info);
-
-#endif
-
diff --git a/misc/src/common/malloc.c b/misc/src/common/malloc.c
deleted file mode 100644
index eda9bc2..0000000
--- a/misc/src/common/malloc.c
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include "malloc.h"
-
-void* aMalloc_( size_t size, const char *file, int line, const char *func )
-{
-	void *ret;
-	
-//	printf("%s:%d: in func %s: malloc %d\n",file,line,func,size);
-	ret=malloc(size);
-	if(ret==NULL){
-		printf("%s:%d: in func %s: malloc error out of memory!\n",file,line,func);
-		exit(1);
-
-	}
-	return ret;
-}
-void* aCalloc_( size_t num, size_t size, const char *file, int line, const char *func )
-{
-	void *ret;
-	
-//	printf("%s:%d: in func %s: calloc %d %d\n",file,line,func,num,size);
-	ret=calloc(num,size);
-	if(ret==NULL){
-		printf("%s:%d: in func %s: calloc error out of memory!\n",file,line,func);
-		exit(1);
-
-	}
-	return ret;
-}
-
-void* aRealloc_( void *p, size_t size, const char *file, int line, const char *func )
-{
-	void *ret;
-	
-//	printf("%s:%d: in func %s: realloc %p %d\n",file,line,func,p,size);
-	ret=realloc(p,size);
-	if(ret==NULL){
-		printf("%s:%d: in func %s: realloc error out of memory!\n",file,line,func);
-		exit(1);
-
-	}
-	return ret;
-}
diff --git a/misc/src/common/malloc.h b/misc/src/common/malloc.h
deleted file mode 100644
index 3733a5e..0000000
--- a/misc/src/common/malloc.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef _MALLOC_H_
-#define _MALLOC_H_
-
-#include <stdlib.h>
-
-#if __STDC_VERSION__ < 199901L
-# if __GNUC__ >= 2
-#  define __func__ __FUNCTION__
-# else
-#  define __func__ ""
-# endif
-#endif
-
-#define ALC_MARK __FILE__, __LINE__, __func__
-
-void* aMalloc_( size_t size, const char *file, int line, const char *func );
-void* aCalloc_( size_t num, size_t size, const char *file, int line, const char *func );
-void* aRealloc_( void *p, size_t size, const char *file, int line, const char *func );
-
-#define aMalloc(n) aMalloc_(n,ALC_MARK)
-#define aCalloc(m,n) aCalloc_(m,n,ALC_MARK)
-#define aRealloc(p,n) aRealloc_(p,n,ALC_MARK)
-
-
-#endif
diff --git a/misc/src/common/mmo.h b/misc/src/common/mmo.h
deleted file mode 100644
index 4105135..0000000
--- a/misc/src/common/mmo.h
+++ /dev/null
@@ -1,304 +0,0 @@
-// $Id: mmo.h,v 1.3 2004/09/25 20:12:25 PoW Exp $
-// Original : mmo.h 2003/03/14 12:07:02 Rev.1.7
-
-#ifndef	_MMO_H_
-#define	_MMO_H_
-
-#include <time.h>
-#include "utils.h" // LCCWIN32
-
-#ifdef CYGWIN
-// txt��log�Ȃǂ̏����o���t�@�C���̉��s�R�[�h
-#define RETCODE	"\r\n"	// (CR/LF�FWindows�n)
-#else
-#define RETCODE "\n"	// (LF�FUnix�n�j
-#endif
-
-#define FIFOSIZE_SERVERLINK	128*1024
-
-// set to 0 to not check IP of player between each server.
-// set to another value if you want to check (1)
-#define CMP_AUTHFIFO_IP 1
-
-#define CMP_AUTHFIFO_LOGIN2 1
-
-#define MAX_MAP_PER_SERVER 512
-#define MAX_INVENTORY 100
-#define MAX_AMOUNT 30000
-#define MAX_ZENY 1000000000	// 1G zeny
-#define MAX_CART 100
-#define MAX_SKILL 450
-#define GLOBAL_REG_NUM 96
-#define ACCOUNT_REG_NUM 16
-#define ACCOUNT_REG2_NUM 16
-#define DEFAULT_WALK_SPEED 150
-#define MIN_WALK_SPEED 0
-#define MAX_WALK_SPEED 1000
-#define MAX_STORAGE 300
-#define MAX_GUILD_STORAGE 1000
-#define MAX_PARTY 12
-#define MAX_GUILD 36	// increased max guild members to accomodate for +2 increase for extension levels [Valaris] (removed) [PoW]
-#define MAX_GUILDPOSITION 20	// increased max guild positions to accomodate for all members [Valaris] (removed) [PoW]
-#define MAX_GUILDEXPLUSION 32
-#define MAX_GUILDALLIANCE 16
-#define MAX_GUILDSKILL	8
-#define MAX_GUILDCASTLE 24	// increased to include novice castles [Valaris]
-#define MAX_GUILDLEVEL 50
-
-#define MIN_HAIR_STYLE battle_config.min_hair_style
-#define MAX_HAIR_STYLE battle_config.max_hair_style
-#define MIN_HAIR_COLOR battle_config.min_hair_color
-#define MAX_HAIR_COLOR battle_config.max_hair_color
-#define MIN_CLOTH_COLOR battle_config.min_cloth_color
-#define MAX_CLOTH_COLOR battle_config.max_cloth_color
-
-// for produce
-#define MIN_ATTRIBUTE 0
-#define MAX_ATTRIBUTE 4
-#define ATTRIBUTE_NORMAL 0
-#define MIN_STAR 0
-#define MAX_STAR 3
-
-#define MIN_PORTAL_MEMO 0
-#define MAX_PORTAL_MEMO 2
-
-#define MAX_STATUS_TYPE 5
-
-#define WEDDING_RING_M 2634
-#define WEDDING_RING_F 2635
-
-#define CHAR_CONF_NAME  "conf/char_athena.conf"
-
-struct item {
-	int id;
-	short nameid;
-	short amount;
-	unsigned short equip;
-	char identify;
-	char refine;
-	char attribute;
-	short card[4];
-	short broken;
-};
-
-struct point{
-	char map[24];
-	short x,y;
-};
-
-struct skill {
-	unsigned short id,lv,flag;
-};
-
-struct global_reg {
-	char str[32];
-	int value;
-};
-
-struct s_pet {
-	int account_id;
-	int char_id;
-	int pet_id;
-	short class;
-	short level;
-	short egg_id;//pet egg id
-	short equip;//pet equip name_id
-	short intimate;//pet friendly
-	short hungry;//pet hungry
-	char name[24];
-	char rename_flag;
-	char incuvate;
-};
-
-struct mmo_charstatus {
-	int char_id;
-	int account_id;
-	int partner_id;
-
-	int base_exp,job_exp,zeny;
-
-	short class;
-	short status_point,skill_point;
-	int hp,max_hp,sp,max_sp;
-	short option,karma,manner;
-	short hair,hair_color,clothes_color;
-	int party_id,guild_id,pet_id;
-
-	short weapon,shield;
-	short head_top,head_mid,head_bottom;
-
-	char name[24];
-	unsigned char base_level,job_level;
-	short str,agi,vit,int_,dex,luk;
-	unsigned char char_num,sex;
-
-	unsigned long mapip;
-	unsigned int mapport;
-
-	struct point last_point,save_point,memo_point[10];
-	struct item inventory[MAX_INVENTORY],cart[MAX_CART];
-	struct skill skill[MAX_SKILL];
-	int global_reg_num;
-	struct global_reg global_reg[GLOBAL_REG_NUM];
-	int account_reg_num;
-	struct global_reg account_reg[ACCOUNT_REG_NUM];
-	int account_reg2_num;
-	struct global_reg account_reg2[ACCOUNT_REG2_NUM];
-};
-
-struct storage {
-	int account_id;
-	short storage_status;
-	short storage_amount;
-	struct item storage[MAX_STORAGE];
-};
-
-struct guild_storage {
-	int guild_id;
-	short storage_status;
-	short storage_amount;
-	struct item storage[MAX_GUILD_STORAGE];
-};
-
-struct map_session_data;
-
-struct gm_account {
-	int account_id;
-	int level;
-};
-
-struct party_member {
-	int account_id;
-	char name[24],map[24];
-	int leader,online,lv;
-	struct map_session_data *sd;
-};
-
-struct party {
-	int party_id;
-	char name[24];
-	int exp;
-	int item;
-	struct party_member member[MAX_PARTY];
-};
-
-struct guild_member {
-	int account_id, char_id;
-	short hair,hair_color,gender,class,lv;
-	int exp,exp_payper;
-	short online,position;
-	int rsv1,rsv2;
-	char name[24];
-	struct map_session_data *sd;
-};
-
-struct guild_position {
-	char name[24];
-	int mode;
-	int exp_mode;
-};
-
-struct guild_alliance {
-	int opposition;
-	int guild_id;
-	char name[24];
-};
-
-struct guild_explusion {
-	char name[24];
-	char mes[40];
-	char acc[40];
-	int account_id;
-	int rsv1,rsv2,rsv3;
-};
-
-struct guild_skill {
-	int id,lv;
-};
-
-struct guild {
-	int guild_id;
-	short guild_lv, connect_member, max_member, average_lv;
-	int exp,next_exp,skill_point,castle_id;
-	char name[24],master[24];
-	struct guild_member member[MAX_GUILD];
-	struct guild_position position[MAX_GUILDPOSITION];
-	char mes1[60],mes2[120];
-	int emblem_len,emblem_id;
-	char emblem_data[2048];
-	struct guild_alliance alliance[MAX_GUILDALLIANCE];
-	struct guild_explusion explusion[MAX_GUILDEXPLUSION];
-	struct guild_skill skill[MAX_GUILDSKILL];
-};
-
-struct guild_castle {
-	int castle_id;
-	char map_name[24];
-	char castle_name[24];
-	char castle_event[24];
-	int guild_id;
-	int economy;
-	int defense;
-	int triggerE;
-	int triggerD;
-	int nextTime;
-	int payTime;
-	int createTime;
-	int visibleC;
-	int visibleG0;
-	int visibleG1;
-	int visibleG2;
-	int visibleG3;
-	int visibleG4;
-	int visibleG5;
-	int visibleG6;
-	int visibleG7;
-	int Ghp0;	// added Guardian HP [Valaris]
-	int Ghp1;
-	int Ghp2;
-	int Ghp3;
-	int Ghp4;
-	int Ghp5;
-	int Ghp6;
-	int Ghp7;	
-	int GID0;	
-	int GID1;
-	int GID2;
-	int GID3;
-	int GID4;
-	int GID5;
-	int GID6;
-	int GID7;	// end addition [Valaris]
-};
-struct square {
-	int val1[5];
-	int val2[5];
-};
-
-enum {
-	GBI_EXP			=1,		// �M���h��EXP
-	GBI_GUILDLV		=2,		// �M���h��Lv
-	GBI_SKILLPOINT	=3,		// �M���h�̃X�L���|�C���g
-	GBI_SKILLLV		=4,		// �M���h�X�L��Lv
-
-	GMI_POSITION	=0,		// �����o�[�̖�E�ύX
-	GMI_EXP			=1,		// �����o�[��EXP
-
-};
-
-#ifndef LCCWIN32
-#ifndef strcmpi
-#define strcmpi strcasecmp
-#endif
-#ifndef stricmp
-#define stricmp strcasecmp
-#endif
-#ifndef strncmpi
-#define strncmpi strncasecmp
-#endif
-#ifndef strnicmp
-#define strnicmp strncasecmp
-#endif
-#endif
-
-#endif	// _MMO_H_
diff --git a/misc/src/common/nullpo.c b/misc/src/common/nullpo.c
deleted file mode 100644
index 5fbf5fc..0000000
--- a/misc/src/common/nullpo.c
+++ /dev/null
@@ -1,90 +0,0 @@
-#include <stdio.h>
-#include <stdarg.h>
-#include <string.h>
-#include "nullpo.h"
-// #include "logs.h" // �z�΂��Ă݂�
-
-static void nullpo_info_core(const char *file, int line, const char *func, 
-                             const char *fmt, va_list ap);
-
-/*======================================
- * Null�`�F�b�N �y�� ���o��
- *--------------------------------------
- */
-int nullpo_chk_f(const char *file, int line, const char *func, const void *target,
-                 const char *fmt, ...)
-{
-	va_list ap;
-	
-	if (target != NULL)
-		return 0;
-	
-	va_start(ap, fmt);
-	nullpo_info_core(file, line, func, fmt, ap);
-	va_end(ap);
-	return 1;
-}
-
-int nullpo_chk(const char *file, int line, const char *func, const void *target)
-{
-	if (target != NULL)
-		return 0;
-	
-	nullpo_info_core(file, line, func, NULL, NULL);
-	return 1;
-}
-
-
-/*======================================
- * nullpo���o��(�O���ďo���������b�p)
- *--------------------------------------
- */
-void nullpo_info_f(const char *file, int line, const char *func, 
-                 const char *fmt, ...)
-{
-	va_list ap;
-	
-	va_start(ap, fmt);
-	nullpo_info_core(file, line, func, fmt, ap);
-	va_end(ap);
-}
-
-void nullpo_info(const char *file, int line, const char *func)
-{
-	nullpo_info_core(file, line, func, NULL, NULL);
-}
-
-
-/*======================================
- * nullpo���o��(Main)
- *--------------------------------------
- */
-static void nullpo_info_core(const char *file, int line, const char *func, 
-                             const char *fmt, va_list ap)
-{
-	if (file == NULL)
-		file = "??";
-	
-	func =
-		func == NULL    ? "unknown":
-		func[0] == '\0' ? "unknown":
-		                  func;
-	
-	printf("--- nullpo info --------------------------------------------\n");
-	printf("%s:%d: in func `%s'\n", file, line, func);
-	if (fmt != NULL)
-	{
-		if (fmt[0] != '\0')
-		{
-			vprintf(fmt, ap);
-			
-			// �Ō�ɉ��s�������m�F
-			if (fmt[strlen(fmt)-1] != '\n')
-				printf("\n");
-		}
-	}
-	printf("--- end nullpo info ----------------------------------------\n");
-	
-	// �������nullpo���O���t�@�C���ɏ����o������
-	// �܂Ƃ߂Ē�o�ł���ȂƎv���Ă�����B
-}
diff --git a/misc/src/common/nullpo.h b/misc/src/common/nullpo.h
deleted file mode 100644
index 2d33500..0000000
--- a/misc/src/common/nullpo.h
+++ /dev/null
@@ -1,222 +0,0 @@
-#ifndef _NULLPO_H_
-#define _NULLPO_H_
-
-
-#define NULLPO_CHECK 1
-		// �S�̂̃X�C�b�`��錾���Ă���w�b�_�������
-		// �����Ɉړ����Ă����������
-
-
-#if __STDC_VERSION__ < 199901L
-# if __GNUC__ >= 2
-#  define __func__ __FUNCTION__
-# else
-#  define __func__ ""
-# endif
-#endif
-
-#ifdef LCCWIN32
-#define __attribute__(x)	/* nothing */
-#endif
-
-
-#define NLP_MARK __FILE__, __LINE__, __func__
-
-/*----------------------------------------------------------------------------
- * Macros
- *----------------------------------------------------------------------------
- */
-/*======================================
- * Null�`�F�b�N �y�� ���o�͌� return
- *�E�W�J�����if�Ƃ�return�����o��̂�
- *  ��s�P�̂Ŏg���Ă��������B
- *�Enullpo_ret(x = func());
- *  �̂悤�Ȏg�p�@���z�肵�Ă��܂��B
- *--------------------------------------
- * nullpo_ret(t)
- *   �߂�l 0�Œ�
- * [����]
- *  t       �`�F�b�N�Ώ�
- *--------------------------------------
- * nullpo_retv(t)
- *   �߂�l �Ȃ�
- * [����]
- *  t       �`�F�b�N�Ώ�
- *--------------------------------------
- * nullpo_retr(ret, t)
- *   �߂�l �w��
- * [����]
- *  ret     return(ret);
- *  t       �`�F�b�N�Ώ�
- *--------------------------------------
- * nullpo_ret_f(t, fmt, ...)
- *   �ڍ׏��o�͗p
- *   �߂�l 0
- * [����]
- *  t       �`�F�b�N�Ώ�
- *  fmt ... vprintf�ɓn�����
- *    ���l��֌W�ϐ��̏����o���Ȃǂ�
- *--------------------------------------
- * nullpo_retv_f(t, fmt, ...)
- *   �ڍ׏��o�͗p
- *   �߂�l �Ȃ�
- * [����]
- *  t       �`�F�b�N�Ώ�
- *  fmt ... vprintf�ɓn�����
- *    ���l��֌W�ϐ��̏����o���Ȃǂ�
- *--------------------------------------
- * nullpo_retr_f(ret, t, fmt, ...)
- *   �ڍ׏��o�͗p
- *   �߂�l �w��
- * [����]
- *  ret     return(ret);
- *  t       �`�F�b�N�Ώ�
- *  fmt ... vprintf�ɓn�����
- *    ���l��֌W�ϐ��̏����o���Ȃǂ�
- *--------------------------------------
- */
-
-#if NULLPO_CHECK
-
-#define nullpo_ret(t) \
-	if (nullpo_chk(NLP_MARK, (void *)(t))) {return(0);}
-
-#define nullpo_retv(t) \
-	if (nullpo_chk(NLP_MARK, (void *)(t))) {return;}
-
-#define nullpo_retr(ret, t) \
-	if (nullpo_chk(NLP_MARK, (void *)(t))) {return(ret);}
-
-
-// �•ψ����}�N���Ɋւ�������R���p�C��
-#if __STDC_VERSION__ >= 199901L
-/* C99�ɑΉ� */
-#define nullpo_ret_f(t, fmt, ...) \
-	if (nullpo_chk_f(NLP_MARK, (void *)(t), (fmt), __VA_ARGS__)) {return(0);}
-
-#define nullpo_retv_f(t, fmt, ...) \
-	if (nullpo_chk_f(NLP_MARK, (void *)(t), (fmt), __VA_ARGS__)) {return;}
-
-#define nullpo_retr_f(ret, t, fmt, ...) \
-	if (nullpo_chk_f(NLP_MARK, (void *)(t), (fmt), __VA_ARGS__)) {return(ret);}
-
-#elif __GNUC__ >= 2
-/* GCC�p */
-#define nullpo_ret_f(t, fmt, args...) \
-	if (nullpo_chk_f(NLP_MARK, (void *)(t), (fmt), ## args)) {return(0);}
-
-#define nullpo_retv_f(t, fmt, args...) \
-	if (nullpo_chk_f(NLP_MARK, (void *)(t), (fmt), ## args)) {return;}
-
-#define nullpo_retr_f(ret, t, fmt, args...) \
-	if (nullpo_chk_f(NLP_MARK, (void *)(t), (fmt), ## args)) {return(ret);}
-
-#else
-
-/* ���̑��̏ꍇ�E�E�E orz */
-
-#endif
-
-#else /* NULLPO_CHECK */
-/* No Nullpo check */
-
-// if((t)){;}
-// �ǂ����@���v���‚��Ȃ������̂ŁE�E�E����̍�ł��B
-// �ꉞ���[�j���O�͏o�Ȃ��͂�
-
-#define nullpo_ret(t) if((t)){;}
-#define nullpo_retv(t) if((t)){;}
-#define nullpo_retr(ret, t) if((t)){;}
-
-// �•ψ����}�N���Ɋւ�������R���p�C��
-#if __STDC_VERSION__ >= 199901L
-/* C99�ɑΉ� */
-#define nullpo_ret_f(t, fmt, ...) if((t)){;}
-#define nullpo_retv_f(t, fmt, ...) if((t)){;}
-#define nullpo_retr_f(ret, t, fmt, ...) if((t)){;}
-
-#elif __GNUC__ >= 2
-/* GCC�p */
-#define nullpo_ret_f(t, fmt, args...) if((t)){;}
-#define nullpo_retv_f(t, fmt, args...) if((t)){;}
-#define nullpo_retr_f(ret, t, fmt, args...) if((t)){;}
-
-#else
-/* ���̑��̏ꍇ�E�E�E orz */
-#endif
-
-#endif /* NULLPO_CHECK */
-
-/*----------------------------------------------------------------------------
- * Functions
- *----------------------------------------------------------------------------
- */
-/*======================================
- * nullpo_chk
- *   Null�`�F�b�N �y�� ���o��
- * [����]
- *  file    __FILE__
- *  line    __LINE__
- *  func    __func__ (�֐���)
- *    �����ɂ� NLP_MARK ���g���Ƃ悢
- *  target  �`�F�b�N�Ώ�
- * [�Ԃ�l]
- *  0 OK
- *  1 NULL
- *--------------------------------------
- */
-int nullpo_chk(const char *file, int line, const char *func, const void *target);
-
-
-/*======================================
- * nullpo_chk_f
- *   Null�`�F�b�N �y�� �ڍׂȏ��o��
- * [����]
- *  file    __FILE__
- *  line    __LINE__
- *  func    __func__ (�֐���)
- *    �����ɂ� NLP_MARK ���g���Ƃ悢
- *  target  �`�F�b�N�Ώ�
- *  fmt ... vprintf�ɓn�����
- *    ���l��֌W�ϐ��̏����o���Ȃǂ�
- * [�Ԃ�l]
- *  0 OK
- *  1 NULL
- *--------------------------------------
- */
-int nullpo_chk_f(const char *file, int line, const char *func, const void *target,
-                 const char *fmt, ...)
-                 __attribute__((format(printf,5,6)));
-
-
-/*======================================
- * nullpo_info
- *   nullpo���o��
- * [����]
- *  file    __FILE__
- *  line    __LINE__
- *  func    __func__ (�֐���)
- *    �����ɂ� NLP_MARK ���g���Ƃ悢
- *--------------------------------------
- */
-void nullpo_info(const char *file, int line, const char *func);
-
-
-/*======================================
- * nullpo_info_f
- *   nullpo�ڍ׏��o��
- * [����]
- *  file    __FILE__
- *  line    __LINE__
- *  func    __func__ (�֐���)
- *    �����ɂ� NLP_MARK ���g���Ƃ悢
- *  fmt ... vprintf�ɓn�����
- *    ���l��֌W�ϐ��̏����o���Ȃǂ�
- *--------------------------------------
- */
-void nullpo_info_f(const char *file, int line, const char *func, 
-                   const char *fmt, ...)
-                   __attribute__((format(printf,4,5)));
-
-
-#endif
diff --git a/misc/src/common/socket.c b/misc/src/common/socket.c
deleted file mode 100644
index 1711286..0000000
--- a/misc/src/common/socket.c
+++ /dev/null
@@ -1,439 +0,0 @@
-// $Id: socket.c,v 1.1.1.1 2004/09/10 17:44:49 MagicalTux Exp $
-// original : core.c 2003/02/26 18:03:12 Rev 1.7
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-
-#ifdef LCCWIN32
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <winsock2.h>
-#else
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <sys/time.h>
-#include <unistd.h>
-#endif
-
-#include <fcntl.h>
-#include <string.h>
-
-#include "mmo.h"	// [Valaris] thanks to fov
-#include "socket.h"
-#include "utils.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-fd_set readfds;
-int fd_max;
-
-int rfifo_size = 65536;
-int wfifo_size = 65536;
-
-struct socket_data *session[FD_SETSIZE];
-
-static int null_parse(int fd);
-static int (*default_func_parse)(int) = null_parse;
-
-/*======================================
- *	CORE : Set function
- *--------------------------------------
- */
-void set_defaultparse(int (*defaultparse)(int))
-{
-	default_func_parse = defaultparse;
-}
-
-/*======================================
- *	CORE : Socket Sub Function
- *--------------------------------------
- */
-
-static int recv_to_fifo(int fd)
-{
-	int len;
-
-	//printf("recv_to_fifo : %d %d\n",fd,session[fd]->eof);
-	if(session[fd]->eof)
-		return -1;
-
-
-#ifdef LCCWIN32
-	   len = recv(fd,session[fd]->rdata+session[fd]->rdata_size, RFIFOSPACE(fd), 0);
-#else
-		len=read(fd,session[fd]->rdata+session[fd]->rdata_size,RFIFOSPACE(fd));
-#endif
-
-//	printf (":::RECEIVE:::\n");
-//	dump(session[fd]->rdata, len); printf ("\n");
-
-	//{ int i; printf("recv %d : ",fd); for(i=0;i<len;i++){ printf("%02x ",RFIFOB(fd,session[fd]->rdata_size+i)); } printf("\n");}
-	if(len>0){
-		session[fd]->rdata_size+=len;
-	} else if(len<=0){
-		// value of connection is not necessary the same
-//		if (fd == 4)			// Removed [Yor]
-//			printf("Char-Server Has Disconnected.\n");
-//		else if (fd == 5)		// Removed [Yor]
-//			printf("Attempt To Log In Successful.\n");
-//		else if (fd == 7)		// Removed [Yor]
-//			printf("Char-Server Has Disconnected.\n");
-//		else if (fd == 8)		// Removed [Valaris]
-//			printf("%s has logged off your server.\n",RFIFOP(fd,6));	// Removed [Valaris]
-
-//		else if (fd != 8)	// [Valaris]
-		printf("set eof : connection #%d\n", fd);
-		session[fd]->eof=1;
-	}
-	return 0;
-}
-
-static int send_from_fifo(int fd)
-{
-	int len;
-
-	//printf("send_from_fifo : %d\n",fd);
-	if(session[fd]->eof)
-		return -1;
-
-#ifdef LCCWIN32
-		len = send(fd, session[fd]->wdata,session[fd]->wdata_size, 0);
-#else
-		len=write(fd,session[fd]->wdata,session[fd]->wdata_size);
-#endif
-
-//	printf (":::SEND:::\n");
-//	dump(session[fd]->wdata, len); printf ("\n");
-
-	//{ int i; printf("send %d : ",fd);  for(i=0;i<len;i++){ printf("%02x ",session[fd]->wdata[i]); } printf("\n");}
-	if(len>0){
-		if(len<session[fd]->wdata_size){
-			memmove(session[fd]->wdata,session[fd]->wdata+len,session[fd]->wdata_size-len);
-			session[fd]->wdata_size-=len;
-		} else {
-			session[fd]->wdata_size=0;
-		}
-	} else {
-		printf("set eof :%d\n",fd);
-		session[fd]->eof=1;
-	}
-	return 0;
-}
-
-static int null_parse(int fd)
-{
-	printf("null_parse : %d\n",fd);
-	RFIFOSKIP(fd,RFIFOREST(fd));
-	return 0;
-}
-
-/*======================================
- *	CORE : Socket Function
- *--------------------------------------
- */
-
-static int connect_client(int listen_fd)
-{
-	int fd;
-	struct sockaddr_in client_address;
-	int len;
-	int result;
-	int yes = 1; // reuse fix
-
-	//printf("connect_client : %d\n",listen_fd);
-
-	len=sizeof(client_address);
-
-	fd=accept(listen_fd,(struct sockaddr*)&client_address,&len);
-	if(fd_max<=fd) fd_max=fd+1;
-
-//	setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,NULL,0);
-	setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,(char *)&yes,sizeof yes); // reuse fix
-#ifdef SO_REUSEPORT
-//	setsockopt(fd,SOL_SOCKET,SO_REUSEPORT,NULL,0);
-	setsockopt(fd,SOL_SOCKET,SO_REUSEPORT,(char *)&yes,sizeof yes); //reuse fix
-#endif
-//	setsockopt(fd,IPPROTO_TCP,TCP_NODELAY,NULL,0);
-	setsockopt(fd,IPPROTO_TCP,TCP_NODELAY,(char *)&yes,sizeof yes); // reuse fix
-
-	if(fd==-1){
-		perror("accept");
-	} else {
-		FD_SET(fd,&readfds);
-	}
-
-#ifdef LCCWIN32
-        {
-	  	unsigned long val = 1;
-  		ioctlsocket(fd, FIONBIO, &val);
-        }
-#else
-		result = fcntl(fd, F_SETFL, O_NONBLOCK);
-#endif
-
-	CREATE(session[fd], struct socket_data, 1);
-	CREATE(session[fd]->rdata, char, rfifo_size);
-	CREATE(session[fd]->wdata, char, wfifo_size);
-
-	session[fd]->max_rdata   = rfifo_size;
-	session[fd]->max_wdata   = wfifo_size;
-	session[fd]->func_recv   = recv_to_fifo;
-	session[fd]->func_send   = send_from_fifo;
-	session[fd]->func_parse  = default_func_parse;
-	session[fd]->client_addr = client_address;
-
-  //printf("new_session : %d %d\n",fd,session[fd]->eof);
-  return fd;
-}
-
-int make_listen_port(int port)
-{
-	struct sockaddr_in server_address;
-	int fd;
-	int result;
-	int yes = 1; // reuse fix
-
-	fd = socket( AF_INET, SOCK_STREAM, 0 );
-	if(fd_max<=fd) fd_max=fd+1;
-
-#ifdef LCCWIN32
-        {
-	  	unsigned long val = 1;
-  		ioctlsocket(fd, FIONBIO, &val);
-        }
-#else
-		result = fcntl(fd, F_SETFL, O_NONBLOCK);
-#endif
-
-//	setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,NULL,0);
-	setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,(char *)&yes,sizeof yes); // reuse fix
-#ifdef SO_REUSEPORT
-//	setsockopt(fd,SOL_SOCKET,SO_REUSEPORT,NULL,0);
-	setsockopt(fd,SOL_SOCKET,SO_REUSEPORT,(char *)&yes,sizeof yes); //reuse fix
-#endif
-//	setsockopt(fd,IPPROTO_TCP,TCP_NODELAY,NULL,0);
-	setsockopt(fd,IPPROTO_TCP,TCP_NODELAY,(char *)&yes,sizeof yes); // reuse fix
-
-	server_address.sin_family      = AF_INET;
-	server_address.sin_addr.s_addr = htonl( INADDR_ANY );
-	server_address.sin_port        = htons(port);
-
-	result = bind(fd, (struct sockaddr*)&server_address, sizeof(server_address));
-	if( result == -1 ) {
-		perror("bind");
-		exit(1);
-	}
-	result = listen( fd, 5 );
-	if( result == -1 ) { /* error */
-		perror("listen");
-		exit(1);
-	}
-
-	FD_SET(fd, &readfds );
-
-	CREATE(session[fd], struct socket_data, 1);
-
-	if(session[fd]==NULL){
-		printf("out of memory : make_listen_port\n");
-		exit(1);
-	}
-	memset(session[fd],0,sizeof(*session[fd]));
-	session[fd]->func_recv = connect_client;
-
-	return fd;
-}
-
-int make_connection(long ip,int port)
-{
-	struct sockaddr_in server_address;
-	int fd;
-	int result;
-	int yes = 1; // reuse fix
-
-	fd = socket( AF_INET, SOCK_STREAM, 0 );
-	if(fd_max<=fd) fd_max=fd+1;
-//	setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,NULL,0);
-	setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,(char *)&yes,sizeof yes); // reuse fix
-#ifdef SO_REUSEPORT
-//	setsockopt(fd,SOL_SOCKET,SO_REUSEPORT,NULL,0);
-	setsockopt(fd,SOL_SOCKET,SO_REUSEPORT,(char *)&yes,sizeof yes); //reuse fix
-#endif
-//	setsockopt(fd,IPPROTO_TCP,TCP_NODELAY,NULL,0);
-	setsockopt(fd,IPPROTO_TCP,TCP_NODELAY,(char *)&yes,sizeof yes); // reuse fix
-
-	server_address.sin_family = AF_INET;
-	server_address.sin_addr.s_addr = ip;
-	server_address.sin_port = htons(port);
-
-#ifdef LCCWIN32
-        {
-            unsigned long val = 1;
-            ioctlsocket(fd, FIONBIO, &val);
-        }
-#else
-        result = fcntl(fd, F_SETFL, O_NONBLOCK);
-#endif
-
-	result = connect(fd, (struct sockaddr *)(&server_address),sizeof(struct sockaddr_in));
-
-	FD_SET(fd,&readfds);
-
-	CREATE(session[fd], struct socket_data, 1);
-	CREATE(session[fd]->rdata, char, rfifo_size);
-	CREATE(session[fd]->wdata, char, wfifo_size);
-
-	session[fd]->max_rdata  = rfifo_size;
-	session[fd]->max_wdata  = wfifo_size;
-	session[fd]->func_recv  = recv_to_fifo;
-	session[fd]->func_send  = send_from_fifo;
-	session[fd]->func_parse = default_func_parse;
-
-	return fd;
-}
-
-int delete_session(int fd)
-{
-	if(fd<0 || fd>=FD_SETSIZE)
-		return -1;
-	FD_CLR(fd,&readfds);
-	if(session[fd]){
-		if(session[fd]->rdata)
-			free(session[fd]->rdata);
-		if(session[fd]->wdata)
-			free(session[fd]->wdata);
-		if(session[fd]->session_data)
-			free(session[fd]->session_data);
-		free(session[fd]);
-	}
-	session[fd]=NULL;
-	//printf("delete_session:%d\n",fd);
-	return 0;
-}
-
-int realloc_fifo(int fd,int rfifo_size,int wfifo_size)
-{
-	struct socket_data *s=session[fd];
-	if( s->max_rdata != rfifo_size && s->rdata_size < rfifo_size){
-		RECREATE(s->rdata, char, rfifo_size);
-		s->max_rdata  = rfifo_size;
-	}
-	if( s->max_wdata != wfifo_size && s->wdata_size < wfifo_size){
-		RECREATE(s->wdata, char, wfifo_size);
-		s->max_wdata  = wfifo_size;
-	}
-	return 0;
-}
-
-int WFIFOSET(int fd,int len)
-{
-	struct socket_data *s=session[fd];
-	if( s->wdata_size+len+16384 > s->max_wdata ){
-		realloc_fifo(fd,s->max_rdata, s->max_wdata <<1 );
-		printf("socket: %d wdata expanded to %d bytes.\n",fd, s->max_wdata);
-	}
-	s->wdata_size=(s->wdata_size+(len)+2048 < s->max_wdata) ?
-		 s->wdata_size+len : (printf("socket: %d wdata lost !!\n",fd),s->wdata_size);
-	return 0;
-}
-
-int do_sendrecv(int next)
-{
-	fd_set rfd,wfd;
-	struct timeval timeout;
-	int ret,i;
-
-	rfd=readfds;
-	FD_ZERO(&wfd);
-	for(i=0;i<fd_max;i++){
-		if(!session[i] && FD_ISSET(i,&readfds)){
-			printf("force clr fds %d\n",i);
-			FD_CLR(i,&readfds);
-			continue;
-		}
-		if(!session[i])
-			continue;
-		if(session[i]->wdata_size)
-			FD_SET(i,&wfd);
-	}
-	timeout.tv_sec  = next/1000;
-	timeout.tv_usec = next%1000*1000;
-	ret = select(fd_max,&rfd,&wfd,NULL,&timeout);
-	if(ret<=0)
-		return 0;
-	for(i=0;i<fd_max;i++){
-		if(!session[i])
-			continue;
-		if(FD_ISSET(i,&wfd)){
-			//printf("write:%d\n",i);
-			if(session[i]->func_send)
-			    //send_from_fifo(i);
-				session[i]->func_send(i);
-		}
-		if(FD_ISSET(i,&rfd)){
-			//printf("read:%d\n",i);
-			if(session[i]->func_recv)
-			    //recv_to_fifo(i);
-				session[i]->func_recv(i);
-		}
-	}
-	return 0;
-}
-
-int do_parsepacket(void)
-{
-	int i;
-	for(i=0;i<fd_max;i++){
-		if(!session[i])
-			continue;
-		if(session[i]->rdata_size==0 && session[i]->eof==0)
-			continue;
-		if(session[i]->func_parse){
-			session[i]->func_parse(i);
-			if(!session[i])
-				continue;
-		}
-		RFIFOFLUSH(i);
-	}
-	return 0;
-}
-
-void do_socket(void)
-{
-	FD_ZERO(&readfds);
-}
-
-int RFIFOSKIP(int fd,int len)
-{
-	struct socket_data *s=session[fd];
-
-	if (s->rdata_size-s->rdata_pos-len<0) {
-		fprintf(stderr,"too many skip\n");
-		exit(1);
-	}
-
-	s->rdata_pos = s->rdata_pos+len;
-
-	return 0;
-}
-
-
-int  Net_Init(void)
-{
-	#ifdef LCCWIN32
-		/* Start up the windows networking */
-		WORD version_wanted = MAKEWORD(1,1);
-		WSADATA wsaData;
-
-		if ( WSAStartup(version_wanted, &wsaData) != 0 ) {
-	      printf("SYSERR: WinSock not available!\n");
-	      exit(1);
-		}
-	#endif
-
-	return(0);
-}
-
diff --git a/misc/src/common/socket.h b/misc/src/common/socket.h
deleted file mode 100644
index fe06e40..0000000
--- a/misc/src/common/socket.h
+++ /dev/null
@@ -1,96 +0,0 @@
-// original : core.h 2003/03/14 11:55:25 Rev 1.4
-
-#ifndef	_SOCKET_H_
-#define _SOCKET_H_
-
-#include <stdio.h>
-
-#ifdef LCCWIN32
-#include <winsock.h>
-#else
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#endif
-
-// define declaration
-
-#define RFIFOP(fd,pos) (session[fd]->rdata+session[fd]->rdata_pos+(pos))
-#define RFIFOB(fd,pos) (*(unsigned char*)(session[fd]->rdata+session[fd]->rdata_pos+(pos)))
-#define RFIFOW(fd,pos) (*(unsigned short*)(session[fd]->rdata+session[fd]->rdata_pos+(pos)))
-#define RFIFOL(fd,pos) (*(unsigned int*)(session[fd]->rdata+session[fd]->rdata_pos+(pos)))
-//#define RFIFOSKIP(fd,len) ((session[fd]->rdata_size-session[fd]->rdata_pos-(len)<0) ? (fprintf(stderr,"too many skip\n"),exit(1)) : (session[fd]->rdata_pos+=(len)))
-#define RFIFOREST(fd) (session[fd]->rdata_size-session[fd]->rdata_pos)
-#define RFIFOFLUSH(fd) (memmove(session[fd]->rdata,RFIFOP(fd,0),RFIFOREST(fd)),session[fd]->rdata_size=RFIFOREST(fd),session[fd]->rdata_pos=0)
-#define RFIFOSPACE(fd) (session[fd]->max_rdata-session[fd]->rdata_size)
-#define RBUFP(p,pos) (((unsigned char*)(p))+(pos))
-#define RBUFB(p,pos) (*(unsigned char*)RBUFP((p),(pos)))
-#define RBUFW(p,pos) (*(unsigned short*)RBUFP((p),(pos)))
-#define RBUFL(p,pos) (*(unsigned int*)RBUFP((p),(pos)))
-
-#define WFIFOSPACE(fd) (session[fd]->max_wdata-session[fd]->wdata_size)
-#define WFIFOP(fd,pos) (session[fd]->wdata+session[fd]->wdata_size+(pos))
-#define WFIFOB(fd,pos) (*(unsigned char*)(session[fd]->wdata+session[fd]->wdata_size+(pos)))
-#define WFIFOW(fd,pos) (*(unsigned short*)(session[fd]->wdata+session[fd]->wdata_size+(pos)))
-#define WFIFOL(fd,pos) (*(unsigned int*)(session[fd]->wdata+session[fd]->wdata_size+(pos)))
-// use function instead of macro.
-//#define WFIFOSET(fd,len) (session[fd]->wdata_size = (session[fd]->wdata_size+(len)+2048 < session[fd]->max_wdata) ? session[fd]->wdata_size+len : session[fd]->wdata_size)
-#define WBUFP(p,pos) (((unsigned char*)(p))+(pos))
-#define WBUFB(p,pos) (*(unsigned char*)WBUFP((p),(pos)))
-#define WBUFW(p,pos) (*(unsigned short*)WBUFP((p),(pos)))
-#define WBUFL(p,pos) (*(unsigned int*)WBUFP((p),(pos)))
-
-#ifdef __INTERIX
-#define FD_SETSIZE 4096
-#endif	// __INTERIX
-
-
-/* Removed Cygwin FD_SETSIZE declarations, now are directly passed on to the compiler through Makefile [Valaris] */
-
-// Struct declaration
-
-struct socket_data{
-	int eof;
-	unsigned char *rdata,*wdata;
-	int max_rdata,max_wdata;
-	int rdata_size,wdata_size;
-	int rdata_pos;
-	struct sockaddr_in client_addr;
-	int (*func_recv)(int);
-	int (*func_send)(int);
-	int (*func_parse)(int);
-	void* session_data;
-};
-
-// Data prototype declaration
-
-#ifdef LCCWIN32
-
-		#undef FD_SETSIZE
-		#define FD_SETSIZE 4096
-
-#endif
-
-extern struct socket_data *session[FD_SETSIZE];
-
-extern int rfifo_size,wfifo_size;
-extern int fd_max;
-
-// Function prototype declaration
-
-int make_listen_port(int);
-int make_connection(long,int);
-int delete_session(int);
-int realloc_fifo(int fd,int rfifo_size,int wfifo_size);
-int WFIFOSET(int fd,int len);
-int RFIFOSKIP(int fd,int len);
-
-int do_sendrecv(int next);
-int do_parsepacket(void);
-void do_socket(void);
-
-void set_defaultparse(int (*defaultparse)(int));
-
-int  Net_Init(void);
-
-#endif	// _SOCKET_H_
diff --git a/misc/src/common/timer.c b/misc/src/common/timer.c
deleted file mode 100644
index 8193ff9..0000000
--- a/misc/src/common/timer.c
+++ /dev/null
@@ -1,312 +0,0 @@
-// $Id: timer.c,v 1.1.1.1 2004/09/10 17:44:49 MagicalTux Exp $
-// original : core.c 2003/02/26 18:03:12 Rev 1.7
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-
-#ifdef LCCWIN32
-#include <winsock.h>
-#else
-#include <sys/socket.h>
-#include <sys/time.h>
-#endif
-
-#include "timer.h"
-#include "utils.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-static struct TimerData* timer_data;
-static int timer_data_max,timer_data_num;
-static int* free_timer_list;
-static int free_timer_list_max, free_timer_list_pos;
-
-static int timer_heap_max;
-static int* timer_heap = NULL;
-
-// for debug
-struct timer_func_list {
-	int (*func)(int,unsigned int,int,int);
-	struct timer_func_list* next;
-	char* name;
-};
-static struct timer_func_list* tfl_root;
-
-#if defined(LCCWIN32)
-void gettimeofday(struct timeval *t, struct timezone *dummy)
-{
-  DWORD millisec = GetTickCount();
-
-  t->tv_sec = (int) (millisec / 1000);
-  t->tv_usec = (millisec % 1000) * 1000;
-}
-
-#endif
-
-
-//
-int add_timer_func_list(int (*func)(int,unsigned int,int,int),char* name)
-{
-	struct timer_func_list* tfl;
-
-	CREATE(tfl, struct timer_func_list, 1);
-	CREATE(tfl->name, char, strlen(name) + 1);
-
-	tfl->next = tfl_root;
-	tfl->func = func;
-	strcpy(tfl->name,name);
-	tfl_root = tfl;
-
-	return 0;
-}
-
-char* search_timer_func_list(int (*func)(int,unsigned int,int,int))
-{
-	struct timer_func_list* tfl;
-	for(tfl = tfl_root;tfl;tfl = tfl->next) {
-		if (func == tfl->func)
-			return tfl->name;
-	}
-	return "???";
-}
-
-/*----------------------------
- * 	Get tick time
- *----------------------------*/
-static unsigned int gettick_cache;
-static int gettick_count;
-unsigned int gettick_nocache(void)
-{
-	struct timeval tval;
-	gettimeofday(&tval,NULL);
-	gettick_count = 256;
-	return gettick_cache = tval.tv_sec * 1000 + tval.tv_usec/1000;
-}
-
-unsigned int gettick(void)
-{
-	gettick_count--;
-	if (gettick_count<0)
-		return gettick_nocache();
-	return gettick_cache;
-}
-
-/*======================================
- * 	CORE : Timer Heap
- *--------------------------------------
- */
-static void push_timer_heap(int index)
-{
-	int i, h;
-
-	if (timer_heap == NULL || timer_heap[0] + 1 >= timer_heap_max) {
-		int first = timer_heap == NULL;
-
-		timer_heap_max += 256;
-		RECREATE(timer_heap, int, timer_heap_max);
-		memset(timer_heap + (timer_heap_max - 256), 0, sizeof(int) * 256);
-		if (first)
-			timer_heap[0] = 0;
-	}
-
-	timer_heap[0]++;
-
-	for (h = timer_heap[0]-1, i = (h - 1) / 2;
-		 h > 0 && DIFF_TICK(timer_data[index].tick,
-			timer_data[timer_heap[i + 1]].tick) < 0;
-		 i = (h - 1) / 2) {
-		timer_heap[h + 1] = timer_heap[i + 1];
-		h = i;
-	}
-	timer_heap[h + 1] = index;
-}
-
-static int top_timer_heap()
-{
-	if (timer_heap == NULL || timer_heap[0] <= 0)
-		return -1;
-
-	return timer_heap[1];
-}
-
-static int pop_timer_heap()
-{
-	int i,h,k;
-	int ret,last;
-
-	if (timer_heap == NULL || timer_heap[0] <= 0)
-		return -1;
-	ret = timer_heap[1];
-	last = timer_heap[timer_heap[0]];
-	timer_heap[0]--;
-
-	for(h = 0,k = 2;k<timer_heap[0];k = k * 2 + 2) {
-		if (DIFF_TICK(timer_data[timer_heap[k + 1]].tick , timer_data[timer_heap[k]].tick)>0)
-			k--;
-		timer_heap[h + 1] = timer_heap[k + 1], h = k;
-	}
-	if (k == timer_heap[0])
-		timer_heap[h + 1] = timer_heap[k], h = k-1;
-
-	for(i = (h-1)/2;
-		h>0 && DIFF_TICK(timer_data[timer_heap[i + 1]].tick , timer_data[last].tick)>0;
-		i = (h-1)/2) {
-		timer_heap[h + 1] = timer_heap[i + 1],h = i;
-	}
-	timer_heap[h + 1] = last;
-
-	return ret;
-}
-
-int add_timer(unsigned int tick,int (*func)(int,unsigned int,int,int),int id,int data)
-{
-	struct TimerData* td;
-	int i;
-
-	if (free_timer_list_pos) {
-		do {
-			i = free_timer_list[--free_timer_list_pos];
-		} while(i >= timer_data_num && free_timer_list_pos > 0);
-	} else
-		i = timer_data_num;
-	if (i >= timer_data_num)
-		for (i = timer_data_num;i<timer_data_max && timer_data[i].type; i++);
-	if (i >= timer_data_num && i >= timer_data_max) {
-		int j;
-		if (timer_data_max == 0) {
-			timer_data_max = 256;
-			CREATE(timer_data, struct TimerData, timer_data_max);
-		} else {
-			timer_data_max += 256;
-			RECREATE(timer_data, struct TimerData, timer_data_max);
-			if (timer_data == NULL) {
-				printf("out of memory : add_timer timer_data\n");
-				exit(1);
-			}
-			memset(timer_data + (timer_data_max - 256), 0,
-				sizeof(struct TimerData) * 256);
-		}
-		for(j = timer_data_max-256;j<timer_data_max; j++)
-			timer_data[j].type = 0;
-	}
-	td = &timer_data[i];
-	td->tick = tick;
-	td->func = func;
-	td->id = id;
-	td->data = data;
-	td->type = TIMER_ONCE_AUTODEL;
-	td->interval = 1000;
-	push_timer_heap(i);
-	if (i >= timer_data_num)
-		timer_data_num = i + 1;
-	return i;
-}
-
-int add_timer_interval(unsigned int tick,int (*func)(int,unsigned int,int,int),int id,int data,int interval)
-{
-	int tid;
-	tid = add_timer(tick,func,id,data);
-	timer_data[tid].type = TIMER_INTERVAL;
-	timer_data[tid].interval = interval;
-	return tid;
-}
-
-int delete_timer(int id,int (*func)(int,unsigned int,int,int))
-{
-	if (id <= 0 || id >= timer_data_num) {
-		printf("delete_timer error : no such timer %d\n", id);
-		return -1;
-	}
-	if (timer_data[id].func != func) {
-		printf("delete_timer error : function dismatch %08x(%s) != %08x(%s)\n",
-			 (int)timer_data[id].func,
-				search_timer_func_list(timer_data[id].func),
-			 (int)func,
-				search_timer_func_list(func));
-		return -2;
-	}
-	// ���̂���������ɂ܂�����
-	timer_data[id].func = NULL;
-	timer_data[id].type = TIMER_ONCE_AUTODEL;
-	timer_data[id].tick -= 60 * 60 * 1000;
-	return 0;
-}
-
-int addtick_timer(int tid,unsigned int tick)
-{
-	return timer_data[tid].tick += tick;
-}
-struct TimerData* get_timer(int tid)
-{
-	return &timer_data[tid];
-}
-
-
-int do_timer(unsigned int tick)
-{
-	int i,nextmin = 1000;
-
-#if 0
-	static int disp_tick = 0;
-	if (DIFF_TICK(disp_tick,tick)<-5000 || DIFF_TICK(disp_tick,tick)>5000) {
-		printf("timer %d(%d + %d)\n",timer_data_num,timer_heap[0],free_timer_list_pos);
-		disp_tick = tick;
-	}
-#endif
-
-	while((i = top_timer_heap()) >= 0) {
-		if (DIFF_TICK(timer_data[i].tick , tick)>0) {
-			nextmin = DIFF_TICK(timer_data[i].tick , tick);
-			break;
-		}
-		pop_timer_heap();
-		timer_data[i].type |= TIMER_REMOVE_HEAP;
-		if (timer_data[i].func) {
-			if (DIFF_TICK(timer_data[i].tick , tick) < -1000) {
-				// 1�b�ȏ�̑啝�Ȓx�����������Ă���̂ŁA
-				// timer�����^�C�~���O�����ݒl�Ƃ��鎖��
-				// �Ăяo�����^�C�~���O(������tick)���΂ŏ������Ă�
-				// timer�֐��̎��񏈗��^�C�~���O��x�点��
-				timer_data[i].func(i,tick,timer_data[i].id,timer_data[i].data);
-			} else {
-				timer_data[i].func(i,timer_data[i].tick,timer_data[i].id,timer_data[i].data);
-			}
-		}
-		if (timer_data[i].type&TIMER_REMOVE_HEAP) {
-			switch(timer_data[i].type & ~TIMER_REMOVE_HEAP) {
-			case TIMER_ONCE_AUTODEL:
-				timer_data[i].type = 0;
-				if (free_timer_list_pos >= free_timer_list_max) {
-					free_timer_list_max += 256;
-					RECREATE(free_timer_list, int, free_timer_list_max);
-					memset(free_timer_list + (free_timer_list_max - 256), 0,
-						256 * sizeof(free_timer_list[0]));
-				}
-				free_timer_list[free_timer_list_pos++] = i;
-				break;
-			case TIMER_INTERVAL:
-				if (DIFF_TICK(timer_data[i].tick , tick) < -1000) {
-					timer_data[i].tick = tick + timer_data[i].interval;
-				} else {
-					timer_data[i].tick += timer_data[i].interval;
-				}
-				timer_data[i].type &= ~TIMER_REMOVE_HEAP;
-				push_timer_heap(i);
-				break;
-			}
-		}
-	}
-
-	if (nextmin<10)
-		nextmin = 10;
-	return nextmin;
-}
-
-void timer_final() 
-{
-    free(timer_data);
-}
diff --git a/misc/src/common/timer.h b/misc/src/common/timer.h
deleted file mode 100644
index f6fc5c8..0000000
--- a/misc/src/common/timer.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// original : core.h 2003/03/14 11:55:25 Rev 1.4
-
-#ifndef	_TIMER_H_
-#define	_TIMER_H_
-
-#define BASE_TICK 5
-
-#define TIMER_ONCE_AUTODEL 1
-#define TIMER_INTERVAL 2
-#define TIMER_REMOVE_HEAP 16
-
-#define DIFF_TICK(a,b) ((int)((a)-(b)))
-
-// Struct declaration
-
-struct TimerData {
-	unsigned int tick;
-	int (*func)(int,unsigned int,int,int);
-	int id;
-	int data;
-	int type;
-	int interval;
-	int heap_pos;
-};
-
-// Function prototype declaration
-
-unsigned int gettick_nocache(void);
-unsigned int gettick(void);
-
-int add_timer(unsigned int,int (*)(int,unsigned int,int,int),int,int);
-int add_timer_interval(unsigned int,int (*)(int,unsigned int,int,int),int,int,int);
-int delete_timer(int,int (*)(int,unsigned int,int,int));
-
-int addtick_timer(int tid,unsigned int tick);
-struct TimerData *get_timer(int tid);
-
-int do_timer(unsigned int tick);
-
-int add_timer_func_list(int (*)(int,unsigned int,int,int),char*);
-char* search_timer_func_list(int (*)(int,unsigned int,int,int));
-
-extern void timer_final();
-
-#endif	// _TIMER_H_
diff --git a/misc/src/common/utils.c b/misc/src/common/utils.c
deleted file mode 100644
index b0ecd26..0000000
--- a/misc/src/common/utils.c
+++ /dev/null
@@ -1,108 +0,0 @@
-#include <string.h>
-#include "utils.h"
-#include <stdio.h>
-
-void dump(unsigned char *buffer, int num)
-{
-   int     icnt,jcnt;
-
-   printf("         Hex                                                  ASCII\n");
-   printf("         -----------------------------------------------      ----------------");
-
-   for (icnt=0;icnt<num;icnt+=16) {
-	printf("\n%p ",&buffer[icnt]);
-    for (jcnt=icnt;jcnt<icnt+16;++jcnt) {
-	    if (jcnt < num) {
-              printf("%02hX ",buffer[jcnt]);
-		}  else
-              printf("   ");
-    }
-
-    printf("  |  ");
-
-	for (jcnt=icnt;jcnt<icnt+16;++jcnt) {
-        if (jcnt < num) {
-            if (buffer[jcnt] > 31 && buffer[jcnt] < 127)
-                   printf("%c",buffer[jcnt]);
-               else
-                   printf(".");
-           }  else
-               printf(" ");
-       }
-   }
-   printf("\n");
-}
-
-
-#ifdef LCCWIN32
-char *rindex(char *str, char c)
-{
-        char *sptr;
-
-        sptr = str;
-        while(*sptr)
-                ++sptr;
-        if (c == '\0')
-                return(sptr);
-        while(str != sptr)
-                if (*sptr-- == c)
-                        return(++sptr);
-        return(NULL);
-}
-
-int strcasecmp(const char *arg1, const char *arg2)
-{
-  int chk, i;
-
-  if (arg1 == NULL || arg2 == NULL) {
-    printf("SYSERR: str_cmp() passed a NULL pointer, %p or %p.\n", arg1, arg2);
-    return (0);
-  }
-
-  for (i = 0; arg1[i] || arg2[i]; i++)
-    if ((chk = LOWER(arg1[i]) - LOWER(arg2[i])) != 0)
-      return (chk);	/* not equal */
-
-  return (0);
-}
-
-int strncasecmp(const char *arg1, const char *arg2, int n)
-{
-  int chk, i;
-
-  if (arg1 == NULL || arg2 == NULL) {
-    printf("SYSERR: strn_cmp() passed a NULL pointer, %p or %p.\n", arg1, arg2);
-    return (0);
-  }
-
-  for (i = 0; (arg1[i] || arg2[i]) && (n > 0); i++, n--)
-    if ((chk = LOWER(arg1[i]) - LOWER(arg2[i])) != 0)
-      return (chk);	/* not equal */
-
-  return (0);
-}
-
-void str_upper(char *name)
-{
-
-  int len = strlen(name);
-  while (len--) {
-	if (*name >= 'a' && *name <= 'z')
-    	*name -= ('a' - 'A');
-     name++;
-  }
-}
-
-void str_lower(char *name)
-{
-  int len = strlen(name);
-
-  while (len--) {
-	if (*name >= 'A' && *name <= 'Z')
-    	*name += ('a' - 'A');
-    name++;
-  }
-}
-
-#endif
-
diff --git a/misc/src/common/utils.h b/misc/src/common/utils.h
deleted file mode 100644
index 29463cf..0000000
--- a/misc/src/common/utils.h
+++ /dev/null
@@ -1,33 +0,0 @@
-
-#ifndef NULL
-#define NULL (void *)0
-#endif
-
-#define LOWER(c)   (((c)>='A'  && (c) <= 'Z') ? ((c)+('a'-'A')) : (c))
-#define UPPER(c)   (((c)>='a'  && (c) <= 'z') ? ((c)+('A'-'a')) : (c) )
-
-/* strcasecmp -> stricmp -> str_cmp */
-
-
-#ifdef LCCWIN32
-	int	strcasecmp(const char *arg1, const char *arg2);
-	int	strncasecmp(const char *arg1, const char *arg2, int n);
-	void str_upper(char *name);
-	void str_lower(char *name);
-    char *rindex(char *str, char c);
-#endif
-
-
- void dump(unsigned char *buffer, int num);
-
-
-#define CREATE(result, type, number)  do {\
-   if ((number) * sizeof(type) <= 0)   \
-      printf("SYSERR: Zero bytes or less requested at %s:%d.\n", __FILE__, __LINE__);   \
-   if (!((result) = (type *) calloc ((number), sizeof(type))))   \
-      { perror("SYSERR: malloc failure"); abort(); } } while(0)
-
-#define RECREATE(result,type,number) do {\
-  if (!((result) = (type *) realloc ((result), sizeof(type) * (number))))\
-      { printf("SYSERR: realloc failure"); abort(); } } while(0)
-
diff --git a/misc/src/common/version.h b/misc/src/common/version.h
deleted file mode 100644
index e33e2b3..0000000
--- a/misc/src/common/version.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// $Id: version.h,v 1.2 2004/09/22 09:49:06 PoW Exp $
-#ifndef _VERSION_H_
-#define _VERSION_H_
-
-#define ATHENA_MAJOR_VERSION	1	// Major Version
-#define ATHENA_MINOR_VERSION	0	// Minor Version
-#define ATHENA_REVISION			0	// Revision
-
-#define ATHENA_RELEASE_FLAG		1	// 1=Develop,0=Stable
-#define ATHENA_OFFICIAL_FLAG	1	// 1=Mod,0=Official
-
-#define ATHENA_SERVER_LOGIN		1	// login server
-#define ATHENA_SERVER_CHAR		2	// char server
-#define ATHENA_SERVER_INTER		4	// inter server
-#define ATHENA_SERVER_MAP		8	// map server
-
-// ATHENA_MOD_VERSION�̓p�b�`�ԍ��ł��B
-// ����͖����ɕς��Ȃ��Ă��C����������ς�����x�̈����ŁB
-// �i����A�b�v���[�h�̓x�ɕύX����̂��ʓ|�Ǝv���邵�A��������
-// �@���̍��ڂ��Q�Ƃ���l�����邩�ǂ����ŋ^�₾����B�j
-// ���̒��x�̈����Ȃ̂ŁA�T�[�o�[�ɖ₢���킹�鑤���A�����܂Ŗڈ����x�̈�����
-// ����܂�M�p���Ȃ����ƁB
-// �Isnapshot�̎���A�傫�ȕύX���������ꍇ�͐ݒ肵�Ăق����ł��B
-// C����̎d�l��A�ŏ���0��t�����8�i���ɂȂ�̂ŊԈႦ�Ȃ��ʼn������B
-#define ATHENA_MOD_VERSION	1052	// mod version (patch No.)
-
-#endif
diff --git a/misc/src/ladmin/GNUmakefile b/misc/src/ladmin/GNUmakefile
deleted file mode 100644
index ce19d9d..0000000
--- a/misc/src/ladmin/GNUmakefile
+++ /dev/null
@@ -1,14 +0,0 @@
-all: ladmin
-txt: ladmin
-sql: ladmin
-
-COMMON_OBJ = ../common/core.o ../common/socket.o ../common/timer.o ../common/db.o ../common/malloc.o
-COMMON_H = ../common/core.h ../common/socket.h ../common/timer.h ../common/mmo.h ../common/version.h ../common/db.h ../common/malloc.h
-
-ladmin: ladmin.o md5calc.o $(COMMON_OBJ)
-	$(CC) -o ../../$@ ladmin.o md5calc.o $(COMMON_OBJ)
-ladmin.o: ladmin.c ladmin.h md5calc.h $(COMMON_H)
-md5calc.o: md5calc.c md5calc.h
-
-clean:
-	rm -f *.o ../../ladmin
diff --git a/misc/src/ladmin/Makefile b/misc/src/ladmin/Makefile
deleted file mode 100644
index ce19d9d..0000000
--- a/misc/src/ladmin/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-all: ladmin
-txt: ladmin
-sql: ladmin
-
-COMMON_OBJ = ../common/core.o ../common/socket.o ../common/timer.o ../common/db.o ../common/malloc.o
-COMMON_H = ../common/core.h ../common/socket.h ../common/timer.h ../common/mmo.h ../common/version.h ../common/db.h ../common/malloc.h
-
-ladmin: ladmin.o md5calc.o $(COMMON_OBJ)
-	$(CC) -o ../../$@ ladmin.o md5calc.o $(COMMON_OBJ)
-ladmin.o: ladmin.c ladmin.h md5calc.h $(COMMON_H)
-md5calc.o: md5calc.c md5calc.h
-
-clean:
-	rm -f *.o ../../ladmin
diff --git a/misc/src/ladmin/ladmin.c b/misc/src/ladmin/ladmin.c
deleted file mode 100644
index 497f3bd..0000000
--- a/misc/src/ladmin/ladmin.c
+++ /dev/null
@@ -1,4385 +0,0 @@
-// $Id: ladmin.c,v 1.1.1.1 2004/09/10 17:26:52 MagicalTux Exp $
-///////////////////////////////////////////////////////////////////////////
-// EAthena login-server remote administration tool
-// Ladamin in C by [Yor]
-// if you modify this software, modify ladmin in tool too.
-///////////////////////////////////////////////////////////////////////////
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <netinet/in.h>
-#include <sys/time.h> // gettimeofday
-#include <time.h>
-#include <sys/ioctl.h>
-#include <unistd.h> // close
-#include <signal.h>
-#include <fcntl.h>
-#include <string.h> // str*
-#include <arpa/inet.h> // inet_addr
-#include <netdb.h> // gethostbyname
-#include <stdarg.h> // valist
-#include <ctype.h> // tolower
-
-#include "core.h"
-#include "socket.h"
-#include "ladmin.h"
-#include "version.h"
-#include "mmo.h"
-
-#ifdef PASSWORDENC
-#include "md5calc.h"
-#endif
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-//-------------------------------INSTRUCTIONS------------------------------
-// Set the variables below:
-//   IP of the login server.
-//   Port where the login-server listens incoming packets.
-//   Password of administration (same of config_athena.conf).
-//   Displayed language of the sofware (if not correct, english is used).
-// IMPORTANT:
-//   Be sure that you authorize remote administration in login-server
-//   (see login_athena.conf, 'admin_state' parameter)
-//-------------------------------------------------------------------------
-char loginserverip[16] = "127.0.0.1";        // IP of login-server
-int loginserverport = 6900;                  // Port of login-server
-char loginserveradminpassword[24] = "admin"; // Administration password
-#ifdef PASSWORDENC
-int passenc = 2;                             // Encoding type of the password
-#else
-int passenc = 0;                             // Encoding type of the password
-#endif
-char defaultlanguage = 'E';                  // Default language (F: Fran�ais/E: English)
-                                             // (if it's not 'F', default is English)
-char ladmin_log_filename[1024] = "log/ladmin.log";
-char date_format[32] = "%Y-%m-%d %H:%M:%S";
-//-------------------------------------------------------------------------
-//  LIST of COMMANDs that you can type at the prompt:
-//    To use these commands you can only type only the first letters.
-//    You must type a minimum of letters (you can not type 'a',
-//      because ladmin doesn't know if it's for 'aide' or for 'add')
-//    <Example> q <= quit, li <= list, pass <= passwd, etc.
-//
-//  Note: every time you must give a account_name, you can use "" or '' (spaces can be included)
-//
-//  aide/help/?
-//    Display the description of the commands
-//  aide/help/? [command]
-//    Display the description of the specified command
-//
-//  add <account_name> <sex> <password>
-//    Create an account with the default email (a@a.com).
-//    Concerning the sex, only the first letter is used (F or M).
-//    The e-mail is set to a@a.com (default e-mail). It's like to have no e-mail.
-//    When the password is omitted, the input is done without displaying of the pressed keys.
-//    <example> add testname Male testpass
-//
-//  ban/banish yyyy/mm/dd hh:mm:ss <account name>
-//    Changes the final date of a banishment of an account.
-//    Like banset, but <account name> is at end.
-//
-//  banadd <account_name> <modifier>
-//    Adds or substracts time from the final date of a banishment of an account.
-//    Modifier is done as follows:
-//      Adjustment value (-1, 1, +1, etc...)
-//      Modified element:
-//        a or y: year
-//        m:  month
-//        j or d: day
-//        h:  hour
-//        mn: minute
-//        s:  second
-//    <example> banadd testname +1m-2mn1s-6y
-//              this example adds 1 month and 1 second, and substracts 2 minutes and 6 years at the same time.
-//  NOTE: If you modify the final date of a non-banished account,
-//        you fix the final date to (actual time +- adjustments)
-//
-//  banset <account_name> yyyy/mm/dd [hh:mm:ss]
-//    Changes the final date of a banishment of an account.
-//    Default time [hh:mm:ss]: 23:59:59.
-//  banset <account_name> 0
-//    Set a non-banished account (0 = unbanished).
-//
-//  block <account name>
-//    Set state 5 (You have been blocked by the GM Team) to an account.
-//    Like state <account name> 5.
-//
-//  check <account_name> <password>
-//    Check the validity of a password for an account
-//    NOTE: Server will never sends back a password.
-//          It's the only method you have to know if a password is correct.
-//          The other method is to have a ('physical') access to the accounts file.
-//
-//  create <account_name> <sex> <email> <password>
-//    Like the 'add' command, but with e-mail moreover.
-//    <example> create testname Male my@mail.com testpass
-//
-//  del <account name>
-//    Remove an account.
-//    This order requires confirmation. After confirmation, the account is deleted.
-//
-//  email <account_name> <email>
-//    Modify the e-mail of an account.
-//
-//  getcount
-//    Give the number of players online on all char-servers.
-//
-//  gm <account_name> [GM_level]
-//    Modify the GM level of an account.
-//    Default value remove GM level (GM level = 0).
-//    <example> gm testname 80
-//
-//  id <account name>
-//    Give the id of an account.
-//
-//  info <account_id>
-//    Display complete information of an account.
-//
-//  kami <message>
-//    Sends a broadcast message on all map-server (in yellow).
-//  kamib <message>
-//    Sends a broadcast message on all map-server (in blue).
-//
-//  language <language>
-//    Change the language of displaying.
-//
-//  list/ls [start_id [end_id]]
-//    Display a list of accounts.
-//    'start_id', 'end_id': indicate end and start identifiers.
-//    Research by name is not possible with this command.
-//    <example> list 10 9999999
-//
-//  listBan/lsBan [start_id [end_id]]
-//    Like list/ls, but only for accounts with state or banished
-//
-//  listGM/lsGM [start_id [end_id]]
-//    Like list/ls, but only for GM accounts
-//
-//  listOK/lsOK [start_id [end_id]]
-//    Like list/ls, but only for accounts without state and not banished
-//
-//  memo <account_name> <memo>
-//    Modify the memo of an account.
-//    'memo': it can have until 253 characters (with spaces or not).
-//
-//  name <account_id>
-//    Give the name of an account.
-//
-//  passwd <account_name> <new_password>
-//    Change the password of an account.
-//    When new password is omitted, the input is done without displaying of the pressed keys.
-//
-//  quit/end/exit
-//    End of the program of administration
-//
-//  reloadGM
-//    Reload GM configuration file
-//
-//  search <expression>
-//    Seek accounts.
-//    Displays the accounts whose names correspond.
-//  search -r/-e/--expr/--regex <expression>
-//    Seek accounts by regular expression.
-//    Displays the accounts whose names correspond.
-//
-//  sex <account_name> <sex>
-//    Modify the sex of an account.
-//    <example> sex testname Male
-//
-//  state <account_name> <new_state> <error_message_#7>
-//    Change the state of an account.
-//    'new_state': state is the state of the packet 0x006a + 1. The possibilities are:
-//                 0 = Account ok            6 = Your Game's EXE file is not the latest version
-//                 1 = Unregistered ID       7 = You are Prohibited to log in until %s
-//                 2 = Incorrect Password    8 = Server is jammed due to over populated
-//                 3 = This ID is expired    9 = No MSG
-//                 4 = Rejected from Server  100 = This ID has been totally erased
-//                 5 = You have been blocked by the GM Team
-//                 all other values are 'No MSG', then use state 9 please.
-//    'error_message_#7': message of the code error 6 = Your are Prohibited to log in until %s (packet 0x006a)
-//
-//  timeadd <account_name> <modifier>
-//    Adds or substracts time from the validity limit of an account.
-//    Modifier is done as follows:
-//      Adjustment value (-1, 1, +1, etc...)
-//      Modified element:
-//        a or y: year
-//        m:  month
-//        j or d: day
-//        h:  hour
-//        mn: minute
-//        s:  second
-//    <example> timeadd testname +1m-2mn1s-6y
-//              this example adds 1 month and 1 second, and substracts 2 minutes and 6 years at the same time.
-//  NOTE: You can not modify a unlimited validity limit.
-//        If you want modify it, you want probably create a limited validity limit.
-//        So, at first, you must set the validity limit to a date/time.
-//
-//  timeset <account_name> yyyy/mm/dd [hh:mm:ss]
-//    Changes the validity limit of an account.
-//    Default time [hh:mm:ss]: 23:59:59.
-//  timeset <account_name> 0
-//    Gives an unlimited validity limit (0 = unlimited).
-//
-//  unban/unbanish <account name>
-//    Unban an account.
-//    Like banset <account name> 0.
-//
-//  unblock <account name>
-//    Set state 0 (Account ok) to an account.
-//    Like state <account name> 0.
-//
-//  version
-//    Display the version of the login-server.
-//
-//  who <account name>
-//    Displays complete information of an account.
-//
-//-------------------------------------------------------------------------
-int login_fd;
-int login_ip;
-int bytes_to_read = 0; // flag to know if we waiting bytes from login-server
-char command[1024];
-char parameters[1024];
-int list_first, list_last, list_type, list_count; // parameter to display a list of accounts
-int already_exit_function = 0; // sometimes, the exit function is called twice... so, don't log twice the message
-
-//------------------------------
-// Writing function of logs file
-//------------------------------
-int ladmin_log(char *fmt, ...) {
-	FILE *logfp;
-	va_list ap;
-	struct timeval tv;
-	char tmpstr[2048];
-
-	va_start(ap, fmt);
-
-	logfp = fopen(ladmin_log_filename, "a");
-	if (logfp) {
-		if (fmt[0] == '\0') // jump a line if no message
-			fprintf(logfp, RETCODE);
-		else {
-			gettimeofday(&tv, NULL);
-			strftime(tmpstr, 24, date_format, localtime(&(tv.tv_sec)));
-			sprintf(tmpstr + strlen(tmpstr), ".%03d: %s", (int)tv.tv_usec / 1000, fmt);
-			vfprintf(logfp, tmpstr, ap);
-		}
-		fclose(logfp);
-	}
-
-	va_end(ap);
-	return 0;
-}
-
-//-----------------------------------------------------
-// Function to suppress control characters in a string.
-//-----------------------------------------------------
-int remove_control_chars(unsigned char *str) {
-	int i;
-	int change = 0;
-
-	for(i = 0; str[i]; i++) {
-		if (str[i] < 32) {
-			str[i] = '_';
-			change = 1;
-		}
-	}
-
-	return change;
-}
-
-//---------------------------------------------
-// Function to return ordonal text of a number.
-//---------------------------------------------
-char* makeordinal(int number) {
-	if (defaultlanguage == 'F') {
-		if (number == 0)
-			return "";
-		else if (number == 1)
-			return "er";
-		else
-			return "�me";
-	} else {
-		if ((number % 10) < 4 && (number % 10) != 0 && (number < 10 || number > 20)) {
-			if ((number % 10) == 1)
-				return "st";
-			else if ((number % 10) == 2)
-				return "nd";
-			else
-				return "rd";
-		} else {
-			return "th";
-		}
-	}
-	return "";
-}
-
-//-----------------------------------------------------------------------------------------
-// Function to test of the validity of an account name (return 0 if incorrect, and 1 if ok)
-//-----------------------------------------------------------------------------------------
-int verify_accountname(char* account_name) {
-	int i;
-
-	for(i = 0; account_name[i]; i++) {
-		if (account_name[i] < 32) {
-			if (defaultlanguage == 'F') {
-				printf("Caract�re interdit trouv� dans le nom du compte (%d%s caract�re).\n", i+1, makeordinal(i+1));
-				ladmin_log("Caract�re interdit trouv� dans le nom du compte (%d%s caract�re)." RETCODE, i+1, makeordinal(i+1));
-			} else {
-				printf("Illegal character found in the account name (%d%s character).\n", i+1, makeordinal(i+1));
-				ladmin_log("Illegal character found in the account name (%d%s character)." RETCODE, i+1, makeordinal(i+1));
-			}
-			return 0;
-		}
-	}
-
-	if (strlen(account_name) < 4) {
-		if (defaultlanguage == 'F') {
-			printf("Nom du compte trop court. Entrez un nom de compte de 4-23 caract�res.\n");
-			ladmin_log("Nom du compte trop court. Entrez un nom de compte de 4-23 caract�res." RETCODE);
-		} else {
-			printf("Account name is too short. Please input an account name of 4-23 bytes.\n");
-			ladmin_log("Account name is too short. Please input an account name of 4-23 bytes." RETCODE);
-		}
-		return 0;
-	}
-
-	if (strlen(account_name) > 23) {
-		if (defaultlanguage == 'F') {
-			printf("Nom du compte trop long. Entrez un nom de compte de 4-23 caract�res.\n");
-			ladmin_log("Nom du compte trop long. Entrez un nom de compte de 4-23 caract�res." RETCODE);
-		} else {
-			printf("Account name is too long. Please input an account name of 4-23 bytes.\n");
-			ladmin_log("Account name is too long. Please input an account name of 4-23 bytes." RETCODE);
-		}
-		return 0;
-	}
-
-	return 1;
-}
-
-//---------------------------------------------------
-// E-mail check: return 0 (not correct) or 1 (valid).
-//---------------------------------------------------
-int e_mail_check(unsigned char *email) {
-	char ch;
-	unsigned char* last_arobas;
-
-	// athena limits
-	if (strlen(email) < 3 || strlen(email) > 39)
-		return 0;
-
-	// part of RFC limits (official reference of e-mail description)
-	if (strchr(email, '@') == NULL || email[strlen(email)-1] == '@')
-		return 0;
-
-	if (email[strlen(email)-1] == '.')
-		return 0;
-
-	last_arobas = strrchr(email, '@');
-
-	if (strstr(last_arobas, "@.") != NULL ||
-	    strstr(last_arobas, "..") != NULL)
-		return 0;
-
-	for(ch = 1; ch < 32; ch++) {
-		if (strchr(last_arobas, ch) != NULL) {
-			return 0;
-			break;
-		}
-	}
-
-	if (strchr(last_arobas, ' ') != NULL ||
-	    strchr(last_arobas, ';') != NULL)
-		return 0;
-
-	// all correct
-	return 1;
-}
-
-//----------------------------------
-// Sub-function: Input of a password
-//----------------------------------
-int typepasswd(char * password) {
-	char password1[1023], password2[1023];
-	int letter;
-	int i;
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Aucun mot de passe n'a �t� donn�. Demande d'un mot de passe." RETCODE);
-	} else {
-		ladmin_log("No password was given. Request to obtain a password." RETCODE);
-	}
-
-	memset(password1, '\0', sizeof(password1));
-	memset(password2, '\0', sizeof(password2));
-	if (defaultlanguage == 'F')
-		printf("\033[1;36m Entrez le mot de passe > \033[0;32;42m");
-	else
-		printf("\033[1;36m Type the password > \033[0;32;42m");
-		i = 0;
-		while ((letter = getchar()) != '\n')
-			password1[i++] = letter;
-	if (defaultlanguage == 'F')
-		printf("\033[0m\033[1;36m R�-entrez le mot de passe > \033[0;32;42m");
-	else
-		printf("\033[0m\033[1;36m Verify the password > \033[0;32;42m");
-		i = 0;
-		while ((letter = getchar()) != '\n')
-			password2[i++] = letter;
-
-	printf("\033[0m");
-	fflush(stdout);
-	fflush(stdin);
-
-	if (strcmp(password1, password2) != 0) {
-		if (defaultlanguage == 'F') {
-			printf("Erreur de v�rification du mot de passe: Saisissez le m�me mot de passe svp.\n");
-			ladmin_log("Erreur de v�rification du mot de passe: Saisissez le m�me mot de passe svp." RETCODE);
-			ladmin_log("  Premier mot de passe: %s, second mot de passe: %s." RETCODE, password1, password2);
-		} else {
-			printf("Password verification failed. Please input same password.\n");
-			ladmin_log("Password verification failed. Please input same password." RETCODE);
-			ladmin_log("  First password: %s, second password: %s." RETCODE, password1, password2);
-		}
-		return 0;
-	}
-	if (defaultlanguage == 'F') {
-		ladmin_log("Mot de passe saisi: %s." RETCODE, password1);
-	} else {
-		ladmin_log("Typed password: %s." RETCODE, password1);
-	}
-	strcpy(password, password1);
-	return 1;
-}
-
-//------------------------------------------------------------------------------------
-// Sub-function: Test of the validity of password (return 0 if incorrect, and 1 if ok)
-//------------------------------------------------------------------------------------
-int verify_password(char * password) {
-	int i;
-
-	for(i = 0; password[i]; i++) {
-		if (password[i] < 32) {
-			if (defaultlanguage == 'F') {
-				printf("Caract�re interdit trouv� dans le mot de passe (%d%s caract�re).\n", i+1, makeordinal(i+1));
-				ladmin_log("Caract�re interdit trouv� dans le nom du compte (%d%s caract�re)." RETCODE, i+1, makeordinal(i+1));
-			} else {
-				printf("Illegal character found in the password (%d%s character).\n", i+1, makeordinal(i+1));
-				ladmin_log("Illegal character found in the password (%d%s character)." RETCODE, i+1, makeordinal(i+1));
-			}
-			return 0;
-		}
-	}
-
-	if (strlen(password) < 4) {
-		if (defaultlanguage == 'F') {
-			printf("Nom du compte trop court. Entrez un nom de compte de 4-23 caract�res.\n");
-			ladmin_log("Nom du compte trop court. Entrez un nom de compte de 4-23 caract�res." RETCODE);
-		} else {
-			printf("Account name is too short. Please input an account name of 4-23 bytes.\n");
-			ladmin_log("Account name is too short. Please input an account name of 4-23 bytes." RETCODE);
-		}
-		return 0;
-	}
-
-	if (strlen(password) > 23) {
-		if (defaultlanguage == 'F') {
-			printf("Mot de passe trop long. Entrez un mot de passe de 4-23 caract�res.\n");
-			ladmin_log("Mot de passe trop long. Entrez un mot de passe de 4-23 caract�res." RETCODE);
-		} else {
-			printf("Password is too long. Please input a password of 4-23 bytes.\n");
-			ladmin_log("Password is too long. Please input a password of 4-23 bytes." RETCODE);
-		}
-		return 0;
-	}
-
-	return 1;
-}
-
-//------------------------------------------------------------------
-// Sub-function: Check the name of a command (return complete name)
-//-----------------------------------------------------------------
-int check_command(char * command) {
-// help
-	if (strncmp(command, "aide", 2) == 0 && strncmp(command, "aide", strlen(command)) == 0) // not 1 letter command: 'aide' or 'add'?
-		strcpy(command, "aide");
-	else if (strncmp(command, "help", 1) == 0 && strncmp(command, "help", strlen(command)) == 0)
-		strcpy(command, "help");
-// general commands
-	else if (strncmp(command, "add", 2) == 0 && strncmp(command, "add", strlen(command)) == 0) // not 1 letter command: 'aide' or 'add'?
-		strcpy(command, "add");
-	else if ((strncmp(command, "ban", 3) == 0 && strncmp(command, "ban", strlen(command)) == 0) ||
-	         (strncmp(command, "banish", 4) == 0 && strncmp(command, "banish", strlen(command)) == 0))
-		strcpy(command, "ban");
-	else if ((strncmp(command, "banadd", 4) == 0 && strncmp(command, "banadd", strlen(command)) == 0) || // not 1 letter command: 'ba' or 'bs'? 'banadd' or 'banset' ?
-	         strcmp(command,   "ba") == 0)
-		strcpy(command, "banadd");
-	else if ((strncmp(command, "banset", 4) == 0 && strncmp(command, "banset", strlen(command)) == 0) || // not 1 letter command: 'ba' or 'bs'? 'banadd' or 'banset' ?
-	         strcmp(command,   "bs") == 0)
-		strcpy(command, "banset");
-	else if (strncmp(command, "block", 2) == 0 && strncmp(command, "block", strlen(command)) == 0)
-		strcpy(command, "block");
-	else if (strncmp(command, "check", 2) == 0 && strncmp(command, "check", strlen(command)) == 0) // not 1 letter command: 'check' or 'create'?
-		strcpy(command, "check");
-	else if (strncmp(command, "create", 2) == 0 && strncmp(command, "create", strlen(command)) == 0) // not 1 letter command: 'check' or 'create'?
-		strcpy(command, "create");
-	else if (strncmp(command, "delete", 1) == 0 && strncmp(command, "delete", strlen(command)) == 0)
-		strcpy(command, "delete");
-	else if ((strncmp(command, "email", 2) == 0 && strncmp(command, "email", strlen(command)) == 0) || // not 1 letter command: 'email', 'end' or 'exit'?
-	         (strncmp(command, "e-mail", 2) == 0 && strncmp(command, "e-mail", strlen(command)) == 0))
-		strcpy(command, "email");
-	else if (strncmp(command, "getcount", 2) == 0 && strncmp(command, "getcount", strlen(command)) == 0) // not 1 letter command: 'getcount' or 'gm'?
-		strcpy(command, "getcount");
-//	else if (strncmp(command, "gm", 2) == 0 && strncmp(command, "gm", strlen(command)) == 0) // not 1 letter command: 'getcount' or 'gm'?
-//		strcpy(command, "gm");
-//	else if (strncmp(command, "id", 2) == 0 && strncmp(command, "id", strlen(command)) == 0) // not 1 letter command: 'id' or 'info'?
-//		strcpy(command, "id");
-	else if (strncmp(command, "info", 2) == 0 && strncmp(command, "info", strlen(command)) == 0) // not 1 letter command: 'id' or 'info'?
-		strcpy(command, "info");
-//	else if (strncmp(command, "kami", 4) == 0 && strncmp(command, "kami", strlen(command)) == 0) // only all letters command: 'kami' or 'kamib'?
-//		strcpy(command, "kami");
-//	else if (strncmp(command, "kamib", 5) == 0 && strncmp(command, "kamib", strlen(command)) == 0) // only all letters command: 'kami' or 'kamib'?
-//		strcpy(command, "kamib");
-	else if ((strncmp(command, "language", 2) == 0 && strncmp(command, "language", strlen(command)) == 0)) // not 1 letter command: 'language' or 'list'?
-		strcpy(command, "language");
-	else if ((strncmp(command, "list", 2) == 0 && strncmp(command, "list", strlen(command)) == 0) || // 'list' is default list command // not 1 letter command: 'language' or 'list'?
-	         strcmp(command,   "ls") == 0)
-		strcpy(command, "list");
-	else if ((strncmp(command, "listban", 5) == 0 && strncmp(command, "listban", strlen(command)) == 0) ||
-	         (strncmp(command, "lsban", 3) == 0 && strncmp(command, "lsban", strlen(command)) == 0) ||
-	         strcmp(command, "lb") == 0)
-		strcpy(command, "listban");
-	else if ((strncmp(command, "listgm", 5) == 0 && strncmp(command, "listgm", strlen(command)) == 0) ||
-	         (strncmp(command, "lsgm", 3) == 0 && strncmp(command, "lsgm", strlen(command)) == 0) ||
-	         strcmp(command,  "lg") == 0)
-		strcpy(command, "listgm");
-	else if ((strncmp(command, "listok", 5) == 0 && strncmp(command, "listok", strlen(command)) == 0) ||
-	         (strncmp(command, "lsok", 3) == 0 && strncmp(command, "lsok", strlen(command)) == 0) ||
-	         strcmp(command, "lo") == 0)
-		strcpy(command, "listok");
-	else if (strncmp(command, "memo", 1) == 0 && strncmp(command, "memo", strlen(command)) == 0)
-		strcpy(command, "memo");
-	else if (strncmp(command, "name", 1) == 0 && strncmp(command, "name", strlen(command)) == 0)
-		strcpy(command, "name");
-	else if ((strncmp(command, "password", 1) == 0 && strncmp(command, "password", strlen(command)) == 0) ||
-	         strcmp(command, "passwd") == 0)
-		strcpy(command, "password");
-	else if (strncmp(command, "reloadgm", 1) == 0 && strncmp(command, "reloadgm", strlen(command)) == 0)
-		strcpy(command, "reloadgm");
-	else if (strncmp(command, "search", 3) == 0 && strncmp(command, "search", strlen(command)) == 0) // not 1 letter command: 'search', 'state' or 'sex'?
-		strcpy(command, "search"); // not 2 letters command: 'search' or 'sex'?
-//	else if (strncmp(command, "sex", 3) == 0 && strncmp(command, "sex", strlen(command)) == 0) // not 1 letter command: 'search', 'state' or 'sex'?
-//		strcpy(command, "sex"); // not 2 letters command: 'search' or 'sex'?
-	else if (strncmp(command, "state", 2) == 0 && strncmp(command, "state", strlen(command)) == 0) // not 1 letter command: 'search', 'state' or 'sex'?
-		strcpy(command, "state");
-	else if ((strncmp(command, "timeadd", 5) == 0 && strncmp(command, "timeadd", strlen(command)) == 0) || // not 1 letter command: 'ta' or 'ts'? 'timeadd' or 'timeset'?
-	         strcmp(command,  "ta") == 0)
-		strcpy(command, "timeadd");
-	else if ((strncmp(command, "timeset", 5) == 0 && strncmp(command, "timeset", strlen(command)) == 0) || // not 1 letter command: 'ta' or 'ts'? 'timeadd' or 'timeset'?
-	         strcmp(command,  "ts") == 0)
-		strcpy(command, "timeset");
-	else if ((strncmp(command, "unban", 5) == 0 && strncmp(command, "unban", strlen(command)) == 0) ||
-	         (strncmp(command, "unbanish", 4) == 0 && strncmp(command, "unbanish", strlen(command)) == 0))
-		strcpy(command, "unban");
-	else if (strncmp(command, "unblock", 4) == 0 && strncmp(command, "unblock", strlen(command)) == 0)
-		strcpy(command, "unblock");
-	else if (strncmp(command, "version", 1) == 0 && strncmp(command, "version", strlen(command)) == 0)
-		strcpy(command, "version");
-	else if (strncmp(command, "who", 1) == 0 && strncmp(command, "who", strlen(command)) == 0)
-		strcpy(command, "who");
-// quit
-	else if (strncmp(command, "quit", 1) == 0 && strncmp(command, "quit", strlen(command)) == 0)
-		strcpy(command, "quit");
-	else if (strncmp(command, "exit", 2) == 0 && strncmp(command, "exit", strlen(command)) == 0) // not 1 letter command: 'email', 'end' or 'exit'?
-		strcpy(command, "exit");
-	else if (strncmp(command, "end", 2) == 0 && strncmp(command, "end", strlen(command)) == 0) // not 1 letter command: 'email', 'end' or 'exit'?
-		strcpy(command, "end");
-
-	return 0;
-}
-
-//-----------------------------------------
-// Sub-function: Display commands of ladmin
-//-----------------------------------------
-void display_help(char* param, int language) {
-	char command[1023];
-	int i;
-
-	memset(command, '\0', sizeof(command));
-
-	if (sscanf(param, "%s ", command) < 1 || strlen(command) == 0)
-		strcpy(command, ""); // any value that is not a command
-
-	if (command[0] == '?') {
-		if (defaultlanguage == 'F')
-			strcpy(command, "aide");
-		else
-			strcpy(command, "help");
-	}
-
-	// lowercase for command
-	for (i = 0; command[i]; i++)
-		command[i] = tolower(command[i]);
-
-	// Analyse of the command
-	check_command(command); // give complete name to the command
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Affichage des commandes ou d'une commande." RETCODE);
-	} else {
-		ladmin_log("Displaying of the commands or a command." RETCODE);
-	}
-
-	if (language == 1) {
-		if (strcmp(command, "aide") == 0) {
-			printf("aide/help/?\n");
-			printf("  Affiche la description des commandes\n");
-			printf("aide/help/? [commande]\n");
-			printf("  Affiche la description de la commande specifi�e\n");
-		} else if (strcmp(command, "help") == 0 ) {
-			printf("aide/help/?\n");
-			printf("  Display the description of the commands\n");
-			printf("aide/help/? [command]\n");
-			printf("  Display the description of the specified command\n");
-// general commands
-		} else if (strcmp(command, "add") == 0) {
-			printf("add <nomcompte> <sexe> <motdepasse>\n");
-			printf("  Cr�e un compte avec l'email par d�faut (a@a.com).\n");
-			printf("  Concernant le sexe, seule la premi�re lettre compte (F ou M).\n");
-			printf("  L'e-mail est a@a.com (e-mail par d�faut). C'est comme n'avoir aucun e-mail.\n");
-			printf("  Lorsque motdepasse est omis, la saisie se fait sans que la frappe se voit.\n");
-			printf("  <exemple> add testname Male testpass\n");
-		} else if (strcmp(command, "ban") == 0) {
-			printf("ban/banish aaaa/mm/jj hh:mm:ss <nom compte>\n");
-			printf("  Change la date de fin de bannissement d'un compte.\n");
-			printf("  Comme banset, mais <nom compte> est � la fin.\n");
-		} else if (strcmp(command, "banadd") == 0) {
-			printf("banadd <nomcompte> <Modificateur>\n");
-			printf("  Ajoute ou soustrait du temps � la date de banissement d'un compte.\n");
-			printf("  Les modificateurs sont construits comme suit:\n");
-			printf("    Valeur d'ajustement (-1, 1, +1, etc...)\n");
-			printf("    El�ment modifi�:\n");
-			printf("      a ou y: ann�e\n");
-			printf("      m:      mois\n");
-			printf("      j ou d: jour\n");
-			printf("      h:      heure\n");
-			printf("      mn:     minute\n");
-			printf("      s:      seconde\n");
-			printf("  <exemple> banadd testname +1m-2mn1s-6a\n");
-			printf("            Cette exemple ajoute 1 mois et une seconde, et soustrait 2 minutes\n");
-			printf("            et 6 ans dans le m�me temps.\n");
-			printf("NOTE: Si vous modifez la date de banissement d'un compte non bani,\n");
-			printf("      vous indiquez comme date (le moment actuel +- les ajustements)\n");
-		} else if (strcmp(command, "banset") == 0) {
-			printf("banset <nomcompte> aaaa/mm/jj [hh:mm:ss]\n");
-			printf("  Change la date de fin de bannissement d'un compte.\n");
-			printf("  Heure par d�faut [hh:mm:ss]: 23:59:59.\n");
-			printf("banset <nomcompte> 0\n");
-			printf("  D�banni un compte (0 = de-banni).\n");
-		} else if (strcmp(command, "block") == 0) {
-			printf("block <nom compte>\n");
-			printf("  Place le status d'un compte � 5 (You have been blocked by the GM Team).\n");
-			printf("  La commande est l'�quivalent de state <nom_compte> 5.\n");
-		} else if (strcmp(command, "check") == 0) {
-			printf("check <nomcompte> <motdepasse>\n");
-			printf("  V�rifie la validit� d'un mot de passe pour un compte\n");
-			printf("  NOTE: Le serveur n'enverra jamais un mot de passe.\n");
-			printf("        C'est la seule m�thode que vous poss�dez pour savoir\n");
-			printf("        si un mot de passe est le bon. L'autre m�thode est\n");
-			printf("        d'avoir un acc�s ('physique') au fichier des comptes.\n");
-		} else if (strcmp(command, "create") == 0) {
-			printf("create <nomcompte> <sexe> <email> <motdepasse>\n");
-			printf("  Comme la commande add, mais avec l'e-mail en plus.\n");
-			printf("  <exemple> create testname Male mon@mail.com testpass\n");
-		} else if (strcmp(command, "delete") == 0) {
-			printf("del <nom compte>\n");
-			printf("  Supprime un compte.\n");
-			printf("  La commande demande confirmation. Apr�s confirmation, le compte est d�truit.\n");
-		} else if (strcmp(command, "email") == 0) {
-			printf("email <nomcompte> <email>\n");
-			printf("  Modifie l'e-mail d'un compte.\n");
-		} else if (strcmp(command, "getcount") == 0) {
-			printf("getcount\n");
-			printf("  Donne le nombre de joueurs en ligne par serveur de char.\n");
-		} else if (strcmp(command, "gm") == 0) {
-			printf("gm <nomcompte> [Niveau_GM]\n");
-			printf("  Modifie le niveau de GM d'un compte.\n");
-			printf("  Valeur par d�faut: 0 (suppression du niveau de GM).\n");
-			printf("  <exemple> gm nomtest 80\n");
-		} else if (strcmp(command, "id") == 0) {
-			printf("id <nom compte>\n");
-			printf("  Donne l'id d'un compte.\n");
-		} else if (strcmp(command, "info") == 0) {
-			printf("info <idcompte>\n");
-			printf("  Affiche les informations sur un compte.\n");
-		} else if (strcmp(command, "kami") == 0) {
-			printf("kami <message>\n");
-			printf("  Envoi un message g�n�ral sur tous les serveurs de map (en jaune).\n");
-		} else if (strcmp(command, "kamib") == 0) {
-			printf("kamib <message>\n");
-			printf("  Envoi un message g�n�ral sur tous les serveurs de map (en bleu).\n");
-		} else if (strcmp(command, "language") == 0) {
-			printf("language <langue>\n");
-			printf("  Change la langue d'affichage.\n");
-			printf("  Langues possibles: 'Fran�ais' ou 'English'.\n");
-		} else if (strcmp(command, "list") == 0) {
-			printf("list/ls [Premier_id [Dernier_id]]\n");
-			printf("  Affiche une liste de comptes.\n");
-			printf("  'Premier_id', 'Dernier_id': indique les identifiants de d�part et de fin.\n");
-			printf("  La recherche par nom n'est pas possible avec cette commande.\n");
-			printf("  <example> list 10 9999999\n");
-		} else if (strcmp(command, "listban") == 0) {
-			printf("listBan/lsBan [Premier_id [Dernier_id]]\n");
-			printf("  Comme list/ls, mais seulement pour les comptes avec statut ou bannis.\n");
-		} else if (strcmp(command, "listgm") == 0) {
-			printf("listGM/lsGM [Premier_id [Dernier_id]]\n");
-			printf("  Comme list/ls, mais seulement pour les comptes GM.\n");
-		} else if (strcmp(command, "listok") == 0) {
-			printf("listOK/lsOK [Premier_id [Dernier_id]]\n");
-			printf("  Comme list/ls, mais seulement pour les comptes sans statut et non bannis.\n");
-		} else if (strcmp(command, "memo") == 0) {
-			printf("memo <nomcompte> <memo>\n");
-			printf("  Modifie le m�mo d'un compte.\n");
-			printf("  'memo': Il peut avoir jusqu'� 253 caract�res (avec des espaces ou non).\n");
-		} else if (strcmp(command, "name") == 0) {
-			printf("name <idcompte>\n");
-			printf("  Donne le nom d'un compte.\n");
-		} else if (strcmp(command, "password") == 0) {
-			printf("passwd <nomcompte> <nouveaumotdepasse>\n");
-			printf("  Change le mot de passe d'un compte.\n");
-			printf("  Lorsque nouveaumotdepasse est omis,\n");
-			printf("  la saisie se fait sans que la frappe ne se voit.\n");
-		} else if (strcmp(command, "reloadgm") == 0) {
-			printf("reloadGM\n");
-			printf("  Reload GM configuration file\n");
-		} else if (strcmp(command, "search") == 0) {
-			printf("search <expression>\n");
-			printf("  Cherche des comptes.\n");
-			printf("  Affiche les comptes dont les noms correspondent.\n");
-//			printf("search -r/-e/--expr/--regex <expression>\n");
-//			printf("  Cherche des comptes par expression reguli�re.\n");
-//			printf("  Affiche les comptes dont les noms correspondent.\n");
-		} else if (strcmp(command, "sex") == 0) {
-			printf("sex <nomcompte> <sexe>\n");
-			printf("  Modifie le sexe d'un compte.\n");
-			printf("  <exemple> sex testname Male\n");
-		} else if (strcmp(command, "state") == 0) {
-			printf("state <nomcompte> <nouveaustatut> <message_erreur_7>\n");
-			printf("  Change le statut d'un compte.\n");
-			printf("  'nouveaustatut': Le statut est le m�me que celui du packet 0x006a + 1.\n");
-			printf("               les possibilit�s sont:\n");
-			printf("               0 = Compte ok\n");
-			printf("               1 = Unregistered ID\n");
-			printf("               2 = Incorrect Password\n");
-			printf("               3 = This ID is expired\n");
-			printf("               4 = Rejected from Server\n");
-			printf("               5 = You have been blocked by the GM Team\n");
-			printf("               6 = Your Game's EXE file is not the latest version\n");
-			printf("               7 = You are Prohibited to log in until...\n");
-			printf("               8 = Server is jammed due to over populated\n");
-			printf("               9 = No MSG\n");
-			printf("               100 = This ID has been totally erased\n");
-			printf("               all other values are 'No MSG', then use state 9 please.\n");
-			printf("  'message_erreur_7': message du code erreur 6 =\n");
-			printf("                      = Your are Prohibited to log in until... (packet 0x006a)\n");
-		} else if (strcmp(command, "timeadd") == 0) {
-			printf("timeadd <nomcompte> <modificateur>\n");
-			printf("  Ajoute/soustrait du temps � la limite de validit� d'un compte.\n");
-			printf("  Le modificateur est compos� comme suit:\n");
-			printf("    Valeur modificatrice (-1, 1, +1, etc...)\n");
-			printf("    El�ment modifi�:\n");
-			printf("      a ou y: ann�e\n");
-			printf("      m:      mois\n");
-			printf("      j ou d: jour\n");
-			printf("      h:      heure\n");
-			printf("      mn:     minute\n");
-			printf("      s:      seconde\n");
-			printf("  <exemple> timeadd testname +1m-2mn1s-6a\n");
-			printf("            Cette exemple ajoute 1 mois et une seconde, et soustrait 2 minutes\n");
-			printf("            et 6 ans dans le m�me temps.\n");
-			printf("NOTE: Vous ne pouvez pas modifier une limite de validit� illimit�e. Si vous\n");
-			printf("      d�sirez le faire, c'est que vous voulez probablement cr�er un limite de\n");
-			printf("      validit� limit�e. Donc, en premier, fix� une limite de valitid�.\n");
-		} else if (strcmp(command, "timeadd") == 0) {
-			printf("timeset <nomcompte> aaaa/mm/jj [hh:mm:ss]\n");
-			printf("  Change la limite de validit� d'un compte.\n");
-			printf("  Heure par d�faut [hh:mm:ss]: 23:59:59.\n");
-			printf("timeset <nomcompte> 0\n");
-			printf("  Donne une limite de validit� illimit�e (0 = illimit�e).\n");
-		} else if (strcmp(command, "unban") == 0) {
-			printf("unban/unbanish <nom compte>\n");
-			printf("  Ote le banissement d'un compte.\n");
-			printf("  La commande est l'�quivalent de banset <nom_compte> 0.\n");
-		} else if (strcmp(command, "unblock") == 0) {
-			printf("unblock <nom compte>\n");
-			printf("  Place le status d'un compte � 0 (Compte ok).\n");
-			printf("  La commande est l'�quivalent de state <nom_compte> 0.\n");
-		} else if (strcmp(command, "version") == 0) {
-			printf("version\n");
-			printf("  Affiche la version du login-serveur.\n");
-		} else if (strcmp(command, "who") == 0) {
-			printf("who <nom compte>\n");
-			printf("  Affiche les informations sur un compte.\n");
-// quit
-		} else if (strcmp(command, "quit") == 0 ||
-		           strcmp(command, "exit") == 0 ||
-		           strcmp(command, "end") == 0) {
-			printf("quit/end/exit\n");
-			printf("  Fin du programme d'administration.\n");
-// unknown command
-		} else {
-			if (strlen(command) > 0)
-				printf("Commande inconnue [%s] pour l'aide. Affichage de toutes les commandes.\n", command);
-			printf(" aide/help/?                             -- Affiche cet aide\n");
-			printf(" aide/help/? [commande]                  -- Affiche l'aide de la commande\n");
-			printf(" add <nomcompte> <sexe> <motdepasse>     -- Cr�e un compte (sans email)\n");
-			printf(" ban/banish aaaa/mm/jj hh:mm:ss <nom compte> -- Fixe la date finale de banismnt\n");
-			printf(" banadd/ba <nomcompte> <modificateur>    -- Ajout/soustrait du temps � la\n");
-			printf("   exemple: ba moncompte +1m-2mn1s-2y       date finale de banissement\n");
-			printf(" banset/bs <nomcompte> aaaa/mm/jj [hh:mm:ss] -- Change la date fin de banisemnt\n");
-			printf(" banset/bs <nomcompte> 0                 -- D�-banis un compte.\n");
-			printf(" block <nom compte>  -- Mets le status d'un compte � 5 (blocked by the GM Team)\n");
-			printf(" check <nomcompte> <motdepasse>          -- V�rifie un mot de passe d'un compte\n");
-			printf(" create <nomcompte> <sexe> <email> <motdepasse> -- Cr�e un compte (avec email)\n");
-			printf(" del <nom compte>                        -- Supprime un compte\n");
-			printf(" email <nomcompte> <email>               -- Modifie l'e-mail d'un compte\n");
-			printf(" getcount                                -- Donne le nb de joueurs en ligne\n");
-			printf("  gm <nomcompte> [Niveau_GM]              -- Modifie le niveau de GM d'un compte\n");
-			printf(" id <nom compte>                         -- Donne l'id d'un compte\n");
-			printf(" info <idcompte>                         -- Affiche les infos sur un compte\n");
-			printf(" kami <message>                          -- Envoi un message g�n�ral (en jaune)\n");
-			printf(" kamib <message>                         -- Envoi un message g�n�ral (en bleu)\n");
-			printf(" language <langue>                       -- Change la langue d'affichage.\n");
-			printf(" list/ls [Premier_id [Dernier_id] ]      -- Affiche une liste de comptes\n");
-			printf(" listBan/lsBan [Premier_id [Dernier_id] ] -- Affiche une liste de comptes\n");
-			printf("                                             avec un statut ou bannis\n");
-			printf(" listGM/lsGM [Premier_id [Dernier_id] ]  -- Affiche une liste de comptes GM\n");
-			printf(" listOK/lsOK [Premier_id [Dernier_id] ]  -- Affiche une liste de comptes\n");
-			printf("                                            sans status et non bannis\n");
-			printf(" memo <nomcompte> <memo>                 -- Modifie le memo d'un compte\n");
-			printf(" name <idcompte>                         -- Donne le nom d'un compte\n");
-			printf(" passwd <nomcompte> <nouveaumotdepasse>  -- Change le mot de passe d'un compte\n");
-			printf(" quit/end/exit                           -- Fin du programme d'administation\n");
-			printf(" reloadGM                              -- Recharger le fichier de config des GM\n");
-			printf(" search <expression>                     -- Cherche des comptes\n");
-//			printf(" search -e/-r/--expr/--regex <expression> -- Cherche des comptes par REGEX\n");
-			printf(" sex <nomcompte> <sexe>                  -- Modifie le sexe d'un compte\n");
-			printf(" state <nomcompte> <nouveaustatut> <messageerr7> -- Change le statut d'1 compte\n");
-			printf(" timeadd/ta <nomcompte> <modificateur>   -- Ajout/soustrait du temps � la\n");
-			printf("   exemple: ta moncompte +1m-2mn1s-2y       limite de validit�\n");
-			printf(" timeset/ts <nomcompte> aaaa/mm/jj [hh:mm:ss] -- Change la limite de validit�\n");
-			printf(" timeset/ts <nomcompte> 0                -- limite de validit� = illimit�e\n");
-			printf(" unban/unbanish <nom compte>             -- Ote le banissement d'un compte\n");
-			printf(" unblock <nom compte>             -- Mets le status d'un compte � 0 (Compte ok)\n");
-			printf(" version                                 -- Donne la version du login-serveur\n");
-			printf(" who <nom compte>                        -- Affiche les infos sur un compte\n");
-			printf(" Note: Pour les noms de compte avec des espaces, tapez \"<nom compte>\" (ou ').\n");
-		}
-	} else {
-		if (strcmp(command, "aide") == 0) {
-			printf("aide/help/?\n");
-			printf("  Display the description of the commands\n");
-			printf("aide/help/? [command]\n");
-			printf("  Display the description of the specified command\n");
-		} else if (strcmp(command, "help") == 0 ) {
-			printf("aide/help/?\n");
-			printf("  Display the description of the commands\n");
-			printf("aide/help/? [command]\n");
-			printf("  Display the description of the specified command\n");
-// general commands
-		} else if (strcmp(command, "add") == 0) {
-			printf("add <account_name> <sex> <password>\n");
-			printf("  Create an account with the default email (a@a.com).\n");
-			printf("  Concerning the sex, only the first letter is used (F or M).\n");
-			printf("  The e-mail is set to a@a.com (default e-mail). It's like to have no e-mail.\n");
-			printf("  When the password is omitted,\n");
-			printf("  the input is done without displaying of the pressed keys.\n");
-			printf("  <example> add testname Male testpass\n");
-		} else if (strcmp(command, "ban") == 0) {
-			printf("ban/banish yyyy/mm/dd hh:mm:ss <account name>\n");
-			printf("  Changes the final date of a banishment of an account.\n");
-			printf("  Like banset, but <account name> is at end.\n");
-		} else if (strcmp(command, "banadd") == 0) {
-			printf("banadd <account_name> <modifier>\n");
-			printf("  Adds or substracts time from the final date of a banishment of an account.\n");
-			printf("  Modifier is done as follows:\n");
-			printf("    Adjustment value (-1, 1, +1, etc...)\n");
-			printf("    Modified element:\n");
-			printf("      a or y: year\n");
-			printf("      m:  month\n");
-			printf("      j or d: day\n");
-			printf("      h:  hour\n");
-			printf("      mn: minute\n");
-			printf("      s:  second\n");
-			printf("  <example> banadd testname +1m-2mn1s-6y\n");
-			printf("            this example adds 1 month and 1 second, and substracts 2 minutes\n");
-			printf("            and 6 years at the same time.\n");
-			printf("NOTE: If you modify the final date of a non-banished account,\n");
-			printf("      you fix the final date to (actual time +- adjustments)\n");
-		} else if (strcmp(command, "banset") == 0) {
-			printf("banset <account_name> yyyy/mm/dd [hh:mm:ss]\n");
-			printf("  Changes the final date of a banishment of an account.\n");
-			printf("  Default time [hh:mm:ss]: 23:59:59.\n");
-			printf("banset <account_name> 0\n");
-			printf("  Set a non-banished account (0 = unbanished).\n");
-		} else if (strcmp(command, "block") == 0) {
-			printf("block <account name>\n");
-			printf("  Set state 5 (You have been blocked by the GM Team) to an account.\n");
-			printf("  This command works like state <account_name> 5.\n");
-		} else if (strcmp(command, "check") == 0) {
-			printf("check <account_name> <password>\n");
-			printf("  Check the validity of a password for an account.\n");
-			printf("  NOTE: Server will never sends back a password.\n");
-			printf("        It's the only method you have to know if a password is correct.\n");
-			printf("        The other method is to have a ('physical') access to the accounts file.\n");
-		} else if (strcmp(command, "create") == 0) {
-			printf("create <account_name> <sex> <email> <password>\n");
-			printf("  Like the 'add' command, but with e-mail moreover.\n");
-			printf("  <example> create testname Male my@mail.com testpass\n");
-		} else if (strcmp(command, "delete") == 0) {
-			printf("del <account name>\n");
-			printf("  Remove an account.\n");
-			printf("  This order requires confirmation. After confirmation, the account is deleted.\n");
-		} else if (strcmp(command, "email") == 0) {
-			printf("email <account_name> <email>\n");
-			printf("  Modify the e-mail of an account.\n");
-		} else if (strcmp(command, "getcount") == 0) {
-			printf("getcount\n");
-			printf("  Give the number of players online on all char-servers.\n");
-		} else if (strcmp(command, "gm") == 0) {
-			printf("gm <account_name> [GM_level]\n");
-			printf("  Modify the GM level of an account.\n");
-			printf("  Default value remove GM level (GM level = 0).\n");
-			printf("  <example> gm testname 80\n");
-		} else if (strcmp(command, "id") == 0) {
-			printf("id <account name>\n");
-			printf("  Give the id of an account.\n");
-		} else if (strcmp(command, "info") == 0) {
-			printf("info <account_id>\n");
-			printf("  Display complete information of an account.\n");
-		} else if (strcmp(command, "kami") == 0) {
-			printf("kami <message>\n");
-			printf("  Sends a broadcast message on all map-server (in yellow).\n");
-		} else if (strcmp(command, "kamib") == 0) {
-			printf("kamib <message>\n");
-			printf("  Sends a broadcast message on all map-server (in blue).\n");
-		} else if (strcmp(command, "language") == 0) {
-			printf("language <language>\n");
-			printf("  Change the language of displaying.\n");
-			printf("  Possible languages: Fran�ais or English.\n");
-		} else if (strcmp(command, "list") == 0) {
-			printf("list/ls [start_id [end_id]]\n");
-			printf("  Display a list of accounts.\n");
-			printf("  'start_id', 'end_id': indicate end and start identifiers.\n");
-			printf("  Research by name is not possible with this command.\n");
-			printf("  <example> list 10 9999999\n");
-		} else if (strcmp(command, "listban") == 0) {
-			printf("listBan/lsBan [start_id [end_id]]\n");
-			printf("  Like list/ls, but only for accounts with state or banished.\n");
-		} else if (strcmp(command, "listgm") == 0) {
-			printf("listGM/lsGM [start_id [end_id]]\n");
-			printf("  Like list/ls, but only for GM accounts.\n");
-		} else if (strcmp(command, "listok") == 0) {
-			printf("listOK/lsOK [start_id [end_id]]\n");
-			printf("  Like list/ls, but only for accounts without state and not banished.\n");
-		} else if (strcmp(command, "memo") == 0) {
-			printf("memo <account_name> <memo>\n");
-			printf("  Modify the memo of an account.\n");
-			printf("  'memo': it can have until 253 characters (with spaces or not).\n");
-		} else if (strcmp(command, "name") == 0) {
-			printf("name <account_id>\n");
-			printf("  Give the name of an account.\n");
-		} else if (strcmp(command, "password") == 0) {
-			printf("passwd <account_name> <new_password>\n");
-			printf("  Change the password of an account.\n");
-			printf("  When new password is omitted,\n");
-			printf("  the input is done without displaying of the pressed keys.\n");
-		} else if (strcmp(command, "reloadgm") == 0) {
-			printf("reloadGM\n");
-			printf("  Reload GM configuration file\n");
-		} else if (strcmp(command, "search") == 0) {
-			printf("search <expression>\n");
-			printf("  Seek accounts.\n");
-			printf("  Displays the accounts whose names correspond.\n");
-//			printf("search -r/-e/--expr/--regex <expression>\n");
-//			printf("  Seek accounts by regular expression.\n");
-//			printf("  Displays the accounts whose names correspond.\n");
-		} else if (strcmp(command, "sex") == 0) {
-			printf("sex <account_name> <sex>\n");
-			printf("  Modify the sex of an account.\n");
-			printf("  <example> sex testname Male\n");
-		} else if (strcmp(command, "state") == 0) {
-			printf("state <account_name> <new_state> <error_message_#7>\n");
-			printf("  Change the state of an account.\n");
-			printf("  'new_state': state is the state of the packet 0x006a + 1.\n");
-			printf("               The possibilities are:\n");
-			printf("               0 = Account ok\n");
-			printf("               1 = Unregistered ID\n");
-			printf("               2 = Incorrect Password\n");
-			printf("               3 = This ID is expired\n");
-			printf("               4 = Rejected from Server\n");
-			printf("               5 = You have been blocked by the GM Team\n");
-			printf("               6 = Your Game's EXE file is not the latest version\n");
-			printf("               7 = You are Prohibited to log in until...\n");
-			printf("               8 = Server is jammed due to over populated\n");
-			printf("               9 = No MSG\n");
-			printf("               100 = This ID has been totally erased\n");
-			printf("               all other values are 'No MSG', then use state 9 please.\n");
-			printf("  'error_message_#7': message of the code error 6\n");
-			printf("                      = Your are Prohibited to log in until... (packet 0x006a)\n");
-		} else if (strcmp(command, "timeadd") == 0) {
-			printf("timeadd <account_name> <modifier>\n");
-			printf("  Adds or substracts time from the validity limit of an account.\n");
-			printf("  Modifier is done as follows:\n");
-			printf("    Adjustment value (-1, 1, +1, etc...)\n");
-			printf("    Modified element:\n");
-			printf("      a or y: year\n");
-			printf("      m:  month\n");
-			printf("      j or d: day\n");
-			printf("      h:  hour\n");
-			printf("      mn: minute\n");
-			printf("      s:  second\n");
-			printf("  <example> timeadd testname +1m-2mn1s-6y\n");
-			printf("            this example adds 1 month and 1 second, and substracts 2 minutes\n");
-			printf("            and 6 years at the same time.\n");
-			printf("NOTE: You can not modify a unlimited validity limit.\n");
-			printf("      If you want modify it, you want probably create a limited validity limit.\n");
-			printf("      So, at first, you must set the validity limit to a date/time.\n");
-		} else if (strcmp(command, "timeadd") == 0) {
-			printf("timeset <account_name> yyyy/mm/dd [hh:mm:ss]\n");
-			printf("  Changes the validity limit of an account.\n");
-			printf("  Default time [hh:mm:ss]: 23:59:59.\n");
-			printf("timeset <account_name> 0\n");
-			printf("  Gives an unlimited validity limit (0 = unlimited).\n");
-		} else if (strcmp(command, "unban") == 0) {
-			printf("unban/unbanish <account name>\n");
-			printf("  Remove the banishment of an account.\n");
-			printf("  This command works like banset <account_name> 0.\n");
-		} else if (strcmp(command, "unblock") == 0) {
-			printf("unblock <account name>\n");
-			printf("  Set state 0 (Account ok) to an account.\n");
-			printf("  This command works like state <account_name> 0.\n");
-		} else if (strcmp(command, "version") == 0) {
-			printf("version\n");
-			printf("  Display the version of the login-server.\n");
-		} else if (strcmp(command, "who") == 0) {
-			printf("who <account name>\n");
-			printf("  Displays complete information of an account.\n");
-// quit
-		} else if (strcmp(command, "quit") == 0 ||
-		           strcmp(command, "exit") == 0 ||
-		           strcmp(command, "end") == 0) {
-			printf("quit/end/exit\n");
-			printf("  End of the program of administration.\n");
-// unknown command
-		} else {
-			if (strlen(command) > 0)
-				printf("Unknown command [%s] for help. Displaying of all commands.\n", command);
-			printf(" aide/help/?                          -- Display this help\n");
-			printf(" aide/help/? [command]                -- Display the help of the command\n");
-			printf(" add <account_name> <sex> <password>  -- Create an account with default email\n");
-			printf(" ban/banish yyyy/mm/dd hh:mm:ss <account name> -- Change final date of a ban\n");
-			printf(" banadd/ba <account_name> <modifier>  -- Add or substract time from the final\n");
-			printf("   example: ba apple +1m-2mn1s-2y        date of a banishment of an account\n");
-			printf(" banset/bs <account_name> yyyy/mm/dd [hh:mm:ss] -- Change final date of a ban\n");
-			printf(" banset/bs <account_name> 0           -- Un-banish an account\n");
-			printf(" block <account name>     -- Set state 5 (blocked by the GM Team) to an account\n");
-			printf(" check <account_name> <password>      -- Check the validity of a password\n");
-			printf(" create <account_name> <sex> <email> <passwrd> -- Create an account with email\n");
-			printf(" del <account name>                   -- Remove an account\n");
-			printf(" email <account_name> <email>         -- Modify an email of an account\n");
-			printf(" getcount                             -- Give the number of players online\n");
-			printf(" gm <account_name> [GM_level]         -- Modify the GM level of an account\n");
-			printf(" id <account name>                    -- Give the id of an account\n");
-			printf(" info <account_id>                    -- Display all information of an account\n");
-			printf(" kami <message>                       -- Sends a broadcast message (in yellow)\n");
-			printf(" kamib <message>                      -- Sends a broadcast message (in blue)\n");
-			printf(" language <language>                  -- Change the language of displaying.\n");
-			printf(" list/ls [First_id [Last_id]]         -- Display a list of accounts\n");
-			printf(" listBan/lsBan [First_id [Last_id] ]  -- Display a list of accounts\n");
-			printf("                                         with state or banished\n");
-			printf(" listGM/lsGM [First_id [Last_id]]     -- Display a list of GM accounts\n");
-			printf(" listOK/lsOK [First_id [Last_id] ]    -- Display a list of accounts\n");
-			printf("                                         without state and not banished\n");
-			printf(" memo <account_name> <memo>           -- Modify the memo of an account\n");
-			printf(" name <account_id>                    -- Give the name of an account\n");
-			printf(" passwd <account_name> <new_password> -- Change the password of an account\n");
-			printf(" quit/end/exit                        -- End of the program of administation\n");
-			printf(" reloadGM                             -- Reload GM configuration file\n");
-			printf(" search <expression>                  -- Seek accounts\n");
-//			printf(" search -e/-r/--expr/--regex <expressn> -- Seek accounts by regular-expression\n");
-			printf(" sex <nomcompte> <sexe>               -- Modify the sex of an account\n");
-			printf(" state <account_name> <new_state> <error_message_#7> -- Change the state\n");
-			printf(" timeadd/ta <account_name> <modifier> -- Add or substract time from the\n");
-			printf("   example: ta apple +1m-2mn1s-2y        validity limit of an account\n");
-			printf(" timeset/ts <account_name> yyyy/mm/dd [hh:mm:ss] -- Change the validify limit\n");
-			printf(" timeset/ts <account_name> 0          -- Give a unlimited validity limit\n");
-			printf(" unban/unbanish <account name>        -- Remove the banishment of an account\n");
-			printf(" unblock <account name>               -- Set state 0 (Account ok) to an account\n");
-			printf(" version                              -- Gives the version of the login-server\n");
-			printf(" who <account name>                   -- Display all information of an account\n");
-			printf(" who <account name>                   -- Display all information of an account\n");
-			printf(" Note: To use spaces in an account name, type \"<account name>\" (or ').\n");
-		}
-	}
-}
-
-//-----------------------------
-// Sub-function: add an account
-//-----------------------------
-int addaccount(char* param, int emailflag) {
-	char name[1023], sex[1023], email[1023], password[1023];
-//	int i;
-
-	memset(name, '\0', sizeof(name));
-	memset(sex, '\0', sizeof(sex));
-	memset(email, '\0', sizeof(email));
-	memset(password, '\0', sizeof(password));
-
-	if (emailflag == 0) { // add command
-		if (sscanf(param, "\"%[^\"]\" %s %[^\r\n]", name, sex, password) < 2 && // password can be void
-		    sscanf(param, "'%[^']' %s %[^\r\n]", name, sex, password) < 2 && // password can be void
-		    sscanf(param, "%s %s %[^\r\n]", name, sex, password) < 2) { // password can be void
-			if (defaultlanguage == 'F') {
-				printf("Entrez un nom de compte, un sexe et un mot de passe svp.\n");
-				printf("<exemple> add nomtest Male motdepassetest\n");
-				ladmin_log("Nombre incorrect de param�tres pour cr�er un compte (commande 'add')." RETCODE);
-			} else {
-				printf("Please input an account name, a sex and a password.\n");
-				printf("<example> add testname Male testpass\n");
-				ladmin_log("Incomplete parameters to create an account ('add' command)." RETCODE);
-			}
-			return 136;
-		}
-		strcpy(email, "a@a.com"); // default email
-	} else { // 1: create command
-		if (sscanf(param, "\"%[^\"]\" %s %s %[^\r\n]", name, sex, email, password) < 3 && // password can be void
-		    sscanf(param, "'%[^']' %s %s %[^\r\n]", name, sex, email, password) < 3 && // password can be void
-		    sscanf(param, "%s %s %s %[^\r\n]", name, sex, email, password) < 3) { // password can be void
-			if (defaultlanguage == 'F') {
-				printf("Entrez un nom de compte, un sexe et un mot de passe svp.\n");
-				printf("<exemple> create nomtest Male mo@mail.com motdepassetest\n");
-				ladmin_log("Nombre incorrect de param�tres pour cr�er un compte (commande 'create')." RETCODE);
-			} else {
-				printf("Please input an account name, a sex and a password.\n");
-				printf("<example> create testname Male my@mail.com testpass\n");
-				ladmin_log("Incomplete parameters to create an account ('create' command)." RETCODE);
-			}
-			return 136;
-		}
-	}
-	if (verify_accountname(name) == 0) {
-		return 102;
-	}
-
-/*	for(i = 0; name[i]; i++) {
-		if (strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_", name[i]) == NULL) {
-			if (defaultlanguage == 'F') {
-				printf("Caract�re interdit (%c) trouv� dans le nom du compte (%d%s caract�re).\n", name[i], i+1, makeordinal(i+1));
-				ladmin_log("Caract�re interdit (%c) trouv� dans le nom du compte (%d%s caract�re)." RETCODE, name[i], i+1, makeordinal(i+1));
-			} else {
-				printf("Illegal character (%c) found in the account name (%d%s character).\n", name[i], i+1, makeordinal(i+1));
-				ladmin_log("Illegal character (%c) found in the account name (%d%s character)." RETCODE, name[i], i+1, makeordinal(i+1));
-			}
-			return 101;
-		}
-	}*/
-
-	sex[0] = toupper(sex[0]);
-	if (strchr("MF", sex[0]) == NULL) {
-		if (defaultlanguage == 'F') {
-			printf("Sexe incorrect [%s]. Entrez M ou F svp.\n", sex);
-			ladmin_log("Sexe incorrect [%s]. Entrez M ou F svp." RETCODE, sex);
-		} else {
-			printf("Illegal gender [%s]. Please input M or F.\n", sex);
-			ladmin_log("Illegal gender [%s]. Please input M or F." RETCODE, sex);
-		}
-		return 103;
-	}
-
-	if (strlen(email) < 3) {
-		if (defaultlanguage == 'F') {
-			printf("Email trop courte [%s]. Entrez une e-mail valide svp.\n", email);
-			ladmin_log("Email trop courte [%s]. Entrez une e-mail valide svp." RETCODE, email);
-		} else {
-			printf("Email is too short [%s]. Please input a valid e-mail.\n", email);
-			ladmin_log("Email is too short [%s]. Please input a valid e-mail." RETCODE, email);
-		}
-		return 109;
-	}
-	if (strlen(email) > 39) {
-		if (defaultlanguage == 'F') {
-			printf("Email trop longue [%s]. Entrez une e-mail de 39 caract�res maximum svp.\n", email);
-			ladmin_log("Email trop longue [%s]. Entrez une e-mail de 39 caract�res maximum svp." RETCODE, email);
-		} else {
-			printf("Email is too long [%s]. Please input an e-mail with 39 bytes at the most.\n", email);
-			ladmin_log("Email is too long [%s]. Please input an e-mail with 39 bytes at the most." RETCODE, email);
-		}
-		return 109;
-	}
-	if (e_mail_check(email) == 0) {
-		if (defaultlanguage == 'F') {
-			printf("Email incorrecte [%s]. Entrez une e-mail valide svp.\n", email);
-			ladmin_log("Email incorrecte [%s]. Entrez une e-mail valide svp." RETCODE, email);
-		} else {
-			printf("Invalid email [%s]. Please input a valid e-mail.\n", email);
-			ladmin_log("Invalid email [%s]. Please input a valid e-mail." RETCODE, email);
-		}
-		return 109;
-	}
-
-	if (strlen(password) == 0) {
-		if (typepasswd(password) == 0)
-			return 108;
-	}
-	if (verify_password(password) == 0)
-		return 104;
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour cr�er un compte." RETCODE);
-	} else {
-		ladmin_log("Request to login-server to create an account." RETCODE);
-	}
-
-	WFIFOW(login_fd,0) = 0x7930;
-	memcpy(WFIFOP(login_fd,2), name, 24);
-	memcpy(WFIFOP(login_fd,26), password, 24);
-	WFIFOB(login_fd,50) = sex[0];
-	memcpy(WFIFOP(login_fd,51), email, 40);
-	WFIFOSET(login_fd,91);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//---------------------------------------------------------------------------------
-// Sub-function: Add/substract time to the final date of a banishment of an account
-//---------------------------------------------------------------------------------
-int banaddaccount(char* param) {
-	char name[1023], modif[1023];
-	int year, month, day, hour, minute, second;
-	char * p_modif;
-	int value, i;
-
-	memset(name, '\0', sizeof(name));
-	memset(modif, '\0', sizeof(modif));
-	year = month = day = hour = minute = second = 0;
-
-	if (sscanf(param, "\"%[^\"]\" %[^\r\n]", name, modif) < 2 &&
-	    sscanf(param, "'%[^']' %[^\r\n]", name, modif) < 2 &&
-	    sscanf(param, "%s %[^\r\n]", name, modif) < 2) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte et un modificateur svp.\n");
-			printf("  <exemple> banadd nomtest +1m-2mn1s-6y\n");
-			printf("            Cette exemple ajoute 1 mois et 1 seconde, et soustrait 2 minutes\n");
-			printf("            et 6 ans dans le m�me temps.\n");
-			ladmin_log("Nombre incorrect de param�tres pour modifier la fin de ban d'un compte (commande 'banadd')." RETCODE);
-		} else {
-			printf("Please input an account name and a modifier.\n");
-			printf("  <example>: banadd testname +1m-2mn1s-6y\n");
-			printf("             this example adds 1 month and 1 second, and substracts 2 minutes\n");
-			printf("             and 6 years at the same time.\n");
-			ladmin_log("Incomplete parameters to modify the ban date/time of an account ('banadd' command)." RETCODE);
-		}
-		return 136;
-	}
-	if (verify_accountname(name) == 0) {
-		return 102;
-	}
-
-	// lowercase for modif
-	for (i = 0; modif[i]; i++)
-		modif[i] = tolower(modif[i]);
-	p_modif = modif;
-	while (strlen(p_modif) > 0) {
-		value = atoi(p_modif);
-		if (value == 0) {
-			p_modif++;
-		} else {
-			if (p_modif[0] == '-' || p_modif[0] == '+')
-				p_modif++;
-			while (strlen(p_modif) > 0 && p_modif[0] >= '0' && p_modif[0] <= '9') {
-				p_modif++;
-			}
-			if (p_modif[0] == 's') {
-				second = value;
-				p_modif++;
-			} else if (p_modif[0] == 'm' && p_modif[1] == 'n') {
-				minute = value;
-				p_modif += 2;
-			} else if (p_modif[0] == 'h') {
-				hour = value;
-				p_modif++;
-			} else if (p_modif[0] == 'd' || p_modif[0] == 'j') {
-				day = value;
-				p_modif += 2;
-			} else if (p_modif[0] == 'm') {
-				month = value;
-				p_modif++;
-			} else if (p_modif[0] == 'y' || p_modif[0] == 'a') {
-				year = value;
-				p_modif++;
-			} else {
-				p_modif++;
-			}
-		}
-	}
-
-	if (defaultlanguage == 'F') {
-		printf(" ann�e:   %d\n", year);
-		printf(" mois:    %d\n", month);
-		printf(" jour:    %d\n", day);
-		printf(" heure:   %d\n", hour);
-		printf(" minute:  %d\n", minute);
-		printf(" seconde: %d\n", second);
-	} else {
-		printf(" year:   %d\n", year);
-		printf(" month:  %d\n", month);
-		printf(" day:    %d\n", day);
-		printf(" hour:   %d\n", hour);
-		printf(" minute: %d\n", minute);
-		printf(" second: %d\n", second);
-	}
-
-	if (year == 0 && month == 0 && day == 0 && hour == 0 && minute == 0 && second == 0) {
-		if (defaultlanguage == 'F') {
-			printf("Vous devez entrer un ajustement avec cette commande, svp:\n");
-			printf("  Valeur d'ajustement (-1, 1, +1, etc...)\n");
-			printf("  Element modifi�:\n");
-			printf("    a ou y: ann�e\n");
-			printf("    m:      mois\n");
-			printf("    j ou d: jour\n");
-			printf("    h:      heure\n");
-			printf("    mn:     minute\n");
-			printf("    s:      seconde\n");
-			printf("  <exemple> banadd nomtest +1m-2mn1s-6y\n");
-			printf("            Cette exemple ajoute 1 mois et 1 seconde, et soustrait 2 minutes\n");
-			printf("            et 6 ans dans le m�me temps.\n");
-			ladmin_log("Aucun ajustement n'est pas un ajustement (commande 'banadd')." RETCODE);
-		} else {
-			printf("Please give an adjustment with this command:\n");
-			printf("  Adjustment value (-1, 1, +1, etc...)\n");
-			printf("  Modified element:\n");
-			printf("    a or y: year\n");
-			printf("    m: month\n");
-			printf("    j or d: day\n");
-			printf("    h: hour\n");
-			printf("    mn: minute\n");
-			printf("    s: second\n");
-			printf("  <example> banadd testname +1m-2mn1s-6y\n");
-			printf("            this example adds 1 month and 1 second, and substracts 2 minutes\n");
-			printf("            and 6 years at the same time.\n");
-			ladmin_log("No adjustment isn't an adjustment ('banadd' command)." RETCODE);
-		}
-		return 137;
-	}
-	if (year > 127 || year < -127) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un ajustement d'ann�es correct (de -127 � 127), svp.\n");
-			ladmin_log("Ajustement de l'ann�e hors norme (commande 'banadd')." RETCODE);
-		} else {
-			printf("Please give a correct adjustment for the years (from -127 to 127).\n");
-			ladmin_log("Abnormal adjustement for the year ('banadd' command)." RETCODE);
-		}
-		return 137;
-	}
-	if (month > 255 || month < -255) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un ajustement de mois correct (de -255 � 255), svp.\n");
-			ladmin_log("Ajustement du mois hors norme (commande 'banadd')." RETCODE);
-		} else {
-			printf("Please give a correct adjustment for the months (from -255 to 255).\n");
-			ladmin_log("Abnormal adjustement for the month ('banadd' command)." RETCODE);
-		}
-		return 137;
-	}
-	if (day > 32767 || day < -32767) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un ajustement de jours correct (de -32767 � 32767), svp.\n");
-			ladmin_log("Ajustement des jours hors norme (commande 'banadd')." RETCODE);
-		} else {
-			printf("Please give a correct adjustment for the days (from -32767 to 32767).\n");
-			ladmin_log("Abnormal adjustement for the days ('banadd' command)." RETCODE);
-		}
-		return 137;
-	}
-	if (hour > 32767 || hour < -32767) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un ajustement d'heures correct (de -32767 � 32767), svp.\n");
-			ladmin_log("Ajustement des heures hors norme (commande 'banadd')." RETCODE);
-		} else {
-			printf("Please give a correct adjustment for the hours (from -32767 to 32767).\n");
-			ladmin_log("Abnormal adjustement for the hours ('banadd' command)." RETCODE);
-		}
-		return 137;
-	}
-	if (minute > 32767 || minute < -32767) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un ajustement de minutes correct (de -32767 � 32767), svp.\n");
-			ladmin_log("Ajustement des minutes hors norme (commande 'banadd')." RETCODE);
-		} else {
-			printf("Please give a correct adjustment for the minutes (from -32767 to 32767).\n");
-			ladmin_log("Abnormal adjustement for the minutes ('banadd' command)." RETCODE);
-		}
-		return 137;
-	}
-	if (second > 32767 || second < -32767) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un ajustement de secondes correct (de -32767 � 32767), svp.\n");
-			ladmin_log("Ajustement des secondes hors norme (commande 'banadd')." RETCODE);
-		} else {
-			printf("Please give a correct adjustment for the seconds (from -32767 to 32767).\n");
-			ladmin_log("Abnormal adjustement for the seconds ('banadd' command)." RETCODE);
-		}
-		return 137;
-	}
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour modifier la date d'un bannissement." RETCODE);
-	} else {
-		ladmin_log("Request to login-server to modify a ban date/time." RETCODE);
-	}
-
-	WFIFOW(login_fd,0) = 0x794c;
-	memcpy(WFIFOP(login_fd,2), name, 24);
-	WFIFOW(login_fd,26) = (short)year;
-	WFIFOW(login_fd,28) = (short)month;
-	WFIFOW(login_fd,30) = (short)day;
-	WFIFOW(login_fd,32) = (short)hour;
-	WFIFOW(login_fd,34) = (short)minute;
-	WFIFOW(login_fd,36) = (short)second;
-	WFIFOSET(login_fd,38);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//-----------------------------------------------------------------------
-// Sub-function of sub-function banaccount, unbanaccount or bansetaccount
-// Set the final date of a banishment of an account
-//-----------------------------------------------------------------------
-int bansetaccountsub(char* name, char* date, char* time) {
-	int year, month, day, hour, minute, second;
-	time_t ban_until_time; // # of seconds 1/1/1970 (timestamp): ban time limit of the account (0 = no ban)
-	struct tm *tmtime;
-
-	year = month = day = hour = minute = second = 0;
-	ban_until_time = 0;
-	tmtime = localtime(&ban_until_time); // initialize
-
-	if (verify_accountname(name) == 0) {
-		return 102;
-	}
-
-	if (atoi(date) != 0 &&
-	    ((sscanf(date, "%d/%d/%d", &year, &month, &day) < 3 &&
-	      sscanf(date, "%d-%d-%d", &year, &month, &day) < 3 &&
-	      sscanf(date, "%d.%d.%d", &year, &month, &day) < 3) ||
-	     sscanf(time, "%d:%d:%d", &hour, &minute, &second) < 3)) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez une date et une heure svp (format: aaaa/mm/jj hh:mm:ss).\n");
-			printf("Vous pouvez aussi mettre 0 � la place si vous utilisez la commande 'banset'.\n");
-			ladmin_log("Format incorrect pour la date/heure (commande'banset' ou 'ban')." RETCODE);
-		} else {
-			printf("Please input a date and a time (format: yyyy/mm/dd hh:mm:ss).\n");
-			printf("You can imput 0 instead of if you use 'banset' command.\n");
-			ladmin_log("Invalid format for the date/time ('banset' or 'ban' command)." RETCODE);
-		}
-		return 102;
-	}
-
-	if (atoi(date) == 0) {
-		ban_until_time = 0;
-	} else {
-		if (year < 70) {
-			year = year + 100;
-		}
-		if (year >= 1900) {
-			year = year - 1900;
-		}
-		if (month < 1 || month > 12) {
-			if (defaultlanguage == 'F') {
-				printf("Entrez un mois correct svp (entre 1 et 12).\n");
-				ladmin_log("Mois incorrect pour la date (command 'banset' ou 'ban')." RETCODE);
-			} else {
-				printf("Please give a correct value for the month (from 1 to 12).\n");
-				ladmin_log("Invalid month for the date ('banset' or 'ban' command)." RETCODE);
-			}
-			return 102;
-		}
-		month = month - 1;
-		if (day < 1 || day > 31) {
-			if (defaultlanguage == 'F') {
-				printf("Entrez un jour correct svp (entre 1 et 31).\n");
-				ladmin_log("Jour incorrect pour la date (command 'banset' ou 'ban')." RETCODE);
-			} else {
-				printf("Please give a correct value for the day (from 1 to 31).\n");
-				ladmin_log("Invalid day for the date ('banset' or 'ban' command)." RETCODE);
-			}
-			return 102;
-		}
-		if (((month == 3 || month == 5 || month == 8 || month == 10) && day > 30) ||
-		    (month == 1 && day > 29)) {
-			if (defaultlanguage == 'F') {
-				printf("Entrez un jour correct en fonction du mois (%d) svp.\n", month);
-				ladmin_log("Jour incorrect pour ce mois correspondant (command 'banset' ou 'ban')." RETCODE);
-			} else {
-				printf("Please give a correct value for a day of this month (%d).\n", month);
-				ladmin_log("Invalid day for this month ('banset' or 'ban' command)." RETCODE);
-			}
-			return 102;
-		}
-		if (hour < 0 || hour > 23) {
-			if (defaultlanguage == 'F') {
-				printf("Entrez une heure correcte svp (entre 0 et 23).\n");
-				ladmin_log("Heure incorrecte pour l'heure (command 'banset' ou 'ban')." RETCODE);
-			} else {
-				printf("Please give a correct value for the hour (from 0 to 23).\n");
-				ladmin_log("Invalid hour for the time ('banset' or 'ban' command)." RETCODE);
-			}
-			return 102;
-		}
-		if (minute < 0 || minute > 59) {
-			if (defaultlanguage == 'F') {
-				printf("Entrez des minutes correctes svp (entre 0 et 59).\n");
-				ladmin_log("Minute incorrecte pour l'heure (command 'banset' ou 'ban')." RETCODE);
-			} else {
-				printf("Please give a correct value for the minutes (from 0 to 59).\n");
-				ladmin_log("Invalid minute for the time ('banset' or 'ban' command)." RETCODE);
-			}
-			return 102;
-		}
-		if (second < 0 || second > 59) {
-			if (defaultlanguage == 'F') {
-				printf("Entrez des secondes correctes svp (entre 0 et 59).\n");
-				ladmin_log("Seconde incorrecte pour l'heure (command 'banset' ou 'ban')." RETCODE);
-			} else {
-				printf("Please give a correct value for the seconds (from 0 to 59).\n");
-				ladmin_log("Invalid second for the time ('banset' or 'ban' command)." RETCODE);
-			}
-			return 102;
-		}
-		tmtime->tm_year = year;
-		tmtime->tm_mon = month;
-		tmtime->tm_mday = day;
-		tmtime->tm_hour = hour;
-		tmtime->tm_min = minute;
-		tmtime->tm_sec = second;
-		tmtime->tm_isdst = -1; // -1: no winter/summer time modification
-		ban_until_time = mktime(tmtime);
-		if (ban_until_time == -1) {
-			if (defaultlanguage == 'F') {
-				printf("Date incorrecte.\n");
-				printf("Entrez une date et une heure svp (format: aaaa/mm/jj hh:mm:ss).\n");
-				printf("Vous pouvez aussi mettre 0 � la place si vous utilisez la commande 'banset'.\n");
-				ladmin_log("Date incorrecte. (command 'banset' ou 'ban')." RETCODE);
-			} else {
-				printf("Invalid date.\n");
-				printf("Please input a date and a time (format: yyyy/mm/dd hh:mm:ss).\n");
-				printf("You can imput 0 instead of if you use 'banset' command.\n");
-				ladmin_log("Invalid date. ('banset' or 'ban' command)." RETCODE);
-			}
-			return 102;
-		}
-	}
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour fixer un ban." RETCODE);
-	} else {
-		ladmin_log("Request to login-server to set a ban." RETCODE);
-	}
-
-	WFIFOW(login_fd,0) = 0x794a;
-	memcpy(WFIFOP(login_fd,2), name, 24);
-	WFIFOL(login_fd,26) = (int)ban_until_time;
-	WFIFOSET(login_fd,30);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//---------------------------------------------------------------------
-// Sub-function: Set the final date of a banishment of an account (ban)
-//---------------------------------------------------------------------
-int banaccount(char* param) {
-	char name[1023], date[1023], time[1023];
-
-	memset(name, '\0', sizeof(name));
-	memset(date, '\0', sizeof(date));
-	memset(time, '\0', sizeof(time));
-
-	if (sscanf(param, "%s %s \"%[^\"]\"", date, time, name) < 3 &&
-	    sscanf(param, "%s %s '%[^']'", date, time, name) < 3 &&
-	    sscanf(param, "%s %s %[^\r\n]", date, time, name) < 3) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte, une date et une heure svp.\n");
-			printf("<exemple>: banset <nom_du_compte> aaaa/mm/jj [hh:mm:ss]\n");
-			printf("           banset <nom_du_compte> 0    (0 = d�-bani)\n");
-			printf("           ban/banish aaaa/mm/jj hh:mm:ss <nom du compte>\n");
-			printf("           unban/unbanish <nom du compte>\n");
-			printf("           Heure par d�faut [hh:mm:ss]: 23:59:59.\n");
-			ladmin_log("Nombre incorrect de param�tres pour fixer un ban (commande 'banset' ou 'ban')." RETCODE);
-		} else {
-			printf("Please input an account name, a date and a hour.\n");
-			printf("<example>: banset <account_name> yyyy/mm/dd [hh:mm:ss]\n");
-			printf("           banset <account_name> 0   (0 = un-banished)\n");
-			printf("           ban/banish yyyy/mm/dd hh:mm:ss <account name>\n");
-			printf("           unban/unbanish <account name>\n");
-			printf("           Default time [hh:mm:ss]: 23:59:59.\n");
-			ladmin_log("Incomplete parameters to set a ban ('banset' or 'ban' command)." RETCODE);
-		}
-		return 136;
-	}
-
-	return bansetaccountsub(name, date, time);
-}
-
-//------------------------------------------------------------------------
-// Sub-function: Set the final date of a banishment of an account (banset)
-//------------------------------------------------------------------------
-int bansetaccount(char* param) {
-	char name[1023], date[1023], time[1023];
-
-	memset(name, '\0', sizeof(name));
-	memset(date, '\0', sizeof(date));
-	memset(time, '\0', sizeof(time));
-
-	if (sscanf(param, "\"%[^\"]\" %s %[^\r\n]", name, date, time) < 2 && // if date = 0, time can be void
-	    sscanf(param, "'%[^']' %s %[^\r\n]", name, date, time) < 2 && // if date = 0, time can be void
-	    sscanf(param, "%s %s %[^\r\n]", name, date, time) < 2) { // if date = 0, time can be void
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte, une date et une heure svp.\n");
-			printf("<exemple>: banset <nom_du_compte> aaaa/mm/jj [hh:mm:ss]\n");
-			printf("           banset <nom_du_compte> 0    (0 = d�-bani)\n");
-			printf("           ban/banish aaaa/mm/jj hh:mm:ss <nom du compte>\n");
-			printf("           unban/unbanish <nom du compte>\n");
-			printf("           Heure par d�faut [hh:mm:ss]: 23:59:59.\n");
-			ladmin_log("Nombre incorrect de param�tres pour fixer un ban (commande 'banset' ou 'ban')." RETCODE);
-		} else {
-			printf("Please input an account name, a date and a hour.\n");
-			printf("<example>: banset <account_name> yyyy/mm/dd [hh:mm:ss]\n");
-			printf("           banset <account_name> 0   (0 = un-banished)\n");
-			printf("           ban/banish yyyy/mm/dd hh:mm:ss <account name>\n");
-			printf("           unban/unbanish <account name>\n");
-			printf("           Default time [hh:mm:ss]: 23:59:59.\n");
-			ladmin_log("Incomplete parameters to set a ban ('banset' or 'ban' command)." RETCODE);
-		}
-		return 136;
-	}
-
-	if (time[0] == '\0')
-		strcpy(time, "23:59:59");
-
-	return bansetaccountsub(name, date, time);
-}
-
-//-------------------------------------------------
-// Sub-function: unbanishment of an account (unban)
-//-------------------------------------------------
-int unbanaccount(char* param) {
-	char name[1023];
-
-	memset(name, '\0', sizeof(name));
-
-	if (strlen(param) == 0 ||
-	    (sscanf(param, "\"%[^\"]\"", name) < 1 &&
-	     sscanf(param, "'%[^']'", name) < 1 &&
-	     sscanf(param, "%[^\r\n]", name) < 1) ||
-	     strlen(name) == 0) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte svp.\n");
-			printf("<exemple>: banset <nom_du_compte> aaaa/mm/jj [hh:mm:ss]\n");
-			printf("           banset <nom_du_compte> 0    (0 = d�-bani)\n");
-			printf("           ban/banish aaaa/mm/jj hh:mm:ss <nom du compte>\n");
-			printf("           unban/unbanish <nom du compte>\n");
-			printf("           Heure par d�faut [hh:mm:ss]: 23:59:59.\n");
-			ladmin_log("Nombre incorrect de param�tres pour fixer un ban (commande 'unban')." RETCODE);
-		} else {
-			printf("Please input an account name.\n");
-			printf("<example>: banset <account_name> yyyy/mm/dd [hh:mm:ss]\n");
-			printf("           banset <account_name> 0   (0 = un-banished)\n");
-			printf("           ban/banish yyyy/mm/dd hh:mm:ss <account name>\n");
-			printf("           unban/unbanish <account name>\n");
-			printf("           Default time [hh:mm:ss]: 23:59:59.\n");
-			ladmin_log("Incomplete parameters to set a ban ('unban' command)." RETCODE);
-		}
-		return 136;
-	}
-
-	return bansetaccountsub(name, "0", "");
-}
-
-//---------------------------------------------------------
-// Sub-function: Asking to check the validity of a password
-// (Note: never send back a password with login-server!! security of passwords)
-//---------------------------------------------------------
-int checkaccount(char* param) {
-	char name[1023], password[1023];
-
-	memset(name, '\0', sizeof(name));
-	memset(password, '\0', sizeof(password));
-
-	if (sscanf(param, "\"%[^\"]\" %[^\r\n]", name, password) < 1 && // password can be void
-	    sscanf(param, "'%[^']' %[^\r\n]", name, password) < 1 && // password can be void
-	    sscanf(param, "%s %[^\r\n]", name, password) < 1) { // password can be void
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte svp.\n");
-			printf("<exemple> check testname motdepasse\n");
-			ladmin_log("Nombre incorrect de param�tres pour tester le mot d'un passe d'un compte (commande 'check')." RETCODE);
-		} else {
-			printf("Please input an account name.\n");
-			printf("<example> check testname password\n");
-			ladmin_log("Incomplete parameters to check the password of an account ('check' command)." RETCODE);
-		}
-		return 136;
-	}
-
-	if (verify_accountname(name) == 0) {
-		return 102;
-	}
-
-	if (strlen(password) == 0) {
-		if (typepasswd(password) == 0)
-			return 134;
-	}
-	if (verify_password(password) == 0)
-		return 131;
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour test un mot de passe." RETCODE);
-	} else {
-		ladmin_log("Request to login-server to check a password." RETCODE);
-	}
-
-	WFIFOW(login_fd,0) = 0x793a;
-	memcpy(WFIFOP(login_fd,2), name, 24);
-	memcpy(WFIFOP(login_fd,26), password, 24);
-	WFIFOSET(login_fd,50);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//------------------------------------------------
-// Sub-function: Asking for deletion of an account
-//------------------------------------------------
-int delaccount(char* param) {
-	char name[1023];
-	char letter;
-	char confirm[1023];
-	int i;
-
-	memset(name, '\0', sizeof(name));
-
-	if (strlen(param) == 0 ||
-	    (sscanf(param, "\"%[^\"]\"", name) < 1 &&
-	     sscanf(param, "'%[^']'", name) < 1 &&
-	     sscanf(param, "%[^\r\n]", name) < 1) ||
-	     strlen(name) == 0) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte svp.\n");
-			printf("<exemple> del nomtestasupprimer\n");
-			ladmin_log("Aucun nom donn� pour supprimer un compte (commande 'delete')." RETCODE);
-		} else {
-			printf("Please input an account name.\n");
-			printf("<example> del testnametodelete\n");
-			ladmin_log("No name given to delete an account ('delete' command)." RETCODE);
-		}
-		return 136;
-	}
-
-	if (verify_accountname(name) == 0) {
-		return 102;
-	}
-
-	memset(confirm, '\0', sizeof(confirm));
-	while ((confirm[0] != 'o' || defaultlanguage != 'F') && confirm[0] != 'n' && (confirm[0] != 'y' || defaultlanguage == 'F')) {
-		if (defaultlanguage == 'F')
-			printf("\033[1;36m ** Etes-vous vraiment s�r de vouloir SUPPRIMER le compte [$userid]? (o/n) > \033[0m");
-		else
-			printf("\033[1;36m ** Are you really sure to DELETE account [$userid]? (y/n) > \033[0m");
-		fflush(stdout);
-		memset(confirm, '\0', sizeof(confirm));
-		i = 0;
-		while ((letter = getchar()) != '\n')
-			confirm[i++] = letter;
-	}
-
-	if (confirm[0] == 'n') {
-		if (defaultlanguage == 'F') {
-			printf("Suppression annul�e.\n");
-			ladmin_log("Suppression annul�e par l'utilisateur (commande 'delete')." RETCODE);
-		} else {
-			printf("Deletion canceled.\n");
-			ladmin_log("Deletion canceled by user ('delete' command)." RETCODE);
-		}
-		return 121;
-	}
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour d�truire un compte." RETCODE);
-	} else {
-		ladmin_log("Request to login-server to delete an acount." RETCODE);
-	}
-
-	WFIFOW(login_fd,0) = 0x7932;
-	memcpy(WFIFOP(login_fd,2), name, 24);
-	WFIFOSET(login_fd,26);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//----------------------------------------------------------
-// Sub-function: Asking to modification of an account e-mail
-//----------------------------------------------------------
-int changeemail(char* param) {
-	char name[1023], email[1023];
-
-	memset(name, '\0', sizeof(name));
-	memset(email, '\0', sizeof(email));
-
-	if (sscanf(param, "\"%[^\"]\" %[^\r\n]", name, email) < 2 &&
-	    sscanf(param, "'%[^']' %[^\r\n]", name, email) < 2 &&
-	    sscanf(param, "%s %[^\r\n]", name, email) < 2) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte et une email svp.\n");
-			printf("<exemple> email testname nouveauemail\n");
-			ladmin_log("Nombre incorrect de param�tres pour changer l'email d'un compte (commande 'email')." RETCODE);
-		} else {
-			printf("Please input an account name and an email.\n");
-			printf("<example> email testname newemail\n");
-			ladmin_log("Incomplete parameters to change the email of an account ('email' command)." RETCODE);
-		}
-		return 136;
-	}
-
-	if (verify_accountname(name) == 0) {
-		return 102;
-	}
-
-	if (strlen(email) < 3) {
-		if (defaultlanguage == 'F') {
-			printf("Email trop courte [%s]. Entrez une e-mail valide svp.\n", email);
-			ladmin_log("Email trop courte [%s]. Entrez une e-mail valide svp." RETCODE, email);
-		} else {
-			printf("Email is too short [%s]. Please input a valid e-mail.\n", email);
-			ladmin_log("Email is too short [%s]. Please input a valid e-mail." RETCODE, email);
-		}
-		return 109;
-	}
-	if (strlen(email) > 39) {
-		if (defaultlanguage == 'F') {
-			printf("Email trop longue [%s]. Entrez une e-mail de 39 caract�res maximum svp.\n", email);
-			ladmin_log("Email trop longue [%s]. Entrez une e-mail de 39 caract�res maximum svp." RETCODE, email);
-		} else {
-			printf("Email is too long [%s]. Please input an e-mail with 39 bytes at the most.\n", email);
-			ladmin_log("Email is too long [%s]. Please input an e-mail with 39 bytes at the most." RETCODE, email);
-		}
-		return 109;
-	}
-	if (e_mail_check(email) == 0) {
-		if (defaultlanguage == 'F') {
-			printf("Email incorrecte [%s]. Entrez une e-mail valide svp.\n", email);
-			ladmin_log("Email incorrecte [%s]. Entrez une e-mail valide svp." RETCODE, email);
-		} else {
-			printf("Invalid email [%s]. Please input a valid e-mail.\n", email);
-			ladmin_log("Invalid email [%s]. Please input a valid e-mail." RETCODE, email);
-		}
-		return 109;
-	}
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour changer une email." RETCODE);
-	} else {
-		ladmin_log("Request to login-server to change an email." RETCODE);
-	}
-
-	WFIFOW(login_fd,0) = 0x7940;
-	memcpy(WFIFOP(login_fd,2), name, 24);
-	memcpy(WFIFOP(login_fd,26), email, 40);
-	WFIFOSET(login_fd,66);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//-----------------------------------------------------
-// Sub-function: Asking of the number of online players
-//-----------------------------------------------------
-int getlogincount() {
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour obtenir le nombre de joueurs en jeu." RETCODE);
-	} else {
-		ladmin_log("Request to login-server to obtain the # of online players." RETCODE);
-	}
-
-	WFIFOW(login_fd,0) = 0x7938;
-	WFIFOSET(login_fd,2);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//----------------------------------------------------------
-// Sub-function: Asking to modify the GM level of an account
-//----------------------------------------------------------
-int changegmlevel(char* param) {
-	char name[1023];
-	int GM_level;
-
-	memset(name, '\0', sizeof(name));
-	GM_level = 0;
-
-	if (sscanf(param, "\"%[^\"]\" %d", name, &GM_level) < 1 &&
-	    sscanf(param, "'%[^']' %d", name, &GM_level) < 1 &&
-	    sscanf(param, "%s %d", name, &GM_level) < 1) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte et un niveau de GM svp.\n");
-			printf("<exemple> gm nomtest 80\n");
-			ladmin_log("Nombre incorrect de param�tres pour changer le Niveau de GM d'un compte (commande 'gm')." RETCODE);
-		} else {
-			printf("Please input an account name and a GM level.\n");
-			printf("<example> gm testname 80\n");
-			ladmin_log("Incomplete parameters to change the GM level of an account ('gm' command)." RETCODE);
-		}
-		return 136;
-	}
-
-	if (verify_accountname(name) == 0) {
-		return 102;
-	}
-
-	if (GM_level < 0 || GM_level > 99) {
-		if (defaultlanguage == 'F') {
-			printf("Niveau de GM incorrect [%d]. Entrez une valeur de 0 � 99 svp.\n", GM_level);
-			ladmin_log("Niveau de GM incorrect [%d]. La valeur peut �tre de 0 � 99." RETCODE, GM_level);
-		} else {
-			printf("Illegal GM level [%d]. Please input a value from 0 to 99.\n", GM_level);
-			ladmin_log("Illegal GM level [%d]. The value can be from 0 to 99." RETCODE, GM_level);
-		}
-		return 103;
-	}
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour changer un niveau de GM." RETCODE);
-	} else {
-		ladmin_log("Request to login-server to change a GM level." RETCODE);
-	}
-
-	WFIFOW(login_fd,0) = 0x793e;
-	memcpy(WFIFOP(login_fd,2), name, 24);
-	WFIFOB(login_fd,26) = GM_level;
-	WFIFOSET(login_fd,27);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//---------------------------------------------
-// Sub-function: Asking to obtain an account id
-//---------------------------------------------
-int idaccount(char* param) {
-	char name[1023];
-
-	memset(name, '\0', sizeof(name));
-
-	if (strlen(param) == 0 ||
-	    (sscanf(param, "\"%[^\"]\"", name) < 1 &&
-	     sscanf(param, "'%[^']'", name) < 1 &&
-	     sscanf(param, "%[^\r\n]", name) < 1) ||
-	     strlen(name) == 0) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte svp.\n");
-			printf("<exemple> id nomtest\n");
-			ladmin_log("Aucun nom donn� pour rechecher l'id d'un compte (commande 'id')." RETCODE);
-		} else {
-			printf("Please input an account name.\n");
-			printf("<example> id testname\n");
-			ladmin_log("No name given to search an account id ('id' command)." RETCODE);
-		}
-		return 136;
-	}
-
-	if (verify_accountname(name) == 0) {
-		return 102;
-	}
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour conna�tre l'id d'un compte." RETCODE);
-	} else {
-		ladmin_log("Request to login-server to know an account id." RETCODE);
-	}
-
-	WFIFOW(login_fd,0) = 0x7944;
-	memcpy(WFIFOP(login_fd,2), name, 24);
-	WFIFOSET(login_fd,26);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//----------------------------------------------------------------------------
-// Sub-function: Asking to displaying information about an account (by its id)
-//----------------------------------------------------------------------------
-int infoaccount(int account_id) {
-	if (account_id < 0) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un id ayant une valeur positive svp.\n");
-			ladmin_log("Une valeur n�gative a �t� donn� pour trouver le compte." RETCODE);
-		} else {
-			printf("Please input a positive value for the id.\n");
-			ladmin_log("Negative value was given to found the account." RETCODE);
-		}
-		return 136;
-	}
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour obtenir le information d'un compte (par l'id)." RETCODE);
-	} else {
-		ladmin_log("Request to login-server to obtain information about an account (by its id)." RETCODE);
-	}
-
-	WFIFOW(login_fd,0) = 0x7954;
-	WFIFOL(login_fd,2) = account_id;
-	WFIFOSET(login_fd,6);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//---------------------------------------
-// Sub-function: Send a broadcast message
-//---------------------------------------
-int sendbroadcast(short type, char* message) {
-	if (strlen(message) == 0) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un message svp.\n");
-			if (type == 0) {
-				printf("<exemple> kami un message\n");
-			} else {
-				printf("<exemple> kamib un message\n");
-			}
-			ladmin_log("Le message est vide (commande 'kami(b)')." RETCODE);
-		} else {
-			printf("Please input a message.\n");
-			if (type == 0) {
-				printf("<example> kami a message\n");
-			} else {
-				printf("<example> kamib a message\n");
-			}
-			ladmin_log("The message is void ('kami(b)' command)." RETCODE);
-		}
-		return 136;
-	}
-
-	WFIFOW(login_fd,0) = 0x794e;
-	WFIFOW(login_fd,2) = type;
-	WFIFOL(login_fd,4) = strlen(message)+1;
-	memcpy(WFIFOP(login_fd,8), message, strlen(message)+1);
-	WFIFOSET(login_fd,8+strlen(message)+1);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//--------------------------------------------
-// Sub-function: Change language of displaying
-//--------------------------------------------
-int changelanguage(char* language) {
-	if (strlen(language) == 0) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez une langue svp.\n");
-			printf("<exemple> language english\n");
-			printf("          language fran�ais\n");
-			ladmin_log("La langue est vide (commande 'language')." RETCODE);
-		} else {
-			printf("Please input a language.\n");
-			printf("<example> language english\n");
-			printf("          language fran�ais\n");
-			ladmin_log("The language is void ('language' command)." RETCODE);
-		}
-		return 136;
-	}
-
-	language[0] = toupper(language[0]);
-	if (language[0] == 'F' || language[0] == 'E') {
-		defaultlanguage = language[0];
-		if (defaultlanguage == 'F') {
-			printf("Changement de la langue d'affichage en Fran�ais.\n");
-			ladmin_log("Changement de la langue d'affichage en Fran�ais." RETCODE);
-		} else {
-			printf("Displaying language changed to English.\n");
-			ladmin_log("Displaying language changed to English." RETCODE);
-		}
-	} else {
-		if (defaultlanguage == 'F') {
-			printf("Langue non param�tr�e (langues possibles: 'Fran�ais' ou 'English').\n");
-			ladmin_log("Langue non param�tr�e (Fran�ais ou English n�cessaire)." RETCODE);
-		} else {
-			printf("Undefined language (possible languages: Fran�ais or English).\n");
-			ladmin_log("Undefined language (must be Fran�ais or English)." RETCODE);
-		}
-	}
-
-	return 0;
-}
-
-//--------------------------------------------------------
-// Sub-function: Asking to Displaying of the accounts list
-//--------------------------------------------------------
-int listaccount(char* param, int type) {
-//int list_first, list_last, list_type; // parameter to display a list of accounts
-	int i;
-
-	list_type = type;
-
-	// set default values
-	list_first = 0;
-	list_last = 0;
-
-	if (list_type == 1) { // if listgm
-		// get all accounts = use default
-	} else if (list_type == 2) { // if search
-		for (i = 0; param[i]; i++)
-			param[i] = tolower(param[i]);
-		// get all accounts = use default
-	} else if (list_type == 3) { // if listban
-		// get all accounts = use default
-	} else if (list_type == 4) { // if listok
-		// get all accounts = use default
-	} else { // if list (list_type == 0)
-		switch(sscanf(param, "%d %d", &list_first, &list_last)) {
-		case 0:
-			// get all accounts = use default
-			break;
-		case 1:
-			list_last = 0;
-			// use tests of the following value
-		default:
-			if (list_first < 0)
-				list_first = 0;
-			if (list_last < list_first || list_last < 0)
-				list_last = 0;
-			break;
-		}
-	}
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour obtenir la liste des comptes de %d � %d." RETCODE, list_first, list_last);
-	} else {
-		ladmin_log("Request to login-server to obtain the list of accounts from %d to %d." RETCODE, list_first, list_last);
-	}
-
-	WFIFOW(login_fd,0) = 0x7920;
-	WFIFOL(login_fd,2) = list_first;
-	WFIFOL(login_fd,6) = list_last;
-	WFIFOSET(login_fd,10);
-	bytes_to_read = 1;
-
-	//          0123456789 01 01234567890123456789012301234 012345 0123456789012345678901234567
-	if (defaultlanguage == 'F') {
-		printf(" id_compte GM nom_utilisateur         sexe   count statut\n");
-	} else {
-		printf("account_id GM user_name               sex    count state\n");
-	}
-	printf("-------------------------------------------------------------------------------\n");
-	list_count = 0;
-
-	return 0;
-}
-
-//--------------------------------------------
-// Sub-function: Asking to modify a memo field
-//--------------------------------------------
-int changememo(char* param) {
-	char name[1023], memo[1023];
-
-	memset(name, '\0', sizeof(name));
-	memset(memo, '\0', sizeof(memo));
-
-	if (sscanf(param, "\"%[^\"]\" %[^\r\n]", name, memo) < 1 && // memo can be void
-	    sscanf(param, "'%[^']' %[^\r\n]", name, memo) < 1 && // memo can be void
-	    sscanf(param, "%s %[^\r\n]", name, memo) < 1) { // memo can be void
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte et un m�mo svp.\n");
-			printf("<exemple> memo nomtest nouveau memo\n");
-			ladmin_log("Nombre incorrect de param�tres pour changer le m�mo d'un compte (commande 'email')." RETCODE);
-		} else {
-			printf("Please input an account name and a memo.\n");
-			printf("<example> memo testname new memo\n");
-			ladmin_log("Incomplete parameters to change the memo of an account ('email' command)." RETCODE);
-		}
-		return 136;
-	}
-
-	if (verify_accountname(name) == 0) {
-		return 102;
-	}
-
-	if (strlen(memo) > 254) {
-		if (defaultlanguage == 'F') {
-			printf("M�mo trop long (%d caract�res).\n", strlen(memo));
-			printf("Entrez un m�mo de 254 caract�res maximum svp.\n");
-			ladmin_log("M�mo trop long (%d caract�res). Entrez un m�mo de 254 caract�res maximum svp." RETCODE, strlen(memo));
-		} else {
-			printf("Memo is too long (%d characters).\n", strlen(memo));
-			printf("Please input a memo of 254 bytes at the maximum.\n");
-			ladmin_log("Email is too long (%d characters). Please input a memo of 254 bytes at the maximum." RETCODE, strlen(memo));
-		}
-		return 102;
-	}
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour changer un m�mo." RETCODE);
-	} else {
-		ladmin_log("Request to login-server to change a memo." RETCODE);
-	}
-
-	WFIFOW(login_fd,0) = 0x7942;
-	memcpy(WFIFOP(login_fd,2), name, 24);
-	WFIFOW(login_fd,26) = strlen(memo);
-	if (strlen(memo) > 0)
-		memcpy(WFIFOP(login_fd,28), memo, strlen(memo));
-	WFIFOSET(login_fd,28+strlen(memo));
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//-----------------------------------------------
-// Sub-function: Asking to obtain an account name
-//-----------------------------------------------
-int nameaccount(int id) {
-	if (id < 0) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un id ayant une valeur positive svp.\n");
-			ladmin_log("Id n�gatif donn� pour rechecher le nom d'un compte (commande 'name')." RETCODE);
-		} else {
-			printf("Please input a positive value for the id.\n");
-			ladmin_log("Negativ id given to search an account name ('name' command)." RETCODE);
-		}
-		return 136;
-	}
-
-	if (defaultlanguage == 'F')
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour conna�tre le nom d'un compte." RETCODE);
-	else
-		ladmin_log("Request to login-server to know an account name." RETCODE);
-
-	WFIFOW(login_fd,0) = 0x7946;
-	WFIFOL(login_fd,2) = id;
-	WFIFOSET(login_fd,6);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//------------------------------------------
-// Sub-function: Asking to modify a password
-// (Note: never send back a password with login-server!! security of passwords)
-//------------------------------------------
-int changepasswd(char* param) {
-	char name[1023], password[1023];
-
-	memset(name, '\0', sizeof(name));
-	memset(password, '\0', sizeof(password));
-
-	if (sscanf(param, "\"%[^\"]\" %[^\r\n]", name, password) < 1 &&
-	    sscanf(param, "'%[^']' %[^\r\n]", name, password) < 1 &&
-	    sscanf(param, "%s %[^\r\n]", name, password) < 1) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte svp.\n");
-			printf("<exemple> passwd nomtest nouveaumotdepasse\n");
-			ladmin_log("Nombre incorrect de param�tres pour changer le mot d'un passe d'un compte (commande 'password')." RETCODE);
-		} else {
-			printf("Please input an account name.\n");
-			printf("<example> passwd testname newpassword\n");
-			ladmin_log("Incomplete parameters to change the password of an account ('password' command)." RETCODE);
-		}
-		return 136;
-	}
-
-	if (verify_accountname(name) == 0) {
-		return 102;
-	}
-
-	if (strlen(password) == 0) {
-		if (typepasswd(password) == 0)
-			return 134;
-	}
-	if (verify_password(password) == 0)
-		return 131;
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour changer un mot de passe." RETCODE);
-	} else {
-		ladmin_log("Request to login-server to change a password." RETCODE);
-	}
-
-	WFIFOW(login_fd,0) = 0x7934;
-	memcpy(WFIFOP(login_fd,2), name, 24);
-	memcpy(WFIFOP(login_fd,26), password, 24);
-	WFIFOSET(login_fd,50);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//----------------------------------------------------------------------
-// Sub-function: Request to login-server to reload GM configuration file
-// this function have no answer
-//----------------------------------------------------------------------
-int reloadGM() {
-	WFIFOW(login_fd,0) = 0x7955;
-	WFIFOSET(login_fd,2);
-	bytes_to_read = 0;
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Demande de recharger le fichier de configuration des GM envoy�e." RETCODE);
-		printf("Demande de recharger le fichier de configuration des GM envoy�e.\n");
-		printf("V�rifiez les comptes GM actuels (apr�s rechargement):\n");
-	} else {
-		ladmin_log("Request to reload the GM configuration file sended." RETCODE);
-		printf("Request to reload the GM configuration file sended.\n");
-		printf("Check the actual GM accounts (after reloading):\n");
-	}
-	listaccount(parameters, 1); // 1: to list only GM
-
-	return 180;
-}
-
-//-----------------------------------------------------
-// Sub-function: Asking to modify the sex of an account
-//-----------------------------------------------------
-int changesex(char* param) {
-	char name[1023], sex[1023];
-
-	memset(name, '\0', sizeof(name));
-	memset(sex, '\0', sizeof(sex));
-
-	if (sscanf(param, "\"%[^\"]\" %[^\r\n]", name, sex) < 2 &&
-	    sscanf(param, "'%[^']' %[^\r\n]", name, sex) < 2 &&
-	    sscanf(param, "%s %[^\r\n]", name, sex) < 2) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte et un sexe svp.\n");
-			printf("<exemple> sex nomtest Male\n");
-			ladmin_log("Nombre incorrect de param�tres pour changer le sexe d'un compte (commande 'sex')." RETCODE);
-		} else {
-			printf("Please input an account name and a sex.\n");
-			printf("<example> sex testname Male\n");
-			ladmin_log("Incomplete parameters to change the sex of an account ('sex' command)." RETCODE);
-		}
-		return 136;
-	}
-
-	if (verify_accountname(name) == 0) {
-		return 102;
-	}
-
-	sex[0] = toupper(sex[0]);
-	if (strchr("MF", sex[0]) == NULL) {
-		if (defaultlanguage == 'F') {
-			printf("Sexe incorrect [%s]. Entrez M ou F svp.\n", sex);
-			ladmin_log("Sexe incorrect [%s]. Entrez M ou F svp." RETCODE, sex);
-		} else {
-			printf("Illegal gender [%s]. Please input M or F.\n", sex);
-			ladmin_log("Illegal gender [%s]. Please input M or F." RETCODE, sex);
-		}
-		return 103;
-	}
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour changer un sexe." RETCODE);
-	} else {
-		ladmin_log("Request to login-server to change a sex." RETCODE);
-	}
-
-	WFIFOW(login_fd,0) = 0x793c;
-	memcpy(WFIFOP(login_fd,2), name, 24);
-	WFIFOB(login_fd,26) = sex[0];
-	WFIFOSET(login_fd,27);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//-------------------------------------------------------------------------
-// Sub-function of sub-function changestate, blockaccount or unblockaccount
-// Asking to modify the state of an account
-//-------------------------------------------------------------------------
-int changestatesub(char* name, int state, char* error_message7) {
-	char error_message[1023]; // need to use, because we can modify error_message7
-
-	memset(error_message, '\0', sizeof(error_message));
-	strncpy(error_message, error_message7, sizeof(error_message)-1);
-
-	if ((state < 0 || state > 9) && state != 100) { // Valid values: 0: ok, or value of the 0x006a packet + 1
-		if (defaultlanguage == 'F') {
-			printf("Entrez une des statuts suivantes svp:\n");
-			printf("  0 = Compte ok             6 = Your Game's EXE file is not the latest version\n");
-		} else {
-			printf("Please input one of these states:\n");
-			printf("  0 = Account ok            6 = Your Game's EXE file is not the latest version\n");
-		}
-		printf("  1 = Unregistered ID       7 = You are Prohibited to log in until + message\n");
-		printf("  2 = Incorrect Password    8 = Server is jammed due to over populated\n");
-		printf("  3 = This ID is expired    9 = No MSG\n");
-		printf("  4 = Rejected from Server  100 = This ID has been totally erased\n");
-		printf("  5 = You have been blocked by the GM Team\n");
-		if (defaultlanguage == 'F') {
-			printf("<exemples> state nomtest 5\n");
-			printf("           state nomtest 7 fin de votre ban\n");
-			printf("           block <nom compte>\n");
-			printf("           unblock <nom compte>\n");
-			ladmin_log("Valeur incorrecte pour le statut d'un compte (commande 'state', 'block' ou 'unblock')." RETCODE);
-		} else {
-			printf("<examples> state testname 5\n");
-			printf("           state testname 7 end of your ban\n");
-			printf("           block <account name>\n");
-			printf("           unblock <account name>\n");
-			ladmin_log("Invalid value for the state of an account ('state', 'block' or 'unblock' command)." RETCODE);
-		}
-		return 151;
-	}
-
-	if (verify_accountname(name) == 0) {
-		return 102;
-	}
-
-	if (state != 7) {
-		strcpy(error_message, "-");
-	} else {
-		if (strlen(error_message) < 1) {
-			if (defaultlanguage == 'F') {
-				printf("Message d'erreur trop court. Entrez un message de 1-19 caract�res.\n");
-				ladmin_log("Message d'erreur trop court. Entrez un message de 1-19 caract�res." RETCODE);
-			} else {
-				printf("Error message is too short. Please input a message of 1-19 bytes.\n");
-				ladmin_log("Error message is too short. Please input a message of 1-19 bytes." RETCODE);
-			}
-			return 102;
-		}
-		if (strlen(error_message) > 19) {
-			if (defaultlanguage == 'F') {
-				printf("Message d'erreur trop long. Entrez un message de 1-19 caract�res.\n");
-				ladmin_log("Message d'erreur trop long. Entrez un message de 1-19 caract�res." RETCODE);
-			} else {
-				printf("Error message is too long. Please input a message of 1-19 bytes.\n");
-				ladmin_log("Error message is too long. Please input a message of 1-19 bytes." RETCODE);
-			}
-			return 102;
-		}
-	}
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour changer un statut." RETCODE);
-	} else {
-		ladmin_log("Request to login-server to change a state." RETCODE);
-	}
-
-	WFIFOW(login_fd,0) = 0x7936;
-	memcpy(WFIFOP(login_fd,2), name, 24);
-	WFIFOL(login_fd,26) = state;
-	memcpy(WFIFOP(login_fd,30), error_message, 20);
-	WFIFOSET(login_fd,50);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//-------------------------------------------------------
-// Sub-function: Asking to modify the state of an account
-//-------------------------------------------------------
-int changestate(char* param) {
-	char name[1023], error_message[1023];
-	int state;
-
-	memset(name, '\0', sizeof(name));
-	memset(error_message, '\0', sizeof(error_message));
-
-	if (sscanf(param, "\"%[^\"]\" %d %[^\r\n]", name, &state, error_message) < 2 &&
-	    sscanf(param, "'%[^']' %d %[^\r\n]", name, &state, error_message) < 2 &&
-	    sscanf(param, "%s %d %[^\r\n]", name, &state, error_message) < 2) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte et un statut svp.\n");
-			printf("<exemples> state nomtest 5\n");
-			printf("           state nomtest 7 fin de votre ban\n");
-			printf("           block <nom compte>\n");
-			printf("           unblock <nom compte>\n");
-			ladmin_log("Nombre incorrect de param�tres pour changer le statut d'un compte (commande 'state')." RETCODE);
-		} else {
-			printf("Please input an account name and a state.\n");
-			printf("<examples> state testname 5\n");
-			printf("           state testname 7 end of your ban\n");
-			printf("           block <account name>\n");
-			printf("           unblock <account name>\n");
-			ladmin_log("Incomplete parameters to change the state of an account ('state' command)." RETCODE);
-		}
-		return 136;
-	}
-
-	return changestatesub(name, state, error_message);
-}
-
-//-------------------------------------------
-// Sub-function: Asking to unblock an account
-//-------------------------------------------
-int unblockaccount(char* param) {
-	char name[1023];
-
-	memset(name, '\0', sizeof(name));
-
-	if (strlen(param) == 0 ||
-	    (sscanf(param, "\"%[^\"]\"", name) < 1 &&
-	     sscanf(param, "'%[^']'", name) < 1 &&
-	     sscanf(param, "%[^\r\n]", name) < 1) ||
-	     strlen(name) == 0) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte svp.\n");
-			printf("<exemples> state nomtest 5\n");
-			printf("           state nomtest 7 fin de votre ban\n");
-			printf("           block <nom compte>\n");
-			printf("           unblock <nom compte>\n");
-			ladmin_log("Nombre incorrect de param�tres pour changer le statut d'un compte (commande 'unblock')." RETCODE);
-		} else {
-			printf("Please input an account name.\n");
-			printf("<examples> state testname 5\n");
-			printf("           state testname 7 end of your ban\n");
-			printf("           block <account name>\n");
-			printf("           unblock <account name>\n");
-			ladmin_log("Incomplete parameters to change the state of an account ('unblock' command)." RETCODE);
-		}
-		return 136;
-	}
-
-	return changestatesub(name, 0, "-"); // state 0, no error message
-}
-
-//-------------------------------------------
-// Sub-function: Asking to unblock an account
-//-------------------------------------------
-int blockaccount(char* param) {
-	char name[1023];
-
-	memset(name, '\0', sizeof(name));
-
-	if (strlen(param) == 0 ||
-	    (sscanf(param, "\"%[^\"]\"", name) < 1 &&
-	     sscanf(param, "'%[^']'", name) < 1 &&
-	     sscanf(param, "%[^\r\n]", name) < 1) ||
-	     strlen(name) == 0) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte svp.\n");
-			printf("<exemples> state nomtest 5\n");
-			printf("           state nomtest 7 fin de votre ban\n");
-			printf("           block <nom compte>\n");
-			printf("           unblock <nom compte>\n");
-			ladmin_log("Nombre incorrect de param�tres pour changer le statut d'un compte (commande 'block')." RETCODE);
-		} else {
-			printf("Please input an account name.\n");
-			printf("<examples> state testname 5\n");
-			printf("           state testname 7 end of your ban\n");
-			printf("           block <account name>\n");
-			printf("           unblock <account name>\n");
-			ladmin_log("Incomplete parameters to change the state of an account ('block' command)." RETCODE);
-		}
-		return 136;
-	}
-
-	return changestatesub(name, 5, "-"); // state 5, no error message
-}
-
-//---------------------------------------------------------------------
-// Sub-function: Add/substract time to the validity limit of an account
-//---------------------------------------------------------------------
-int timeaddaccount(char* param) {
-	char name[1023], modif[1023];
-	int year, month, day, hour, minute, second;
-	char * p_modif;
-	int value, i;
-
-	memset(name, '\0', sizeof(name));
-	memset(modif, '\0', sizeof(modif));
-	year = month = day = hour = minute = second = 0;
-
-	if (sscanf(param, "\"%[^\"]\" %[^\r\n]", name, modif) < 2 &&
-	    sscanf(param, "'%[^']' %[^\r\n]", name, modif) < 2 &&
-	    sscanf(param, "%s %[^\r\n]", name, modif) < 2) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte et un modificateur svp.\n");
-			printf("  <exemple> timeadd nomtest +1m-2mn1s-6y\n");
-			printf("            Cette exemple ajoute 1 mois et 1 seconde, et soustrait 2 minutes\n");
-			printf("            et 6 ans dans le m�me temps.\n");
-			ladmin_log("Nombre incorrect de param�tres pour modifier une date limite d'utilisation (commande 'timeadd')." RETCODE);
-		} else {
-			printf("Please input an account name and a modifier.\n");
-			printf("  <example>: timeadd testname +1m-2mn1s-6y\n");
-			printf("             this example adds 1 month and 1 second, and substracts 2 minutes\n");
-			printf("             and 6 years at the same time.\n");
-			ladmin_log("Incomplete parameters to modify a limit time ('timeadd' command)." RETCODE);
-		}
-		return 136;
-	}
-	if (verify_accountname(name) == 0) {
-		return 102;
-	}
-
-	// lowercase for modif
-	for (i = 0; modif[i]; i++)
-		modif[i] = tolower(modif[i]);
-	p_modif = modif;
-	while (strlen(p_modif) > 0) {
-		value = atoi(p_modif);
-		if (value == 0) {
-			p_modif++;
-		} else {
-			if (p_modif[0] == '-' || p_modif[0] == '+')
-				p_modif++;
-			while (strlen(p_modif) > 0 && p_modif[0] >= '0' && p_modif[0] <= '9') {
-				p_modif++;
-			}
-			if (p_modif[0] == 's') {
-				second = value;
-				p_modif++;
-			} else if (p_modif[0] == 'm' && p_modif[1] == 'n') {
-				minute = value;
-				p_modif += 2;
-			} else if (p_modif[0] == 'h') {
-				hour = value;
-				p_modif++;
-			} else if (p_modif[0] == 'd' || p_modif[0] == 'j') {
-				day = value;
-				p_modif += 2;
-			} else if (p_modif[0] == 'm') {
-				month = value;
-				p_modif++;
-			} else if (p_modif[0] == 'y' || p_modif[0] == 'a') {
-				year = value;
-				p_modif++;
-			} else {
-				p_modif++;
-			}
-		}
-	}
-
-	if (defaultlanguage == 'F') {
-		printf(" ann�e:   %d\n", year);
-		printf(" mois:    %d\n", month);
-		printf(" jour:    %d\n", day);
-		printf(" heure:   %d\n", hour);
-		printf(" minute:  %d\n", minute);
-		printf(" seconde: %d\n", second);
-	} else {
-		printf(" year:   %d\n", year);
-		printf(" month:  %d\n", month);
-		printf(" day:    %d\n", day);
-		printf(" hour:   %d\n", hour);
-		printf(" minute: %d\n", minute);
-		printf(" second: %d\n", second);
-	}
-
-	if (year == 0 && month == 0 && day == 0 && hour == 0 && minute == 0 && second == 0) {
-		if (defaultlanguage == 'F') {
-			printf("Vous devez entrer un ajustement avec cette commande, svp:\n");
-			printf("  Valeur d'ajustement (-1, 1, +1, etc...)\n");
-			printf("  El�ment modifi�:\n");
-			printf("    a ou y: ann�e\n");
-			printf("    m:      mois\n");
-			printf("    j ou d: jour\n");
-			printf("    h:      heure\n");
-			printf("    mn:     minute\n");
-			printf("    s:      seconde\n");
-			printf("  <exemple> timeadd nomtest +1m-2mn1s-6y\n");
-			printf("            Cette exemple ajoute 1 mois et 1 seconde, et soustrait 2 minutes\n");
-			printf("            et 6 ans dans le m�me temps.\n");
-			ladmin_log("Aucun ajustement n'est pas un ajustement (commande 'timeadd')." RETCODE);
-		} else {
-			printf("Please give an adjustment with this command:\n");
-			printf("  Adjustment value (-1, 1, +1, etc...)\n");
-			printf("  Modified element:\n");
-			printf("    a or y: year\n");
-			printf("    m:      month\n");
-			printf("    j or d: day\n");
-			printf("    h:      hour\n");
-			printf("    mn:     minute\n");
-			printf("    s:      second\n");
-			printf("  <example> timeadd testname +1m-2mn1s-6y\n");
-			printf("            this example adds 1 month and 1 second, and substracts 2 minutes\n");
-			printf("            and 6 years at the same time.\n");
-			ladmin_log("No adjustment isn't an adjustment ('timeadd' command)." RETCODE);
-		}
-		return 137;
-	}
-	if (year > 127 || year < -127) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un ajustement d'ann�es correct (de -127 � 127), svp.\n");
-			ladmin_log("Ajustement de l'ann�e hors norme ('timeadd' command)." RETCODE);
-		} else {
-			printf("Please give a correct adjustment for the years (from -127 to 127).\n");
-			ladmin_log("Abnormal adjustement for the year ('timeadd' command)." RETCODE);
-		}
-		return 137;
-	}
-	if (month > 255 || month < -255) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un ajustement de mois correct (de -255 � 255), svp.\n");
-			ladmin_log("Ajustement du mois hors norme ('timeadd' command)." RETCODE);
-		} else {
-			printf("Please give a correct adjustment for the months (from -255 to 255).\n");
-			ladmin_log("Abnormal adjustement for the month ('timeadd' command)." RETCODE);
-		}
-		return 137;
-	}
-	if (day > 32767 || day < -32767) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un ajustement de jours correct (de -32767 � 32767), svp.\n");
-			ladmin_log("Ajustement des jours hors norme ('timeadd' command)." RETCODE);
-		} else {
-			printf("Please give a correct adjustment for the days (from -32767 to 32767).\n");
-			ladmin_log("Abnormal adjustement for the days ('timeadd' command)." RETCODE);
-		}
-		return 137;
-	}
-	if (hour > 32767 || hour < -32767) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un ajustement d'heures correct (de -32767 � 32767), svp.\n");
-			ladmin_log("Ajustement des heures hors norme ('timeadd' command)." RETCODE);
-		} else {
-			printf("Please give a correct adjustment for the hours (from -32767 to 32767).\n");
-			ladmin_log("Abnormal adjustement for the hours ('timeadd' command)." RETCODE);
-		}
-		return 137;
-	}
-	if (minute > 32767 || minute < -32767) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un ajustement de minutes correct (de -32767 � 32767), svp.\n");
-			ladmin_log("Ajustement des minutes hors norme ('timeadd' command)." RETCODE);
-		} else {
-			printf("Please give a correct adjustment for the minutes (from -32767 to 32767).\n");
-			ladmin_log("Abnormal adjustement for the minutes ('timeadd' command)." RETCODE);
-		}
-		return 137;
-	}
-	if (second > 32767 || second < -32767) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un ajustement de secondes correct (de -32767 � 32767), svp.\n");
-			ladmin_log("Ajustement des secondes hors norme ('timeadd' command)." RETCODE);
-		} else {
-			printf("Please give a correct adjustment for the seconds (from -32767 to 32767).\n");
-			ladmin_log("Abnormal adjustement for the seconds ('timeadd' command)." RETCODE);
-		}
-		return 137;
-	}
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour modifier une date limite d'utilisation." RETCODE);
-	} else {
-		ladmin_log("Request to login-server to modify a time limit." RETCODE);
-	}
-
-	WFIFOW(login_fd,0) = 0x7950;
-	memcpy(WFIFOP(login_fd,2), name, 24);
-	WFIFOW(login_fd,26) = (short)year;
-	WFIFOW(login_fd,28) = (short)month;
-	WFIFOW(login_fd,30) = (short)day;
-	WFIFOW(login_fd,32) = (short)hour;
-	WFIFOW(login_fd,34) = (short)minute;
-	WFIFOW(login_fd,36) = (short)second;
-	WFIFOSET(login_fd,38);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//-------------------------------------------------
-// Sub-function: Set a validity limit of an account
-//-------------------------------------------------
-int timesetaccount(char* param) {
-	char name[1023], date[1023], time[1023];
-	int year, month, day, hour, minute, second;
-	time_t connect_until_time; // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited)
-	struct tm *tmtime;
-
-	memset(name, '\0', sizeof(name));
-	memset(date, '\0', sizeof(date));
-	memset(time, '\0', sizeof(time));
-	year = month = day = hour = minute = second = 0;
-	connect_until_time = 0;
-	tmtime = localtime(&connect_until_time); // initialize
-
-	if (sscanf(param, "\"%[^\"]\" %s %[^\r\n]", name, date, time) < 2 && // if date = 0, time can be void
-	    sscanf(param, "'%[^']' %s %[^\r\n]", name, date, time) < 2 && // if date = 0, time can be void
-	    sscanf(param, "%s %s %[^\r\n]", name, date, time) < 2) { // if date = 0, time can be void
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte, une date et une heure svp.\n");
-			printf("<exemple>: timeset <nom_du_compte> aaaa/mm/jj [hh:mm:ss]\n");
-			printf("           timeset <nom_du_compte> 0    (0 = illimit�)\n");
-			printf("           Heure par d�faut [hh:mm:ss]: 23:59:59.\n");
-			ladmin_log("Nombre incorrect de param�tres pour fixer une date limite d'utilisation (commande 'timeset')." RETCODE);
-		} else {
-			printf("Please input an account name, a date and a hour.\n");
-			printf("<example>: timeset <account_name> yyyy/mm/dd [hh:mm:ss]\n");
-			printf("           timeset <account_name> 0   (0 = unlimited)\n");
-			printf("           Default time [hh:mm:ss]: 23:59:59.\n");
-			ladmin_log("Incomplete parameters to set a limit time ('timeset' command)." RETCODE);
-		}
-		return 136;
-	}
-	if (verify_accountname(name) == 0) {
-		return 102;
-	}
-
-	if (time[0] == '\0')
-		strcpy(time, "23:59:59");
-
-	if (atoi(date) != 0 &&
-	    ((sscanf(date, "%d/%d/%d", &year, &month, &day) < 3 &&
-	      sscanf(date, "%d-%d-%d", &year, &month, &day) < 3 &&
-	      sscanf(date, "%d.%d.%d", &year, &month, &day) < 3 &&
-	      sscanf(date, "%d'%d'%d", &year, &month, &day) < 3) ||
-	     sscanf(time, "%d:%d:%d", &hour, &minute, &second) < 3)) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez 0 ou une date et une heure svp (format: 0 ou aaaa/mm/jj hh:mm:ss).\n");
-			ladmin_log("Format incorrect pour la date/heure ('timeset' command)." RETCODE);
-		} else {
-			printf("Please input 0 or a date and a time (format: 0 or yyyy/mm/dd hh:mm:ss).\n");
-			ladmin_log("Invalid format for the date/time ('timeset' command)." RETCODE);
-		}
-		return 102;
-	}
-
-	if (atoi(date) == 0) {
-		connect_until_time = 0;
-	} else {
-		if (year < 70) {
-			year = year + 100;
-		}
-		if (year >= 1900) {
-			year = year - 1900;
-		}
-		if (month < 1 || month > 12) {
-			if (defaultlanguage == 'F') {
-				printf("Entrez un mois correct svp (entre 1 et 12).\n");
-				ladmin_log("Mois incorrect pour la date ('timeset' command)." RETCODE);
-			} else {
-				printf("Please give a correct value for the month (from 1 to 12).\n");
-				ladmin_log("Invalid month for the date ('timeset' command)." RETCODE);
-			}
-			return 102;
-		}
-		month = month - 1;
-		if (day < 1 || day > 31) {
-			if (defaultlanguage == 'F') {
-				printf("Entrez un jour correct svp (entre 1 et 31).\n");
-				ladmin_log("Jour incorrect pour la date ('timeset' command)." RETCODE);
-			} else {
-				printf("Please give a correct value for the day (from 1 to 31).\n");
-				ladmin_log("Invalid day for the date ('timeset' command)." RETCODE);
-			}
-			return 102;
-		}
-		if (((month == 3 || month == 5 || month == 8 || month == 10) && day > 30) ||
-		    (month == 1 && day > 29)) {
-			if (defaultlanguage == 'F') {
-				printf("Entrez un jour correct en fonction du mois (%d) svp.\n", month);
-				ladmin_log("Jour incorrect pour ce mois correspondant ('timeset' command)." RETCODE);
-			} else {
-				printf("Please give a correct value for a day of this month (%d).\n", month);
-				ladmin_log("Invalid day for this month ('timeset' command)." RETCODE);
-			}
-			return 102;
-		}
-		if (hour < 0 || hour > 23) {
-			if (defaultlanguage == 'F') {
-				printf("Entrez une heure correcte svp (entre 0 et 23).\n");
-				ladmin_log("Heure incorrecte pour l'heure ('timeset' command)." RETCODE);
-			} else {
-				printf("Please give a correct value for the hour (from 0 to 23).\n");
-				ladmin_log("Invalid hour for the time ('timeset' command)." RETCODE);
-			}
-			return 102;
-		}
-		if (minute < 0 || minute > 59) {
-			if (defaultlanguage == 'F') {
-				printf("Entrez des minutes correctes svp (entre 0 et 59).\n");
-				ladmin_log("Minute incorrecte pour l'heure ('timeset' command)." RETCODE);
-			} else {
-				printf("Please give a correct value for the minutes (from 0 to 59).\n");
-				ladmin_log("Invalid minute for the time ('timeset' command)." RETCODE);
-			}
-			return 102;
-		}
-		if (second < 0 || second > 59) {
-			if (defaultlanguage == 'F') {
-				printf("Entrez des secondes correctes svp (entre 0 et 59).\n");
-				ladmin_log("Seconde incorrecte pour l'heure ('timeset' command)." RETCODE);
-			} else {
-				printf("Please give a correct value for the seconds (from 0 to 59).\n");
-				ladmin_log("Invalid second for the time ('timeset' command)." RETCODE);
-			}
-			return 102;
-		}
-		tmtime->tm_year = year;
-		tmtime->tm_mon = month;
-		tmtime->tm_mday = day;
-		tmtime->tm_hour = hour;
-		tmtime->tm_min = minute;
-		tmtime->tm_sec = second;
-		tmtime->tm_isdst = -1; // -1: no winter/summer time modification
-		connect_until_time = mktime(tmtime);
-		if (connect_until_time == -1) {
-			if (defaultlanguage == 'F') {
-				printf("Date incorrecte.\n");
-				printf("Ajoutez 0 ou une date et une heure svp (format: 0 ou aaaa/mm/jj hh:mm:ss).\n");
-				ladmin_log("Date incorrecte. ('timeset' command)." RETCODE);
-			} else {
-				printf("Invalid date.\n");
-				printf("Please add 0 or a date and a time (format: 0 or yyyy/mm/dd hh:mm:ss).\n");
-				ladmin_log("Invalid date. ('timeset' command)." RETCODE);
-			}
-			return 102;
-		}
-	}
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour fixer une date limite d'utilisation." RETCODE);
-	} else {
-		ladmin_log("Request to login-server to set a time limit." RETCODE);
-	}
-
-	WFIFOW(login_fd,0) = 0x7948;
-	memcpy(WFIFOP(login_fd,2), name, 24);
-	WFIFOL(login_fd,26) = (int)connect_until_time;
-	WFIFOSET(login_fd,30);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//------------------------------------------------------------------------------
-// Sub-function: Asking to displaying information about an account (by its name)
-//------------------------------------------------------------------------------
-int whoaccount(char* param) {
-	char name[1023];
-
-	memset(name, '\0', sizeof(name));
-
-	if (strlen(param) == 0 ||
-	    (sscanf(param, "\"%[^\"]\"", name) < 1 &&
-	     sscanf(param, "'%[^']'", name) < 1 &&
-	     sscanf(param, "%[^\r\n]", name) < 1) ||
-	     strlen(name) == 0) {
-		if (defaultlanguage == 'F') {
-			printf("Entrez un nom de compte svp.\n");
-			printf("<exemple> who nomtest\n");
-			ladmin_log("Aucun nom n'a �t� donn� pour trouver le compte." RETCODE);
-		} else {
-			printf("Please input an account name.\n");
-			printf("<example> who testname\n");
-			ladmin_log("No name was given to found the account." RETCODE);
-		}
-		return 136;
-	}
-	if (verify_accountname(name) == 0) {
-		return 102;
-	}
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour obtenir le information d'un compte (par le nom)." RETCODE);
-	} else {
-		ladmin_log("Request to login-server to obtain information about an account (by its name)." RETCODE);
-	}
-
-	WFIFOW(login_fd,0) = 0x7952;
-	memcpy(WFIFOP(login_fd,2), name, 24);
-	WFIFOSET(login_fd,26);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//--------------------------------------------------------
-// Sub-function: Asking of the version of the login-server
-//--------------------------------------------------------
-int checkloginversion() {
-	if (defaultlanguage == 'F')
-		ladmin_log("Envoi d'un requ�te au serveur de logins pour obtenir sa version." RETCODE);
-	else
-		ladmin_log("Request to login-server to obtain its version." RETCODE);
-
-	WFIFOW(login_fd,0) = 0x7530;
-	WFIFOSET(login_fd,2);
-	bytes_to_read = 1;
-
-	return 0;
-}
-
-//---------------------------------------------
-// Prompt function
-// this function wait until user type a command
-// and analyse the command.
-//---------------------------------------------
-int prompt() {
-	int i, j;
-	char buf[1024];
-	char *p;
-
-	// while we don't wait new packets
-	while (bytes_to_read == 0) {
-		// for help with the console colors look here:
-		// http://www.edoceo.com/liberum/?doc=printf-with-color
-		// some code explanation (used here):
-		// \033[2J : clear screen and go up/left (0, 0 position)
-		// \033[K  : clear line from actual position to end of the line
-		// \033[0m : reset color parameter
-		// \033[1m : use bold for font
-		printf("\n");
-		if (defaultlanguage == 'F')
-			printf("\033[32mPour afficher les commandes, tapez 'Entr�e'.\033[0m\n");
-		else
-			printf("\033[32mTo list the commands, type 'enter'.\033[0m\n");
-		printf("\033[0;36mLadmin-> \033[0m");
-		printf("\033[1m");
-		fflush(stdout);
-
-		// get command and parameter
-		memset(buf, '\0', sizeof(buf));
-		fflush(stdin);
-		fgets(buf, 1023, stdin);
-		buf[1023] = '\0';
-
-		printf("\033[0m");
-		fflush(stdout);
-
-		// remove final \n
-		if((p = strrchr(buf, '\n')) != NULL)
-			p[0] = '\0';
-		// remove all control char
-		for (i = 0; buf[i]; i++)
-			if (buf[i] < 32) {
-				// remove cursor control.
-				if (buf[i] == 27 && buf[i+1] == '[' &&
-				    (buf[i+2] == 'H' || // home position (cursor)
-				     buf[i+2] == 'J' || // clear screen
-				     buf[i+2] == 'A' || // up 1 line
-				     buf[i+2] == 'B' || // down 1 line
-				     buf[i+2] == 'C' || // right 1 position
-				     buf[i+2] == 'D' || // left 1 position
-				     buf[i+2] == 'G')) { // center cursor (windows)
-					for (j = i; buf[j]; j++)
-						buf[j] = buf[j+3];
-				} else if (buf[i] == 27 && buf[i+1] == '[' && buf[i+2] == '2' && buf[i+3] == 'J') { // clear screen
-					for (j = i; buf[j]; j++)
-						buf[j] = buf[j+4];
-				} else if (buf[i] == 27 && buf[i+1] == '[' && buf[i+3] == '~' &&
-				           (buf[i+2] == '1' || // home (windows)
-				            buf[i+2] == '2' || // insert (windows)
-				            buf[i+2] == '3' || // del (windows)
-				            buf[i+2] == '4' || // end (windows)
-				            buf[i+2] == '5' || // pgup (windows)
-				            buf[i+2] == '6')) { // pgdown (windows)
-					for (j = i; buf[j]; j++)
-						buf[j] = buf[j+4];
-				} else {
-					// remove other control char.
-					for (j = i; buf[j]; j++)
-						buf[j] = buf[j+1];
-				}
-				i--;
-			}
-
-		// extract command name and parameters
-		memset(command, '\0', sizeof(command));
-		memset(parameters, '\0', sizeof(parameters));
-		sscanf(buf, "%1023s %[^\n]", command, parameters);
-		command[1023] = '\0';
-		parameters[1023] = '\0';
-
-		// lowercase for command line
-		for (i = 0; command[i]; i++)
-			command[i] = tolower(command[i]);
-
-		if (command[0] == '?' || strlen(command) == 0) {
-			if (defaultlanguage == 'F') {
-				strcpy(buf, "aide");
-				strcpy(command, "aide");
-			} else {
-				strcpy(buf, "help");
-				strcpy(command, "help");
-			}
-		}
-
-		// Analyse of the command
-		check_command(command); // give complete name to the command
-
-		if (strlen(parameters) == 0) {
-			if (defaultlanguage == 'F') {
-				ladmin_log("Commande: '%s' (sans param�tre)" RETCODE, command, parameters);
-			} else {
-				ladmin_log("Command: '%s' (without parameters)" RETCODE, command, parameters);
-			}
-		} else {
-			if (defaultlanguage == 'F') {
-				ladmin_log("Commande: '%s', param�tres: '%s'" RETCODE, command, parameters);
-			} else {
-				ladmin_log("Command: '%s', parameters: '%s'" RETCODE, command, parameters);
-			}
-		}
-
-		// Analyse of the command
-// help
-		if (strcmp(command, "aide") == 0) {
-			display_help(parameters, 1); // 1: french
-		} else if (strcmp(command, "help") == 0 ) {
-			display_help(parameters, 0); // 0: english
-// general commands
-		} else if (strcmp(command, "add") == 0) {
-			addaccount(parameters, 0); // 0: no email
-		} else if (strcmp(command, "ban") == 0) {
-			banaccount(parameters);
-		} else if (strcmp(command, "banadd") == 0) {
-			banaddaccount(parameters);
-		} else if (strcmp(command, "banset") == 0) {
-			bansetaccount(parameters);
-		} else if (strcmp(command, "block") == 0) {
-			blockaccount(parameters);
-		} else if (strcmp(command, "check") == 0) {
-			checkaccount(parameters);
-		} else if (strcmp(command, "create") == 0) {
-			addaccount(parameters, 1); // 1: with email
-		} else if (strcmp(command, "delete") == 0) {
-			delaccount(parameters);
-		} else if (strcmp(command, "email") == 0) {
-			changeemail(parameters);
-		} else if (strcmp(command, "getcount") == 0) {
-			getlogincount();
-		} else if (strcmp(command, "gm") == 0) {
-			changegmlevel(parameters);
-		} else if (strcmp(command, "id") == 0) {
-			idaccount(parameters);
-		} else if (strcmp(command, "info") == 0) {
-			infoaccount(atoi(parameters));
-		} else if (strcmp(command, "kami") == 0) {
-			sendbroadcast(0, parameters); // flag for normal
-		} else if (strcmp(command, "kamib") == 0) {
-			sendbroadcast(0x10, parameters); // flag for blue
-		} else if (strcmp(command, "language") == 0) {
-			changelanguage(parameters);
-		} else if (strcmp(command, "list") == 0) {
-			listaccount(parameters, 0); // 0: to list all
-		} else if (strcmp(command, "listban") == 0) {
-			listaccount(parameters, 3); // 3: to list only accounts with state or bannished
-		} else if (strcmp(command, "listgm") == 0) {
-			listaccount(parameters, 1); // 1: to list only GM
-		} else if (strcmp(command, "listok") == 0) {
-			listaccount(parameters, 4); // 4: to list only accounts without state and not bannished
-		} else if (strcmp(command, "memo") == 0) {
-			changememo(parameters);
-		} else if (strcmp(command, "name") == 0) {
-			nameaccount(atoi(parameters));
-		} else if (strcmp(command, "password") == 0) {
-			changepasswd(parameters);
-		} else if (strcmp(command, "reloadgm") == 0) {
-			reloadGM();
-		} else if (strcmp(command, "search") == 0) { // no regex in C version
-			listaccount(parameters, 2); // 2: to list with pattern
-		} else if (strcmp(command, "sex") == 0) {
-			changesex(parameters);
-		} else if (strcmp(command, "state") == 0) {
-			changestate(parameters);
-		} else if (strcmp(command, "timeadd") == 0) {
-			timeaddaccount(parameters);
-		} else if (strcmp(command, "timeset") == 0) {
-			timesetaccount(parameters);
-		} else if (strcmp(command, "unban") == 0) {
-			unbanaccount(parameters);
-		} else if (strcmp(command, "unblock") == 0) {
-			unblockaccount(parameters);
-		} else if (strcmp(command, "version") == 0) {
-			checkloginversion();
-		} else if (strcmp(command, "who") == 0) {
-			whoaccount(parameters);
-// quit
-		} else if (strcmp(command, "quit") == 0 ||
-		           strcmp(command, "exit") == 0 ||
-		           strcmp(command, "end") == 0) {
-			if (defaultlanguage == 'F') {
-				printf("Au revoir.\n");
-			} else {
-				printf("Bye.\n");
-			}
-			exit(0);
-// unknown command
-		} else {
-			if (defaultlanguage == 'F') {
-				printf("Commande inconnue [%s].\n", buf);
-				ladmin_log("Commande inconnue [%s]." RETCODE, buf);
-			} else {
-				printf("Unknown command [%s].\n", buf);
-				ladmin_log("Unknown command [%s]." RETCODE, buf);
-			}
-		}
-	}
-
-	return 0;
-}
-
-//-------------------------------------------------------------
-// Function: Parse receiving informations from the login-server
-//-------------------------------------------------------------
-int parse_fromlogin(int fd) {
-	struct char_session_data *sd;
-
-	if (session[fd]->eof) {
-		if (defaultlanguage == 'F') {
-			printf("Impossible de se connecter au serveur de login [%s:%d] !\n", loginserverip, loginserverport);
-			ladmin_log("Impossible de se connecter au serveur de login [%s:%d] !" RETCODE, loginserverip, loginserverport);
-		} else {
-			printf("Impossible to have a connection with the login-server [%s:%d] !\n", loginserverip, loginserverport);
-			ladmin_log("Impossible to have a connection with the login-server [%s:%d] !" RETCODE, loginserverip, loginserverport);
-		}
-		close(fd);
-		delete_session(fd);
-		exit (0);
-	}
-
-//	printf("parse_fromlogin : %d %d %d\n", fd, RFIFOREST(fd), RFIFOW(fd,0));
-	sd = session[fd]->session_data;
-
-	while(RFIFOREST(fd) >= 2) {
-		switch(RFIFOW(fd,0)) {
-		case 0x7919:	// answer of a connection request
-			if (RFIFOREST(fd) < 3)
-				return 0;
-			if (RFIFOB(fd,2) != 0) {
-				if (defaultlanguage == 'F') {
-					printf("Erreur de login:\n");
-					printf(" - mot de passe incorrect,\n");
-					printf(" - syst�me d'administration non activ�, ou\n");
-					printf(" - IP non autoris�e.\n");
-					ladmin_log("Erreur de login: mot de passe incorrect, syst�me d'administration non activ�, ou IP non autoris�e." RETCODE);
-				} else {
-					printf("Error at login:\n");
-					printf(" - incorrect password,\n");
-					printf(" - administration system not activated, or\n");
-					printf(" - unauthorised IP.\n");
-					ladmin_log("Error at login: incorrect password, administration system not activated, or unauthorised IP." RETCODE);
-				}
-				session[fd]->eof = 1;
-				//bytes_to_read = 1; // not stop at prompt
-			} else {
-				if (defaultlanguage == 'F') {
-					printf("Connexion �tablie.\n");
-					ladmin_log("Connexion �tablie." RETCODE);
-					printf("Lecture de la version du serveur de login...\n");
-					ladmin_log("Lecture de la version du serveur de login..." RETCODE);
-				} else {
-					printf("Established connection.\n");
-					ladmin_log("Established connection." RETCODE);
-					printf("Reading of the version of the login-server...\n");
-					ladmin_log("Reading of the version of the login-server..." RETCODE);
-				}
-				//bytes_to_read = 1; // unchanged
-				checkloginversion();
-			}
-			RFIFOSKIP(fd,3);
-			break;
-
-#ifdef PASSWORDENC
-		case 0x01dc:	// answer of a coding key request
-			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-		  {
-			char md5str[64] = "", md5bin[32], md5key[RFIFOW(fd,2) - 4 + 1];
-			memcpy(md5key, RFIFOP(fd,4), RFIFOW(fd,2) - 4);
-			md5key[sizeof(md5key)-1] = '0';
-			if (passenc == 1) {
-				strncpy(md5str, RFIFOP(fd,4), RFIFOW(fd,2) - 4);
-				strcat(md5str, loginserveradminpassword);
-			} else if (passenc == 2) {
-				strncpy(md5str, loginserveradminpassword, sizeof(loginserveradminpassword));
-				strcat(md5str, RFIFOP(fd,4));
-			}
-			MD5_String2binary(md5str, md5bin);
-			WFIFOW(login_fd,0) = 0x7918; // Request for administation login (encrypted password)
-			WFIFOW(login_fd,2) = passenc; // Encrypted type
-			memcpy(WFIFOP(login_fd,4), md5bin, 16);
-			WFIFOSET(login_fd,20);
-			if (defaultlanguage == 'F') {
-				printf("R�ception de la clef MD5.\n");
-				ladmin_log("R�ception de la clef MD5." RETCODE);
-				printf("Envoi du mot de passe crypt�...\n");
-				ladmin_log("Envoi du mot de passe crypt�..." RETCODE);
-			} else {
-				printf("Receiving of the MD5 key.\n");
-				ladmin_log("Receiving of the MD5 key." RETCODE);
-				printf("Sending of the encrypted password...\n");
-				ladmin_log("Sending of the encrypted password..." RETCODE);
-			}
-		  }
-			bytes_to_read = 1;
-			RFIFOSKIP(fd,RFIFOW(fd,2));
-			break;
-#endif
-
-		case 0x7531:	// Displaying of the version of the login-server
-			if (RFIFOREST(fd) < 10)
-				return 0;
-			printf("  Login-Server [%s:%d]\n", loginserverip, loginserverport);
-			if (((int)RFIFOB(login_fd,5)) == 0) {
-				printf("  eAthena version stable-%d.%d", (int)RFIFOB(login_fd,2), (int)RFIFOB(login_fd,3));
-			} else {
-				printf("  eAthena version dev-%d.%d", (int)RFIFOB(login_fd,2), (int)RFIFOB(login_fd,3));
-			}
-			if (((int)RFIFOB(login_fd,4)) == 0)
-				printf(" revision %d", (int)RFIFOB(login_fd,4));
-			if (((int)RFIFOB(login_fd,6)) == 0)
-				printf("%d.\n", RFIFOW(login_fd,8));
-			else
-				printf("-mod%d.\n", RFIFOW(login_fd,8));
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,10);
-			break;
-
-		case 0x7921:	// Displaying of the list of accounts
-			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-			if (RFIFOW(fd,2) < 5) {
-				if (defaultlanguage == 'F') {
-					ladmin_log("  R�ception d'une liste des comptes vide." RETCODE);
-					if (list_count == 0)
-						printf("Aucun compte trouv�.\n");
-					else if (list_count == 1)
-						printf("1 compte trouv�.\n");
-					else
-						printf("%d comptes trouv�s.\n", list_count);
-				} else {
-					ladmin_log("  Receiving of a void accounts list." RETCODE);
-					if (list_count == 0)
-						printf("No account found.\n");
-					else if (list_count == 1)
-						printf("1 account found.\n");
-					else
-						printf("%d accounts found.\n", list_count);
-				}
-				bytes_to_read = 0;
-			} else {
-				int i;
-				if (defaultlanguage == 'F')
-					ladmin_log("  R�ception d'une liste des comptes." RETCODE);
-				else
-					ladmin_log("  Receiving of a accounts list." RETCODE);
-				for(i = 4; i < RFIFOW(fd,2); i += 38) {
-					int j;
-					char userid[24];
-					char lower_userid[24];
-					memcpy(userid, RFIFOP(fd,i + 5), sizeof(userid));
-					userid[sizeof(userid)-1] = '\0';
-					memset(lower_userid, '\0', sizeof(lower_userid));
-					for (j = 0; userid[j]; j++)
-						lower_userid[j] = tolower(userid[j]);
-					list_first = RFIFOL(fd,i) + 1;
-					// here are checks...
-					if (list_type == 0 ||
-					    (list_type == 1 && RFIFOB(fd,i+4) > 0) ||
-					    (list_type == 2 && strstr(lower_userid, parameters) != NULL) ||
-					    (list_type == 3 && RFIFOL(fd,i+34) != 0) ||
-					    (list_type == 4 && RFIFOL(fd,i+34) == 0)) {
-						printf("%10d ", RFIFOL(fd,i));
-						if (RFIFOB(fd,i+4) == 0)
-							printf("   ");
-						else
-							printf("%2d ", (int)RFIFOB(fd,i+4));
-						printf("%-24s", userid);
-						if (defaultlanguage == 'F') {
-							if (RFIFOB(fd,i+29) == 0)
-								printf("%-5s ", "Femme");
-							else if (RFIFOB(fd,i+29) == 1)
-								printf("%-5s ", "Male");
-							else
-								printf("%-5s ", "Servr");
-						} else {
-							if (RFIFOB(fd,i+29) == 0)
-								printf("%-5s ", "Femal");
-							else if (RFIFOB(fd,i+29) == 1)
-								printf("%-5s ", "Male");
-							else
-								printf("%-5s ", "Servr");
-						}
-						printf("%6d ", RFIFOL(fd,i+30));
-						switch(RFIFOL(fd,i+34)) {
-						case 0:
-							if (defaultlanguage == 'F')
-								printf("%-27s\n", "Compte Ok");
-							else
-								printf("%-27s\n", "Account OK");
-							break;
-						case 1:
-							printf("%-27s\n", "Unregistered ID");
-							break;
-						case 2:
-							printf("%-27s\n", "Incorrect Password");
-							break;
-						case 3:
-							printf("%-27s\n", "This ID is expired");
-							break;
-						case 4:
-							printf("%-27s\n", "Rejected from Server");
-							break;
-						case 5:
-							printf("%-27s\n", "Blocked by the GM Team"); // You have been blocked by the GM Team
-							break;
-						case 6:
-							printf("%-27s\n", "Your EXE file is too old"); // Your Game's EXE file is not the latest version
-							break;
-						case 7:
-							printf("%-27s\n", "Banishement or");
-							printf("                                                   Prohibited to login until...\n"); // You are Prohibited to log in until %s
-							break;
-						case 8:
-							printf("%-27s\n", "Server is over populated");
-							break;
-						case 9:
-							printf("%-27s\n", "No MSG");
-							break;
-						default: // 100
-							printf("%-27s\n", "This ID is totally erased"); // This ID has been totally erased
-							break;
-						}
-						list_count++;
-					}
-				}
-				// asking of the following acounts
-				if (defaultlanguage == 'F')
-					ladmin_log("Envoi d'un requ�te au serveur de logins pour obtenir la liste des comptes de %d � %d (compl�ment)." RETCODE, list_first, list_last);
-				else
-					ladmin_log("Request to login-server to obtain the list of accounts from %d to %d (complement)." RETCODE, list_first, list_last);
-				WFIFOW(login_fd,0) = 0x7920;
-				WFIFOL(login_fd,2) = list_first;
-				WFIFOL(login_fd,6) = list_last;
-				WFIFOSET(login_fd,10);
-				bytes_to_read = 1;
-			}
-			RFIFOSKIP(fd,RFIFOW(fd,2));
-			break;
-
-		case 0x7931:	// Answer of login-server about an account creation
-			if (RFIFOREST(fd) < 30)
-				return 0;
-			if (RFIFOL(fd,2) == -1) {
-				if (defaultlanguage == 'F') {
-					printf("Echec � la cr�ation du compte [%s]. Un compte identique existe d�j�.\n", RFIFOP(fd,6));
-					ladmin_log("Echec � la cr�ation du compte [%s]. Un compte identique existe d�j�." RETCODE, RFIFOP(fd,6));
-				} else {
-					printf("Account [%s] creation failed. Same account already exists.\n", RFIFOP(fd,6));
-					ladmin_log("Account [%s] creation failed. Same account already exists." RETCODE, RFIFOP(fd,6));
-				}
-			} else {
-				if (defaultlanguage == 'F') {
-					printf("Compte [%s] cr�� avec succ�s [id: %d].\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("Compte [%s] cr�� avec succ�s [id: %d]." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				} else {
-					printf("Account [%s] is successfully created [id: %d].\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("Account [%s] is successfully created [id: %d]." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				}
-			}
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,30);
-			break;
-
-		case 0x7933:	// Answer of login-server about an account deletion
-			if (RFIFOREST(fd) < 30)
-				return 0;
-			if (RFIFOL(fd,2) == -1) {
-				if (defaultlanguage == 'F') {
-					printf("Echec de la suppression du compte [%s]. Le compte n'existe pas.\n", RFIFOP(fd,6));
-					ladmin_log("Echec de la suppression du compte [%s]. Le compte n'existe pas." RETCODE, RFIFOP(fd,6));
-				} else {
-					printf("Account [%s] deletion failed. Account doesn't exist.\n", RFIFOP(fd,6));
-					ladmin_log("Account [%s] deletion failed. Account doesn't exist." RETCODE, RFIFOP(fd,6));
-				}
-			} else {
-				if (defaultlanguage == 'F') {
-					printf("Compte [%s][id: %d] SUPPRIME avec succ�s.\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("Compte [%s][id: %d] SUPPRIME avec succ�s." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				} else {
-					printf("Account [%s][id: %d] is successfully DELETED.\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("Account [%s][id: %d] is successfully DELETED." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				}
-			}
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,30);
-			break;
-
-		case 0x7935:	// answer of the change of an account password
-			if (RFIFOREST(fd) < 30)
-				return 0;
-			if (RFIFOL(fd,2) == -1) {
-				if (defaultlanguage == 'F') {
-					printf("Echec de la modification du mot de passe du compte [%s].\n", RFIFOP(fd,6));
-					printf("Le compte [%s] n'existe pas.\n", RFIFOP(fd,6));
-					ladmin_log("Echec de la modification du mot de passe du compte. Le compte [%s] n'existe pas." RETCODE, RFIFOP(fd,6));
-				} else {
-					printf("Account [%s] password changing failed.\n", RFIFOP(fd,6));
-					printf("Account [%s] doesn't exist.\n", RFIFOP(fd,6));
-					ladmin_log("Account password changing failed. The compte [%s] doesn't exist." RETCODE, RFIFOP(fd,6));
-				}
-			} else {
-				if (defaultlanguage == 'F') {
-					printf("Modification du mot de passe du compte [%s][id: %d] r�ussie.\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("Modification du mot de passe du compte [%s][id: %d] r�ussie." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				} else {
-					printf("Account [%s][id: %d] password successfully changed.\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("Account [%s][id: %d] password successfully changed." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				}
-			}
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,30);
-			break;
-
-		case 0x7937:	// answer of the change of an account state
-			if (RFIFOREST(fd) < 34)
-				return 0;
-			if (RFIFOL(fd,2) == -1) {
-				if (defaultlanguage == 'F') {
-					printf("Echec du changement du statut du compte [%s]. Le compte n'existe pas.\n", RFIFOP(fd,6));
-					ladmin_log("Echec du changement du statut du compte [%s]. Le compte n'existe pas." RETCODE, RFIFOP(fd,6));
-				} else {
-					printf("Account [%s] state changing failed. Account doesn't exist.\n", RFIFOP(fd,6));
-					ladmin_log("Account [%s] state changing failed. Account doesn't exist." RETCODE, RFIFOP(fd,6));
-				}
-			} else {
-				char tmpstr[256];
-				if (defaultlanguage == 'F') {
-					sprintf(tmpstr, "Statut du compte [%s] chang� avec succ�s en [", RFIFOP(fd,6));
-				} else {
-					sprintf(tmpstr, "Account [%s] state successfully changed in [", RFIFOP(fd,6));
-				}
-				switch(RFIFOL(fd,30)) {
-				case 0:
-					if (defaultlanguage == 'F')
-						strcat(tmpstr, "0: Compte Ok");
-					else
-						strcat(tmpstr, "0: Account OK");
-					break;
-				case 1:
-					strcat(tmpstr, "1: Unregistered ID");
-					break;
-				case 2:
-					strcat(tmpstr, "2: Incorrect Password");
-					break;
-				case 3:
-					strcat(tmpstr, "3: This ID is expired");
-					break;
-				case 4:
-					strcat(tmpstr, "4: Rejected from Server");
-					break;
-				case 5:
-					strcat(tmpstr, "5: You have been blocked by the GM Team");
-					break;
-				case 6:
-					strcat(tmpstr, "6: [Your Game's EXE file is not the latest version");
-					break;
-				case 7:
-					strcat(tmpstr, "7: You are Prohibited to log in until...");
-					break;
-				case 8:
-					strcat(tmpstr, "8: Server is jammed due to over populated");
-					break;
-				case 9:
-					strcat(tmpstr, "9: No MSG");
-					break;
-				default: // 100
-					strcat(tmpstr, "100: This ID is totally erased");
-					break;
-				}
-				strcat(tmpstr, "]");
-				printf("%s\n", tmpstr);
-				ladmin_log("%s%s", tmpstr, RETCODE);
-			}
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,34);
-			break;
-
-		case 0x7939:	// answer of the number of online players
-			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-		  {
-			// Get length of the received packet
-			int i;
-			char name[20];
-			if (defaultlanguage == 'F') {
-				ladmin_log("  R�ception du nombre de joueurs en ligne." RETCODE);
-			} else {
-				ladmin_log("  Receiving of the number of online players." RETCODE);
-			}
-			// Read information of the servers
-			if (RFIFOW(fd,2) < 5) {
-				if (defaultlanguage == 'F') {
-					printf("  Aucun serveur n'est connect� au login serveur.\n");
-				} else {
-					printf("  No server is connected to the login-server.\n");
-				}
-			} else {
-				if (defaultlanguage == 'F') {
-					printf("  Nombre de joueurs en ligne (serveur: nb):\n");
-				} else {
-					printf("  Number of online players (server: number).\n");
-				}
-				// Displaying of result
-				for(i = 4; i < RFIFOW(fd,2); i += 32) {
-					memcpy(name, RFIFOP(fd,i+6), sizeof(name));
-					name[sizeof(name) - 1] = '\0';
-					printf("    %-20s : %5d\n", name, RFIFOW(fd,i+26));
-				}
-			}
-		  }
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,RFIFOW(fd,2));
-			break;
-
-		case 0x793b:	// answer of the check of a password
-			if (RFIFOREST(fd) < 30)
-				return 0;
-			if (RFIFOL(fd,2) == -1) {
-				if (defaultlanguage == 'F') {
-					printf("Le compte [%s] n'existe pas ou le mot de passe est incorrect.\n", RFIFOP(fd,6));
-					ladmin_log("Le compte [%s] n'existe pas ou le mot de passe est incorrect." RETCODE, RFIFOP(fd,6));
-				} else {
-					printf("The account [%s] doesn't exist or the password is incorrect.\n", RFIFOP(fd,6));
-					ladmin_log("The account [%s] doesn't exist or the password is incorrect." RETCODE, RFIFOP(fd,6));
-				}
-			} else {
-				if (defaultlanguage == 'F') {
-					printf("Le mot de passe donn� correspond bien au compte [%s][id: %d].\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("Le mot de passe donn� correspond bien au compte [%s][id: %d]." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				} else {
-					printf("The proposed password is correct for the account [%s][id: %d].\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("The proposed password is correct for the account [%s][id: %d]." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				}
-			}
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,30);
-			break;
-
-		case 0x793d:	// answer of the change of an account sex
-			if (RFIFOREST(fd) < 30)
-				return 0;
-			if (RFIFOL(fd,2) == -1) {
-				if (defaultlanguage == 'F') {
-					printf("Echec de la modification du sexe du compte [%s].\n", RFIFOP(fd,6));
-					printf("Le compte [%s] n'existe pas ou le sexe est d�j� celui demand�.\n", RFIFOP(fd,6));
-					ladmin_log("Echec de la modification du sexe du compte. Le compte [%s] n'existe pas ou le sexe est d�j� celui demand�." RETCODE, RFIFOP(fd,6));
-				} else {
-					printf("Account [%s] sex changing failed.\n", RFIFOP(fd,6));
-					printf("Account [%s] doesn't exist or the sex is already the good sex.\n", RFIFOP(fd,6));
-					ladmin_log("Account sex changing failed. The compte [%s] doesn't exist or the sex is already the good sex." RETCODE, RFIFOP(fd,6));
-				}
-			} else {
-				if (defaultlanguage == 'F') {
-					printf("Sexe du compte [%s][id: %d] chang� avec succ�s.\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("Sexe du compte [%s][id: %d] chang� avec succ�s." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				} else {
-					printf("Account [%s][id: %d] sex successfully changed.\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("Account [%s][id: %d] sex successfully changed." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				}
-			}
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,30);
-			break;
-
-		case 0x793f:	// answer of the change of an account GM level
-			if (RFIFOREST(fd) < 30)
-				return 0;
-			if (RFIFOL(fd,2) == -1) {
-				if (defaultlanguage == 'F') {
-					printf("Echec de la modification du niveau de GM du compte [%s].\n", RFIFOP(fd,6));
-					printf("Le compte [%s] n'existe pas, le niveau de GM est d�j� celui demand�\n", RFIFOP(fd,6));
-					printf("ou il est impossible de modifier le fichier des comptes GM.\n");
-					ladmin_log("Echec de la modification du niveau de GM du compte. Le compte [%s] n'existe pas, le niveau de GM est d�j� celui demand� ou il est impossible de modifier le fichier des comptes GM." RETCODE, RFIFOP(fd,6));
-				} else {
-					printf("Account [%s] GM level changing failed.\n", RFIFOP(fd,6));
-					printf("Account [%s] doesn't exist, the GM level is already the good GM level\n", RFIFOP(fd,6));
-					printf("or it's impossible to modify the GM accounts file.\n");
-					ladmin_log("Account GM level changing failed. The compte [%s] doesn't exist, the GM level is already the good sex or it's impossible to modify the GM accounts file." RETCODE, RFIFOP(fd,6));
-				}
-			} else {
-				if (defaultlanguage == 'F') {
-					printf("Niveau de GM du compte [%s][id: %d] chang� avec succ�s.\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("Niveau de GM du compte [%s][id: %d] chang� avec succ�s." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				} else {
-					printf("Account [%s][id: %d] GM level successfully changed.\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("Account [%s][id: %d] GM level successfully changed." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				}
-			}
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,30);
-			break;
-
-		case 0x7941:	// answer of the change of an account email
-			if (RFIFOREST(fd) < 30)
-				return 0;
-			if (RFIFOL(fd,2) == -1) {
-				if (defaultlanguage == 'F') {
-					printf("Echec de la modification de l'e-mail du compte [%s].\n", RFIFOP(fd,6));
-					printf("Le compte [%s] n'existe pas.\n", RFIFOP(fd,6));
-					ladmin_log("Echec de la modification de l'e-mail du compte. Le compte [%s] n'existe pas." RETCODE, RFIFOP(fd,6));
-				} else {
-					printf("Account [%s] e-mail changing failed.\n", RFIFOP(fd,6));
-					printf("Account [%s] doesn't exist.\n", RFIFOP(fd,6));
-					ladmin_log("Account e-mail changing failed. The compte [%s] doesn't exist." RETCODE, RFIFOP(fd,6));
-				}
-			} else {
-				if (defaultlanguage == 'F') {
-					printf("Modification de l'e-mail du compte [%s][id: %d] r�ussie.\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("Modification de l'e-mail du compte [%s][id: %d] r�ussie." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				} else {
-					printf("Account [%s][id: %d] e-mail successfully changed.\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("Account [%s][id: %d] e-mail successfully changed." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				}
-			}
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,30);
-			break;
-
-		case 0x7943:	// answer of the change of an account memo
-			if (RFIFOREST(fd) < 30)
-				return 0;
-			if (RFIFOL(fd,2) == -1) {
-				if (defaultlanguage == 'F') {
-					printf("Echec du changement du m�mo du compte [%s]. Le compte n'existe pas.\n", RFIFOP(fd,6));
-					ladmin_log("Echec du changement du m�mo du compte [%s]. Le compte n'existe pas." RETCODE, RFIFOP(fd,6));
-				} else {
-					printf("Account [%s] memo changing failed. Account doesn't exist.\n", RFIFOP(fd,6));
-					ladmin_log("Account [%s] memo changing failed. Account doesn't exist." RETCODE, RFIFOP(fd,6));
-				}
-			} else {
-				if (defaultlanguage == 'F') {
-					printf("M�mo du compte [%s][id: %d] chang� avec succ�s.\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("M�mo du compte [%s][id: %d] chang� avec succ�s." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				} else {
-					printf("Account [%s][id: %d] memo successfully changed.\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("Account [%s][id: %d] memo successfully changed." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				}
-			}
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,30);
-			break;
-
-		case 0x7945:	// answer of an account id search
-			if (RFIFOREST(fd) < 30)
-				return 0;
-			if (RFIFOL(fd,2) == -1) {
-				if (defaultlanguage == 'F') {
-					printf("Impossible de trouver l'id du compte [%s]. Le compte n'existe pas.\n", RFIFOP(fd,6));
-					ladmin_log("Impossible de trouver l'id du compte [%s]. Le compte n'existe pas." RETCODE, RFIFOP(fd,6));
-				} else {
-					printf("Unable to find the account [%s] id. Account doesn't exist.\n", RFIFOP(fd,6));
-					ladmin_log("Unable to find the account [%s] id. Account doesn't exist." RETCODE, RFIFOP(fd,6));
-				}
-			} else {
-				if (defaultlanguage == 'F') {
-					printf("Le compte [%s] a pour id: %d.\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("Le compte [%s] a pour id: %d." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				} else {
-					printf("The account [%s] have the id: %d.\n", RFIFOP(fd,6), RFIFOL(fd,2));
-					ladmin_log("The account [%s] have the id: %d." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-				}
-			}
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,30);
-			break;
-
-		case 0x7947:	// answer of an account name search
-			if (RFIFOREST(fd) < 30)
-				return 0;
-			if (strcmp(RFIFOP(fd,6), "") == 0) {
-				if (defaultlanguage == 'F') {
-					printf("Impossible de trouver le nom du compte [%d]. Le compte n'existe pas.\n", RFIFOL(fd,2));
-					ladmin_log("Impossible de trouver le nom du compte [%d]. Le compte n'existe pas." RETCODE, RFIFOL(fd,2));
-				} else {
-					printf("Unable to find the account [%d] name. Account doesn't exist.\n", RFIFOL(fd,2));
-					ladmin_log("Unable to find the account [%d] name. Account doesn't exist." RETCODE, RFIFOL(fd,2));
-				}
-			} else {
-				if (defaultlanguage == 'F') {
-					printf("Le compte [id: %d] a pour nom: %s.\n", RFIFOL(fd,2), RFIFOP(fd,6));
-					ladmin_log("Le compte [id: %d] a pour nom: %s." RETCODE, RFIFOL(fd,2), RFIFOP(fd,6));
-				} else {
-					printf("The account [id: %d] have the name: %s.\n", RFIFOL(fd,2), RFIFOP(fd,6));
-					ladmin_log("The account [id: %d] have the name: %s." RETCODE, RFIFOL(fd,2), RFIFOP(fd,6));
-				}
-			}
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,30);
-			break;
-
-		case 0x7949:	// answer of an account validity limit set
-			if (RFIFOREST(fd) < 34)
-				return 0;
-			if (RFIFOL(fd,2) == -1) {
-				if (defaultlanguage == 'F') {
-					printf("Echec du changement de la validit� du compte [%s]. Le compte n'existe pas.\n", RFIFOP(fd,6));
-					ladmin_log("Echec du changement de la validit� du compte [%s]. Le compte n'existe pas." RETCODE, RFIFOP(fd,6));
-				} else {
-					printf("Account [%s] validity limit changing failed. Account doesn't exist.\n", RFIFOP(fd,6));
-					ladmin_log("Account [%s] validity limit changing failed. Account doesn't exist." RETCODE, RFIFOP(fd,6));
-				}
-			} else {
-				time_t timestamp = RFIFOL(fd,30);
-				if (timestamp == 0) {
-					if (defaultlanguage == 'F') {
-						printf("Limite de validit� du compte [%s][id: %d] chang�e avec succ�s en [illimit�].\n", RFIFOP(fd,6), RFIFOL(fd,2));
-						ladmin_log("Limite de validit� du compte [%s][id: %d] chang�e avec succ�s en [illimit�]." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-					} else {
-						printf("Validity Limit of the account [%s][id: %d] successfully changed to [unlimited].\n", RFIFOP(fd,6), RFIFOL(fd,2));
-						ladmin_log("Validity Limit of the account [%s][id: %d] successfully changed to [unlimited]." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-					}
-				} else {
-					char tmpstr[128];
-					strftime(tmpstr, 24, date_format, localtime(&timestamp));
-					if (defaultlanguage == 'F') {
-						printf("Limite de validit� du compte [%s][id: %d] chang�e avec succ�s pour �tre jusqu'au %s.\n", RFIFOP(fd,6), RFIFOL(fd,2), tmpstr);
-						ladmin_log("Limite de validit� du compte [%s][id: %d] chang�e avec succ�s pour �tre jusqu'au %s." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2), tmpstr);
-					} else {
-						printf("Validity Limit of the account [%s][id: %d] successfully changed to be until %s.\n", RFIFOP(fd,6), RFIFOL(fd,2), tmpstr);
-						ladmin_log("Validity Limit of the account [%s][id: %d] successfully changed to be until %s." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2), tmpstr);
-					}
-				}
-			}
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,34);
-			break;
-
-		case 0x794b:	// answer of an account ban set
-			if (RFIFOREST(fd) < 34)
-				return 0;
-			if (RFIFOL(fd,2) == -1) {
-				if (defaultlanguage == 'F') {
-					printf("Echec du changement de la date finale de banissement du compte [%s]. Le compte n'existe pas.\n", RFIFOP(fd,6));
-					ladmin_log("Echec du changement de la date finale de banissement du compte [%s]. Le compte n'existe pas." RETCODE, RFIFOP(fd,6));
-				} else {
-					printf("Account [%s] final date of banishment changing failed. Account doesn't exist.\n", RFIFOP(fd,6));
-					ladmin_log("Account [%s] final date of banishment changing failed. Account doesn't exist." RETCODE, RFIFOP(fd,6));
-				}
-			} else {
-				time_t timestamp = RFIFOL(fd,30);
-				if (timestamp == 0) {
-					if (defaultlanguage == 'F') {
-						printf("Date finale de banissement du compte [%s][id: %d] chang�e avec succ�s en [d�-bannie].\n", RFIFOP(fd,6), RFIFOL(fd,2));
-						ladmin_log("Date finale de banissement du compte [%s][id: %d] chang�e avec succ�s en [d�-bannie]." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-					} else {
-						printf("Final date of banishment of the account [%s][id: %d] successfully changed to [unbanished].\n", RFIFOP(fd,6), RFIFOL(fd,2));
-						ladmin_log("Final date of banishment of the account [%s][id: %d] successfully changed to [unbanished]." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-					}
-				} else {
-					char tmpstr[128];
-					strftime(tmpstr, 24, date_format, localtime(&timestamp));
-					if (defaultlanguage == 'F') {
-						printf("Date finale de banissement du compte [%s][id: %d] chang�e avec succ�s pour �tre jusqu'au %s.\n", RFIFOP(fd,6), RFIFOL(fd,2), tmpstr);
-						ladmin_log("Date finale de banissement du compte [%s][id: %d] chang�e avec succ�s pour �tre jusqu'au %s." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2), tmpstr);
-					} else {
-						printf("Final date of banishment of the account [%s][id: %d] successfully changed to be until %s.\n", RFIFOP(fd,6), RFIFOL(fd,2), tmpstr);
-						ladmin_log("Final date of banishment of the account [%s][id: %d] successfully changed to be until %s." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2), tmpstr);
-					}
-				}
-			}
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,34);
-			break;
-
-		case 0x794d:	// answer of an account ban date/time changing
-			if (RFIFOREST(fd) < 34)
-				return 0;
-			if (RFIFOL(fd,2) == -1) {
-				if (defaultlanguage == 'F') {
-					printf("Echec du changement de la date finale de banissement du compte [%s]. Le compte n'existe pas.\n", RFIFOP(fd,6));
-					ladmin_log("Echec du changement de la date finale de banissement du compte [%s]. Le compte n'existe pas." RETCODE, RFIFOP(fd,6));
-				} else {
-					printf("Account [%s] final date of banishment changing failed. Account doesn't exist.\n", RFIFOP(fd,6));
-					ladmin_log("Account [%s] final date of banishment changing failed. Account doesn't exist." RETCODE, RFIFOP(fd,6));
-				}
-			} else {
-				time_t timestamp = RFIFOL(fd,30);
-				if (timestamp == 0) {
-					if (defaultlanguage == 'F') {
-						printf("Date finale de banissement du compte [%s][id: %d] chang�e avec succ�s en [d�-bannie].\n", RFIFOP(fd,6), RFIFOL(fd,2));
-						ladmin_log("Date finale de banissement du compte [%s][id: %d] chang�e avec succ�s en [d�-bannie]." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-					} else {
-						printf("Final date of banishment of the account [%s][id: %d] successfully changed to [unbanished].\n", RFIFOP(fd,6), RFIFOL(fd,2));
-						ladmin_log("Final date of banishment of the account [%s][id: %d] successfully changed to [unbanished]." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-					}
-				} else {
-					char tmpstr[128];
-					strftime(tmpstr, 24, date_format, localtime(&timestamp));
-					if (defaultlanguage == 'F') {
-						printf("Date finale de banissement du compte [%s][id: %d] chang�e avec succ�s pour �tre jusqu'au %s.\n", RFIFOP(fd,6), RFIFOL(fd,2), tmpstr);
-						ladmin_log("Date finale de banissement du compte [%s][id: %d] chang�e avec succ�s pour �tre jusqu'au %s." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2), tmpstr);
-					} else {
-						printf("Final date of banishment of the account [%s][id: %d] successfully changed to be until %s.\n", RFIFOP(fd,6), RFIFOL(fd,2), tmpstr);
-						ladmin_log("Final date of banishment of the account [%s][id: %d] successfully changed to be until %s." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2), tmpstr);
-					}
-				}
-			}
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,34);
-			break;
-
-		case 0x794f:	// answer of a broadcast
-			if (RFIFOREST(fd) < 4)
-				return 0;
-			if (RFIFOW(fd,2) == (unsigned short)-1) {
-				if (defaultlanguage == 'F') {
-					printf("Echec de l'envoi du message. Aucun server de char en ligne.\n");
-					ladmin_log("Echec de l'envoi du message. Aucun server de char en ligne." RETCODE);
-				} else {
-					printf("Message sending failed. No online char-server.\n");
-					ladmin_log("Message sending failed. No online char-server." RETCODE);
-				}
-			} else {
-				if (defaultlanguage == 'F') {
-					printf("Message transmis au server de logins avec succ�s.\n");
-					ladmin_log("Message transmis au server de logins avec succ�s." RETCODE);
-				} else {
-					printf("Message successfully sended to login-server.\n");
-					ladmin_log("Message successfully sended to login-server." RETCODE);
-				}
-			}
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,4);
-			break;
-
-		case 0x7951:	// answer of an account validity limit changing
-			if (RFIFOREST(fd) < 34)
-				return 0;
-			if (RFIFOL(fd,2) == -1) {
-				if (defaultlanguage == 'F') {
-					printf("Echec du changement de la validit� du compte [%s]. Le compte n'existe pas.\n", RFIFOP(fd,6));
-					ladmin_log("Echec du changement de la validit� du compte [%s]. Le compte n'existe pas." RETCODE, RFIFOP(fd,6));
-				} else {
-					printf("Account [%s] validity limit changing failed. Account doesn't exist.\n", RFIFOP(fd,6));
-					ladmin_log("Account [%s] validity limit changing failed. Account doesn't exist." RETCODE, RFIFOP(fd,6));
-				}
-			} else {
-				time_t timestamp = RFIFOL(fd,30);
-				if (timestamp == 0) {
-					if (defaultlanguage == 'F') {
-						printf("Limite de validit� du compte [%s][id: %d] inchang�e.\n", RFIFOP(fd,6), RFIFOL(fd,2));
-						printf("Le compte a une validit� illimit�e ou\n");
-						printf("la modification est impossible avec les ajustements demand�s.\n");
-						ladmin_log("Limite de validit� du compte [%s][id: %d] inchang�e. Le compte a une validit� illimit�e ou la modification est impossible avec les ajustements demand�s." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-					} else {
-						printf("Validity limit of the account [%s][id: %d] unchanged.\n", RFIFOP(fd,6), RFIFOL(fd,2));
-						printf("The account have an unlimited validity limit or\n");
-						printf("the changing is impossible with the proposed adjustments.\n");
-						ladmin_log("Validity limit of the account [%s][id: %d] unchanged. The account have an unlimited validity limit or the changing is impossible with the proposed adjustments." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2));
-					}
-				} else {
-					char tmpstr[128];
-					strftime(tmpstr, 24, date_format, localtime(&timestamp));
-					if (defaultlanguage == 'F') {
-						printf("Limite de validit� du compte [%s][id: %d] chang�e avec succ�s pour �tre jusqu'au %s.\n", RFIFOP(fd,6), RFIFOL(fd,2), tmpstr);
-						ladmin_log("Limite de validit� du compte [%s][id: %d] chang�e avec succ�s pour �tre jusqu'au %s." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2), tmpstr);
-					} else {
-						printf("Validity limit of the account [%s][id: %d] successfully changed to be until %s.\n", RFIFOP(fd,6), RFIFOL(fd,2), tmpstr);
-						ladmin_log("Validity limit of the account [%s][id: %d] successfully changed to be until %s." RETCODE, RFIFOP(fd,6), RFIFOL(fd,2), tmpstr);
-					}
-				}
-			}
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,34);
-			break;
-
-		case 0x7953:	// answer of a request about informations of an account (by account name/id)
-			if (RFIFOREST(fd) < 150 || RFIFOREST(fd) < (150 + RFIFOW(fd,148)))
-				return 0;
-		  {
-			char userid[24], error_message[20], lastlogin[24], last_ip[16], email[40], memo[255];
-			time_t ban_until_time; // # of seconds 1/1/1970 (timestamp): ban time limit of the account (0 = no ban)
-			time_t connect_until_time; // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited)
-			memcpy(userid, RFIFOP(fd,7), sizeof(userid));
-			userid[sizeof(userid)-1] = '\0';
-			memcpy(error_message, RFIFOP(fd,40), sizeof(error_message));
-			error_message[sizeof(error_message)-1] = '\0';
-			memcpy(lastlogin, RFIFOP(fd,60), sizeof(lastlogin));
-			lastlogin[sizeof(lastlogin)-1] = '\0';
-			memcpy(last_ip, RFIFOP(fd,84), sizeof(last_ip));
-			last_ip[sizeof(last_ip)-1] = '\0';
-			memcpy(email, RFIFOP(fd,100), sizeof(email));
-			email[sizeof(email)-1] = '\0';
-			connect_until_time = (time_t)RFIFOL(fd,140);
-			ban_until_time = (time_t)RFIFOL(fd,144);
-			memset(memo, '\0', sizeof(memo));
-			strncpy(memo, RFIFOP(fd,150), RFIFOW(fd,148));
-			if (RFIFOL(fd,2) == -1) {
-				if (defaultlanguage == 'F') {
-					printf("Impossible de trouver le compte [%s]. Le compte n'existe pas.\n", parameters);
-					ladmin_log("Impossible de trouver le compte [%s]. Le compte n'existe pas." RETCODE, parameters);
-				} else {
-					printf("Unabled to find the account [%s]. Account doesn't exist.\n", parameters);
-					ladmin_log("Unabled to find the account [%s]. Account doesn't exist." RETCODE, parameters);
-				}
-			} else if (strlen(userid) == 0) {
-				if (defaultlanguage == 'F') {
-					printf("Impossible de trouver le compte [id: %s]. Le compte n'existe pas.\n", parameters);
-					ladmin_log("Impossible de trouver le compte [id: %s]. Le compte n'existe pas." RETCODE, parameters);
-				} else {
-					printf("Unabled to find the account [id: %s]. Account doesn't exist.\n", parameters);
-					ladmin_log("Unabled to find the account [id: %s]. Account doesn't exist." RETCODE, parameters);
-				}
-			} else {
-				if (defaultlanguage == 'F') {
-					ladmin_log("R�ception d'information concernant un compte." RETCODE);
-					printf("Le compte a les caract�ristiques suivantes:\n");
-				} else {
-					ladmin_log("Receiving information about an account." RETCODE);
-					printf("The account is set with:\n");
-				}
-				if (RFIFOB(fd,6) == 0) {
-					printf(" Id:     %d (non-GM)\n", RFIFOL(fd,2));
-				} else {
-					if (defaultlanguage == 'F') {
-						printf(" Id:     %d (GM niveau %d)\n", RFIFOL(fd,2), (int)RFIFOB(fd,6));
-					} else {
-						printf(" Id:     %d (GM level %d)\n", RFIFOL(fd,2), (int)RFIFOB(fd,6));
-					}
-				}
-				if (defaultlanguage == 'F') {
-					printf(" Nom:    '%s'\n", userid);
-					if (RFIFOB(fd,31) == 0)
-						printf(" Sexe:   Femme\n");
-					else if (RFIFOB(fd,31) == 1)
-						printf(" Sexe:   Male\n");
-					else
-						printf(" Sexe:   Serveur\n");
-				} else {
-					printf(" Name:   '%s'\n", userid);
-					if (RFIFOB(fd,31) == 0)
-						printf(" Sex:    Female\n");
-					else if (RFIFOB(fd,31) == 1)
-						printf(" Sex:    Male\n");
-					else
-						printf(" Sex:    Server\n");
-				}
-				printf(" E-mail: %s\n", email);
-				switch(RFIFOL(fd,36)) {
-				case 0:
-					if (defaultlanguage == 'F')
-						printf(" Statut: 0 [Compte Ok]\n");
-					else
-						printf(" Statut: 0 [Account OK]\n");
-					break;
-				case 1:
-					printf(" Statut: 1 [Unregistered ID]\n");
-					break;
-				case 2:
-					printf(" Statut: 2 [Incorrect Password]\n");
-					break;
-				case 3:
-					printf(" Statut: 3 [This ID is expired]\n");
-					break;
-				case 4:
-					printf(" Statut: 4 [Rejected from Server]\n");
-					break;
-				case 5:
-					printf(" Statut: 5 [You have been blocked by the GM Team]\n");
-					break;
-				case 6:
-					printf(" Statut: 6 [Your Game's EXE file is not the latest version]\n");
-					break;
-				case 7:
-					printf(" Statut: 7 [You are Prohibited to log in until %s]\n", error_message);
-					break;
-				case 8:
-					printf(" Statut: 8 [Server is jammed due to over populated]\n");
-					break;
-				case 9:
-					printf(" Statut: 9 [No MSG]\n");
-					break;
-				default: // 100
-					printf(" Statut: %d [This ID is totally erased]\n", RFIFOL(fd,36));
-					break;
-				}
-				if (defaultlanguage == 'F') {
-					if (ban_until_time == 0) {
-						printf(" Banissement: non banni.\n");
-					} else {
-						char tmpstr[128];
-						strftime(tmpstr, 24, date_format, localtime(&ban_until_time));
-						printf(" Banissement: jusqu'au %s.\n", tmpstr);
-					}
-					if (RFIFOL(fd,32) > 1)
-						printf(" Compteur: %d connexions.\n", RFIFOL(fd,32));
-					else
-						printf(" Compteur: %d connexion.\n", RFIFOL(fd,32));
-					printf(" Derni�re connexion le: %s (ip: %s)\n", lastlogin, last_ip);
-					if (connect_until_time == 0) {
-						printf(" Limite de validit�: illimit�.\n");
-					} else {
-						char tmpstr[128];
-						strftime(tmpstr, 24, date_format, localtime(&connect_until_time));
-						printf(" Limite de validit�: jusqu'au %s.\n", tmpstr);
-					}
-				} else {
-					if (ban_until_time == 0) {
-						printf(" Banishment: not banished.\n");
-					} else {
-						char tmpstr[128];
-						strftime(tmpstr, 24, date_format, localtime(&ban_until_time));
-						printf(" Banishment: until %s.\n", tmpstr);
-					}
-					if (RFIFOL(fd,32) > 1)
-						printf(" Count:  %d connections.\n", RFIFOL(fd,32));
-					else
-						printf(" Count:  %d connection.\n", RFIFOL(fd,32));
-					printf(" Last connection at: %s (ip: %s)\n", lastlogin, last_ip);
-					if (connect_until_time == 0) {
-						printf(" Validity limit: unlimited.\n");
-					} else {
-						char tmpstr[128];
-						strftime(tmpstr, 24, date_format, localtime(&connect_until_time));
-						printf(" Validity limit: until %s.\n", tmpstr);
-					}
-				}
-				printf(" Memo:   '%s'\n", memo);
-			}
-		  }
-			bytes_to_read = 0;
-			RFIFOSKIP(fd,150 + RFIFOW(fd,148));
-			break;
-
-		default:
-			printf("Remote administration has been disconnected (unknown packet).\n");
-			ladmin_log("'End of connection, unknown packet." RETCODE);
-			session[fd]->eof = 1;
-			return 0;
-		}
-	}
-
-	// if we don't wait new packets, do the prompt
-	prompt();
-
-	return 0;
-}
-
-//------------------------------------
-// Function to connect to login-server
-//------------------------------------
-int Connect_login_server() {
-	if (defaultlanguage == 'F') {
-		printf("Essai de connection au server de logins...\n");
-		ladmin_log("Essai de connection au server de logins..." RETCODE);
-	} else {
-		printf("Attempt to connect to login-server...\n");
-		ladmin_log("Attempt to connect to login-server..." RETCODE);
-	}
-
-	login_fd = make_connection(login_ip, loginserverport);
-
-#ifdef PASSWORDENC
-	if (passenc == 0) {
-#endif
-		WFIFOW(login_fd,0) = 0x7918; // Request for administation login
-		WFIFOW(login_fd,2) = 0; // no encrypted
-		memcpy(WFIFOP(login_fd,4), loginserveradminpassword, 24);
-		WFIFOSET(login_fd,28);
-		bytes_to_read = 1;
-		if (defaultlanguage == 'F') {
-			printf("Envoi du mot de passe...\n");
-			ladmin_log("Envoi du mot de passe..." RETCODE);
-		} else {
-			printf("Sending of the password...\n");
-			ladmin_log("Sending of the password..." RETCODE);
-		}
-#ifdef PASSWORDENC
-	} else {
-		WFIFOW(login_fd,0) = 0x791a; // Sending request about the coding key
-		WFIFOSET(login_fd,2);
-		bytes_to_read = 1;
-		if (defaultlanguage == 'F') {
-			printf("Demande de la clef MD5...\n");
-			ladmin_log("Demande de la clef MD5..." RETCODE);
-		} else {
-			printf("Request about the MD5 key...\n");
-			ladmin_log("Request about the MD5 key..." RETCODE);
-		}
-	}
-#endif
-
-	return 0;
-}
-
-//-------------------------------------------------
-// Return numerical value of a switch configuration
-// on/off, english, fran�ais, deutsch, espa�ol
-//-------------------------------------------------
-int config_switch(const char *str) {
-	if (strcmpi(str, "on") == 0 || strcmpi(str, "yes") == 0 || strcmpi(str, "oui") == 0 || strcmpi(str, "ja") == 0 || strcmpi(str, "si") == 0)
-		return 1;
-	if (strcmpi(str, "off") == 0 || strcmpi(str, "no") == 0 || strcmpi(str, "non") == 0 || strcmpi(str, "nein") == 0)
-		return 0;
-
-	return atoi(str);
-}
-
-//-----------------------------------
-// Reading general configuration file
-//-----------------------------------
-int ladmin_config_read(const char *cfgName) {
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp;
-
-	fp = fopen(cfgName, "r");
-	if (fp == NULL) {
-		if (defaultlanguage == 'F') {
-			printf("\033[0mFichier de configuration (%s) non trouv�.\n", cfgName);
-		} else {
-			printf("\033[0mConfiguration file (%s) not found.\n", cfgName);
-		}
-		return 1;
-	}
-
-	if (defaultlanguage == 'F') {
-		printf("\033[0m---D�but de lecture du fichier de configuration Ladmin (%s)\n", cfgName);
-	} else {
-		printf("\033[0m---Start reading of Ladmin configuration file (%s)\n", cfgName);
-	}
-	while(fgets(line, sizeof(line)-1, fp)) {
-		if (line[0] == '/' && line[1] == '/')
-			continue;
-
-		line[sizeof(line)-1] = '\0';
-		if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) == 2) {
-			remove_control_chars(w1);
-			remove_control_chars(w2);
-
-			if(strcmpi(w1,"login_ip")==0){
-				struct hostent *h = gethostbyname (w2);
-				if (h != NULL) {
-					if (defaultlanguage == 'F') {
-						printf("Adresse du serveur de logins: %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-					} else {
-						printf("Login server IP address: %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-					}
-					sprintf(loginserverip, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				} else
-					memcpy(loginserverip, w2, 16);
-			} else if (strcmpi(w1, "login_port") == 0) {
-				loginserverport = atoi(w2);
-			} else if (strcmpi(w1, "admin_pass") == 0) {
-				strncpy(loginserveradminpassword, w2, sizeof(loginserveradminpassword));
-				loginserveradminpassword[sizeof(loginserveradminpassword)-1] = '\0';
-#ifdef PASSWORDENC
-			} else if (strcmpi(w1, "passenc") == 0) {
-				passenc = atoi(w2);
-				if (passenc < 0 || passenc > 2)
-					passenc = 0;
-#endif
-			} else if (strcmpi(w1, "defaultlanguage") == 0) {
-				if (w2[0] == 'F' || w2[0] == 'E')
-					defaultlanguage = w2[0];
-			} else if (strcmpi(w1, "ladmin_log_filename") == 0) {
-				strncpy(ladmin_log_filename, w2, sizeof(ladmin_log_filename));
-				ladmin_log_filename[sizeof(ladmin_log_filename)-1] = '\0';
-			} else if (strcmpi(w1, "date_format") == 0) { // note: never have more than 19 char for the date!
-				switch (atoi(w2)) {
-				case 0:
-					strcpy(date_format, "%d-%m-%Y %H:%M:%S"); // 31-12-2004 23:59:59
-					break;
-				case 1:
-					strcpy(date_format, "%m-%d-%Y %H:%M:%S"); // 12-31-2004 23:59:59
-					break;
-				case 2:
-					strcpy(date_format, "%Y-%d-%m %H:%M:%S"); // 2004-31-12 23:59:59
-					break;
-				case 3:
-					strcpy(date_format, "%Y-%m-%d %H:%M:%S"); // 2004-12-31 23:59:59
-					break;
-				}
-			} else if (strcmpi(w1, "import") == 0) {
-				ladmin_config_read(w2);
-			}
-		}
-	}
-	fclose(fp);
-
-	login_ip = inet_addr(loginserverip);
-
-	if (defaultlanguage == 'F') {
-		printf("---Lecture du fichier de configuration Ladmin termin�e.\n");
-	} else {
-		printf("---End reading of Ladmin configuration file.\n");
-	}
-
-	return 0;
-}
-
-//--------------------------------------
-// Function called at exit of the server
-//--------------------------------------
-void do_final(void) {
-
-	if (already_exit_function == 0) {
-		delete_session(login_fd);
-
-		if (defaultlanguage == 'F') {
-			printf("\033[0m----Fin de Ladmin (fin normale avec fermeture de tous les fichiers).\n");
-			ladmin_log("----Fin de Ladmin (fin normale avec fermeture de tous les fichiers)." RETCODE);
-		} else {
-			printf("\033[0m----End of Ladmin (normal end with closing of all files).\n");
-			ladmin_log("----End of Ladmin (normal end with closing of all files)." RETCODE);
-		}
-
-		already_exit_function = 1;
-	}
-}
-
-//------------------------
-// Main function of ladmin
-//------------------------
-int do_init(int argc, char **argv) {
-	// read ladmin configuration
-	ladmin_config_read((argc > 1) ? argv[1] : LADMIN_CONF_NAME);
-
-	ladmin_log("");
-	if (defaultlanguage == 'F') {
-		ladmin_log("Fichier de configuration lu." RETCODE);
-	} else {
-		ladmin_log("Configuration file readed." RETCODE);
-	}
-
-	srand(time(NULL));
-
-	set_termfunc(do_final);
-	set_defaultparse(parse_fromlogin);
-
-	if (defaultlanguage == 'F') {
-		printf("Outil d'administration � distance de eAthena.\n");
-		printf("(pour eAthena version %d.%d.%d.)\n", ATHENA_MAJOR_VERSION, ATHENA_MINOR_VERSION, ATHENA_REVISION);
-	} else {
-		printf("EAthena login-server administration tool.\n");
-		printf("(for eAthena version %d.%d.%d.)\n", ATHENA_MAJOR_VERSION, ATHENA_MINOR_VERSION, ATHENA_REVISION);
-	}
-
-	if (defaultlanguage == 'F') {
-		ladmin_log("Ladmin est pr�t." RETCODE);
-		printf("Ladmin est \033[1;32mpr�t\033[0m.\n\n");
-	} else {
-		ladmin_log("Ladmin is ready." RETCODE);
-		printf("Ladmin is \033[1;32mready\033[0m.\n\n");
-	}
-
-	Connect_login_server();
-
-	atexit(do_final);
-
-	return 0;
-}
diff --git a/misc/src/ladmin/ladmin.h b/misc/src/ladmin/ladmin.h
deleted file mode 100644
index f76bfc2..0000000
--- a/misc/src/ladmin/ladmin.h
+++ /dev/null
@@ -1,11 +0,0 @@
-// $Id: ladmin.h,v 1.1.1.1 2004/09/10 17:26:52 MagicalTux Exp $
-#ifndef _LADMIN_H_
-#define _LADMIN_H_
-
-#define LADMIN_CONF_NAME	"conf/ladmin_athena.conf"
-#define PASSWORDENC		3	// A definition is given when making an encryption password correspond.
-							// It is 1 at the time of passwordencrypt.
-							// It is made into 2 at the time of passwordencrypt2.
-							// When it is made 3, it corresponds to both.
-
-#endif
diff --git a/misc/src/ladmin/md5calc.c b/misc/src/ladmin/md5calc.c
deleted file mode 100644
index 7b9a9a2..0000000
--- a/misc/src/ladmin/md5calc.c
+++ /dev/null
@@ -1,237 +0,0 @@
-// $Id: md5calc.c,v 1.1.1.1 2004/09/10 17:26:53 MagicalTux Exp $
-/***********************************************************
- * md5 calculation algorithm
- *
- * The source code referred to the following URL.
- * http://www.geocities.co.jp/SiliconValley-Oakland/8878/lab17/lab17.html
- *
- ***********************************************************/
-
-#include "md5calc.h"
-#include <string.h>
-#include <stdio.h>
-
-#ifndef UINT_MAX
-#define UINT_MAX 4294967295U
-#endif
-
-// Global variable
-static unsigned int *pX;
-
-// Stirng Table
-static const unsigned int T[] = {
-   0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, //0
-   0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, //4
-   0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, //8
-   0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, //12
-   0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, //16
-   0xd62f105d,  0x2441453, 0xd8a1e681, 0xe7d3fbc8, //20
-   0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, //24
-   0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, //28
-   0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, //32
-   0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, //36
-   0x289b7ec6, 0xeaa127fa, 0xd4ef3085,  0x4881d05, //40
-   0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, //44
-   0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, //48
-   0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, //52
-   0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, //56
-   0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391  //60
-};
-
-// ROTATE_LEFT   The left is made to rotate x [ n-bit ]. This is diverted as it is from RFC.
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
-
-// The function used for other calculation
-static unsigned int F(unsigned int X, unsigned int Y, unsigned int Z)
-{
-   return (X & Y) | (~X & Z);
-}
-static unsigned int G(unsigned int X, unsigned int Y, unsigned int Z)
-{
-   return (X & Z) | (Y & ~Z);
-}
-static unsigned int H(unsigned int X, unsigned int Y, unsigned int Z)
-{
-   return X ^ Y ^ Z;
-}
-static unsigned int I(unsigned int X, unsigned int Y, unsigned int Z)
-{
-   return Y ^ (X | ~Z);
-}
-
-static unsigned int Round(unsigned int a, unsigned int b, unsigned int FGHI,
-                     unsigned int k, unsigned int s, unsigned int i)
-{
-   return b + ROTATE_LEFT(a + FGHI + pX[k] + T[i], s);
-}
-
-static void Round1(unsigned int *a, unsigned int b, unsigned int c,
-		unsigned int d,unsigned int k, unsigned int s, unsigned int i)
-{
-	*a = Round(*a, b, F(b,c,d), k, s, i);
-}
-static void Round2(unsigned int *a, unsigned int b, unsigned int c,
-		unsigned int d,unsigned int k, unsigned int s, unsigned int i)
-{
-	*a = Round(*a, b, G(b,c,d), k, s, i);
-}
-static void Round3(unsigned int *a, unsigned int b, unsigned int c,
-		unsigned int d,unsigned int k, unsigned int s, unsigned int i)
-{
-	*a = Round(*a, b, H(b,c,d), k, s, i);
-}
-static void Round4(unsigned int *a, unsigned int b, unsigned int c,
-		unsigned int d,unsigned int k, unsigned int s, unsigned int i)
-{
-	*a = Round(*a, b, I(b,c,d), k, s, i);
-}
-
-static void MD5_Round_Calculate(const unsigned char *block,
-	unsigned int *A2, unsigned int *B2, unsigned int *C2, unsigned int *D2)
-{
-	//create X It is since it is required.
-	unsigned int X[16]; //512bit 64byte
-	int j,k;
-
-	//Save A as AA, B as BB, C as CC, and and D as DD (saving of A, B, C, and D)
-	unsigned int A=*A2, B=*B2, C=*C2, D=*D2;
-	unsigned int AA = A,BB = B,CC = C,DD = D;
-	
-	//It is a large region variable reluctantly because of calculation of a round. . . for Round1...4
-	pX = X;
-
-	//Copy block(padding_message) i into X
-	for (j=0,k=0; j<64; j+=4,k++)
-		X[k] = ( (unsigned int )block[j] )         // 8byte*4 -> 32byte conversion
-			| ( ((unsigned int )block[j+1]) << 8 ) // A function called Decode as used in the field of RFC
-			| ( ((unsigned int )block[j+2]) << 16 )
-			| ( ((unsigned int )block[j+3]) << 24 );
-
-
-   //Round 1
-   Round1(&A,B,C,D,  0, 7,  0); Round1(&D,A,B,C,  1, 12,  1); Round1(&C,D,A,B,  2, 17,  2); Round1(&B,C,D,A,  3, 22,  3);
-   Round1(&A,B,C,D,  4, 7,  4); Round1(&D,A,B,C,  5, 12,  5); Round1(&C,D,A,B,  6, 17,  6); Round1(&B,C,D,A,  7, 22,  7);
-   Round1(&A,B,C,D,  8, 7,  8); Round1(&D,A,B,C,  9, 12,  9); Round1(&C,D,A,B, 10, 17, 10); Round1(&B,C,D,A, 11, 22, 11);
-   Round1(&A,B,C,D, 12, 7, 12); Round1(&D,A,B,C, 13, 12, 13); Round1(&C,D,A,B, 14, 17, 14); Round1(&B,C,D,A, 15, 22, 15);
-
-   //Round 2
-   Round2(&A,B,C,D,  1, 5, 16); Round2(&D,A,B,C,  6, 9, 17); Round2(&C,D,A,B, 11, 14, 18); Round2(&B,C,D,A,  0, 20, 19);
-   Round2(&A,B,C,D,  5, 5, 20); Round2(&D,A,B,C, 10, 9, 21); Round2(&C,D,A,B, 15, 14, 22); Round2(&B,C,D,A,  4, 20, 23);
-   Round2(&A,B,C,D,  9, 5, 24); Round2(&D,A,B,C, 14, 9, 25); Round2(&C,D,A,B,  3, 14, 26); Round2(&B,C,D,A,  8, 20, 27);
-   Round2(&A,B,C,D, 13, 5, 28); Round2(&D,A,B,C,  2, 9, 29); Round2(&C,D,A,B,  7, 14, 30); Round2(&B,C,D,A, 12, 20, 31);
-
-   //Round 3
-   Round3(&A,B,C,D,  5, 4, 32); Round3(&D,A,B,C,  8, 11, 33); Round3(&C,D,A,B, 11, 16, 34); Round3(&B,C,D,A, 14, 23, 35);
-   Round3(&A,B,C,D,  1, 4, 36); Round3(&D,A,B,C,  4, 11, 37); Round3(&C,D,A,B,  7, 16, 38); Round3(&B,C,D,A, 10, 23, 39);
-   Round3(&A,B,C,D, 13, 4, 40); Round3(&D,A,B,C,  0, 11, 41); Round3(&C,D,A,B,  3, 16, 42); Round3(&B,C,D,A,  6, 23, 43);
-   Round3(&A,B,C,D,  9, 4, 44); Round3(&D,A,B,C, 12, 11, 45); Round3(&C,D,A,B, 15, 16, 46); Round3(&B,C,D,A,  2, 23, 47);
-
-   //Round 4
-   Round4(&A,B,C,D,  0, 6, 48); Round4(&D,A,B,C,  7, 10, 49); Round4(&C,D,A,B, 14, 15, 50); Round4(&B,C,D,A,  5, 21, 51);
-   Round4(&A,B,C,D, 12, 6, 52); Round4(&D,A,B,C,  3, 10, 53); Round4(&C,D,A,B, 10, 15, 54); Round4(&B,C,D,A,  1, 21, 55);
-   Round4(&A,B,C,D,  8, 6, 56); Round4(&D,A,B,C, 15, 10, 57); Round4(&C,D,A,B,  6, 15, 58); Round4(&B,C,D,A, 13, 21, 59);
-   Round4(&A,B,C,D,  4, 6, 60); Round4(&D,A,B,C, 11, 10, 61); Round4(&C,D,A,B,  2, 15, 62); Round4(&B,C,D,A,  9, 21, 63);
-
-   // Then perform the following additions. (let's add)
-   *A2 = A + AA;
-   *B2 = B + BB;
-   *C2 = C + CC;
-   *D2 = D + DD;
-
-   //The clearance of confidential information
-   memset(pX, 0, sizeof(X));
-}
-
-//-------------------------------------------------------------------
-// The function for the exteriors
-
-/** output is the coded binary in the character sequence which wants to code string. */
-void MD5_String2binary(const char * string, char * output)
-{
-//var
-   /*8bit*/
-   unsigned char padding_message[64]; //Extended message   512bit 64byte
-   unsigned char *pstring;             //The position of string in the present scanning notes is held.
-
-//   unsigned char digest[16];
-   /*32bit*/
-   unsigned int string_byte_len,    //The byte chief of string is held.
-                   string_bit_len,     //The bit length of string is held.
-                   copy_len,           //The number of bytes which is used by 1-3 and which remained
-                   msg_digest[4];      //Message digest   128bit 4byte
-   unsigned int *A = &msg_digest[0], //The message digest in accordance with RFC (reference)
-                   *B = &msg_digest[1],
-                   *C = &msg_digest[2],
-                   *D = &msg_digest[3];
-	int i;
-
-//prog
-   //Step 3.Initialize MD Buffer (although it is the initialization; step 3 of A, B, C, and D -- unavoidable -- a head)
-   *A = 0x67452301;
-   *B = 0xefcdab89;
-   *C = 0x98badcfe;
-   *D = 0x10325476;
-
-   //Step 1.Append Padding Bits (extension of a mark bit)
-   //1-1
-   string_byte_len = strlen(string);    //The byte chief of a character sequence is acquired.
-   pstring = (unsigned char *)string; //The position of the present character sequence is set.
-
-   //1-2  Repeat calculation until length becomes less than 64 bytes.
-   for (i=string_byte_len; 64<=i; i-=64,pstring+=64)
-        MD5_Round_Calculate(pstring, A,B,C,D);
-
-   //1-3
-   copy_len = string_byte_len % 64;                               //The number of bytes which remained is computed.
-   strncpy((char *)padding_message, (char *)pstring, copy_len); //A message is copied to an extended bit sequence.
-   memset(padding_message+copy_len, 0, 64 - copy_len);           //It buries by 0 until it becomes extended bit length.
-   padding_message[copy_len] |= 0x80;                            //The next of a message is 1.
-
-   //1-4 
-   //If 56 bytes or more (less than 64 bytes) of remainder becomes, it will calculate by extending to 64 bytes.
-   if (56 <= copy_len) {
-       MD5_Round_Calculate(padding_message, A,B,C,D);
-       memset(padding_message, 0, 56); //56 bytes is newly fill uped with 0.
-   }
-
-
-   //Step 2.Append Length (the information on length is added)
-   string_bit_len = string_byte_len * 8;             //From the byte chief to bit length (32 bytes of low rank)
-   memcpy(&padding_message[56], &string_bit_len, 4); //32 bytes of low rank is set.
-
-   //When bit length cannot be expressed in 32 bytes of low rank, it is a beam raising to a higher rank.
-  if (UINT_MAX / 8 < string_byte_len) {
-      unsigned int high = (string_byte_len - UINT_MAX / 8) * 8;
-      memcpy(&padding_message[60], &high, 4);
-  } else
-      memset(&padding_message[60], 0, 4); //In this case, it is good for a higher rank at 0.
-
-   //Step 4.Process Message in 16-Word Blocks (calculation of MD5)
-   MD5_Round_Calculate(padding_message, A,B,C,D);
-
-
-   //Step 5.Output (output)
-   memcpy(output,msg_digest,16);
-//   memcpy (digest, msg_digest, and 16);  //8 byte*4 < - 32byte conversion   A function called Encode as used in the field of RFC
-/*   sprintf(output,
-           "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
-           digest[ 0], digest[ 1], digest[ 2], digest[ 3],
-           digest[ 4], digest[ 5], digest[ 6], digest[ 7],
-           digest[ 8], digest[ 9], digest[10], digest[11],
-           digest[12], digest[13], digest[14], digest[15]);*/
-}
-
-/** output is the coded character sequence in the character sequence which wants to code string. */
-void MD5_String(const char * string, char * output)
-{
-   unsigned char digest[16];
-
-	MD5_String2binary(string,digest);
-	sprintf(output,
-		"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
-		digest[ 0], digest[ 1], digest[ 2], digest[ 3],
-		digest[ 4], digest[ 5], digest[ 6], digest[ 7],
-		digest[ 8], digest[ 9], digest[10], digest[11],
-		digest[12], digest[13], digest[14], digest[15]);
-}
-
diff --git a/misc/src/ladmin/md5calc.h b/misc/src/ladmin/md5calc.h
deleted file mode 100644
index b4dd614..0000000
--- a/misc/src/ladmin/md5calc.h
+++ /dev/null
@@ -1,8 +0,0 @@
-// $Id: md5calc.h,v 1.1.1.1 2004/09/10 17:26:53 MagicalTux Exp $
-#ifndef _MD5CALC_H_
-#define _MD5CALC_H_
-
-void MD5_String(const char * string, char * output);
-void MD5_String2binary(const char * string, char * output);
-
-#endif
diff --git a/misc/src/login/GNUmakefile b/misc/src/login/GNUmakefile
deleted file mode 100644
index df6cb21..0000000
--- a/misc/src/login/GNUmakefile
+++ /dev/null
@@ -1,13 +0,0 @@
-all: login-server
-txt: login-server
-
-COMMON_OBJ = ../common/core.o ../common/socket.o ../common/timer.o ../common/db.o ../common/lock.o ../common/malloc.o
-COMMON_H = ../common/core.h ../common/socket.h ../common/timer.h ../common/mmo.h ../common/version.h ../common/db.h ../common/lock.h ../common/malloc.h
-
-login-server: login.o md5calc.o $(COMMON_OBJ)
-	$(CC) -o ../../$@ login.o md5calc.o $(COMMON_OBJ)
-login.o: login.c login.h md5calc.h $(COMMON_H)
-md5calc.o: md5calc.c md5calc.h
-
-clean:
-	rm -f *.o ../../login-server
diff --git a/misc/src/login/Makefile b/misc/src/login/Makefile
deleted file mode 100644
index df6cb21..0000000
--- a/misc/src/login/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-all: login-server
-txt: login-server
-
-COMMON_OBJ = ../common/core.o ../common/socket.o ../common/timer.o ../common/db.o ../common/lock.o ../common/malloc.o
-COMMON_H = ../common/core.h ../common/socket.h ../common/timer.h ../common/mmo.h ../common/version.h ../common/db.h ../common/lock.h ../common/malloc.h
-
-login-server: login.o md5calc.o $(COMMON_OBJ)
-	$(CC) -o ../../$@ login.o md5calc.o $(COMMON_OBJ)
-login.o: login.c login.h md5calc.h $(COMMON_H)
-md5calc.o: md5calc.c md5calc.h
-
-clean:
-	rm -f *.o ../../login-server
diff --git a/misc/src/login/login.c b/misc/src/login/login.c
deleted file mode 100644
index 8d9818d..0000000
--- a/misc/src/login/login.c
+++ /dev/null
@@ -1,3698 +0,0 @@
-// $Id: login.c,v 1.1.1.1 2004/09/10 17:26:53 MagicalTux Exp $
-// new version of the login-server by [Yor]
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <netinet/in.h>
-#include <sys/time.h>
-#include <time.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h> // for stat/lstat/fstat
-#include <unistd.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <string.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-
-#include "core.h"
-#include "socket.h"
-#include "timer.h"
-#include "login.h"
-#include "mmo.h"
-#include "version.h"
-#include "db.h"
-#include "lock.h"
-
-#ifdef PASSWORDENC
-#include "md5calc.h"
-#endif
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-int account_id_count = START_ACCOUNT_NUM;
-int server_num;
-int new_account_flag = 0;
-int login_port = 6900;
-char lan_char_ip[16];
-int subneti[4];
-int subnetmaski[4];
-
-char account_filename[1024] = "save/account.txt";
-char GM_account_filename[1024] = "conf/GM_account.txt";
-char login_log_filename[1024] = "log/login.log";
-char login_log_unknown_packets_filename[1024] = "log/login_unknown_packets.log";
-char date_format[32] = "%Y-%m-%d %H:%M:%S";
-int save_unknown_packets = 0;
-long creation_time_GM_account_file;
-int gm_account_filename_check_timer = 15; // Timer to check if GM_account file has been changed and reload GM account automaticaly (in seconds; default: 15)
-
-int display_parse_login = 0; // 0: no, 1: yes
-int display_parse_admin = 0; // 0: no, 1: yes
-int display_parse_fromchar = 0; // 0: no, 1: yes (without packet 0x2714), 2: all packets
-
-struct mmo_char_server server[MAX_SERVERS];
-int server_fd[MAX_SERVERS];
-int server_freezeflag[MAX_SERVERS]; // Char-server anti-freeze system. Counter. 5 ok, 4...0 freezed
-int anti_freeze_enable = 0;
-int ANTI_FREEZE_INTERVAL = 15;
-
-int login_fd;
-
-enum {
-	ACO_DENY_ALLOW = 0,
-	ACO_ALLOW_DENY,
-	ACO_MUTUAL_FAILTURE,
-	ACO_STRSIZE = 128,
-};
-
-int access_order = ACO_DENY_ALLOW;
-int access_allownum = 0;
-int access_denynum = 0;
-char *access_allow = NULL;
-char *access_deny = NULL;
-
-int access_ladmin_allownum = 0;
-char *access_ladmin_allow = NULL;
-
-int min_level_to_connect = 0; // minimum level of player/GM (0: player, 1-99: gm) to connect on the server
-int add_to_unlimited_account = 0; // Give possibility or not to adjust (ladmin command: timeadd) the time of an unlimited account.
-int start_limited_time = -1; // Starting additional sec from now for the limited time at creation of accounts (-1: unlimited time, 0 or more: additional sec from now)
-int check_ip_flag = 1; // It's to check IP of a player between login-server and char-server (part of anti-hacking system)
-
-struct login_session_data {
-	int md5keylen;
-	char md5key[20];
-};
-
-#define AUTH_FIFO_SIZE 256
-struct {
-	int account_id, login_id1, login_id2;
-	int ip, sex, delflag;
-} auth_fifo[AUTH_FIFO_SIZE];
-int auth_fifo_pos = 0;
-
-struct auth_dat {
-	int account_id, sex;
-	char userid[24], pass[24], lastlogin[24];
-	int logincount;
-	int state; // packet 0x006a value + 1 (0: compte OK)
-	char email[40]; // e-mail (by default: a@a.com)
-	char error_message[20]; // Message of error code #6 = Your are Prohibited to log in until %s (packet 0x006a)
-	time_t ban_until_time; // # of seconds 1/1/1970 (timestamp): ban time limit of the account (0 = no ban)
-	time_t connect_until_time; // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited)
-	char last_ip[16]; // save of last IP of connection
-	char memo[255]; // a memo field
-	int account_reg2_num;
-	struct global_reg account_reg2[ACCOUNT_REG2_NUM];
-} *auth_dat;
-
-int auth_num = 0, auth_max = 0;
-
-// define the number of times that some players must authentify them before to save account file.
-// it's just about normal authentification. If an account is created or modified, save is immediatly done.
-// An authentification just change last connected IP and date. It already save in log file.
-// set minimum auth change before save:
-#define AUTH_BEFORE_SAVE_FILE 10
-// set divider of auth_num to found number of change before save
-#define AUTH_SAVE_FILE_DIVIDER 50
-int auth_before_save_file = 0; // Counter. First save when 1st char-server do connection.
-
-int admin_state = 0;
-char admin_pass[24] = "";
-char gm_pass[64] = "";
-int level_new_gm = 60;
-
-static struct dbt *gm_account_db;
-
-//------------------------------
-// Writing function of logs file
-//------------------------------
-int login_log(char *fmt, ...) {
-	FILE *logfp;
-	va_list ap;
-	struct timeval tv;
-	char tmpstr[2048];
-
-	va_start(ap, fmt);
-
-	logfp = fopen(login_log_filename, "a");
-	if (logfp) {
-		if (fmt[0] == '\0') // jump a line if no message
-			fprintf(logfp, RETCODE);
-		else {
-			gettimeofday(&tv, NULL);
-			strftime(tmpstr, 24, date_format, localtime(&(tv.tv_sec)));
-			sprintf(tmpstr + strlen(tmpstr), ".%03d: %s", (int)tv.tv_usec / 1000, fmt);
-			vfprintf(logfp, tmpstr, ap);
-		}
-		fclose(logfp);
-	}
-
-	va_end(ap);
-	return 0;
-}
-
-//----------------------------------------------------------------------
-// Determine if an account (id) is a GM account
-// and returns its level (or 0 if it isn't a GM account or if not found)
-//----------------------------------------------------------------------
-int isGM(int account_id) {
-	struct gm_account *p;
-
-	p = numdb_search(gm_account_db, account_id);
-	if (p == NULL)
-		return 0;
-	return p->level;
-}
-
-//-------------------------------------------------------
-// Reading function of GM accounts file (and their level)
-//-------------------------------------------------------
-int read_gm_account() {
-	char line[512];
-	struct gm_account *p;
-	FILE *fp;
-	int c = 0;
-	int GM_level;
-	struct stat file_stat;
-
-	free(gm_account_db);
-	gm_account_db = numdb_init();
-
-	// get last modify time/date
-	if (stat(GM_account_filename, &file_stat))
-		creation_time_GM_account_file = 0; // error
-	else
-		creation_time_GM_account_file = file_stat.st_mtime;
-
-	if ((fp = fopen(GM_account_filename, "r")) == NULL) {
-		printf("read_gm_account: GM accounts file [%s] not found.\n", GM_account_filename);
-		printf("                 Actually, there is no GM accounts on the server.\n");
-		login_log("read_gm_account: GM accounts file [%s] not found." RETCODE, GM_account_filename);
-		login_log("                 Actually, there is no GM accounts on the server." RETCODE);
-		return 1;
-	}
-	// limited to 4000, because we send information to char-servers (more than 4000 GM accounts???)
-	// int (id) + int (level) = 8 bytes * 4000 = 32k (limit of packets in windows)
-	while(fgets(line, sizeof(line)-1, fp) && c < 4000) {
-		if ((line[0] == '/' && line[1] == '/') || line[0] == '\0' || line[0] == '\n' || line[0] == '\r')
-			continue;
-		p = calloc(sizeof(struct gm_account), 1);
-		if (p == NULL) {
-			printf("read_gm_account: memory allocation failure (malloc)!\n");
-			exit(0);
-		}
-		if (sscanf(line, "%d %d", &p->account_id, &p->level) != 2 && sscanf(line, "%d: %d", &p->account_id, &p->level) != 2)
-			printf("read_gm_account: file [%s], invalid 'id_acount level' format.\n", GM_account_filename);
-		else if (p->level <= 0)
-			printf("read_gm_account: file [%s] %dth account (invalid level [0 or negative]: %d).\n", GM_account_filename, c+1, p->level);
-		else {
-			if (p->level > 99) {
-				printf("read_gm_account: file [%s] %dth account (invalid level, but corrected: %d->99).\n", GM_account_filename, c+1, p->level);
-				p->level = 99;
-			}
-			if ((GM_level = isGM(p->account_id)) > 0) { // if it's not a new account
-				if (GM_level == p->level)
-					printf("read_gm_account: GM account %d defined twice (same level: %d).\n", p->account_id, p->level);
-				else
-					printf("read_gm_account: GM account %d defined twice (levels: %d and %d).\n", p->account_id, GM_level, p->level);
-			}
-			if (GM_level != p->level) { // if new account or new level
-				numdb_insert(gm_account_db, p->account_id, p);
-				//printf("GM account:%d, level: %d->%d\n", p->account_id, GM_level, p->level);
-				if (GM_level == 0) { // if new account
-					c++;
-					if (c >= 4000) {
-						printf("***WARNING: 4000 GM accounts found. Next GM accounts are not readed.\n");
-						login_log("***WARNING: 4000 GM accounts found. Next GM accounts are not readed." RETCODE);
-					}
-				}
-			}
-		}
-	}
-	fclose(fp);
-
-	printf("read_gm_account: file '%s' readed (%d GM accounts found).\n", GM_account_filename, c);
-	login_log("read_gm_account: file '%s' readed (%d GM accounts found)." RETCODE, GM_account_filename, c);
-
-	return 0;
-}
-
-//--------------------------------------------------------------
-// Test of the IP mask
-// (ip: IP to be tested, str: mask x.x.x.x/# or x.x.x.x/y.y.y.y)
-//--------------------------------------------------------------
-int check_ipmask(unsigned int ip, const unsigned char *str) {
-	unsigned int mask = 0, i = 0, m, ip2, a0, a1, a2, a3;
-	unsigned char *p = (unsigned char *)&ip2, *p2 = (unsigned char *)&mask;
-
-	if (sscanf(str, "%d.%d.%d.%d/%n", &a0, &a1, &a2, &a3, &i) != 4 || i == 0)
-		return 0;
-	p[0] = a0; p[1] = a1; p[2] = a2; p[3] = a3;
-
-	if (sscanf(str+i, "%d.%d.%d.%d", &a0, &a1, &a2, &a3) == 4) {
-		p2[0] = a0; p2[1] = a1; p2[2] = a2; p2[3] = a3;
-		mask = ntohl(mask);
-	} else if (sscanf(str+i, "%d", &m) == 1 && m >= 0 && m <= 32) {
-		for(i = 0; i < m && i < 32; i++)
-			mask = (mask >> 1) | 0x80000000;
-	} else {
-		printf("check_ipmask: invalid mask [%s].\n", str);
-		return 0;
-	}
-
-//	printf("Tested IP: %08x, network: %08x, network mask: %08x\n",
-//	       (unsigned int)ntohl(ip), (unsigned int)ntohl(ip2), (unsigned int)mask);
-	return ((ntohl(ip) & mask) == (ntohl(ip2) & mask));
-}
-
-//---------------------
-// Access control by IP
-//---------------------
-int check_ip(unsigned int ip) {
-	int i;
-	unsigned char *p = (unsigned char *)&ip;
-	char buf[32];
-	enum { ACF_DEF, ACF_ALLOW, ACF_DENY } flag = ACF_DEF;
-
-	if (access_allownum == 0 && access_denynum == 0)
-		return 1; // When there is no restriction, all IP are authorised.
-
-//	+   012.345.: front match form, or
-//	    all: all IP are matched, or
-//	    012.345.678.901/24: network form (mask with # of bits), or
-//	    012.345.678.901/255.255.255.0: network form (mask with ip mask)
-//	+   Note about the DNS resolution (like www.ne.jp, etc.):
-//	    There is no guarantee to have an answer.
-//	    If we have an answer, there is no guarantee to have a 100% correct value.
-//	    And, the waiting time (to check) can be long (over 1 minute to a timeout). That can block the software.
-//	    So, DNS notation isn't authorised for ip checking.
-	sprintf(buf, "%d.%d.%d.%d.", p[0], p[1], p[2], p[3]);
-
-	for(i = 0; i < access_allownum; i++) {
-		const char *p = access_allow + i * ACO_STRSIZE;
-		if (memcmp(p, buf, strlen(p)) == 0 || check_ipmask(ip, p)) {
-			flag = ACF_ALLOW;
-			if (access_order == ACO_ALLOW_DENY)
-				return 1; // With 'allow, deny' (deny if not allow), allow has priority
-			break;
-		}
-	}
-
-	for(i = 0; i < access_denynum; i++) {
-		const char *p = access_deny + i * ACO_STRSIZE;
-		if (memcmp(p, buf, strlen(p)) == 0 || check_ipmask(ip, p)) {
-			flag = ACF_DENY;
-			return 0; // At this point, if it's 'deny', we refuse connection.
-			break;
-		}
-	}
-
-	return (flag == ACF_ALLOW || access_order == ACO_DENY_ALLOW) ? 1:0;
-		// With 'mutual-failture', only 'allow' and non 'deny' IP are authorised.
-		//   A non 'allow' (even non 'deny') IP is not authorised. It's like: if allowed and not denied, it's authorised.
-		//   So, it's disapproval if you have no description at the time of 'mutual-failture'.
-		// With 'deny,allow' (allow if not deny), because here it's not deny, we authorise.
-}
-
-//--------------------------------
-// Access control by IP for ladmin
-//--------------------------------
-int check_ladminip(unsigned int ip) {
-	int i;
-	unsigned char *p = (unsigned char *)&ip;
-	char buf[32];
-
-	if (access_ladmin_allownum == 0)
-		return 1; // When there is no restriction, all IP are authorised.
-
-//	+   012.345.: front match form, or
-//	    all: all IP are matched, or
-//	    012.345.678.901/24: network form (mask with # of bits), or
-//	    012.345.678.901/255.255.255.0: network form (mask with ip mask)
-//	+   Note about the DNS resolution (like www.ne.jp, etc.):
-//	    There is no guarantee to have an answer.
-//	    If we have an answer, there is no guarantee to have a 100% correct value.
-//	    And, the waiting time (to check) can be long (over 1 minute to a timeout). That can block the software.
-//	    So, DNS notation isn't authorised for ip checking.
-	sprintf(buf, "%d.%d.%d.%d.", p[0], p[1], p[2], p[3]);
-
-	for(i = 0; i < access_ladmin_allownum; i++) {
-		const char *p = access_ladmin_allow + i * ACO_STRSIZE;
-		if (memcmp(p, buf, strlen(p)) == 0 || check_ipmask(ip, p)) {
-			return 1;
-		}
-	}
-
-	return 0;
-}
-
-//-----------------------------------------------------
-// Function to suppress control characters in a string.
-//-----------------------------------------------------
-int remove_control_chars(unsigned char *str) {
-	int i;
-	int change = 0;
-
-	for(i = 0; str[i]; i++) {
-		if (str[i] < 32) {
-			str[i] = '_';
-			change = 1;
-		}
-	}
-
-	return change;
-}
-
-//---------------------------------------------------
-// E-mail check: return 0 (not correct) or 1 (valid).
-//---------------------------------------------------
-int e_mail_check(unsigned char *email) {
-	char ch;
-	unsigned char* last_arobas;
-
-	// athena limits
-	if (strlen(email) < 3 || strlen(email) > 39)
-		return 0;
-
-	// part of RFC limits (official reference of e-mail description)
-	if (strchr(email, '@') == NULL || email[strlen(email)-1] == '@')
-		return 0;
-
-	if (email[strlen(email)-1] == '.')
-		return 0;
-
-	last_arobas = strrchr(email, '@');
-
-	if (strstr(last_arobas, "@.") != NULL ||
-	    strstr(last_arobas, "..") != NULL)
-		return 0;
-
-	for(ch = 1; ch < 32; ch++) {
-		if (strchr(last_arobas, ch) != NULL) {
-			return 0;
-			break;
-		}
-	}
-
-	if (strchr(last_arobas, ' ') != NULL ||
-	    strchr(last_arobas, ';') != NULL)
-		return 0;
-
-	// all correct
-	return 1;
-}
-
-//-----------------------------------------------
-// Search an account id
-//   (return account index or -1 (if not found))
-//   If exact account name is not found,
-//   the function checks without case sensitive
-//   and returns index if only 1 account is found
-//   and similar to the searched name.
-//-----------------------------------------------
-int search_account_index(char* account_name) {
-	int i, quantity, index;
-
-	quantity = 0;
-	index = -1;
-	for(i = 0; i < auth_num; i++) {
-		// Without case sensitive check (increase the number of similar account names found)
-		if (stricmp(auth_dat[i].userid, account_name) == 0) {
-			// Strict comparison (if found, we finish the function immediatly with correct value)
-			if (strcmp(auth_dat[i].userid, account_name) == 0)
-				return i;
-			quantity++;
-			index = i;
-		}
-	}
-	// Here, the exact account name is not found
-	// We return the found index of a similar account ONLY if there is 1 similar account
-	if (quantity == 1)
-		return index;
-
-	// Exact account name is not found and 0 or more than 1 similar accounts have been found ==> we say not found
-	return -1;
-}
-
-//--------------------------------------------------------
-// Create a string to save the account in the account file
-//--------------------------------------------------------
-int mmo_auth_tostr(char *str, struct auth_dat *p) {
-	int i;
-	char *str_p = str;
-
-	str_p += sprintf(str_p, "%d\t%s\t%s\t%s\t%c\t%d\t%d\t"
-	                 "%s\t%s\t%ld\t%s\t%s\t%ld\t",
-	                 p->account_id, p->userid, p->pass, p->lastlogin,
-	                 (p->sex == 2) ? 'S' : (p->sex ? 'M' : 'F'),
-	                 p->logincount, p->state,
-	                 p->email, p->error_message,
-	                 p->connect_until_time, p->last_ip, p->memo, p->ban_until_time);
-
-	for(i = 0; i < p->account_reg2_num; i++)
-		if (p->account_reg2[i].str[0])
-			str_p += sprintf(str_p, "%s,%d ", p->account_reg2[i].str, p->account_reg2[i].value);
-
-	return 0;
-}
-
-//---------------------------------
-// Reading of the accounts database
-//---------------------------------
-int mmo_auth_init(void) {
-	FILE *fp;
-	int account_id, logincount, state, n, i, j, v;
-	char line[2048], *p, userid[2048], pass[2048], lastlogin[2048], sex, email[2048], error_message[2048], last_ip[2048], memo[2048];
-	time_t ban_until_time;
-	time_t connect_until_time;
-	char str[2048];
-	int GM_count = 0;
-	int server_count = 0;
-
-	auth_dat = calloc(sizeof(struct auth_dat) * 256, 1);
-	auth_max = 256;
-
-	fp = fopen(account_filename, "r");
-	if (fp == NULL) {
-		// no account file -> no account -> no login, including char-server (ERROR)
-		printf("\033[1;31mmmo_auth_init: Accounts file [%s] not found.\033[0m\n", account_filename);
-		return 0;
-	}
-
-	while(fgets(line, sizeof(line)-1, fp) != NULL) {
-		if (line[0] == '/' && line[1] == '/')
-			continue;
-		line[sizeof(line)-1] = '\0';
-		p = line;
-
-		// database version reading (v2)
-		if (((i = sscanf(line, "%d\t%[^\t]\t%[^\t]\t%[^\t]\t%c\t%d\t%d\t"
-		                 "%[^\t]\t%[^\t]\t%ld\t%[^\t]\t%[^\t]\t%ld%n",
-		    &account_id, userid, pass, lastlogin, &sex, &logincount, &state,
-		    email, error_message, &connect_until_time, last_ip, memo, &ban_until_time, &n)) == 13 && line[n] == '\t') ||
-		    ((i = sscanf(line, "%d\t%[^\t]\t%[^\t]\t%[^\t]\t%c\t%d\t%d\t"
-		                 "%[^\t]\t%[^\t]\t%ld\t%[^\t]\t%[^\t]%n",
-		    &account_id, userid, pass, lastlogin, &sex, &logincount, &state,
-		    email, error_message, &connect_until_time, last_ip, memo, &n)) == 12 && line[n] == '\t')) {
-			n = n + 1;
-
-			// Some checks
-			if (account_id > END_ACCOUNT_NUM) {
-				printf("\033[1;31mmmo_auth_init: ******Error: an account has an id higher than %d\n", END_ACCOUNT_NUM);
-				printf("               account id #%d -> account not read (saved in log file).\033[0m\n", account_id);
-				login_log("mmmo_auth_init: ******Error: an account has an id higher than %d." RETCODE, END_ACCOUNT_NUM);
-				login_log("               account id #%d -> account not read (saved in next line):" RETCODE, account_id);
-				login_log("%s", line);
-				continue;
-			}
-			userid[23] = '\0';
-			remove_control_chars(userid);
-			for(j = 0; j < auth_num; j++) {
-				if (auth_dat[j].account_id == account_id) {
-					printf("\033[1;31mmmo_auth_init: ******Error: an account has an identical id to another.\n");
-					printf("               account id #%d -> new account not read (saved in log file).\033[0m\n", account_id);
-					login_log("mmmo_auth_init: ******Error: an account has an identical id to another." RETCODE);
-					login_log("               account id #%d -> new account not read (saved in next line):" RETCODE, account_id);
-					login_log("%s", line);
-					break;
-				} else if (strcmp(auth_dat[j].userid, userid) == 0) {
-					printf("\033[1;31mmmo_auth_init: ******Error: account name already exists.\n");
-					printf("               account name '%s' -> new account not read.\n", userid); // 2 lines, account name can be long.
-					printf("               Account saved in log file.\033[0m\n");
-					login_log("mmmo_auth_init: ******Error: an account has an identical id to another." RETCODE);
-					login_log("               account id #%d -> new account not read (saved in next line):" RETCODE, account_id);
-					login_log("%s", line);
-					break;
-				}
-			}
-			if (j != auth_num)
-				continue;
-
-			if (auth_num >= auth_max) {
-				auth_max += 256;
-				auth_dat = realloc(auth_dat, sizeof(struct auth_dat) * auth_max);
-			}
-
-			memset(&auth_dat[auth_num], '\0', sizeof(struct auth_dat));
-
-			auth_dat[auth_num].account_id = account_id;
-
-			strncpy(auth_dat[auth_num].userid, userid, 24);
-
-			pass[23] = '\0';
-			remove_control_chars(pass);
-			strncpy(auth_dat[auth_num].pass, pass, 24);
-
-			lastlogin[23] = '\0';
-			remove_control_chars(lastlogin);
-			strncpy(auth_dat[auth_num].lastlogin, lastlogin, 24);
-
-			auth_dat[auth_num].sex = (sex == 'S' || sex == 's') ? 2 : (sex == 'M' || sex == 'm');
-
-			if (logincount >= 0)
-				auth_dat[auth_num].logincount = logincount;
-			else
-				auth_dat[auth_num].logincount = 0;
-
-			if (state > 255)
-				auth_dat[auth_num].state = 100;
-			else if (state < 0)
-				auth_dat[auth_num].state = 0;
-			else
-				auth_dat[auth_num].state = state;
-
-			if (e_mail_check(email) == 0) {
-				printf("Account %s (%d): invalid e-mail (replaced par a@a.com).\n", auth_dat[auth_num].userid, auth_dat[auth_num].account_id);
-				strncpy(auth_dat[auth_num].email, "a@a.com", 40);
-			} else {
-				remove_control_chars(email);
-				strncpy(auth_dat[auth_num].email, email, 40);
-			}
-
-			error_message[19] = '\0';
-			remove_control_chars(error_message);
-			if (error_message[0] == '\0' || state != 7) { // 7, because state is packet 0x006a value + 1
-				strncpy(auth_dat[auth_num].error_message, "-", 20);
-			} else {
-				strncpy(auth_dat[auth_num].error_message, error_message, 20);
-			}
-
-			if (i == 13)
-				auth_dat[auth_num].ban_until_time = ban_until_time;
-			else
-				auth_dat[auth_num].ban_until_time = 0;
-
-			auth_dat[auth_num].connect_until_time = connect_until_time;
-
-			last_ip[15] = '\0';
-			remove_control_chars(last_ip);
-			strncpy(auth_dat[auth_num].last_ip, last_ip, 16);
-
-			memo[254] = '\0';
-			remove_control_chars(memo);
-			strncpy(auth_dat[auth_num].memo, memo, 255);
-
-			for(j = 0; j < ACCOUNT_REG2_NUM; j++) {
-				p += n;
-				if (sscanf(p, "%[^\t,],%d %n", str, &v, &n) != 2) {
-					// We must check if a str is void. If it's, we can continue to read other REG2.
-					// Account line will have something like: str2,9 ,9 str3,1 (here, ,9 is not good)
-					if (p[0] == ',' && sscanf(p, ",%d %n", &v, &n) == 1) {
-						j--;
-						continue;
-					} else
-						break;
-				}
-				str[31] = '\0';
-				remove_control_chars(str);
-				strncpy(auth_dat[auth_num].account_reg2[j].str, str, 32);
-				auth_dat[auth_num].account_reg2[j].value = v;
-			}
-			auth_dat[auth_num].account_reg2_num = j;
-
-			if (isGM(account_id) > 0)
-				GM_count++;
-			if (auth_dat[auth_num].sex == 2)
-				server_count++;
-
-			auth_num++;
-			if (account_id >= account_id_count)
-				account_id_count = account_id + 1;
-
-		// Old athena database version reading (v1)
-		} else if ((i = sscanf(line, "%d\t%[^\t]\t%[^\t]\t%[^\t]\t%c\t%d\t%d\t%n",
-		           &account_id, userid, pass, lastlogin, &sex, &logincount, &state, &n)) >= 5) {
-			if (account_id > END_ACCOUNT_NUM) {
-				printf("\033[1;31mmmo_auth_init: ******Error: an account has an id higher than %d\n", END_ACCOUNT_NUM);
-				printf("               account id #%d -> account not read (saved in log file).\033[0m\n", account_id);
-				login_log("mmmo_auth_init: ******Error: an account has an id higher than %d." RETCODE, END_ACCOUNT_NUM);
-				login_log("               account id #%d -> account not read (saved in next line):" RETCODE, account_id);
-				login_log("%s", line);
-				continue;
-			}
-			userid[23] = '\0';
-			remove_control_chars(userid);
-			for(j = 0; j < auth_num; j++) {
-				if (auth_dat[j].account_id == account_id) {
-					printf("\033[1;31mmmo_auth_init: ******Error: an account has an identical id to another.\n");
-					printf("               account id #%d -> new account not read (saved in log file).\033[0m\n", account_id);
-					login_log("mmmo_auth_init: ******Error: an account has an identical id to another." RETCODE);
-					login_log("               account id #%d -> new account not read (saved in next line):" RETCODE, account_id);
-					login_log("%s", line);
-					break;
-				} else if (strcmp(auth_dat[j].userid, userid) == 0) {
-					printf("\033[1;31mmmo_auth_init: ******Error: account name already exists.\n");
-					printf("               account name '%s' -> new account not read.\n", userid); // 2 lines, account name can be long.
-					printf("               Account saved in log file.\033[0m\n");
-					login_log("mmmo_auth_init: ******Error: an account has an identical id to another." RETCODE);
-					login_log("               account id #%d -> new account not read (saved in next line):" RETCODE, account_id);
-					login_log("%s", line);
-					break;
-				}
-			}
-			if (j != auth_num)
-				continue;
-
-			if (auth_num >= auth_max) {
-				auth_max += 256;
-				auth_dat = realloc(auth_dat, sizeof(struct auth_dat) * auth_max);
-			}
-
-			memset(&auth_dat[auth_num], '\0', sizeof(struct auth_dat));
-
-			auth_dat[auth_num].account_id = account_id;
-
-			strncpy(auth_dat[auth_num].userid, userid, 24);
-
-			pass[23] = '\0';
-			remove_control_chars(pass);
-			strncpy(auth_dat[auth_num].pass, pass, 24);
-
-			lastlogin[23] = '\0';
-			remove_control_chars(lastlogin);
-			strncpy(auth_dat[auth_num].lastlogin, lastlogin, 24);
-
-			auth_dat[auth_num].sex = (sex == 'S' || sex == 's') ? 2 : (sex == 'M' || sex == 'm');
-
-			if (i >= 6) {
-				if (logincount >= 0)
-					auth_dat[auth_num].logincount = logincount;
-				else
-					auth_dat[auth_num].logincount = 0;
-			} else
-				auth_dat[auth_num].logincount = 0;
-
-			if (i >= 7) {
-				if (state > 255)
-					auth_dat[auth_num].state = 100;
-				else if (state < 0)
-					auth_dat[auth_num].state = 0;
-				else
-					auth_dat[auth_num].state = state;
-			} else
-				auth_dat[auth_num].state = 0;
-
-			// Initialization of new data
-			strncpy(auth_dat[auth_num].email, "a@a.com", 40);
-			strncpy(auth_dat[auth_num].error_message, "-", 20);
-			auth_dat[auth_num].ban_until_time = 0;
-			auth_dat[auth_num].connect_until_time = 0;
-			strncpy(auth_dat[auth_num].last_ip, "-", 16);
-			strncpy(auth_dat[auth_num].memo, "-", 255);
-
-			for(j = 0; j < ACCOUNT_REG2_NUM; j++) {
-				p += n;
-				if (sscanf(p, "%[^\t,],%d %n", str, &v, &n) != 2) {
-					// We must check if a str is void. If it's, we can continue to read other REG2.
-					// Account line will have something like: str2,9 ,9 str3,1 (here, ,9 is not good)
-					if (p[0] == ',' && sscanf(p, ",%d %n", &v, &n) == 1) {
-						j--;
-						continue;
-					} else
-						break;
-				}
-				str[31] = '\0';
-				remove_control_chars(str);
-				strncpy(auth_dat[auth_num].account_reg2[j].str, str, 32);
-				auth_dat[auth_num].account_reg2[j].value = v;
-			}
-			auth_dat[auth_num].account_reg2_num = j;
-
-			if (isGM(account_id) > 0)
-				GM_count++;
-			if (auth_dat[auth_num].sex == 2)
-				server_count++;
-
-			auth_num++;
-			if (account_id >= account_id_count)
-				account_id_count = account_id + 1;
-
-		} else {
-			i = 0;
-			if (sscanf(line, "%d\t%%newid%%\n%n", &account_id, &i) == 1 &&
-			    i > 0 && account_id > account_id_count)
-				account_id_count = account_id;
-		}
-	}
-	fclose(fp);
-
-	if (auth_num == 0) {
-		printf("mmo_auth_init: No account found in %s.\n", account_filename);
-		sprintf(line, "No account found in %s.", account_filename);
-	} else {
-		if (auth_num == 1) {
-			printf("mmo_auth_init: 1 account read in %s,\n", account_filename);
-			sprintf(line, "1 account read in %s,", account_filename);
-		} else {
-			printf("mmo_auth_init: %d accounts read in %s,\n", auth_num, account_filename);
-			sprintf(line, "%d accounts read in %s,", auth_num, account_filename);
-		}
-		if (GM_count == 0) {
-			printf("               of which is no GM account, and ");
-			sprintf(str, "%s of which is no GM account and", line);
-		} else if (GM_count == 1) {
-			printf("               of which is 1 GM account, and ");
-			sprintf(str, "%s of which is 1 GM account and", line);
-		} else {
-			printf("               of which is %d GM accounts, and ", GM_count);
-			sprintf(str, "%s of which is %d GM accounts and", line, GM_count);
-		}
-		if (server_count == 0) {
-			printf("no server account ('S').\n");
-			sprintf(line, "%s no server account ('S').", str);
-		} else if (server_count == 1) {
-			printf("1 server account ('S').\n");
-			sprintf(line, "%s 1 server account ('S').", str);
-		} else {
-			printf("%d server accounts ('S').\n", server_count);
-			sprintf(line, "%s %d server accounts ('S').", str, server_count);
-		}
-	}
-	login_log("%s" RETCODE, line);
-
-	return 0;
-}
-
-//------------------------------------------
-// Writing of the accounts database file
-//   (accounts are sorted by id before save)
-//------------------------------------------
-void mmo_auth_sync(void) {
-	FILE *fp;
-	int i, j, k, lock;
-	int id[auth_num];
-	char line[65536];
-
-	// Sorting before save
-	for(i = 0; i < auth_num; i++) {
-		id[i] = i;
-		for(j = 0; j < i; j++) {
-			if (auth_dat[i].account_id < auth_dat[id[j]].account_id) {
-				for(k = i; k > j; k--)
-					id[k] = id[k-1];
-				id[j] = i; // id[i]
-				break;
-			}
-		}
-	}
-
-	// Data save
-	fp = lock_fopen(account_filename, &lock);
-	if (fp == NULL)
-		return;
-	fprintf(fp, "// Accounts file: here are saved all information about the accounts.\n");
-	fprintf(fp, "// Structure: ID, account name, password, last login time, sex, # of logins, state, email, error message for state 7, validity time, last (accepted) login ip, memo field, ban timestamp, repeated(register text, register value)\n");
-	fprintf(fp, "// Some explanations:\n");
-	fprintf(fp, "//   account name    : between 4 to 23 char for a normal account (standard client can't send less than 4 char).\n");
-	fprintf(fp, "//   account password: between 4 to 23 char\n");
-	fprintf(fp, "//   sex             : M or F for normal accounts, S for server accounts\n");
-	fprintf(fp, "//   state           : 0: account is ok, 1 to 256: error code of packet 0x006a + 1\n");
-	fprintf(fp, "//   email           : between 3 to 39 char (a@a.com is like no email)\n");
-	fprintf(fp, "//   error message   : text for the state 7: 'Your are Prohibited to login until <text>'. Max 19 char\n");
-	fprintf(fp, "//   valitidy time   : 0: unlimited account, <other value>: date calculated by addition of 1/1/1970 + value (number of seconds since the 1/1/1970)\n");
-	fprintf(fp, "//   memo field      : max 254 char\n");
-	fprintf(fp, "//   ban time        : 0: no ban, <other value>: banned until the date: date calculated by addition of 1/1/1970 + value (number of seconds since the 1/1/1970)\n");
-	for(i = 0; i < auth_num; i++) {
-		k = id[i]; // use of sorted index
-		if (auth_dat[k].account_id < 0)
-			continue;
-
-		mmo_auth_tostr(line, &auth_dat[k]);
-		fprintf(fp, "%s" RETCODE, line);
-	}
-	fprintf(fp, "%d\t%%newid%%\n", account_id_count);
-
-	lock_fclose(fp, account_filename, &lock);
-
-	// set new counter to minimum number of auth before save
-	auth_before_save_file = auth_num / AUTH_SAVE_FILE_DIVIDER; // Re-initialise counter. We have save.
-	if (auth_before_save_file < AUTH_BEFORE_SAVE_FILE)
-		auth_before_save_file = AUTH_BEFORE_SAVE_FILE;
-
-	return;
-}
-
-//-----------------------------------------------------
-// Check if we must save accounts file or not
-//   every minute, we check if we must save because we
-//   have do some authentifications without arrive to
-//   the minimum of authentifications for the save.
-// Note: all other modification of accounts (deletion,
-//       change of some informations excepted lastip/
-//       lastlogintime, creation) are always save
-//       immediatly and set  the minimum of
-//       authentifications to its initialization value.
-//-----------------------------------------------------
-int check_auth_sync(int tid, unsigned int tick, int id, int data) {
-	// we only save if necessary:
-	// we have do some authentifications without do saving
-	if (auth_before_save_file < AUTH_BEFORE_SAVE_FILE ||
-	    auth_before_save_file < (int)(auth_num / AUTH_SAVE_FILE_DIVIDER))
-		mmo_auth_sync();
-
-	return 0;
-}
-
-//--------------------------------------------------------------------
-// Packet send to all char-servers, except one (wos: without our self)
-//--------------------------------------------------------------------
-int charif_sendallwos(int sfd, unsigned char *buf, unsigned int len) {
-	int i, c;
-
-	for(i = 0, c = 0; i < MAX_SERVERS; i++) {
-		int fd;
-		if ((fd = server_fd[i]) >= 0 && fd != sfd) {
-			memcpy(WFIFOP(fd,0), buf, len);
-			WFIFOSET(fd, len);
-			c++;
-		}
-	}
-	return c;
-}
-
-//-----------------------------------------------------
-// Send GM accounts to all char-server
-//-----------------------------------------------------
-void send_GM_accounts() {
-	int i;
-	char buf[32000];
-	int GM_value;
-	int len;
-
-	len = 4;
-	WBUFW(buf,0) = 0x2732;
-	for(i = 0; i < auth_num; i++)
-		// send only existing accounts. We can not create a GM account when server is online.
-		if ((GM_value = isGM(auth_dat[i].account_id)) > 0) {
-			WBUFL(buf,len) = auth_dat[i].account_id;
-			WBUFB(buf,len+4) = (unsigned char)GM_value;
-			len += 5;
-		}
-	WBUFW(buf,2) = len;
-	charif_sendallwos(-1, buf, len);
-
-	return;
-}
-
-//-----------------------------------------------------
-// Check if GM file account have been changed
-//-----------------------------------------------------
-int check_GM_file(int tid, unsigned int tick, int id, int data) {
-	struct stat file_stat;
-	long new_time;
-
-	// if we would not check
-	if (gm_account_filename_check_timer < 1)
-		return 0;
-
-	// get last modify time/date
-	if (stat(GM_account_filename, &file_stat))
-		new_time = 0; // error
-	else
-		new_time = file_stat.st_mtime;
-
-	if (new_time != creation_time_GM_account_file) {
-		read_gm_account();
-		send_GM_accounts();
-	}
-
-	return 0;
-}
-
-//-------------------------------------
-// Account creation (with e-mail check)
-//-------------------------------------
-int mmo_auth_new(struct mmo_account* account, char sex, char* email) {
-	time_t timestamp, timestamp_temp;
-	struct tm *tmtime;
-	int i = auth_num;
-
-	if (auth_num >= auth_max) {
-		auth_max += 256;
-		auth_dat = realloc(auth_dat, sizeof(struct auth_dat) * auth_max);
-	}
-
-	memset(&auth_dat[i], '\0', sizeof(struct auth_dat));
-
-	while (isGM(account_id_count) > 0)
-		account_id_count++;
-
-	auth_dat[i].account_id = account_id_count++;
-
-	strncpy(auth_dat[i].userid, account->userid, 24);
-	auth_dat[i].userid[23] = '\0';
-
-	strncpy(auth_dat[i].pass, account->passwd, 24);
-	auth_dat[i].pass[23] = '\0';
-
-	memcpy(auth_dat[i].lastlogin, "-", 2);
-
-	auth_dat[i].sex = (sex == 'M');
-
-	auth_dat[i].logincount = 0;
-
-	auth_dat[i].state = 0;
-
-	if (e_mail_check(email) == 0)
-		strncpy(auth_dat[i].email, "a@a.com", 40);
-	else
-		strncpy(auth_dat[i].email, email, 40);
-
-	strncpy(auth_dat[i].error_message, "-", 20);
-
-	auth_dat[i].ban_until_time = 0;
-
-	if (start_limited_time < 0)
-		auth_dat[i].connect_until_time = 0; // unlimited
-	else { // limited time
-		timestamp = time(NULL) + start_limited_time;
-		// double conversion to be sure that it is possible
-		tmtime = localtime(&timestamp);
-		timestamp_temp = mktime(tmtime);
-		if (timestamp_temp != -1 && (timestamp_temp + 3600) >= timestamp) // check possible value and overflow (and avoid summer/winter hour)
-			auth_dat[i].connect_until_time = timestamp_temp;
-		else
-			auth_dat[i].connect_until_time = 0; // unlimited
-	}
-
-	strncpy(auth_dat[i].last_ip, "-", 16);
-
-	strncpy(auth_dat[i].memo, "-", 255);
-
-	auth_dat[i].account_reg2_num = 0;
-
-	auth_num++;
-
-	return (account_id_count - 1);
-}
-
-//---------------------------------------
-// Check/authentification of a connection
-//---------------------------------------
-int mmo_auth(struct mmo_account* account, int fd) {
-	int i;
-	struct timeval tv;
-	char tmpstr[256];
-	int len, newaccount = 0;
-	char md5str[64], md5bin[32];
-	char ip[16];
-	unsigned char *sin_addr = (unsigned char *)&session[fd]->client_addr.sin_addr;
-
-	sprintf(ip, "%d.%d.%d.%d", sin_addr[0], sin_addr[1], sin_addr[2], sin_addr[3]);
-
-	len = strlen(account->userid) - 2;
-	// Account creation with _M/_F
-	if (account->passwdenc == 0 && account->userid[len] == '_' &&
-	    (account->userid[len+1] == 'F' || account->userid[len+1] == 'M') && new_account_flag == 1 &&
-	    account_id_count <= END_ACCOUNT_NUM && len >= 4 && strlen(account->passwd) >= 4) {
-		if (new_account_flag == 1)
-			newaccount = 1;
-		account->userid[len] = '\0';
-	}
-
-	// Strict account search
-	for(i = 0; i < auth_num; i++) {
-		if (strcmp(account->userid, auth_dat[i].userid) == 0)
-			break;
-	}
-	// if there is no creation request and strict account search fails, we do a no sensitive case research for index
-	if (newaccount == 0 && i == auth_num) {
-		i = search_account_index(account->userid);
-		if (i == -1)
-			i = auth_num;
-		else
-			memcpy(account->userid, auth_dat[i].userid, 24); // for the possible tests/checks afterwards (copy correcte sensitive case).
-	}
-
-	if (i != auth_num) {
-		int encpasswdok = 0;
-		struct login_session_data *ld;
-		if (newaccount) {
-			login_log("Attempt of creation of an already existant account (account: %s_%c, pass: %s, received pass: %s, ip: %s)" RETCODE,
-			          account->userid, account->userid[len+1], auth_dat[i].pass, account->passwd, ip);
-			return 9; // 9 = Account already exists
-		}
-		ld = session[fd]->session_data;
-#ifdef PASSWORDENC
-		if (account->passwdenc > 0) {
-			int j = account->passwdenc;
-			if (!ld) {
-				login_log("Md5 key not created (account: %s, ip: %s)" RETCODE, account->userid, ip);
-				return 1; // 1 = Incorrect Password
-			}
-			if (j > 2)
-				j = 1;
-			do {
-				if (j == 1) {
-					strncpy(md5str, ld->md5key, sizeof(ld->md5key)); // 20
-					strcat(md5str, auth_dat[i].pass); // 24
-				} else if (j == 2) {
-					strncpy(md5str, auth_dat[i].pass, sizeof(auth_dat[i].pass)); // 24
-					strcat(md5str, ld->md5key); // 20
-				} else
-					md5str[0] = '\0';
-				md5str[sizeof(md5str)-1] = '\0'; // 64
-				MD5_String2binary(md5str, md5bin);
-				encpasswdok = (memcmp(account->passwd, md5bin, 16) == 0);
-			} while (j < 2 && !encpasswdok && (j++) != account->passwdenc);
-//			printf("key[%s] md5 [%s] ", md5key, md5);
-//			printf("client [%s] accountpass [%s]\n", account->passwd, auth_dat[i].pass);
-		}
-#endif
-		if ((strcmp(account->passwd, auth_dat[i].pass) && !encpasswdok)) {
-			if (account->passwdenc == 0)
-				login_log("Invalid password (account: %s, pass: %s, received pass: %s, ip: %s)" RETCODE, account->userid, auth_dat[i].pass, account->passwd, ip);
-#ifdef PASSWORDENC
-			else {
-				char logbuf[512], *p = logbuf;
-				int j;
-				p += sprintf(p, "Invalid password (account: %s, received md5[", account->userid);
-				for(j = 0; j < 16; j++)
-					p += sprintf(p, "%02x", ((unsigned char *)account->passwd)[j]);
-				p += sprintf(p,"] calculated md5[");
-				for(j = 0; j < 16; j++)
-					p += sprintf(p, "%02x", ((unsigned char *)md5bin)[j]);
-				p += sprintf(p, "] md5 key[");
-				for(j = 0; j < ld->md5keylen; j++)
-					p += sprintf(p, "%02x", ((unsigned char *)ld->md5key)[j]);
-				p += sprintf(p, "], ip: %s)" RETCODE, ip);
-				login_log(logbuf);
-			}
-#endif
-			return 1; // 1 = Incorrect Password
-		}
-
-		if (auth_dat[i].state) {
-			login_log("Connection refused (account: %s, pass: %s, state: %d, ip: %s)" RETCODE,
-			          account->userid, account->passwd, auth_dat[i].state, ip);
-			switch(auth_dat[i].state) { // packet 0x006a value + 1
-			case 1:   // 0 = Unregistered ID
-			case 2:   // 1 = Incorrect Password
-			case 3:   // 2 = This ID is expired
-			case 4:   // 3 = Rejected from Server
-			case 5:   // 4 = You have been blocked by the GM Team
-			case 6:   // 5 = Your Game's EXE file is not the latest version
-			case 7:   // 6 = Your are Prohibited to log in until %s
-			case 8:   // 7 = Server is jammed due to over populated
-			case 9:   // 8 = No MSG (actually, all states after 9 except 99 are No MSG, use only this)
-			case 100: // 99 = This ID has been totally erased
-				return auth_dat[i].state - 1;
-				break;
-			default:
-				return 99; // 99 = ID has been totally erased
-				break;
-			}
-		}
-
-		if (auth_dat[i].ban_until_time != 0) { // if account is banned
-			strftime(tmpstr, 20, date_format, localtime(&auth_dat[i].ban_until_time));
-			tmpstr[19] = '\0';
-			if (auth_dat[i].ban_until_time > time(NULL)) { // always banned
-				login_log("Connection refused (account: %s, pass: %s, banned until %s, ip: %s)" RETCODE,
-				          account->userid, account->passwd, tmpstr, ip);
-				return 6; // 6 = Your are Prohibited to log in until %s
-			} else { // ban is finished
-				login_log("End of ban (account: %s, pass: %s, previously banned until %s -> not more banned, ip: %s)" RETCODE,
-				          account->userid, account->passwd, tmpstr, ip);
-				auth_dat[i].ban_until_time = 0; // reset the ban time
-			}
-		}
-
-		if (auth_dat[i].connect_until_time != 0 && auth_dat[i].connect_until_time < time(NULL)) {
-			login_log("Connection refused (account: %s, pass: %s, expired ID, ip: %s)" RETCODE,
-			          account->userid, account->passwd, ip);
-			return 2; // 2 = This ID is expired
-		}
-
-		login_log("Authentification accepted (account: %s (id: %d), ip: %s)" RETCODE, account->userid, auth_dat[i].account_id, ip);
-	} else {
-		if (newaccount == 0) {
-			login_log("Unknown account (account: %s, received pass: %s, ip: %s)" RETCODE,
-			          account->userid, account->passwd, ip);
-			return 0; // 0 = Unregistered ID
-		} else {
-			int new_id = mmo_auth_new(account, account->userid[len+1], "a@a.com");
-			login_log("Account creation and authentification accepted (account %s (id: %d), pass: %s, sex: %c, connection with _F/_M, ip: %s)" RETCODE,
-			          account->userid, new_id, account->passwd, account->userid[len+1], ip);
-			auth_before_save_file = 0; // Creation of an account -> save accounts file immediatly
-		}
-	}
-
-	gettimeofday(&tv, NULL);
-	strftime(tmpstr, 24, date_format, localtime(&(tv.tv_sec)));
-	sprintf(tmpstr + strlen(tmpstr), ".%03d", (int)tv.tv_usec / 1000);
-
-	account->account_id = auth_dat[i].account_id;
-	account->login_id1 = rand();
-	account->login_id2 = rand();
-	memcpy(account->lastlogin, auth_dat[i].lastlogin, 24);
-	memcpy(auth_dat[i].lastlogin, tmpstr, 24);
-	account->sex = auth_dat[i].sex;
-	strncpy(auth_dat[i].last_ip, ip, 16);
-	auth_dat[i].logincount++;
-
-	// Save until for change ip/time of auth is not very useful => limited save for that
-	// Save there informations isnot necessary, because they are saved in log file.
-	if (--auth_before_save_file <= 0) // Reduce counter. 0 or less, we save
-		mmo_auth_sync();
-
-	return -1; // account OK
-}
-
-//-------------------------------
-// Char-server anti-freeze system
-//-------------------------------
-int char_anti_freeze_system(int tid, unsigned int tick, int id, int data) {
-	int i;
-
-	//printf("Entering in char_anti_freeze_system function to check freeze of servers.\n");
-	for(i = 0; i < MAX_SERVERS; i++) {
-		if (server_fd[i] >= 0) {// if char-server is online
-			//printf("char_anti_freeze_system: server #%d '%s', flag: %d.\n", i, server[i].name, server_freezeflag[i]);
-			if (server_freezeflag[i]-- < 1) { // Char-server anti-freeze system. Counter. 5 ok, 4...0 freezed
-				printf("Char-server anti-freeze system: char-server #%d '%s' is freezed -> disconnection.\n", i, server[i].name);
-				login_log("Char-server anti-freeze system: char-server #%d '%s' is freezed -> disconnection." RETCODE,
-				          i, server[i].name);
-				session[server_fd[i]]->eof = 1;
-			}
-		}
-	}
-
-	return 0;
-}
-
-//--------------------------------
-// Packet parsing for char-servers
-//--------------------------------
-int parse_fromchar(int fd) {
-	int i, j, id;
-	unsigned char *p = (unsigned char *) &session[fd]->client_addr.sin_addr;
-	char ip[16];
-
-	sprintf(ip, "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
-
-	for(id = 0; id < MAX_SERVERS; id++)
-		if (server_fd[id] == fd)
-			break;
-	if (id == MAX_SERVERS || session[fd]->eof) {
-		if (id < MAX_SERVERS) {
-			printf("Char-server '%s' has disconnected.\n", server[id].name);
-			login_log("Char-server '%s' has disconnected (ip: %s)." RETCODE,
-			          server[id].name, ip);
-			server_fd[id] = -1;
-			memset(&server[id], 0, sizeof(struct mmo_char_server));
-		}
-		close(fd);
-		delete_session(fd);
-		return 0;
-	}
-
-	while (RFIFOREST(fd) >= 2) {
-		if (display_parse_fromchar == 2 || (display_parse_fromchar == 1 && RFIFOW(fd,0) != 0x2714)) // 0x2714 is done very often (number of players)
-			printf("parse_fromchar: connection #%d, packet: 0x%x (with being read: %d bytes).\n", fd, RFIFOW(fd,0), RFIFOREST(fd));
-
-		switch (RFIFOW(fd,0)) {
-		// request from map-server via char-server to reload GM accounts (by Yor).
-		case 0x2709:
-			login_log("Char-server '%s': Request to re-load GM configuration file (ip: %s)." RETCODE, server[id].name, ip);
-			read_gm_account();
-			// send GM accounts to all char-servers
-			send_GM_accounts();
-			RFIFOSKIP(fd,2);
-			break;
-
-		case 0x2712: // request from char-server to authentify an account
-			if (RFIFOREST(fd) < 19)
-				return 0;
-		  {
-			int acc;
-			acc = RFIFOL(fd,2); // speed up
-			for(i = 0; i < AUTH_FIFO_SIZE; i++) {
-				if (auth_fifo[i].account_id == acc &&
-				    auth_fifo[i].login_id1 == RFIFOL(fd,6) &&
-#if CMP_AUTHFIFO_LOGIN2 != 0
-				    auth_fifo[i].login_id2 == RFIFOL(fd,10) && // relate to the versions higher than 18
-#endif
-				    auth_fifo[i].sex == RFIFOB(fd,14) &&
-				    (!check_ip_flag || auth_fifo[i].ip == RFIFOL(fd,15)) &&
-				    !auth_fifo[i].delflag) {
-					int p, k;
-					auth_fifo[i].delflag = 1;
-					login_log("Char-server '%s': authentification of the account %d accepted (ip: %s)." RETCODE,
-					          server[id].name, acc, ip);
-//					printf("%d\n", i);
-					for(k = 0; k < auth_num; k++) {
-						if (auth_dat[k].account_id == acc) {
-							WFIFOW(fd,0) = 0x2729;	// Sending of the account_reg2
-							WFIFOL(fd,4) = acc;
-							for(p = 8, j = 0; j < auth_dat[k].account_reg2_num; p += 36, j++) {
-								memcpy(WFIFOP(fd,p), auth_dat[k].account_reg2[j].str, 32);
-								WFIFOL(fd,p+32) = auth_dat[k].account_reg2[j].value;
-							}
-							WFIFOW(fd,2) = p;
-							WFIFOSET(fd,p);
-//							printf("parse_fromchar: Sending of account_reg2: login->char (auth fifo)\n");
-							WFIFOW(fd,0) = 0x2713;
-							WFIFOL(fd,2) = acc;
-							WFIFOB(fd,6) = 0;
-							memcpy(WFIFOP(fd, 7), auth_dat[k].email, 40);
-							WFIFOL(fd,47) = (unsigned long)auth_dat[k].connect_until_time;
-							WFIFOSET(fd,51);
-							break;
-						}
-					}
-					break;
-				}
-			}
-			// authentification not found
-			if (i == AUTH_FIFO_SIZE) {
-				login_log("Char-server '%s': authentification of the account %d REFUSED (ip: %s)." RETCODE,
-				          server[id].name, acc, ip);
-				WFIFOW(fd,0) = 0x2713;
-				WFIFOL(fd,2) = acc;
-				WFIFOB(fd,6) = 1;
-				// It is unnecessary to send email
-				// It is unnecessary to send validity date of the account
-				WFIFOSET(fd,51);
-			}
-		  }
-			RFIFOSKIP(fd,19);
-			break;
-
-		case 0x2714:
-			if (RFIFOREST(fd) < 6)
-				return 0;
-			//printf("parse_fromchar: Receiving of the users number of the server '%s': %d\n", server[id].name, RFIFOL(fd,2));
-			server[id].users = RFIFOL(fd,2);
-			if(anti_freeze_enable)
-				server_freezeflag[id] = 5; // Char anti-freeze system. Counter. 5 ok, 4...0 freezed
-			RFIFOSKIP(fd,6);
-			break;
-
-		// we receive a e-mail creation of an account with a default e-mail (no answer)
-		case 0x2715: {
-			int acc;
-			char email[40];
-			if (RFIFOREST(fd) < 46)
-				return 0;
-			acc = RFIFOL(fd,2); // speed up
-			memcpy(email, RFIFOP(fd,6), 40);
-			email[39] = '\0';
-			remove_control_chars(email);
-			//printf("parse_fromchar: an e-mail creation of an account with a default e-mail: server '%s', account: %d, e-mail: '%s'.\n", server[id].name, acc, RFIFOP(fd,6));
-			if (e_mail_check(email) == 0)
-				login_log("Char-server '%s': Attempt to create an e-mail on an account with a default e-mail REFUSED - e-mail is invalid (account: %d, ip: %s)" RETCODE,
-				          server[id].name, acc, ip);
-			else {
-				for(i = 0; i < auth_num; i++) {
-					if (auth_dat[i].account_id == acc && (strcmp(auth_dat[i].email, "a@a.com") == 0 || auth_dat[i].email[0] == '\0')) {
-						memcpy(auth_dat[i].email, email, 40);
-						login_log("Char-server '%s': Create an e-mail on an account with a default e-mail (account: %d, new e-mail: %s, ip: %s)." RETCODE,
-						          server[id].name, acc, email, ip);
-						// Save
-						mmo_auth_sync();
-						break;
-					}
-				}
-				if (i == auth_num)
-					login_log("Char-server '%s': Attempt to create an e-mail on an account with a default e-mail REFUSED - account doesn't exist or e-mail of account isn't default e-mail (account: %d, ip: %s)." RETCODE,
-					          server[id].name, acc, ip);
-			}
-			RFIFOSKIP(fd,46);
-			break;
-
-		// We receive an e-mail/limited time request, because a player comes back from a map-server to the char-server
-			}
-		case 0x2716:
-			if (RFIFOREST(fd) < 6)
-				return 0;
-			//printf("parse_fromchar: E-mail/limited time request from '%s' server (concerned account: %d)\n", server[id].name, RFIFOL(fd,2));
-			for(i = 0; i < auth_num; i++) {
-				if (auth_dat[i].account_id == RFIFOL(fd,2)) {
-					login_log("Char-server '%s': e-mail of the account %d found (ip: %s)." RETCODE,
-					          server[id].name, RFIFOL(fd,2), ip);
-					WFIFOW(fd,0) = 0x2717;
-					WFIFOL(fd,2) = RFIFOL(fd,2);
-					memcpy(WFIFOP(fd, 6), auth_dat[i].email, 40);
-					WFIFOL(fd,46) = (unsigned long)auth_dat[i].connect_until_time;
-					WFIFOSET(fd,50);
-					break;
-				}
-			}
-			if (i == auth_num) {
-				login_log("Char-server '%s': e-mail of the account %d NOT found (ip: %s)." RETCODE,
-				          server[id].name, RFIFOL(fd,2), ip);
-			}
-			RFIFOSKIP(fd,6);
-			break;
-
-		case 0x2720:	// To become GM request
-			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-			  {
-				int acc;
-				unsigned char buf[10];
-				FILE *fp;
-				acc = RFIFOL(fd,4);
-				//printf("parse_fromchar: Request to become a GM acount from %d account.\n", acc);
-				WBUFW(buf,0) = 0x2721;
-				WBUFL(buf,2) = acc;
-				WBUFL(buf,6) = 0;
-				if (strcmp(RFIFOP(fd,8), gm_pass) == 0) {
-					// only non-GM can become GM
-					if (isGM(acc) == 0) {
-						// if we autorise creation
-						if (level_new_gm > 0) {
-							// if we can open the file to add the new GM
-							if ((fp = fopen(GM_account_filename, "a")) != NULL) {
-								char tmpstr[24];
-								struct timeval tv;
-								gettimeofday(&tv, NULL);
-								strftime(tmpstr, 23, date_format, localtime(&(tv.tv_sec)));
-								fprintf(fp, RETCODE "// %s: @GM command on account %d" RETCODE "%d %d" RETCODE, tmpstr, acc, acc, level_new_gm);
-								fclose(fp);
-								WBUFL(buf,6) = level_new_gm;
-								read_gm_account();
-								send_GM_accounts();
-								printf("GM Change of the account %d: level 0 -> %d.\n", acc, level_new_gm);
-								login_log("Char-server '%s': GM Change of the account %d: level 0 -> %d (ip: %s)." RETCODE,
-								          server[id].name, acc, level_new_gm, ip);
-							} else {
-								printf("Error of GM change (suggested account: %d, correct password, unable to add a GM account in GM accounts file)\n", acc);
-								login_log("Char-server '%s': Error of GM change (suggested account: %d, correct password, unable to add a GM account in GM accounts file, ip: %s)." RETCODE,
-								          server[id].name, acc, ip);
-							}
-						} else {
-							printf("Error of GM change (suggested account: %d, correct password, but GM creation is disable (level_new_gm = 0))\n", acc);
-							login_log("Char-server '%s': Error of GM change (suggested account: %d, correct password, but GM creation is disable (level_new_gm = 0), ip: %s)." RETCODE,
-							          server[id].name, acc, ip);
-						}
-					} else {
-						printf("Error of GM change (suggested account: %d (already GM), correct password).\n", acc);
-						login_log("Char-server '%s': Error of GM change (suggested account: %d (already GM), correct password, ip: %s)." RETCODE,
-						          server[id].name, acc, ip);
-					}
-				} else {
-					printf("Error of GM change (suggested account: %d, invalid password).\n", acc);
-					login_log("Char-server '%s': Error of GM change (suggested account: %d, invalid password, ip: %s)." RETCODE,
-					          server[id].name, acc, ip);
-				}
-				charif_sendallwos(-1, buf, 10);
-			  }
-			RFIFOSKIP(fd, RFIFOW(fd,2));
-			return 0;
-
-		// Map server send information to change an email of an account via char-server
-		case 0x2722:	// 0x2722 <account_id>.L <actual_e-mail>.40B <new_e-mail>.40B
-			if (RFIFOREST(fd) < 86)
-				return 0;
-		  {
-			int acc;
-			char actual_email[40], new_email[40];
-			acc = RFIFOL(fd,2);
-			memcpy(actual_email, RFIFOP(fd,6), 40);
-			actual_email[39] = '\0';
-			remove_control_chars(actual_email);
-			memcpy(new_email, RFIFOP(fd,46), 40);
-			new_email[39] = '\0';
-			remove_control_chars(new_email);
-			if (e_mail_check(actual_email) == 0)
-				login_log("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command), but actual email is invalid (account: %d, ip: %s)" RETCODE,
-				          server[id].name, acc, ip);
-			else if (e_mail_check(new_email) == 0)
-				login_log("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command) with a invalid new e-mail (account: %d, ip: %s)" RETCODE,
-				          server[id].name, acc, ip);
-			else if (strcmpi(new_email, "a@a.com") == 0)
-				login_log("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command) with a default e-mail (account: %d, ip: %s)" RETCODE,
-				          server[id].name, acc, ip);
-			else {
-				for(i = 0; i < auth_num; i++) {
-					if (auth_dat[i].account_id == acc) {
-						if (strcmpi(auth_dat[i].email, actual_email) == 0) {
-							memcpy(auth_dat[i].email, new_email, 40);
-							login_log("Char-server '%s': Modify an e-mail on an account (@email GM command) (account: %d (%s), new e-mail: %s, ip: %s)." RETCODE,
-							          server[id].name, acc, auth_dat[i].userid, new_email, ip);
-							// Save
-							mmo_auth_sync();
-						} else
-							login_log("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command), but actual e-mail is incorrect (account: %d (%s), actual e-mail: %s, proposed e-mail: %s, ip: %s)." RETCODE,
-							          server[id].name, acc, auth_dat[i].userid, auth_dat[i].email, actual_email, ip);
-						break;
-					}
-				}
-				if (i == auth_num)
-					login_log("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command), but account doesn't exist (account: %d, ip: %s)." RETCODE,
-					          server[id].name, acc, ip);
-			}
-		  }
-			RFIFOSKIP(fd, 86);
-			break;
-
-		// Receiving of map-server via char-server a status change resquest (by Yor)
-		case 0x2724:
-			if (RFIFOREST(fd) < 10)
-				return 0;
-			{
-				int acc, statut;
-				acc = RFIFOL(fd,2);
-				statut = RFIFOL(fd,6);
-				for(i = 0; i < auth_num; i++) {
-					if (auth_dat[i].account_id == acc) {
-						if (auth_dat[i].state != statut) {
-							login_log("Char-server '%s': Status change (account: %d, new status %d, ip: %s)." RETCODE,
-							          server[id].name, acc, statut, ip);
-							if (statut != 0) {
-								unsigned char buf[16];
-								WBUFW(buf,0) = 0x2731;
-								WBUFL(buf,2) = acc;
-								WBUFB(buf,6) = 0; // 0: change of statut, 1: ban
-								WBUFL(buf,7) = statut; // status or final date of a banishment
-								charif_sendallwos(-1, buf, 11);
-								for(j = 0; j < AUTH_FIFO_SIZE; j++)
-									if (auth_fifo[j].account_id == acc)
-										auth_fifo[j].login_id1++; // to avoid reconnection error when come back from map-server (char-server will ask again the authentification)
-							}
-							auth_dat[i].state = statut;
-							// Save
-							mmo_auth_sync();
-						} else
-							login_log("Char-server '%s':  Error of Status change - actual status is already the good status (account: %d, status %d, ip: %s)." RETCODE,
-							          server[id].name, acc, statut, ip);
-						break;
-					}
-				}
-				if (i == auth_num) {
-					login_log("Char-server '%s': Error of Status change (account: %d not found, suggested status %d, ip: %s)." RETCODE,
-					          server[id].name, acc, statut, ip);
-				}
-				RFIFOSKIP(fd,10);
-			}
-			return 0;
-
-		case 0x2725:	// Receiving of map-server via char-server a ban resquest (by Yor)
-			if (RFIFOREST(fd) < 18)
-				return 0;
-			{
-				int acc;
-				acc = RFIFOL(fd,2);
-				for(i = 0; i < auth_num; i++) {
-					if (auth_dat[i].account_id == acc) {
-						time_t timestamp;
-						struct tm *tmtime;
-						if (auth_dat[i].ban_until_time == 0 || auth_dat[i].ban_until_time < time(NULL))
-							timestamp = time(NULL);
-						else
-							timestamp = auth_dat[i].ban_until_time;
-						tmtime = localtime(&timestamp);
-						tmtime->tm_year = tmtime->tm_year + (short)RFIFOW(fd,6);
-						tmtime->tm_mon = tmtime->tm_mon + (short)RFIFOW(fd,8);
-						tmtime->tm_mday = tmtime->tm_mday + (short)RFIFOW(fd,10);
-						tmtime->tm_hour = tmtime->tm_hour + (short)RFIFOW(fd,12);
-						tmtime->tm_min = tmtime->tm_min + (short)RFIFOW(fd,14);
-						tmtime->tm_sec = tmtime->tm_sec + (short)RFIFOW(fd,16);
-						timestamp = mktime(tmtime);
-						if (timestamp != -1) {
-							if (timestamp <= time(NULL))
-								timestamp = 0;
-							if (auth_dat[i].ban_until_time != timestamp) {
-								if (timestamp != 0) {
-									unsigned char buf[16];
-									char tmpstr[2048];
-									strftime(tmpstr, 24, date_format, localtime(&timestamp));
-									login_log("Char-server '%s': Ban request (account: %d, new final date of banishment: %d (%s), ip: %s)." RETCODE,
-									          server[id].name, acc, timestamp, (timestamp == 0 ? "no banishment" : tmpstr), ip);
-									WBUFW(buf,0) = 0x2731;
-									WBUFL(buf,2) = auth_dat[i].account_id;
-									WBUFB(buf,6) = 1; // 0: change of statut, 1: ban
-									WBUFL(buf,7) = timestamp; // status or final date of a banishment
-									charif_sendallwos(-1, buf, 11);
-									for(j = 0; j < AUTH_FIFO_SIZE; j++)
-										if (auth_fifo[j].account_id == acc)
-											auth_fifo[j].login_id1++; // to avoid reconnection error when come back from map-server (char-server will ask again the authentification)
-								} else {
-									login_log("Char-server '%s': Error of ban request (account: %d, new date unbans the account, ip: %s)." RETCODE,
-									          server[id].name, acc, ip);
-								}
-								auth_dat[i].ban_until_time = timestamp;
-								// Save
-								mmo_auth_sync();
-							} else {
-								login_log("Char-server '%s': Error of ban request (account: %d, no change for ban date, ip: %s)." RETCODE,
-								          server[id].name, acc, ip);
-							}
-						} else {
-							login_log("Char-server '%s': Error of ban request (account: %d, invalid date, ip: %s)." RETCODE,
-							          server[id].name, acc, ip);
-						}
-						break;
-					}
-				}
-				if (i == auth_num) {
-					login_log("Char-server '%s': Error of ban request (account: %d not found, ip: %s)." RETCODE,
-					          server[id].name, acc, ip);
-				}
-				RFIFOSKIP(fd,18);
-			}
-			return 0;
-
-		case 0x2727:	// Change of sex (sex is reversed)
-			if (RFIFOREST(fd) < 6)
-				return 0;
-			{
-				int acc, sex;
-				acc = RFIFOL(fd,2);
-				for(i = 0; i < auth_num; i++) {
-//					printf("%d,", auth_dat[i].account_id);
-					if (auth_dat[i].account_id == acc) {
-						if (auth_dat[i].sex == 2)
-							login_log("Char-server '%s': Error of sex change - Server account (suggested account: %d, actual sex %d (Server), ip: %s)." RETCODE,
-							          server[id].name, acc, auth_dat[i].sex, ip);
-						else {
-							unsigned char buf[16];
-							if (auth_dat[i].sex == 0)
-								sex = 1;
-							else
-								sex = 0;
-							login_log("Char-server '%s': Sex change (account: %d, new sex %c, ip: %s)." RETCODE,
-							          server[id].name, acc, (sex == 2) ? 'S' : (sex ? 'M' : 'F'), ip);
-							for(j = 0; j < AUTH_FIFO_SIZE; j++)
-								if (auth_fifo[j].account_id == acc)
-									auth_fifo[j].login_id1++; // to avoid reconnection error when come back from map-server (char-server will ask again the authentification)
-							auth_dat[i].sex = sex;
-							WBUFW(buf,0) = 0x2723;
-							WBUFL(buf,2) = acc;
-							WBUFB(buf,6) = sex;
-							charif_sendallwos(-1, buf, 7);
-							// Save
-							mmo_auth_sync();
-						}
-						break;
-					}
-				}
-				if (i == auth_num) {
-					login_log("Char-server '%s': Error of sex change (account: %d not found, sex would be reversed, ip: %s)." RETCODE,
-					          server[id].name, acc, ip);
-				}
-				RFIFOSKIP(fd,6);
-			}
-			return 0;
-
-		case 0x2728:	// We receive account_reg2 from a char-server, and we send them to other char-servers.
-			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-			{
-				int acc, p;
-				acc = RFIFOL(fd,4);
-				for(i = 0; i < auth_num; i++) {
-					if (auth_dat[i].account_id == acc) {
-						unsigned char buf[RFIFOW(fd,2)+1];
-						login_log("Char-server '%s': receiving (from the char-server) of account_reg2 (account: %d, ip: %s)." RETCODE,
-						          server[id].name, acc, ip);
-						for(p = 8, j = 0; p < RFIFOW(fd,2) && j < ACCOUNT_REG2_NUM; p += 36, j++) {
-							memcpy(auth_dat[i].account_reg2[j].str, RFIFOP(fd,p), 32);
-							auth_dat[i].account_reg2[j].str[31] = '\0';
-							remove_control_chars(auth_dat[i].account_reg2[j].str);
-							auth_dat[i].account_reg2[j].value = RFIFOL(fd,p+32);
-						}
-						auth_dat[i].account_reg2_num = j;
-						// Sending information towards the other char-servers.
-						memcpy(WBUFP(buf,0), RFIFOP(fd,0), RFIFOW(fd,2));
-						WBUFW(buf,0) = 0x2729;
-						charif_sendallwos(fd, buf, WBUFW(buf,2));
-						// Save
-						mmo_auth_sync();
-//						printf("parse_fromchar: receiving (from the char-server) of account_reg2 (account id: %d).\n", acc);
-						break;
-					}
-				}
-				if (i == auth_num) {
-//					printf("parse_fromchar: receiving (from the char-server) of account_reg2 (unknwon account id: %d).\n", acc);
-					login_log("Char-server '%s': receiving (from the char-server) of account_reg2 (account: %d not found, ip: %s)." RETCODE,
-					          server[id].name, acc, ip);
-				}
-			}
-			RFIFOSKIP(fd,RFIFOW(fd,2));
-			break;
-
-		case 0x272a:	// Receiving of map-server via char-server a unban resquest (by Yor)
-			if (RFIFOREST(fd) < 6)
-				return 0;
-			{
-				int acc;
-				acc = RFIFOL(fd,2);
-				for(i = 0; i < auth_num; i++) {
-					if (auth_dat[i].account_id == acc) {
-						if (auth_dat[i].ban_until_time != 0) {
-							auth_dat[i].ban_until_time = 0;
-							login_log("Char-server '%s': UnBan request (account: %d, ip: %s)." RETCODE,
-							          server[id].name, acc, ip);
-						} else {
-							login_log("Char-server '%s': Error of UnBan request (account: %d, no change for unban date, ip: %s)." RETCODE,
-							          server[id].name, acc, ip);
-						}
-						break;
-					}
-				}
-				if (i == auth_num) {
-					login_log("Char-server '%s': Error of UnBan request (account: %d not found, ip: %s)." RETCODE,
-					          server[id].name, acc, ip);
-				}
-				RFIFOSKIP(fd,6);
-			}
-			return 0;
-
-		default:
-			{
-				FILE *logfp;
-				char tmpstr[24];
-				struct timeval tv;
-				logfp = fopen(login_log_unknown_packets_filename, "a");
-				if (logfp) {
-					gettimeofday(&tv, NULL);
-					strftime(tmpstr, 23, date_format, localtime(&(tv.tv_sec)));
-					fprintf(logfp, "%s.%03d: receiving of an unknown packet -> disconnection" RETCODE, tmpstr, (int)tv.tv_usec / 1000);
-					fprintf(logfp, "parse_fromchar: connection #%d (ip: %s), packet: 0x%x (with being read: %d)." RETCODE, fd, ip, RFIFOW(fd,0), RFIFOREST(fd));
-					fprintf(logfp, "Detail (in hex):" RETCODE);
-					fprintf(logfp, "---- 00-01-02-03-04-05-06-07  08-09-0A-0B-0C-0D-0E-0F" RETCODE);
-					memset(tmpstr, '\0', sizeof(tmpstr));
-					for(i = 0; i < RFIFOREST(fd); i++) {
-						if ((i & 15) == 0)
-							fprintf(logfp, "%04X ",i);
-						fprintf(logfp, "%02x ", RFIFOB(fd,i));
-						if (RFIFOB(fd,i) > 0x1f)
-							tmpstr[i % 16] = RFIFOB(fd,i);
-						else
-							tmpstr[i % 16] = '.';
-						if ((i - 7) % 16 == 0) // -8 + 1
-							fprintf(logfp, " ");
-						else if ((i + 1) % 16 == 0) {
-							fprintf(logfp, " %s" RETCODE, tmpstr);
-							memset(tmpstr, '\0', sizeof(tmpstr));
-						}
-					}
-					if (i % 16 != 0) {
-						for(j = i; j % 16 != 0; j++) {
-							fprintf(logfp, "   ");
-							if ((j - 7) % 16 == 0) // -8 + 1
-								fprintf(logfp, " ");
-						}
-						fprintf(logfp, " %s" RETCODE, tmpstr);
-					}
-					fprintf(logfp, RETCODE);
-					fclose(logfp);
-				}
-			}
-			printf("parse_fromchar: Unknown packet 0x%x (from a char-server)! -> disconnection.\n", RFIFOW(fd,0));
-			session[fd]->eof = 1;
-			printf("Char-server has been disconnected (unknown packet).\n");
-			return 0;
-		}
-	}
-	return 0;
-}
-
-//---------------------------------------
-// Packet parsing for administation login
-//---------------------------------------
-int parse_admin(int fd) {
-	int i, j;
-	unsigned char *p = (unsigned char *) &session[fd]->client_addr.sin_addr;
-	char* account_name;
-	char ip[16];
-
-	sprintf(ip, "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
-
-	if (session[fd]->eof) {
-		close(fd);
-		delete_session(fd);
-		printf("Remote administration has disconnected (session #%d).\n", fd);
-		return 0;
-	}
-
-	while(RFIFOREST(fd) >= 2) {
-		if (display_parse_admin == 1)
-			printf("parse_admin: connection #%d, packet: 0x%x (with being read: %d).\n", fd, RFIFOW(fd,0), RFIFOREST(fd));
-
-		switch(RFIFOW(fd,0)) {
-		case 0x7530:	// Request of the server version
-			login_log("'ladmin': Sending of the server version (ip: %s)" RETCODE, ip);
-			WFIFOW(fd,0) = 0x7531;
-			WFIFOB(fd,2) = ATHENA_MAJOR_VERSION;
-			WFIFOB(fd,3) = ATHENA_MINOR_VERSION;
-			WFIFOB(fd,4) = ATHENA_REVISION;
-			WFIFOB(fd,5) = ATHENA_RELEASE_FLAG;
-			WFIFOB(fd,6) = ATHENA_OFFICIAL_FLAG;
-			WFIFOB(fd,7) = ATHENA_SERVER_LOGIN;
-			WFIFOW(fd,8) = ATHENA_MOD_VERSION;
-			WFIFOSET(fd,10);
-			RFIFOSKIP(fd,2);
-			break;
-
-		case 0x7532:	// Request of end of connection
-			login_log("'ladmin': End of connection (ip: %s)" RETCODE, ip);
-			RFIFOSKIP(fd,2);
-			session[fd]->eof = 1;
-			break;
-
-		case 0x7920:	// Request of an accounts list
-			if (RFIFOREST(fd) < 10)
-				return 0;
-			{
-				int st, ed, len;
-				int id[auth_num];
-				st = RFIFOL(fd,2);
-				ed = RFIFOL(fd,6);
-				RFIFOSKIP(fd,10);
-				WFIFOW(fd,0) = 0x7921;
-				if (st < 0)
-					st = 0;
-				if (ed > END_ACCOUNT_NUM || ed < st || ed <= 0)
-					ed = END_ACCOUNT_NUM;
-				login_log("'ladmin': Sending an accounts list (ask: from %d to %d, ip: %s)" RETCODE, st, ed, ip);
-				// Sort before send
-				for(i = 0; i < auth_num; i++) {
-					int k;
-					id[i] = i;
-					for(j = 0; j < i; j++) {
-						if (auth_dat[id[i]].account_id < auth_dat[id[j]].account_id) {
-							for(k = i; k > j; k--) {
-								id[k] = id[k-1];
-							}
-							id[j] = i; // id[i]
-							break;
-						}
-					}
-				}
-				// Sending accounts information
-				len = 4;
-				for(i = 0; i < auth_num && len < 30000; i++) {
-					int account_id = auth_dat[id[i]].account_id; // use sorted index
-					if (account_id >= st && account_id <= ed) {
-						j = id[i];
-						WFIFOL(fd,len) = account_id;
-						WFIFOB(fd,len+4) = (unsigned char)isGM(account_id);
-						memcpy(WFIFOP(fd,len+5), auth_dat[j].userid, 24);
-						WFIFOB(fd,len+29) = auth_dat[j].sex;
-						WFIFOL(fd,len+30) = auth_dat[j].logincount;
-						if (auth_dat[j].state == 0 && auth_dat[j].ban_until_time != 0) // if no state and banished
-							WFIFOL(fd,len+34) = 7; // 6 = Your are Prohibited to log in until %s
-						else
-							WFIFOL(fd,len+34) = auth_dat[j].state;
-						len += 38;
-					}
-				}
-				WFIFOW(fd,2) = len;
-				WFIFOSET(fd,len);
-			}
-			break;
-
-		case 0x7930:	// Request for an account creation
-			if (RFIFOREST(fd) < 91)
-				return 0;
-			{
-				struct mmo_account ma;
-				ma.userid = RFIFOP(fd, 2);
-				ma.passwd = RFIFOP(fd, 26);
-				memcpy(ma.lastlogin, "-", 2);
-				ma.sex = RFIFOB(fd,50);
-				WFIFOW(fd,0) = 0x7931;
-				WFIFOL(fd,2) = -1;
-				memcpy(WFIFOP(fd,6), RFIFOP(fd,2), 24);
-				if (strlen(ma.userid) > 23 || strlen(ma.passwd) > 23) {
-					login_log("'ladmin': Attempt to create an invalid account (account or pass is too long, ip: %s)" RETCODE,
-					          ip);
-				} else if (strlen(ma.userid) < 4 || strlen(ma.passwd) < 4) {
-					login_log("'ladmin': Attempt to create an invalid account (account or pass is too short, ip: %s)" RETCODE,
-					          ip);
-				} else if (ma.sex != 'F' && ma.sex != 'M') {
-					login_log("'ladmin': Attempt to create an invalid account (account: %s, received pass: %s, invalid sex, ip: %s)" RETCODE,
-					          ma.userid, ma.passwd, ip);
-				} else if (account_id_count > END_ACCOUNT_NUM) {
-					login_log("'ladmin': Attempt to create an account, but there is no more available id number (account: %s, pass: %s, sex: %c, ip: %s)" RETCODE,
-					          ma.userid, ma.passwd, ma.sex, ip);
-				} else {
-					remove_control_chars(ma.userid);
-					remove_control_chars(ma.passwd);
-					for(i = 0; i < auth_num; i++) {
-						if (strncmp(auth_dat[i].userid, ma.userid, 24) == 0) {
-							login_log("'ladmin': Attempt to create an already existing account (account: %s, pass: %s, received pass: %s, ip: %s)" RETCODE,
-							          auth_dat[i].userid, auth_dat[i].pass, ma.passwd, ip);
-							break;
-						}
-					}
-					if (i == auth_num) {
-						int new_id;
-						char email[40];
-						memcpy(email, RFIFOP(fd,51), 40);
-						email[39] = '\0';
-						remove_control_chars(email);
-						new_id = mmo_auth_new(&ma, ma.sex, email);
-						login_log("'ladmin': Account creation (account: %s (id: %d), pass: %s, sex: %c, email: %s, ip: %s)" RETCODE,
-						          ma.userid, new_id, ma.passwd, ma.sex, auth_dat[i].email, ip);
-						WFIFOL(fd,2) = new_id;
-						mmo_auth_sync();
-					}
-				}
-				WFIFOSET(fd,30);
-				RFIFOSKIP(fd,91);
-			}
-			break;
-
-		case 0x7932:	// Request for an account deletion
-			if (RFIFOREST(fd) < 26)
-				return 0;
-			WFIFOW(fd,0) = 0x7933;
-			WFIFOL(fd,2) = -1;
-			account_name = RFIFOP(fd,2);
-			account_name[23] = '\0';
-			remove_control_chars(account_name);
-			i = search_account_index(account_name);
-			if (i != -1) {
-				// Char-server is notified of deletion (for characters deletion).
-				unsigned char buf[65535];
-				WBUFW(buf,0) = 0x2730;
-				WBUFL(buf,2) = auth_dat[i].account_id;
-				charif_sendallwos(-1, buf, 6);
-				// send answer
-				memcpy(WFIFOP(fd,6), auth_dat[i].userid, 24);
-				WFIFOL(fd,2) = auth_dat[i].account_id;
-				// save deleted account in log file
-				login_log("'ladmin': Account deletion (account: %s, id: %d, ip: %s) - saved in next line:" RETCODE,
-				          auth_dat[i].userid, auth_dat[i].account_id, ip);
-				mmo_auth_tostr(buf, &auth_dat[i]);
-				login_log("%s" RETCODE, buf);
-				// delete account
-				memset(auth_dat[i].userid, '\0', sizeof(auth_dat[i].userid));
-				auth_dat[i].account_id = -1;
-				mmo_auth_sync();
-			} else {
-				memcpy(WFIFOP(fd,6), account_name, 24);
-				login_log("'ladmin': Attempt to delete an unknown account (account: %s, ip: %s)" RETCODE,
-				          account_name, ip);
-			}
-			WFIFOSET(fd,30);
-			RFIFOSKIP(fd,26);
-			break;
-
-		case 0x7934:	// Request to change a password
-			if (RFIFOREST(fd) < 50)
-				return 0;
-			WFIFOW(fd,0) = 0x7935;
-			WFIFOL(fd,2) = -1;
-			account_name = RFIFOP(fd,2);
-			account_name[23] = '\0';
-			remove_control_chars(account_name);
-			i = search_account_index(account_name);
-			if (i != -1) {
-				memcpy(WFIFOP(fd,6), auth_dat[i].userid, 24);
-				memcpy(auth_dat[i].pass, RFIFOP(fd,26), 24);
-				auth_dat[i].pass[23] = '\0';
-				remove_control_chars(auth_dat[i].pass);
-				WFIFOL(fd,2) = auth_dat[i].account_id;
-				login_log("'ladmin': Modification of a password (account: %s, new password: %s, ip: %s)" RETCODE,
-				          auth_dat[i].userid, auth_dat[i].pass, ip);
-				mmo_auth_sync();
-			} else {
-				memcpy(WFIFOP(fd,6), account_name, 24);
-				login_log("'ladmin': Attempt to modify the password of an unknown account (account: %s, ip: %s)" RETCODE,
-				          account_name, ip);
-			}
-			WFIFOSET(fd,30);
-			RFIFOSKIP(fd,50);
-			break;
-
-		case 0x7936:	// Request to modify a state
-			if (RFIFOREST(fd) < 50)
-				return 0;
-			{
-				char error_message[20];
-				int statut;
-				WFIFOW(fd,0) = 0x7937;
-				WFIFOL(fd,2) = -1;
-				account_name = RFIFOP(fd,2);
-				account_name[23] = '\0';
-				remove_control_chars(account_name);
-				statut = RFIFOL(fd,26);
-				memcpy(error_message, RFIFOP(fd,30), 20);
-				error_message[19] = '\0';
-				remove_control_chars(error_message);
-				if (statut != 7 || error_message[0] == '\0') { // 7: // 6 = Your are Prohibited to log in until %s
-					strcpy(error_message, "-");
-				}
-				i = search_account_index(account_name);
-				if (i != -1) {
-					memcpy(WFIFOP(fd,6), auth_dat[i].userid, 24);
-					WFIFOL(fd,2) = auth_dat[i].account_id;
-					if (auth_dat[i].state == statut && strcmp(auth_dat[i].error_message, error_message) == 0)
-						login_log("'ladmin': Modification of a state, but the state of the account is already the good state (account: %s, received state: %d, ip: %s)" RETCODE,
-						          account_name, statut, ip);
-					else {
-						if (statut == 7)
-							login_log("'ladmin': Modification of a state (account: %s, new state: %d - prohibited to login until '%s', ip: %s)" RETCODE,
-							          auth_dat[i].userid, statut, error_message, ip);
-						else
-							login_log("'ladmin': Modification of a state (account: %s, new state: %d, ip: %s)" RETCODE,
-							          auth_dat[i].userid, statut, ip);
-						if (auth_dat[i].state == 0) {
-							unsigned char buf[16];
-							WBUFW(buf,0) = 0x2731;
-							WBUFL(buf,2) = auth_dat[i].account_id;
-							WBUFB(buf,6) = 0; // 0: change of statut, 1: ban
-							WBUFL(buf,7) = statut; // status or final date of a banishment
-							charif_sendallwos(-1, buf, 11);
-							for(j = 0; j < AUTH_FIFO_SIZE; j++)
-								if (auth_fifo[j].account_id == auth_dat[i].account_id)
-									auth_fifo[j].login_id1++; // to avoid reconnection error when come back from map-server (char-server will ask again the authentification)
-						}
-						auth_dat[i].state = statut;
-						memcpy(auth_dat[i].error_message, error_message, 20);
-						mmo_auth_sync();
-					}
-				} else {
-					memcpy(WFIFOP(fd,6), account_name, 24);
-					login_log("'ladmin': Attempt to modify the state of an unknown account (account: %s, received state: %d, ip: %s)" RETCODE,
-					          account_name, statut, ip);
-				}
-				WFIFOL(fd,30) = statut;
-			}
-			WFIFOSET(fd,34);
-			RFIFOSKIP(fd,50);
-			break;
-
-		case 0x7938:	// Request for servers list and # of online players
-			login_log("'ladmin': Sending of servers list (ip: %s)" RETCODE, ip);
-			server_num = 0;
-			for(i = 0; i < MAX_SERVERS; i++) {
-				if (server_fd[i] >= 0) {
-					WFIFOL(fd,4+server_num*32) = server[i].ip;
-					WFIFOW(fd,4+server_num*32+4) = server[i].port;
-					memcpy(WFIFOP(fd,4+server_num*32+6), server[i].name, 20);
-					WFIFOW(fd,4+server_num*32+26) = server[i].users;
-					WFIFOW(fd,4+server_num*32+28) = server[i].maintenance;
-					WFIFOW(fd,4+server_num*32+30) = server[i].new;
-					server_num++;
-				}
-			}
-			WFIFOW(fd,0) = 0x7939;
-			WFIFOW(fd,2) = 4 + 32 * server_num;
-			WFIFOSET(fd,4+32*server_num);
-			RFIFOSKIP(fd,2);
-			break;
-
-		case 0x793a:	// Request to password check
-			if (RFIFOREST(fd) < 50)
-				return 0;
-			WFIFOW(fd,0) = 0x793b;
-			WFIFOL(fd,2) = -1;
-			account_name = RFIFOP(fd,2);
-			account_name[23] = '\0';
-			remove_control_chars(account_name);
-			i = search_account_index(account_name);
-			if (i != -1) {
-				memcpy(WFIFOP(fd,6), auth_dat[i].userid, 24);
-				if (strcmp(auth_dat[i].pass, RFIFOP(fd,26)) == 0) {
-					WFIFOL(fd,2) = auth_dat[i].account_id;
-					login_log("'ladmin': Check of password OK (account: %s, password: %s, ip: %s)" RETCODE,
-					          auth_dat[i].userid, auth_dat[i].pass, ip);
-				} else {
-					char pass[24];
-					memcpy(pass, RFIFOP(fd,26), 24);
-					pass[23] = '\0';
-					remove_control_chars(pass);
-					login_log("'ladmin': Failure of password check (account: %s, proposed pass: %s, ip: %s)" RETCODE,
-					          auth_dat[i].userid, pass, ip);
-				}
-			} else {
-				memcpy(WFIFOP(fd,6), account_name, 24);
-				login_log("'ladmin': Attempt to check the password of an unknown account (account: %s, ip: %s)" RETCODE,
-				          account_name, ip);
-			}
-			WFIFOSET(fd,30);
-			RFIFOSKIP(fd,50);
-			break;
-
-		case 0x793c:	// Request to modify sex
-			if (RFIFOREST(fd) < 27)
-				return 0;
-			WFIFOW(fd,0) = 0x793d;
-			WFIFOL(fd,2) = -1;
-			account_name = RFIFOP(fd,2);
-			account_name[23] = '\0';
-			remove_control_chars(account_name);
-			memcpy(WFIFOP(fd,6), account_name, 24);
-			{
-				char sex;
-				sex = RFIFOB(fd,26);
-				if (sex != 'F' && sex != 'M') {
-					if (sex > 31)
-						login_log("'ladmin': Attempt to give an invalid sex (account: %s, received sex: %c, ip: %s)" RETCODE,
-						          account_name, sex, ip);
-					else
-						login_log("'ladmin': Attempt to give an invalid sex (account: %s, received sex: 'control char', ip: %s)" RETCODE,
-						          account_name, ip);
-				} else {
-					i = search_account_index(account_name);
-					if (i != -1) {
-						memcpy(WFIFOP(fd,6), auth_dat[i].userid, 24);
-						if (auth_dat[i].sex != ((sex == 'S' || sex == 's') ? 2 : (sex == 'M' || sex == 'm'))) {
-							unsigned char buf[16];
-							WFIFOL(fd,2) = auth_dat[i].account_id;
-							for(j = 0; j < AUTH_FIFO_SIZE; j++)
-								if (auth_fifo[j].account_id == auth_dat[i].account_id)
-									auth_fifo[j].login_id1++; // to avoid reconnection error when come back from map-server (char-server will ask again the authentification)
-							auth_dat[i].sex = (sex == 'S' || sex == 's') ? 2 : (sex == 'M' || sex == 'm');
-							login_log("'ladmin': Modification of a sex (account: %s, new sex: %c, ip: %s)" RETCODE,
-							          auth_dat[i].userid, sex, ip);
-							mmo_auth_sync();
-							// send to all char-server the change
-							WBUFW(buf,0) = 0x2723;
-							WBUFL(buf,2) = auth_dat[i].account_id;
-							WBUFB(buf,6) = auth_dat[i].sex;
-							charif_sendallwos(-1, buf, 7);
-						} else {
-							login_log("'ladmin': Modification of a sex, but the sex is already the good sex (account: %s, sex: %c, ip: %s)" RETCODE,
-							          auth_dat[i].userid, sex, ip);
-						}
-					} else {
-						login_log("'ladmin': Attempt to modify the sex of an unknown account (account: %s, received sex: %c, ip: %s)" RETCODE,
-						          account_name, sex, ip);
-					}
-				}
-			}
-			WFIFOSET(fd,30);
-			RFIFOSKIP(fd,27);
-			break;
-
-		case 0x793e:	// Request to modify GM level
-			if (RFIFOREST(fd) < 27)
-				return 0;
-			WFIFOW(fd,0) = 0x793f;
-			WFIFOL(fd,2) = -1;
-			account_name = RFIFOP(fd,2);
-			account_name[23] = '\0';
-			remove_control_chars(account_name);
-			memcpy(WFIFOP(fd,6), account_name, 24);
-			{
-				char new_gm_level;
-				new_gm_level = RFIFOB(fd,26);
-				if (new_gm_level < 0 || new_gm_level > 99) {
-					login_log("'ladmin': Attempt to give an invalid GM level (account: %s, received GM level: %d, ip: %s)" RETCODE,
-					          account_name, (int)new_gm_level, ip);
-				} else {
-					i = search_account_index(account_name);
-					if (i != -1) {
-						int acc = auth_dat[i].account_id;
-						memcpy(WFIFOP(fd,6), auth_dat[i].userid, 24);
-						if (isGM(acc) != new_gm_level) {
-							// modification of the file
-							FILE *fp, *fp2;
-							int lock;
-							char line[512];
-							int GM_account, GM_level;
-							int modify_flag;
-							char tmpstr[24];
-							struct timeval tv;
-							if ((fp2 = lock_fopen(GM_account_filename, &lock)) != NULL) {
-								if ((fp = fopen(GM_account_filename, "r")) != NULL) {
-									gettimeofday(&tv, NULL);
-									strftime(tmpstr, 23, date_format, localtime(&(tv.tv_sec)));
-									modify_flag = 0;
-									// read/write GM file
-									while(fgets(line, sizeof(line)-1, fp)) {
-										while(line[0] != '\0' && (line[strlen(line)-1] == '\n' || line[strlen(line)-1] == '\r'))
-											line[strlen(line)-1] = '\0';
-										if ((line[0] == '/' && line[1] == '/') || line[0] == '\0')
-											fprintf(fp2, "%s" RETCODE, line);
-										else {
-											if (sscanf(line, "%d %d", &GM_account, &GM_level) != 2 && sscanf(line, "%d: %d", &GM_account, &GM_level) != 2)
-												fprintf(fp2, "%s" RETCODE, line);
-											else if (GM_account != acc)
-												fprintf(fp2, "%s" RETCODE, line);
-											else if (new_gm_level < 1) {
-												fprintf(fp2, "// %s: 'ladmin' GM level removed on account %d '%s' (previous level: %d)" RETCODE "//%d %d" RETCODE, tmpstr, acc, auth_dat[i].userid, GM_level, acc, new_gm_level);
-												modify_flag = 1;
-											} else {
-												fprintf(fp2, "// %s: 'ladmin' GM level on account %d '%s' (previous level: %d)" RETCODE "%d %d" RETCODE, tmpstr, acc, auth_dat[i].userid, GM_level, acc, new_gm_level);
-												modify_flag = 1;
-											}
-										}
-									}
-									if (modify_flag == 0)
-										fprintf(fp2, "// %s: 'ladmin' GM level on account %d '%s' (previous level: 0)" RETCODE "%d %d" RETCODE, tmpstr, acc, auth_dat[i].userid, acc, new_gm_level);
-									fclose(fp);
-								} else {
-									login_log("'ladmin': Attempt to modify of a GM level - impossible to read GM accounts file (account: %s (%d), received GM level: %d, ip: %s)" RETCODE,
-									          auth_dat[i].userid, acc, (int)new_gm_level, ip);
-								}
-								if (lock_fclose(fp2, GM_account_filename, &lock) == 0) {
-									WFIFOL(fd,2) = acc;
-									login_log("'ladmin': Modification of a GM level (account: %s (%d), new GM level: %d, ip: %s)" RETCODE,
-									          auth_dat[i].userid, acc, (int)new_gm_level, ip);
-									// read and send new GM informations
-									read_gm_account();
-									send_GM_accounts();
-								} else {
-									login_log("'ladmin': Attempt to modify of a GM level - impossible to write GM accounts file (account: %s (%d), received GM level: %d, ip: %s)" RETCODE,
-									          auth_dat[i].userid, acc, (int)new_gm_level, ip);
-								}
-							} else {
-								login_log("'ladmin': Attempt to modify of a GM level - impossible to write GM accounts file (account: %s (%d), received GM level: %d, ip: %s)" RETCODE,
-								          auth_dat[i].userid, acc, (int)new_gm_level, ip);
-							}
-						} else {
-							login_log("'ladmin': Attempt to modify of a GM level, but the GM level is already the good GM level (account: %s (%d), GM level: %d, ip: %s)" RETCODE,
-							          auth_dat[i].userid, acc, (int)new_gm_level, ip);
-						}
-					} else {
-						login_log("'ladmin': Attempt to modify the GM level of an unknown account (account: %s, received GM level: %d, ip: %s)" RETCODE,
-						          account_name, (int)new_gm_level, ip);
-					}
-				}
-			}
-			WFIFOSET(fd,30);
-			RFIFOSKIP(fd,27);
-			break;
-
-		case 0x7940:	// Request to modify e-mail
-			if (RFIFOREST(fd) < 66)
-				return 0;
-			WFIFOW(fd,0) = 0x7941;
-			WFIFOL(fd,2) = -1;
-			account_name = RFIFOP(fd,2);
-			account_name[23] = '\0';
-			remove_control_chars(account_name);
-			memcpy(WFIFOP(fd,6), account_name, 24);
-			{
-				char email[40];
-				memcpy(email, RFIFOP(fd,26), 40);
-				if (e_mail_check(email) == 0) {
-					login_log("'ladmin': Attempt to give an invalid e-mail (account: %s, ip: %s)" RETCODE,
-					          account_name, ip);
-				} else {
-					remove_control_chars(email);
-					i = search_account_index(account_name);
-					if (i != -1) {
-						memcpy(WFIFOP(fd,6), auth_dat[i].userid, 24);
-						memcpy(auth_dat[i].email, email, 40);
-						WFIFOL(fd,2) = auth_dat[i].account_id;
-						login_log("'ladmin': Modification of an email (account: %s, new e-mail: %s, ip: %s)" RETCODE,
-						          auth_dat[i].userid, email, ip);
-						mmo_auth_sync();
-					} else {
-						login_log("'ladmin': Attempt to modify the e-mail of an unknown account (account: %s, received e-mail: %s, ip: %s)" RETCODE,
-						          account_name, email, ip);
-					}
-				}
-			}
-			WFIFOSET(fd,30);
-			RFIFOSKIP(fd,66);
-			break;
-
-		case 0x7942:	// Request to modify memo field
-			if (RFIFOREST(fd) < 28 || RFIFOREST(fd) < (28 + RFIFOW(fd,26)))
-				return 0;
-			WFIFOW(fd,0) = 0x7943;
-			WFIFOL(fd,2) = -1;
-			account_name = RFIFOP(fd,2);
-			account_name[23] = '\0';
-			remove_control_chars(account_name);
-			i = search_account_index(account_name);
-			if (i != -1) {
-				int size_of_memo = sizeof(auth_dat[i].memo);
-				memcpy(WFIFOP(fd,6), auth_dat[i].userid, 24);
-				memset(auth_dat[i].memo, '\0', size_of_memo);
-				if (RFIFOW(fd,26) == 0) {
-					strncpy(auth_dat[i].memo, "-", size_of_memo);
-				} else if (RFIFOW(fd,26) > size_of_memo - 1) {
-					memcpy(auth_dat[i].memo, RFIFOP(fd,28), size_of_memo - 1);
-				} else {
-					memcpy(auth_dat[i].memo, RFIFOP(fd,28), RFIFOW(fd,26));
-				}
-				auth_dat[i].memo[size_of_memo - 1] = '\0';
-				remove_control_chars(auth_dat[i].memo);
-				WFIFOL(fd,2) = auth_dat[i].account_id;
-				login_log("'ladmin': Modification of a memo field (account: %s, new memo: %s, ip: %s)" RETCODE,
-				          auth_dat[i].userid, auth_dat[i].memo, ip);
-				mmo_auth_sync();
-			} else {
-				memcpy(WFIFOP(fd,6), account_name, 24);
-				login_log("'ladmin': Attempt to modify the memo field of an unknown account (account: %s, ip: %s)" RETCODE,
-				          account_name, ip);
-			}
-			WFIFOSET(fd,30);
-			RFIFOSKIP(fd,28 + RFIFOW(fd,26));
-			break;
-
-		case 0x7944:	// Request to found an account id
-			if (RFIFOREST(fd) < 26)
-				return 0;
-			WFIFOW(fd,0) = 0x7945;
-			WFIFOL(fd,2) = -1;
-			account_name = RFIFOP(fd,2);
-			account_name[23] = '\0';
-			remove_control_chars(account_name);
-			i = search_account_index(account_name);
-			if (i != -1) {
-				memcpy(WFIFOP(fd,6), auth_dat[i].userid, 24);
-				WFIFOL(fd,2) = auth_dat[i].account_id;
-				login_log("'ladmin': Request (by the name) of an account id (account: %s, id: %d, ip: %s)" RETCODE,
-				          auth_dat[i].userid, auth_dat[i].account_id, ip);
-			} else {
-				memcpy(WFIFOP(fd,6), account_name, 24);
-				login_log("'ladmin': ID request (by the name) of an unknown account (account: %s, ip: %s)" RETCODE,
-				          account_name, ip);
-			}
-			WFIFOSET(fd,30);
-			RFIFOSKIP(fd,26);
-			break;
-
-		case 0x7946:	// Request to found an account name
-			if (RFIFOREST(fd) < 6)
-				return 0;
-			WFIFOW(fd,0) = 0x7947;
-			WFIFOL(fd,2) = RFIFOL(fd,2);
-			memset(WFIFOP(fd,6), '\0', 24);
-			for(i = 0; i < auth_num; i++) {
-				if (auth_dat[i].account_id == RFIFOL(fd,2)) {
-					strncpy(WFIFOP(fd,6), auth_dat[i].userid, 24);
-					login_log("'ladmin': Request (by id) of an account name (account: %s, id: %d, ip: %s)" RETCODE,
-					          auth_dat[i].userid, RFIFOL(fd,2), ip);
-					break;
-				}
-			}
-			if (i == auth_num) {
-				login_log("'ladmin': Name request (by id) of an unknown account (id: %d, ip: %s)" RETCODE,
-				          RFIFOL(fd,2), ip);
-				strncpy(WFIFOP(fd,6), "", 24);
-			}
-			WFIFOSET(fd,30);
-			RFIFOSKIP(fd,6);
-			break;
-
-		case 0x7948:	// Request to change the validity limit (timestamp) (absolute value)
-			if (RFIFOREST(fd) < 30)
-				return 0;
-			{
-				time_t timestamp;
-				char tmpstr[2048];
-				WFIFOW(fd,0) = 0x7949;
-				WFIFOL(fd,2) = -1;
-				account_name = RFIFOP(fd,2);
-				account_name[23] = '\0';
-				remove_control_chars(account_name);
-				timestamp = (time_t)RFIFOL(fd,26);
-				strftime(tmpstr, 24, date_format, localtime(&timestamp));
-				i = search_account_index(account_name);
-				if (i != -1) {
-					memcpy(WFIFOP(fd,6), auth_dat[i].userid, 24);
-					login_log("'ladmin': Change of a validity limit (account: %s, new validity: %d (%s), ip: %s)" RETCODE,
-					          auth_dat[i].userid, timestamp, (timestamp == 0 ? "unlimited" : tmpstr), ip);
-					auth_dat[i].connect_until_time = timestamp;
-					WFIFOL(fd,2) = auth_dat[i].account_id;
-					mmo_auth_sync();
-				} else {
-					memcpy(WFIFOP(fd,6), account_name, 24);
-					login_log("'ladmin': Attempt to change the validity limit of an unknown account (account: %s, received validity: %d (%s), ip: %s)" RETCODE,
-					          account_name, timestamp, (timestamp == 0 ? "unlimited" : tmpstr), ip);
-				}
-				WFIFOL(fd,30) = timestamp;
-			}
-			WFIFOSET(fd,34);
-			RFIFOSKIP(fd,30);
-			break;
-
-		case 0x794a:	// Request to change the final date of a banishment (timestamp) (absolute value)
-			if (RFIFOREST(fd) < 30)
-				return 0;
-			{
-				time_t timestamp;
-				char tmpstr[2048];
-				WFIFOW(fd,0) = 0x794b;
-				WFIFOL(fd,2) = -1;
-				account_name = RFIFOP(fd,2);
-				account_name[23] = '\0';
-				remove_control_chars(account_name);
-				timestamp = (time_t)RFIFOL(fd,26);
-				if (timestamp <= time(NULL))
-					timestamp = 0;
-				strftime(tmpstr, 24, date_format, localtime(&timestamp));
-				i = search_account_index(account_name);
-				if (i != -1) {
-					memcpy(WFIFOP(fd,6), auth_dat[i].userid, 24);
-					WFIFOL(fd,2) = auth_dat[i].account_id;
-					login_log("'ladmin': Change of the final date of a banishment (account: %s, new final date of banishment: %d (%s), ip: %s)" RETCODE,
-					          auth_dat[i].userid, timestamp, (timestamp == 0 ? "no banishment" : tmpstr), ip);
-					if (auth_dat[i].ban_until_time != timestamp) {
-						if (timestamp != 0) {
-							unsigned char buf[16];
-							WBUFW(buf,0) = 0x2731;
-							WBUFL(buf,2) = auth_dat[i].account_id;
-							WBUFB(buf,6) = 1; // 0: change of statut, 1: ban
-							WBUFL(buf,7) = timestamp; // status or final date of a banishment
-							charif_sendallwos(-1, buf, 11);
-							for(j = 0; j < AUTH_FIFO_SIZE; j++)
-								if (auth_fifo[j].account_id == auth_dat[i].account_id)
-									auth_fifo[j].login_id1++; // to avoid reconnection error when come back from map-server (char-server will ask again the authentification)
-						}
-						auth_dat[i].ban_until_time = timestamp;
-						mmo_auth_sync();
-					}
-				} else {
-					memcpy(WFIFOP(fd,6), account_name, 24);
-					login_log("'ladmin': Attempt to change the final date of a banishment of an unknown account (account: %s, received final date of banishment: %d (%s), ip: %s)" RETCODE,
-					          account_name, timestamp, (timestamp == 0 ? "no banishment" : tmpstr), ip);
-				}
-				WFIFOL(fd,30) = timestamp;
-			}
-			WFIFOSET(fd,34);
-			RFIFOSKIP(fd,30);
-			break;
-
-		case 0x794c:	// Request to change the final date of a banishment (timestamp) (relative change)
-			if (RFIFOREST(fd) < 38)
-				return 0;
-			{
-				time_t timestamp;
-				struct tm *tmtime;
-				char tmpstr[2048];
-				WFIFOW(fd,0) = 0x794d;
-				WFIFOL(fd,2) = -1;
-				account_name = RFIFOP(fd,2);
-				account_name[23] = '\0';
-				remove_control_chars(account_name);
-				i = search_account_index(account_name);
-				if (i != -1) {
-					WFIFOL(fd,2) = auth_dat[i].account_id;
-					memcpy(WFIFOP(fd,6), auth_dat[i].userid, 24);
-					if (auth_dat[i].ban_until_time == 0 || auth_dat[i].ban_until_time < time(NULL))
-						timestamp = time(NULL);
-					else
-						timestamp = auth_dat[i].ban_until_time;
-					tmtime = localtime(&timestamp);
-					tmtime->tm_year = tmtime->tm_year + (short)RFIFOW(fd,26);
-					tmtime->tm_mon = tmtime->tm_mon + (short)RFIFOW(fd,28);
-					tmtime->tm_mday = tmtime->tm_mday + (short)RFIFOW(fd,30);
-					tmtime->tm_hour = tmtime->tm_hour + (short)RFIFOW(fd,32);
-					tmtime->tm_min = tmtime->tm_min + (short)RFIFOW(fd,34);
-					tmtime->tm_sec = tmtime->tm_sec + (short)RFIFOW(fd,36);
-					timestamp = mktime(tmtime);
-					if (timestamp != -1) {
-						if (timestamp <= time(NULL))
-							timestamp = 0;
-						strftime(tmpstr, 24, date_format, localtime(&timestamp));
-						login_log("'ladmin': Adjustment of a final date of a banishment (account: %s, (%+d y %+d m %+d d %+d h %+d mn %+d s) -> new validity: %d (%s), ip: %s)" RETCODE,
-						          auth_dat[i].userid, (short)RFIFOW(fd,26), (short)RFIFOW(fd,28), (short)RFIFOW(fd,30), (short)RFIFOW(fd,32), (short)RFIFOW(fd,34), (short)RFIFOW(fd,36), timestamp, (timestamp == 0 ? "no banishment" : tmpstr), ip);
-						if (auth_dat[i].ban_until_time != timestamp) {
-							if (timestamp != 0) {
-								unsigned char buf[16];
-								WBUFW(buf,0) = 0x2731;
-								WBUFL(buf,2) = auth_dat[i].account_id;
-								WBUFB(buf,6) = 1; // 0: change of statut, 1: ban
-								WBUFL(buf,7) = timestamp; // status or final date of a banishment
-								charif_sendallwos(-1, buf, 11);
-								for(j = 0; j < AUTH_FIFO_SIZE; j++)
-									if (auth_fifo[j].account_id == auth_dat[i].account_id)
-										auth_fifo[j].login_id1++; // to avoid reconnection error when come back from map-server (char-server will ask again the authentification)
-							}
-							auth_dat[i].ban_until_time = timestamp;
-							mmo_auth_sync();
-						}
-					} else {
-						strftime(tmpstr, 24, date_format, localtime(&auth_dat[i].ban_until_time));
-						login_log("'ladmin': Impossible to adjust the final date of a banishment (account: %s, %d (%s) + (%+d y %+d m %+d d %+d h %+d mn %+d s) -> ???, ip: %s)" RETCODE,
-						          auth_dat[i].userid, auth_dat[i].ban_until_time, (auth_dat[i].ban_until_time == 0 ? "no banishment" : tmpstr), (short)RFIFOW(fd,26), (short)RFIFOW(fd,28), (short)RFIFOW(fd,30), (short)RFIFOW(fd,32), (short)RFIFOW(fd,34), (short)RFIFOW(fd,36), ip);
-					}
-					WFIFOL(fd,30) = (unsigned long)auth_dat[i].ban_until_time;
-				} else {
-					memcpy(WFIFOP(fd,6), account_name, 24);
-					login_log("'ladmin': Attempt to adjust the final date of a banishment of an unknown account (account: %s, ip: %s)" RETCODE,
-					          account_name, ip);
-					WFIFOL(fd,30) = 0;
-				}
-			}
-			WFIFOSET(fd,34);
-			RFIFOSKIP(fd,38);
-			break;
-
-		case 0x794e:	// Request to send a broadcast message
-			if (RFIFOREST(fd) < 8 || RFIFOREST(fd) < (8 + RFIFOL(fd,4)))
-				return 0;
-			WFIFOW(fd,0) = 0x794f;
-			WFIFOW(fd,2) = -1;
-			if (RFIFOL(fd,4) < 1) {
-				login_log("'ladmin': Receiving a message for broadcast, but message is void (ip: %s)" RETCODE,
-				          ip);
-			} else {
-				// at least 1 char-server
-				for(i = 0; i < MAX_SERVERS; i++)
-					if (server_fd[i] >= 0)
-						break;
-				if (i == MAX_SERVERS) {
-					login_log("'ladmin': Receiving a message for broadcast, but no char-server is online (ip: %s)" RETCODE,
-					          ip);
-				} else {
-					char buf[32000];
-					char message[32000];
-					WFIFOW(fd,2) = 0;
-					memset(message, '\0', sizeof(message));
-					memcpy(message, RFIFOP(fd,8), RFIFOL(fd,4));
-					message[sizeof(message)-1] = '\0';
-					remove_control_chars(message);
-					if (RFIFOW(fd,2) == 0)
-						login_log("'ladmin': Receiving a message for broadcast (message (in yellow): %s, ip: %s)" RETCODE,
-						          message, ip);
-					else
-						login_log("'ladmin': Receiving a message for broadcast (message (in blue): %s, ip: %s)" RETCODE,
-						          message, ip);
-					// send same message to all char-servers (no answer)
-					memcpy(WBUFP(buf,0), RFIFOP(fd,0), 8 + RFIFOL(fd,4));
-					WBUFW(buf,0) = 0x2726;
-					charif_sendallwos(-1, buf, 8 + RFIFOL(fd,4));
-				}
-			}
-			WFIFOSET(fd,4);
-			RFIFOSKIP(fd,8 + RFIFOL(fd,4));
-			break;
-
-		case 0x7950:	// Request to change the validity limite (timestamp) (relative change)
-			if (RFIFOREST(fd) < 38)
-				return 0;
-			{
-				time_t timestamp;
-				struct tm *tmtime;
-				char tmpstr[2048];
-				char tmpstr2[2048];
-				WFIFOW(fd,0) = 0x7951;
-				WFIFOL(fd,2) = -1;
-				account_name = RFIFOP(fd,2);
-				account_name[23] = '\0';
-				remove_control_chars(account_name);
-				i = search_account_index(account_name);
-				if (i != -1) {
-					WFIFOL(fd,2) = auth_dat[i].account_id;
-					memcpy(WFIFOP(fd,6), auth_dat[i].userid, 24);
-					timestamp = auth_dat[i].connect_until_time;
-					if (add_to_unlimited_account == 0 && timestamp == 0) {
-						login_log("'ladmin': Attempt to adjust the validity limit of an unlimited account (account: %s, ip: %s)" RETCODE,
-						          auth_dat[i].userid, ip);
-						WFIFOL(fd,30) = 0;
-					} else {
-						if (timestamp == 0 || timestamp < time(NULL))
-							timestamp = time(NULL);
-						tmtime = localtime(&timestamp);
-						tmtime->tm_year = tmtime->tm_year + (short)RFIFOW(fd,26);
-						tmtime->tm_mon = tmtime->tm_mon + (short)RFIFOW(fd,28);
-						tmtime->tm_mday = tmtime->tm_mday + (short)RFIFOW(fd,30);
-						tmtime->tm_hour = tmtime->tm_hour + (short)RFIFOW(fd,32);
-						tmtime->tm_min = tmtime->tm_min + (short)RFIFOW(fd,34);
-						tmtime->tm_sec = tmtime->tm_sec + (short)RFIFOW(fd,36);
-						timestamp = mktime(tmtime);
-						if (timestamp != -1) {
-							strftime(tmpstr, 24, date_format, localtime(&auth_dat[i].connect_until_time));
-							strftime(tmpstr2, 24, date_format, localtime(&timestamp));
-							login_log("'ladmin': Adjustment of a validity limit (account: %s, %d (%s) + (%+d y %+d m %+d d %+d h %+d mn %+d s) -> new validity: %d (%s), ip: %s)" RETCODE,
-							          auth_dat[i].userid, auth_dat[i].connect_until_time, (auth_dat[i].connect_until_time == 0 ? "unlimited" : tmpstr), (short)RFIFOW(fd,26), (short)RFIFOW(fd,28), (short)RFIFOW(fd,30), (short)RFIFOW(fd,32), (short)RFIFOW(fd,34), (short)RFIFOW(fd,36), timestamp, (timestamp == 0 ? "unlimited" : tmpstr2), ip);
-							auth_dat[i].connect_until_time = timestamp;
-							mmo_auth_sync();
-							WFIFOL(fd,30) = (unsigned long)auth_dat[i].connect_until_time;
-						} else {
-							strftime(tmpstr, 24, date_format, localtime(&auth_dat[i].connect_until_time));
-							login_log("'ladmin': Impossible to adjust a validity limit (account: %s, %d (%s) + (%+d y %+d m %+d d %+d h %+d mn %+d s) -> ???, ip: %s)" RETCODE,
-							          auth_dat[i].userid, auth_dat[i].connect_until_time, (auth_dat[i].connect_until_time == 0 ? "unlimited" : tmpstr), (short)RFIFOW(fd,26), (short)RFIFOW(fd,28), (short)RFIFOW(fd,30), (short)RFIFOW(fd,32), (short)RFIFOW(fd,34), (short)RFIFOW(fd,36), ip);
-							WFIFOL(fd,30) = 0;
-						}
-					}
-				} else {
-					memcpy(WFIFOP(fd,6), account_name, 24);
-					login_log("'ladmin': Attempt to adjust the validity limit of an unknown account (account: %s, ip: %s)" RETCODE,
-					          account_name, ip);
-					WFIFOL(fd,30) = 0;
-				}
-			}
-			WFIFOSET(fd,34);
-			RFIFOSKIP(fd,38);
-			break;
-
-		case 0x7952:	// Request about informations of an account (by account name)
-			if (RFIFOREST(fd) < 26)
-				return 0;
-			WFIFOW(fd,0) = 0x7953;
-			WFIFOL(fd,2) = -1;
-			account_name = RFIFOP(fd,2);
-			account_name[23] = '\0';
-			remove_control_chars(account_name);
-			i = search_account_index(account_name);
-			if (i != -1) {
-				WFIFOL(fd,2) = auth_dat[i].account_id;
-				WFIFOB(fd,6) = (unsigned char)isGM(auth_dat[i].account_id);
-				memcpy(WFIFOP(fd,7), auth_dat[i].userid, 24);
-				WFIFOB(fd,31) = auth_dat[i].sex;
-				WFIFOL(fd,32) = auth_dat[i].logincount;
-				WFIFOL(fd,36) = auth_dat[i].state;
-				memcpy(WFIFOP(fd,40), auth_dat[i].error_message, 20);
-				memcpy(WFIFOP(fd,60), auth_dat[i].lastlogin, 24);
-				memcpy(WFIFOP(fd,84), auth_dat[i].last_ip, 16);
-				memcpy(WFIFOP(fd,100), auth_dat[i].email, 40);
-				WFIFOL(fd,140) = (unsigned long)auth_dat[i].connect_until_time;
-				WFIFOL(fd,144) = (unsigned long)auth_dat[i].ban_until_time;
-				WFIFOW(fd,148) = strlen(auth_dat[i].memo);
-				if (auth_dat[i].memo[0]) {
-					memcpy(WFIFOP(fd,150), auth_dat[i].memo, strlen(auth_dat[i].memo));
-				}
-				login_log("'ladmin': Sending information of an account (request by the name; account: %s, id: %d, ip: %s)" RETCODE,
-				          auth_dat[i].userid, auth_dat[i].account_id, ip);
-				WFIFOSET(fd,150+strlen(auth_dat[i].memo));
-			} else {
-				memcpy(WFIFOP(fd,7), account_name, 24);
-				WFIFOW(fd,148) = 0;
-				login_log("'ladmin': Attempt to obtain information (by the name) of an unknown account (account: %s, ip: %s)" RETCODE,
-				          account_name, ip);
-				WFIFOSET(fd,150);
-			}
-			RFIFOSKIP(fd,26);
-			break;
-
-		case 0x7954:	// Request about information of an account (by account id)
-			if (RFIFOREST(fd) < 6)
-				return 0;
-			WFIFOW(fd,0) = 0x7953;
-			WFIFOL(fd,2) = RFIFOL(fd,2);
-			memset(WFIFOP(fd,7), '\0', 24);
-			for(i = 0; i < auth_num; i++) {
-				if (auth_dat[i].account_id == RFIFOL(fd,2)) {
-					login_log("'ladmin': Sending information of an account (request by the id; account: %s, id: %d, ip: %s)" RETCODE,
-					          auth_dat[i].userid, RFIFOL(fd,2), ip);
-					WFIFOB(fd,6) = (unsigned char)isGM(auth_dat[i].account_id);
-					memcpy(WFIFOP(fd,7), auth_dat[i].userid, 24);
-					WFIFOB(fd,31) = auth_dat[i].sex;
-					WFIFOL(fd,32) = auth_dat[i].logincount;
-					WFIFOL(fd,36) = auth_dat[i].state;
-					memcpy(WFIFOP(fd,40), auth_dat[i].error_message, 20);
-					memcpy(WFIFOP(fd,60), auth_dat[i].lastlogin, 24);
-					memcpy(WFIFOP(fd,84), auth_dat[i].last_ip, 16);
-					memcpy(WFIFOP(fd,100), auth_dat[i].email, 40);
-					WFIFOL(fd,140) = (unsigned long)auth_dat[i].connect_until_time;
-					WFIFOL(fd,144) = (unsigned long)auth_dat[i].ban_until_time;
-					WFIFOW(fd,148) = strlen(auth_dat[i].memo);
-					if (auth_dat[i].memo[0]) {
-						memcpy(WFIFOP(fd,150), auth_dat[i].memo, strlen(auth_dat[i].memo));
-					}
-					WFIFOSET(fd,150+strlen(auth_dat[i].memo));
-					break;
-				}
-			}
-			if (i == auth_num) {
-				login_log("'ladmin': Attempt to obtain information (by the id) of an unknown account (id: %d, ip: %s)" RETCODE,
-				          RFIFOL(fd,2), ip);
-				strncpy(WFIFOP(fd,7), "", 24);
-				WFIFOW(fd,148) = 0;
-				WFIFOSET(fd,150);
-			}
-			RFIFOSKIP(fd,6);
-			break;
-
-		case 0x7955:	// Request to reload GM file (no answer)
-			login_log("'ladmin': Request to re-load GM configuration file (ip: %s)." RETCODE, ip);
-			read_gm_account();
-			// send GM accounts to all char-servers
-			send_GM_accounts();
-			RFIFOSKIP(fd,2);
-			break;
-
-		default:
-			{
-				FILE *logfp;
-				char tmpstr[24];
-				struct timeval tv;
-				logfp = fopen(login_log_unknown_packets_filename, "a");
-				if (logfp) {
-					gettimeofday(&tv, NULL);
-					strftime(tmpstr, 23, date_format, localtime(&(tv.tv_sec)));
-					fprintf(logfp, "%s.%03d: receiving of an unknown packet -> disconnection" RETCODE, tmpstr, (int)tv.tv_usec / 1000);
-					fprintf(logfp, "parse_admin: connection #%d (ip: %s), packet: 0x%x (with being read: %d)." RETCODE, fd, ip, RFIFOW(fd,0), RFIFOREST(fd));
-					fprintf(logfp, "Detail (in hex):" RETCODE);
-					fprintf(logfp, "---- 00-01-02-03-04-05-06-07  08-09-0A-0B-0C-0D-0E-0F" RETCODE);
-					memset(tmpstr, '\0', sizeof(tmpstr));
-					for(i = 0; i < RFIFOREST(fd); i++) {
-						if ((i & 15) == 0)
-							fprintf(logfp, "%04X ",i);
-						fprintf(logfp, "%02x ", RFIFOB(fd,i));
-						if (RFIFOB(fd,i) > 0x1f)
-							tmpstr[i % 16] = RFIFOB(fd,i);
-						else
-							tmpstr[i % 16] = '.';
-						if ((i - 7) % 16 == 0) // -8 + 1
-							fprintf(logfp, " ");
-						else if ((i + 1) % 16 == 0) {
-							fprintf(logfp, " %s" RETCODE, tmpstr);
-							memset(tmpstr, '\0', sizeof(tmpstr));
-						}
-					}
-					if (i % 16 != 0) {
-						for(j = i; j % 16 != 0; j++) {
-							fprintf(logfp, "   ");
-							if ((j - 7) % 16 == 0) // -8 + 1
-								fprintf(logfp, " ");
-						}
-						fprintf(logfp, " %s" RETCODE, tmpstr);
-					}
-					fprintf(logfp, RETCODE);
-					fclose(logfp);
-				}
-			}
-			login_log("'ladmin': End of connection, unknown packet (ip: %s)" RETCODE, ip);
-			session[fd]->eof = 1;
-			printf("Remote administration has been disconnected (unknown packet).\n");
-			return 0;
-		}
-		//WFIFOW(fd,0) = 0x791f;
-		//WFIFOSET(fd,2);
-	}
-	return 0;
-}
-
-//--------------------------------------------
-// Test to know if an IP come from LAN or WAN.
-//--------------------------------------------
-int lan_ip_check(unsigned char *p) {
-	int i;
-	int lancheck = 1;
-
-//	printf("lan_ip_check: to compare: %d.%d.%d.%d, network: %d.%d.%d.%d/%d.%d.%d.%d\n",
-//	       p[0], p[1], p[2], p[3],
-//	       subneti[0], subneti[1], subneti[2], subneti[3],
-//	       subnetmaski[0], subnetmaski[1], subnetmaski[2], subnetmaski[3]);
-	for(i = 0; i < 4; i++) {
-		if ((subneti[i] & subnetmaski[i]) != (p[i] & subnetmaski[i])) {
-			lancheck = 0;
-			break;
-		}
-	}
-	printf("LAN test (result): %s source\033[0m.\n", (lancheck) ? "\033[1;36mLAN" : "\033[1;32mWAN");
-	return lancheck;
-}
-
-//----------------------------------------------------------------------------------------
-// Default packet parsing (normal players or administation/char-server connexion requests)
-//----------------------------------------------------------------------------------------
-int parse_login(int fd) {
-	struct mmo_account account;
-	int result, i, j;
-	unsigned char *p = (unsigned char *) &session[fd]->client_addr.sin_addr;
-	char ip[16];
-
-	sprintf(ip, "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
-
-	if (session[fd]->eof) {
-		close(fd);
-		delete_session(fd);
-		return 0;
-	}
-
-	while(RFIFOREST(fd) >= 2) {
-		if (display_parse_login == 1) {
-			if (RFIFOW(fd,0) == 0x64 || RFIFOW(fd,0) == 0x01dd) {
-				if (RFIFOREST(fd) >= ((RFIFOW(fd,0) == 0x64) ? 55 : 47))
-					printf("parse_login: connection #%d, packet: 0x%x (with being read: %d), account: %s.\n", fd, RFIFOW(fd,0), RFIFOREST(fd), RFIFOP(fd,6));
-			} else if (RFIFOW(fd,0) == 0x2710) {
-				if (RFIFOREST(fd) >= 86)
-					printf("parse_login: connection #%d, packet: 0x%x (with being read: %d), server: %s.\n", fd, RFIFOW(fd,0), RFIFOREST(fd), RFIFOP(fd,60));
-			} else
-				printf("parse_login: connection #%d, packet: 0x%x (with being read: %d).\n", fd, RFIFOW(fd,0), RFIFOREST(fd));
-		}
-	
-		switch(RFIFOW(fd,0)) {
-		case 0x200:		// New alive packet: structure: 0x200 <account.userid>.24B. used to verify if client is always alive.
-			if (RFIFOREST(fd) < 26)
-				return 0;
-			RFIFOSKIP(fd,26);
-			break;
-
-		case 0x204:		// New alive packet: structure: 0x204 <encrypted.account.userid>.16B. (new ragexe from 22 june 2004)
-			if (RFIFOREST(fd) < 18)
-				return 0;
-			RFIFOSKIP(fd,18);
-			break;
-
-		case 0x64:		// Ask connection of a client
-		case 0x01dd:	// Ask connection of a client (encryption mode)
-			if (RFIFOREST(fd) < ((RFIFOW(fd,0) == 0x64) ? 55 : 47))
-				return 0;
-
-			account.userid = RFIFOP(fd,6);
-			account.userid[23] = '\0';
-			remove_control_chars(account.userid);
-			account.passwd = RFIFOP(fd,30);
-			if (RFIFOW(fd,0) == 0x64) {
-				account.passwd[23] = '\0';
-				remove_control_chars(account.passwd);
-			}
-#ifdef PASSWORDENC
-			account.passwdenc = (RFIFOW(fd,0) == 0x64) ? 0 : PASSWORDENC;
-#else
-			account.passwdenc = 0;
-#endif
-
-			if (RFIFOW(fd,0) == 0x64) {
-				login_log("Request for connection (non encryption mode) of %s (ip: %s)." RETCODE, account.userid, ip);
-			} else {
-				login_log("Request for connection (encryption mode) of %s (ip: %s)." RETCODE, account.userid, ip);
-			}
-
-			if (!check_ip(session[fd]->client_addr.sin_addr.s_addr)) {
-				login_log("Connection refused: IP isn't authorised (deny/allow, ip: %s)." RETCODE, ip);
-				WFIFOW(fd,0) = 0x6a;
-				WFIFOB(fd,2) = 0x03;
-				WFIFOSET(fd,3);
-				RFIFOSKIP(fd,(RFIFOW(fd,0) == 0x64) ? 55 : 47);
-				break;
-			}
-
-			result = mmo_auth(&account, fd);
-			if (result == -1) {
-				int gm_level = isGM(account.account_id);
-				if (min_level_to_connect > gm_level) {
-					login_log("Connection refused: the minimum GM level for connection is %d (account: %s, GM level: %d, ip: %s)." RETCODE,
-					          min_level_to_connect, account.userid, gm_level, ip);
-					WFIFOW(fd,0) = 0x81;
-					WFIFOL(fd,2) = 1; // 01 = Server closed
-					WFIFOSET(fd,3);
-				} else {
-					if (gm_level)
-						printf("Connection of the GM (level:%d) account '%s' accepted.\n", gm_level, account.userid);
-					else
-						printf("Connection of the account '%s' accepted.\n", account.userid);
-					server_num = 0;
-					for(i = 0; i < MAX_SERVERS; i++) {
-						if (server_fd[i] >= 0) {
-							if (lan_ip_check(p))
-								WFIFOL(fd,47+server_num*32) = inet_addr(lan_char_ip);
-							else
-								WFIFOL(fd,47+server_num*32) = server[i].ip;
-							WFIFOW(fd,47+server_num*32+4) = server[i].port;
-							memcpy(WFIFOP(fd,47+server_num*32+6), server[i].name, 20);
-							WFIFOW(fd,47+server_num*32+26) = server[i].users;
-							WFIFOW(fd,47+server_num*32+28) = server[i].maintenance;
-							WFIFOW(fd,47+server_num*32+30) = server[i].new;
-							server_num++;
-						}
-					}
-					// if at least 1 char-server
-					if (server_num > 0) {
-						WFIFOW(fd,0) = 0x69;
-						WFIFOW(fd,2) = 47+32*server_num;
-						WFIFOL(fd,4) = account.login_id1;
-						WFIFOL(fd,8) = account.account_id;
-						WFIFOL(fd,12) = account.login_id2;
-						WFIFOL(fd,16) = 0; // in old version, that was for ip (not more used)
-						memcpy(WFIFOP(fd,20), account.lastlogin, 24); // in old version, that was for name (not more used)
-						WFIFOB(fd,46) = account.sex;
-						WFIFOSET(fd,47+32*server_num);
-						if (auth_fifo_pos >= AUTH_FIFO_SIZE)
-							auth_fifo_pos = 0;
-						auth_fifo[auth_fifo_pos].account_id = account.account_id;
-						auth_fifo[auth_fifo_pos].login_id1 = account.login_id1;
-						auth_fifo[auth_fifo_pos].login_id2 = account.login_id2;
-						auth_fifo[auth_fifo_pos].sex = account.sex;
-						auth_fifo[auth_fifo_pos].delflag = 0;
-						auth_fifo[auth_fifo_pos].ip = session[fd]->client_addr.sin_addr.s_addr;
-						auth_fifo_pos++;
-					// if no char-server, don't send void list of servers, just disconnect the player with proper message
-					} else {
-						login_log("Connection refused: there is no char-server online (account: %s, ip: %s)." RETCODE,
-						          account.userid, ip);
-						WFIFOW(fd,0) = 0x81;
-						WFIFOL(fd,2) = 1; // 01 = Server closed
-						WFIFOSET(fd,3);
-					}
-				}
-			} else {
-				memset(WFIFOP(fd,0), '\0', 23);
-				WFIFOW(fd,0) = 0x6a;
-				WFIFOB(fd,2) = result;
-				if (result == 6) { // 6 = Your are Prohibited to log in until %s
-					i = search_account_index(account.userid);
-					if (i != -1) {
-						if (auth_dat[i].ban_until_time != 0) { // if account is banned, we send ban timestamp
-							char tmpstr[256];
-							strftime(tmpstr, 20, date_format, localtime(&auth_dat[i].ban_until_time));
-							tmpstr[19] = '\0';
-							memcpy(WFIFOP(fd,3), tmpstr, 20);
-						} else { // we send error message
-							memcpy(WFIFOP(fd,3), auth_dat[i].error_message, 20);
-						}
-					}
-				}
-				WFIFOSET(fd,23);
-			}
-			RFIFOSKIP(fd,(RFIFOW(fd,0) == 0x64) ? 55 : 47);
-			break;
-
-		case 0x01db:	// Sending request of the coding key
-		case 0x791a:	// Sending request of the coding key (administration packet)
-			{
-				struct login_session_data *ld;
-				if (session[fd]->session_data) {
-					printf("login: abnormal request of MD5 key (already opened session).\n");
-					session[fd]->eof = 1;
-					return 0;
-				}
-				ld = session[fd]->session_data = calloc(sizeof(*ld), 1);
-				if (!ld) {
-					printf("login: Request for md5 key: memory allocation failure (malloc)!\n");
-					session[fd]->eof = 1;
-					return 0;
-				}
-				if (RFIFOW(fd,0) == 0x01db) {
-					login_log("Sending request of the coding key (ip: %s)" RETCODE, ip);
-				} else {
-					login_log("'ladmin': Sending request of the coding key (ip: %s)" RETCODE, ip);
-				}
-				// Creation of the coding key
-				memset(ld->md5key, '\0', sizeof(ld->md5key));
-				ld->md5keylen = rand() % 4 + 12;
-				for(i = 0; i < ld->md5keylen; i++)
-					ld->md5key[i] = rand() % 255 + 1;
-
-				RFIFOSKIP(fd,2);
-				WFIFOW(fd,0) = 0x01dc;
-				WFIFOW(fd,2) = 4 + ld->md5keylen;
-				memcpy(WFIFOP(fd,4), ld->md5key, ld->md5keylen);
-				WFIFOSET(fd,WFIFOW(fd,2));
-			}
-			break;
-
-		case 0x2710:	// Connection request of a char-server
-			if (RFIFOREST(fd) < 86)
-				return 0;
-			{
-				int GM_value, len;
-				unsigned char* server_name;
-				account.userid = RFIFOP(fd,2);
-				account.userid[23] = '\0';
-				remove_control_chars(account.userid);
-				account.passwd = RFIFOP(fd,26);
-				account.passwd[23] = '\0';
-				remove_control_chars(account.passwd);
-				account.passwdenc = 0;
-				server_name = RFIFOP(fd,60);
-				server_name[19] = '\0';
-				remove_control_chars(server_name);
-				login_log("Connection request of the char-server '%s' @ %d.%d.%d.%d:%d (ip: %s)" RETCODE,
-				          server_name, RFIFOB(fd,54), RFIFOB(fd,55), RFIFOB(fd,56), RFIFOB(fd,57), RFIFOW(fd,58), ip);
-				result = mmo_auth(&account, fd);
-				if (result == -1 && account.sex == 2 && account.account_id < MAX_SERVERS && server_fd[account.account_id] == -1) {
-					login_log("Connection of the char-server '%s' accepted (account: %s, pass: %s, ip: %s)" RETCODE,
-					          server_name, account.userid, account.passwd, ip);
-					printf("Connection of the char-server '%s' accepted.\n", server_name);
-					memset(&server[account.account_id], 0, sizeof(struct mmo_char_server));
-					server[account.account_id].ip = RFIFOL(fd,54);
-					server[account.account_id].port = RFIFOW(fd,58);
-					memcpy(server[account.account_id].name, server_name, 20);
-					server[account.account_id].users = 0;
-					server[account.account_id].maintenance = RFIFOW(fd,82);
-					server[account.account_id].new = RFIFOW(fd,84);
-					server_fd[account.account_id] = fd;
-					if(anti_freeze_enable)
-						server_freezeflag[account.account_id] = 5; // Char-server anti-freeze system. Counter. 5 ok, 4...0 freezed
-					WFIFOW(fd,0) = 0x2711;
-					WFIFOB(fd,2) = 0;
-					WFIFOSET(fd,3);
-					session[fd]->func_parse = parse_fromchar;
-					realloc_fifo(fd, FIFOSIZE_SERVERLINK, FIFOSIZE_SERVERLINK);
-					// send GM account to char-server
-					len = 4;
-					WFIFOW(fd,0) = 0x2732;
-					for(i = 0; i < auth_num; i++)
-						// send only existing accounts. We can not create a GM account when server is online.
-						if ((GM_value = isGM(auth_dat[i].account_id)) > 0) {
-							WFIFOL(fd,len) = auth_dat[i].account_id;
-							WFIFOB(fd,len+4) = (unsigned char)GM_value;
-							len += 5;
-						}
-					WFIFOW(fd,2) = len;
-					WFIFOSET(fd,len);
-				} else {
-					login_log("Connexion of the char-server '%s' REFUSED (account: %s, pass: %s, ip: %s)" RETCODE,
-					          server_name, account.userid, account.passwd, ip);
-					WFIFOW(fd,0) = 0x2711;
-					WFIFOB(fd,2) = 3;
-					WFIFOSET(fd,3);
-				}
-			}
-			RFIFOSKIP(fd,86);
-			return 0;
-
-		case 0x7530:	// Request of the server version
-			login_log("Sending of the server version (ip: %s)" RETCODE, ip);
-			WFIFOW(fd,0) = 0x7531;
-			WFIFOB(fd,2) = ATHENA_MAJOR_VERSION;
-			WFIFOB(fd,3) = ATHENA_MINOR_VERSION;
-			WFIFOB(fd,4) = ATHENA_REVISION;
-			WFIFOB(fd,5) = ATHENA_RELEASE_FLAG;
-			WFIFOB(fd,6) = ATHENA_OFFICIAL_FLAG;
-			WFIFOB(fd,7) = ATHENA_SERVER_LOGIN;
-			WFIFOW(fd,8) = ATHENA_MOD_VERSION;
-			WFIFOSET(fd,10);
-			RFIFOSKIP(fd,2);
-			break;
-
-		case 0x7532:	// Request to end connection
-			login_log("End of connection (ip: %s)" RETCODE, ip);
-			session[fd]->eof = 1;
-			return 0;
-
-		case 0x7918:	// Request for administation login
-			if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < ((RFIFOW(fd,2) == 0) ? 28 : 20))
-				return 0;
-			WFIFOW(fd,0) = 0x7919;
-			WFIFOB(fd,2) = 1;
-			if (!check_ladminip(session[fd]->client_addr.sin_addr.s_addr)) {
-				login_log("'ladmin'-login: Connection in administration mode refused: IP isn't authorised (ladmin_allow, ip: %s)." RETCODE, ip);
-			} else {
-				struct login_session_data *ld = session[fd]->session_data;
-				if (RFIFOW(fd,2) == 0) {	// non encrypted password
-					unsigned char* password;
-					password = RFIFOP(fd,4);
-					password[23] = '\0';
-					remove_control_chars(password);
-					// If remote administration is enabled and password sent by client matches password read from login server configuration file
-					if ((admin_state == 1) && (strcmp(password, admin_pass) == 0)) {
-						login_log("'ladmin'-login: Connection in administration mode accepted (non encrypted password: %s, ip: %s)" RETCODE, password, ip);
-						printf("Connection of a remote administration accepted (non encrypted password).\n");
-						WFIFOB(fd,2) = 0;
-						session[fd]->func_parse = parse_admin;
-					} else if (admin_state != 1)
-						login_log("'ladmin'-login: Connection in administration mode REFUSED - remote administration is disabled (non encrypted password: %s, ip: %s)" RETCODE, password, ip);
-					else
-						login_log("'ladmin'-login: Connection in administration mode REFUSED - invalid password (non encrypted password: %s, ip: %s)" RETCODE, password, ip);
-				} else {	// encrypted password
-					if (!ld)
-						printf("'ladmin'-login: error! MD5 key not created/requested for an administration login.\n");
-					else {
-						char md5str[64] = "", md5bin[32];
-						if (RFIFOW(fd,2) == 1) {
-							strncpy(md5str, ld->md5key, sizeof(ld->md5key)); // 20
-							strcat(md5str, admin_pass); // 24
-						} else if (RFIFOW(fd,2) == 2) {
-							strncpy(md5str, admin_pass, sizeof(admin_pass)); // 24
-							strcat(md5str, ld->md5key); // 20
-						}
-						MD5_String2binary(md5str, md5bin);
-						// If remote administration is enabled and password hash sent by client matches hash of password read from login server configuration file
-						if ((admin_state == 1) && (memcmp(md5bin, RFIFOP(fd,4), 16) == 0)) {
-							login_log("'ladmin'-login: Connection in administration mode accepted (encrypted password, ip: %s)" RETCODE, ip);
-							printf("Connection of a remote administration accepted (encrypted password).\n");
-							WFIFOB(fd,2) = 0;
-							session[fd]->func_parse = parse_admin;
-						} else if (admin_state != 1)
-							login_log("'ladmin'-login: Connection in administration mode REFUSED - remote administration is disabled (encrypted password, ip: %s)" RETCODE, ip);
-						else
-							login_log("'ladmin'-login: Connection in administration mode REFUSED - invalid password (encrypted password, ip: %s)" RETCODE, ip);
-					}
-				}
-			}
-			WFIFOSET(fd,3);
-			RFIFOSKIP(fd, (RFIFOW(fd,2) == 0) ? 28 : 20);
-			break;
-
-		default:
-			if (save_unknown_packets) {
-				FILE *logfp;
-				char tmpstr[24];
-				struct timeval tv;
-				logfp = fopen(login_log_unknown_packets_filename, "a");
-				if (logfp) {
-					gettimeofday(&tv, NULL);
-					strftime(tmpstr, 23, date_format, localtime(&(tv.tv_sec)));
-					fprintf(logfp, "%s.%03d: receiving of an unknown packet -> disconnection" RETCODE, tmpstr, (int)tv.tv_usec / 1000);
-					fprintf(logfp, "parse_login: connection #%d (ip: %s), packet: 0x%x (with being read: %d)." RETCODE, fd, ip, RFIFOW(fd,0), RFIFOREST(fd));
-					fprintf(logfp, "Detail (in hex):" RETCODE);
-					fprintf(logfp, "---- 00-01-02-03-04-05-06-07  08-09-0A-0B-0C-0D-0E-0F" RETCODE);
-					memset(tmpstr, '\0', sizeof(tmpstr));
-					for(i = 0; i < RFIFOREST(fd); i++) {
-						if ((i & 15) == 0)
-							fprintf(logfp, "%04X ",i);
-						fprintf(logfp, "%02x ", RFIFOB(fd,i));
-						if (RFIFOB(fd,i) > 0x1f)
-							tmpstr[i % 16] = RFIFOB(fd,i);
-						else
-							tmpstr[i % 16] = '.';
-						if ((i - 7) % 16 == 0) // -8 + 1
-							fprintf(logfp, " ");
-						else if ((i + 1) % 16 == 0) {
-							fprintf(logfp, " %s" RETCODE, tmpstr);
-							memset(tmpstr, '\0', sizeof(tmpstr));
-						}
-					}
-					if (i % 16 != 0) {
-						for(j = i; j % 16 != 0; j++) {
-							fprintf(logfp, "   ");
-							if ((j - 7) % 16 == 0) // -8 + 1
-								fprintf(logfp, " ");
-						}
-						fprintf(logfp, " %s" RETCODE, tmpstr);
-					}
-					fprintf(logfp, RETCODE);
-					fclose(logfp);
-				}
-			}
-			login_log("End of connection, unknown packet (ip: %s)" RETCODE, ip);
-			session[fd]->eof = 1;
-			return 0;
-		}
-	}
-	return 0;
-}
-
-
-//-------------------------------------------------
-// Return numerical value of a switch configuration
-// on/off, english, fran�ais, deutsch, espa�ol
-//-------------------------------------------------
-int config_switch(const char *str) {
-	if (strcmpi(str, "on") == 0 || strcmpi(str, "yes") == 0 || strcmpi(str, "oui") == 0 || strcmpi(str, "ja") == 0 || strcmpi(str, "si") == 0)
-		return 1;
-	if (strcmpi(str, "off") == 0 || strcmpi(str, "no") == 0 || strcmpi(str, "non") == 0 || strcmpi(str, "nein") == 0)
-		return 0;
-
-	return atoi(str);
-}
-
-//----------------------------------
-// Reading Lan Support configuration
-//----------------------------------
-int login_lan_config_read(const char *lancfgName) {
-	int j;
-	struct hostent * h = NULL;
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp;
-
-	// set default configuration
-	strncpy(lan_char_ip, "127.0.0.1", sizeof(lan_char_ip));
-	subneti[0] = 127;
-	subneti[1] = 0;
-	subneti[2] = 0;
-	subneti[3] = 1;
-	for(j = 0; j < 4; j++)
-		subnetmaski[j] = 255;
-
-	fp = fopen(lancfgName, "r");
-
-	if (fp == NULL) {
-		printf("***WARNING: LAN Support configuration file is not found: %s\n", lancfgName);
-		return 1;
-	}
-
-	printf("---Start reading Lan Support configuration file\n");
-
-	while(fgets(line, sizeof(line)-1, fp)) {
-		if (line[0] == '/' && line[1] == '/')
-			continue;
-
-		line[sizeof(line)-1] = '\0';
-		if (sscanf(line,"%[^:]: %[^\r\n]", w1, w2) != 2)
-			continue;
-
-		remove_control_chars(w1);
-		remove_control_chars(w2);
-		if (strcmpi(w1, "lan_char_ip") == 0) { // Read Char-Server Lan IP Address
-			h = gethostbyname(w2);
-			if (h != NULL) {
-				sprintf(lan_char_ip, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-			} else {
-				strncpy(lan_char_ip, w2, sizeof(lan_char_ip));
-				lan_char_ip[sizeof(lan_char_ip)-1] = '\0';
-			}
-			printf("LAN IP of char-server: %s.\n", lan_char_ip);
-		} else if (strcmpi(w1, "subnet") == 0) { // Read Subnetwork
-			for(j = 0; j < 4; j++)
-				subneti[j] = 0;
-			h = gethostbyname(w2);
-			if (h != NULL) {
-				for(j = 0; j < 4; j++)
-					subneti[j] = (unsigned char)h->h_addr[j];
-			} else {
-				sscanf(w2, "%d.%d.%d.%d", &subneti[0], &subneti[1], &subneti[2], &subneti[3]);
-			}
-			printf("Sub-network of the char-server: %d.%d.%d.%d.\n", subneti[0], subneti[1], subneti[2], subneti[3]);
-		} else if (strcmpi(w1, "subnetmask") == 0) { // Read Subnetwork Mask
-			for(j = 0; j < 4; j++)
-				subnetmaski[j] = 255;
-			h = gethostbyname(w2);
-			if (h != NULL) {
-				for(j = 0; j < 4; j++)
-					subnetmaski[j] = (unsigned char)h->h_addr[j];
-			} else {
-				sscanf(w2, "%d.%d.%d.%d", &subnetmaski[0], &subnetmaski[1], &subnetmaski[2], &subnetmaski[3]);
-			}
-			printf("Sub-network mask of the char-server: %d.%d.%d.%d.\n", subnetmaski[0], subnetmaski[1], subnetmaski[2], subnetmaski[3]);
-		}
-	}
-	fclose(fp);
-
-	// log the LAN configuration
-	login_log("The LAN configuration of the server is set:" RETCODE);
-	login_log("- with LAN IP of char-server: %s." RETCODE, lan_char_ip);
-	login_log("- with the sub-network of the char-server: %d.%d.%d.%d/%d.%d.%d.%d." RETCODE,
-	   subneti[0], subneti[1], subneti[2], subneti[3], subnetmaski[0], subnetmaski[1], subnetmaski[2], subnetmaski[3]);
-
-	// sub-network check of the char-server
-	{
-		unsigned int a0, a1, a2, a3;
-		unsigned char p[4];
-		sscanf(lan_char_ip, "%d.%d.%d.%d", &a0, &a1, &a2, &a3);
-		p[0] = a0; p[1] = a1; p[2] = a2; p[3] = a3;
-		printf("LAN test of LAN IP of the char-server: ");
-		if (lan_ip_check(p) == 0) {
-			printf("\033[1;31m***ERROR: LAN IP of the char-server doesn't belong to the specified Sub-network\033[0m\n");
-			login_log("***ERROR: LAN IP of the char-server doesn't belong to the specified Sub-network." RETCODE);
-		}
-	}
-
-	printf("---End reading of Lan Support configuration file\n");
-
-	return 0;
-}
-
-//-----------------------------------
-// Reading general configuration file
-//-----------------------------------
-int login_config_read(const char *cfgName) {
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp;
-
-	fp = fopen(cfgName, "r");
-	if (fp == NULL) {
-		printf("Configuration file (%s) not found.\n", cfgName);
-		return 1;
-	}
-
-	printf("---Start reading of Login Server configuration file (%s)\n", cfgName);
-	while(fgets(line, sizeof(line)-1, fp)) {
-		if (line[0] == '/' && line[1] == '/')
-			continue;
-
-		line[sizeof(line)-1] = '\0';
-		if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) == 2) {
-			remove_control_chars(w1);
-			remove_control_chars(w2);
-
-			if (strcmpi(w1, "admin_state") == 0) {
-				admin_state = config_switch(w2);
-			} else if (strcmpi(w1, "admin_pass") == 0) {
-				strncpy(admin_pass, w2, sizeof(admin_pass));
-				admin_pass[sizeof(admin_pass)-1] = '\0';
-			} else if (strcmpi(w1, "ladminallowip") == 0) {
-				if (strcmpi(w2, "clear") == 0) {
-					if (access_ladmin_allow)
-						free(access_ladmin_allow);
-					access_ladmin_allow = NULL;
-					access_ladmin_allownum = 0;
-				} else {
-					if (strcmpi(w2, "all") == 0) {
-						// reset all previous values
-						if (access_ladmin_allow)
-							free(access_ladmin_allow);
-						// set to all
-						access_ladmin_allow = calloc(ACO_STRSIZE, 1);
-						access_ladmin_allownum = 1;
-						access_ladmin_allow[0] = '\0';
-					} else if (w2[0] && !(access_ladmin_allownum == 1 && access_ladmin_allow[0] == '\0')) { // don't add IP if already 'all'
-						if (access_ladmin_allow)
-							access_ladmin_allow = realloc(access_ladmin_allow, (access_ladmin_allownum+1) * ACO_STRSIZE);
-						else
-							access_ladmin_allow = calloc(ACO_STRSIZE, 1);
-						strncpy(access_ladmin_allow + (access_ladmin_allownum++) * ACO_STRSIZE, w2, ACO_STRSIZE);
-						access_ladmin_allow[access_ladmin_allownum * ACO_STRSIZE - 1] = '\0';
-					}
-				}
-			} else if (strcmpi(w1, "gm_pass") == 0) {
-				strncpy(gm_pass, w2, sizeof(gm_pass));
-				gm_pass[sizeof(gm_pass)-1] = '\0';
-			} else if (strcmpi(w1, "level_new_gm") == 0) {
-				level_new_gm = atoi(w2);
-			} else if (strcmpi(w1, "new_account") == 0) {
-				new_account_flag = config_switch(w2);
-			} else if (strcmpi(w1, "login_port") == 0) {
-				login_port = atoi(w2);
-			} else if (strcmpi(w1, "account_filename") == 0) {
-				strncpy(account_filename, w2, sizeof(account_filename));
-				account_filename[sizeof(account_filename)-1] = '\0';
-			} else if (strcmpi(w1, "gm_account_filename") == 0) {
-				strncpy(GM_account_filename, w2, sizeof(GM_account_filename));
-				GM_account_filename[sizeof(GM_account_filename)-1] = '\0';
-			} else if (strcmpi(w1, "gm_account_filename_check_timer") == 0) {
-				gm_account_filename_check_timer = atoi(w2);
-			} else if (strcmpi(w1, "login_log_filename") == 0) {
-				strncpy(login_log_filename, w2, sizeof(login_log_filename));
-				login_log_filename[sizeof(login_log_filename)-1] = '\0';
-			} else if (strcmpi(w1, "login_log_unknown_packets_filename") == 0) {
-				strncpy(login_log_unknown_packets_filename, w2, sizeof(login_log_unknown_packets_filename));
-				login_log_unknown_packets_filename[sizeof(login_log_unknown_packets_filename)-1] = '\0';
-			} else if (strcmpi(w1, "save_unknown_packets") == 0) {
-				save_unknown_packets = config_switch(w2);
-			} else if (strcmpi(w1, "display_parse_login") == 0) {
-				display_parse_login = config_switch(w2); // 0: no, 1: yes
-			} else if (strcmpi(w1, "display_parse_admin") == 0) {
-				display_parse_admin = config_switch(w2); // 0: no, 1: yes
-			} else if (strcmpi(w1, "display_parse_fromchar") == 0) {
-				display_parse_fromchar = config_switch(w2); // 0: no, 1: yes (without packet 0x2714), 2: all packets
-			} else if (strcmpi(w1, "date_format") == 0) { // note: never have more than 19 char for the date!
-				switch (atoi(w2)) {
-				case 0:
-					strcpy(date_format, "%d-%m-%Y %H:%M:%S"); // 31-12-2004 23:59:59
-					break;
-				case 1:
-					strcpy(date_format, "%m-%d-%Y %H:%M:%S"); // 12-31-2004 23:59:59
-					break;
-				case 2:
-					strcpy(date_format, "%Y-%d-%m %H:%M:%S"); // 2004-31-12 23:59:59
-					break;
-				case 3:
-					strcpy(date_format, "%Y-%m-%d %H:%M:%S"); // 2004-12-31 23:59:59
-					break;
-				}
-			} else if (strcmpi(w1, "min_level_to_connect") == 0) {
-				min_level_to_connect = atoi(w2);
-			} else if (strcmpi(w1, "add_to_unlimited_account") == 0) {
-				add_to_unlimited_account = config_switch(w2);
-			} else if (strcmpi(w1, "start_limited_time") == 0) {
-				start_limited_time = atoi(w2);
-			} else if (strcmpi(w1, "check_ip_flag") == 0) {
-				check_ip_flag = config_switch(w2);
-			} else if (strcmpi(w1, "order") == 0) {
-				access_order = atoi(w2);
-				if (strcmpi(w2, "deny,allow") == 0 ||
-				    strcmpi(w2, "deny, allow") == 0) access_order = ACO_DENY_ALLOW;
-				if (strcmpi(w2, "allow,deny") == 0 ||
-				    strcmpi(w2, "allow, deny") == 0) access_order = ACO_ALLOW_DENY;
-				if (strcmpi(w2, "mutual-failture") == 0 ||
-				    strcmpi(w2, "mutual-failure") == 0) access_order = ACO_MUTUAL_FAILTURE;
-			} else if (strcmpi(w1, "allow") == 0) {
-				if (strcmpi(w2, "clear") == 0) {
-					if (access_allow)
-						free(access_allow);
-					access_allow = NULL;
-					access_allownum = 0;
-				} else {
-					if (strcmpi(w2, "all") == 0) {
-						// reset all previous values
-						if (access_allow)
-							free(access_allow);
-						// set to all
-						access_allow = calloc(ACO_STRSIZE, 1);
-						access_allownum = 1;
-						access_allow[0] = '\0';
-					} else if (w2[0] && !(access_allownum == 1 && access_allow[0] == '\0')) { // don't add IP if already 'all'
-						if (access_allow)
-							access_allow = realloc(access_allow, (access_allownum+1) * ACO_STRSIZE);
-						else
-							access_allow = calloc(ACO_STRSIZE, 1);
-						strncpy(access_allow + (access_allownum++) * ACO_STRSIZE, w2, ACO_STRSIZE);
-						access_allow[access_allownum * ACO_STRSIZE - 1] = '\0';
-					}
-				}
-			} else if (strcmpi(w1, "deny") == 0) {
-				if (strcmpi(w2, "clear") == 0) {
-					if (access_deny)
-						free(access_deny);
-					access_deny = NULL;
-					access_denynum = 0;
-				} else {
-					if (strcmpi(w2, "all") == 0) {
-						// reset all previous values
-						if (access_deny)
-							free(access_deny);
-						// set to all
-						access_deny = calloc(ACO_STRSIZE, 1);
-						access_denynum = 1;
-						access_deny[0] = '\0';
-					} else if (w2[0] && !(access_denynum == 1 && access_deny[0] == '\0')) { // don't add IP if already 'all'
-						if (access_deny)
-							access_deny = realloc(access_deny, (access_denynum+1) * ACO_STRSIZE);
-						else
-							access_deny = calloc(ACO_STRSIZE, 1);
-						strncpy(access_deny + (access_denynum++) * ACO_STRSIZE, w2, ACO_STRSIZE);
-						access_deny[access_denynum * ACO_STRSIZE - 1] = '\0';
-					}
-				}
-			} else if(strcmpi(w1,"anti_freeze_enable")==0){
-				anti_freeze_enable = config_switch(w2);
-			} else if (strcmpi(w1, "anti_freeze_interval") == 0) {
-				ANTI_FREEZE_INTERVAL = atoi(w2);
-				if (ANTI_FREEZE_INTERVAL < 5)
-					ANTI_FREEZE_INTERVAL = 5; // minimum 5 seconds
-			} else if (strcmpi(w1, "import") == 0) {
-				login_config_read(w2);
-			}
-		}
-	}
-	fclose(fp);
-
-	printf("---End reading of Login Server configuration file.\n");
-
-	return 0;
-}
-
-//-------------------------------------
-// Displaying of configuration warnings
-//-------------------------------------
-void display_conf_warnings(void) {
-	if (admin_state != 0 && admin_state != 1) {
-		printf("***WARNING: Invalid value for admin_state parameter -> set to 0 (no remote admin).\n");
-		admin_state = 0;
-	}
-
-	if (admin_state == 1) {
-		if (admin_pass[0] == '\0') {
-			printf("***WARNING: Administrator password is void (admin_pass).\n");
-		} else if (strcmp(admin_pass, "admin") == 0) {
-			printf("***WARNING: You are using the default administrator password (admin_pass).\n");
-			printf("            We highly recommend that you change it.\n");
-		}
-	}
-
-	if (gm_pass[0] == '\0') {
-		printf("***WARNING: 'To GM become' password is void (gm_pass).\n");
-		printf("            We highly recommend that you set one password.\n");
-	} else if (strcmp(gm_pass, "gm") == 0) {
-		printf("***WARNING: You are using the default GM password (gm_pass).\n");
-		printf("            We highly recommend that you change it.\n");
-	}
-
-	if (level_new_gm < 0 || level_new_gm > 99) {
-		printf("***WARNING: Invalid value for level_new_gm parameter -> set to 60 (default).\n");
-		level_new_gm = 60;
-	}
-
-	if (new_account_flag != 0 && new_account_flag != 1) {
-		printf("***WARNING: Invalid value for new_account parameter -> set to 0 (no new account).\n");
-		new_account_flag = 0;
-	}
-
-	if (login_port < 1024 || login_port > 65535) {
-		printf("***WARNING: Invalid value for login_port parameter -> set to 6900 (default).\n");
-		login_port = 6900;
-	}
-
-	if (gm_account_filename_check_timer < 0) {
-		printf("***WARNING: Invalid value for gm_account_filename_check_timer parameter.\n");
-		printf("            -> set to 15 sec (default).\n");
-		gm_account_filename_check_timer = 15;
-	} else if (gm_account_filename_check_timer == 1) {
-		printf("***WARNING: Invalid value for gm_account_filename_check_timer parameter.\n");
-		printf("            -> set to 2 sec (minimum value).\n");
-		gm_account_filename_check_timer = 2;
-	}
-
-	if (save_unknown_packets != 0 && save_unknown_packets != 1) {
-		printf("WARNING: Invalid value for save_unknown_packets parameter -> set to 0-no save.\n");
-		save_unknown_packets = 0;
-	}
-
-	if (display_parse_login != 0 && display_parse_login != 1) { // 0: no, 1: yes
-		printf("***WARNING: Invalid value for display_parse_login parameter\n");
-		printf("            -> set to 0 (no display).\n");
-		display_parse_login = 0;
-	}
-
-	if (display_parse_admin != 0 && display_parse_admin != 1) { // 0: no, 1: yes
-		printf("***WARNING: Invalid value for display_parse_admin parameter\n");
-		printf("            -> set to 0 (no display).\n");
-		display_parse_admin = 0;
-	}
-
-	if (display_parse_fromchar < 0 || display_parse_fromchar > 2) { // 0: no, 1: yes (without packet 0x2714), 2: all packets
-		printf("***WARNING: Invalid value for display_parse_fromchar parameter\n");
-		printf("            -> set to 0 (no display).\n");
-		display_parse_fromchar = 0;
-	}
-
-	if (min_level_to_connect < 0) { // 0: all players, 1-99 at least gm level x
-		printf("***WARNING: Invalid value for min_level_to_connect (%d) parameter\n", min_level_to_connect);
-		printf("            -> set to 0 (any player).\n");
-		min_level_to_connect = 0;
-	} else if (min_level_to_connect > 99) { // 0: all players, 1-99 at least gm level x
-		printf("***WARNING: Invalid value for min_level_to_connect (%d) parameter\n", min_level_to_connect);
-		printf("            -> set to 99 (only GM level 99).\n");
-		min_level_to_connect = 99;
-	}
-
-	if (add_to_unlimited_account != 0 && add_to_unlimited_account != 1) { // 0: no, 1: yes
-		printf("***WARNING: Invalid value for add_to_unlimited_account parameter\n");
-		printf("            -> set to 0 (impossible to add a time to an unlimited account).\n");
-		add_to_unlimited_account = 0;
-	}
-
-	if (start_limited_time < -1) { // -1: create unlimited account, 0 or more: additionnal sec from now to create limited time
-		printf("***WARNING: Invalid value for start_limited_time parameter\n");
-		printf("            -> set to -1 (new accounts are created with unlimited time).\n");
-		start_limited_time = -1;
-	}
-
-	if (check_ip_flag != 0 && check_ip_flag != 1) { // 0: no, 1: yes
-		printf("***WARNING: Invalid value for check_ip_flag parameter\n");
-		printf("            -> set to 1 (check players ip between login-server & char-server).\n");
-		check_ip_flag = 1;
-	}
-
-	if (access_order == ACO_DENY_ALLOW) {
-		if (access_denynum == 1 && access_deny[0] == '\0') {
-			printf("***WARNING: The IP security order is 'deny,allow' (allow if not deny).\n");
-			printf("            And you refuse ALL IP.\n");
-		}
-	} else if (access_order == ACO_ALLOW_DENY) {
-		if (access_allownum == 0) {
-			printf("***WARNING: The IP security order is 'allow,deny' (deny if not allow).\n");
-			printf("            But, NO IP IS AUTHORISED!\n");
-		}
-	} else { // ACO_MUTUAL_FAILTURE
-		if (access_allownum == 0) {
-			printf("***WARNING: The IP security order is 'mutual-failture'\n");
-			printf("            (allow if in the allow list and not in the deny list).\n");
-			printf("            But, NO IP IS AUTHORISED!\n");
-		} else if (access_denynum == 1 && access_deny[0] == '\0') {
-			printf("***WARNING: The IP security order is mutual-failture\n");
-			printf("            (allow if in the allow list and not in the deny list).\n");
-			printf("            But, you refuse ALL IP!\n");
-		}
-	}
-
-	return;
-}
-
-//-------------------------------
-// Save configuration in log file
-//-------------------------------
-void save_config_in_log(void) {
-	int i;
-
-	// a newline in the log...
-	login_log("");
-	login_log("The login-server starting..." RETCODE);
-
-	// save configuration in log file
-	login_log("The configuration of the server is set:" RETCODE);
-
-	if (admin_state != 1)
-		login_log("- with no remote administration." RETCODE);
-	else if (admin_pass[0] == '\0')
-		login_log("- with a remote administration with a VOID password." RETCODE);
-	else if (strcmp(admin_pass, "admin") == 0)
-		login_log("- with a remote administration with the DEFAULT password." RETCODE);
-	else
-		login_log("- with a remote administration with the password of %d character(s)." RETCODE, strlen(admin_pass));
-	if (access_ladmin_allownum == 0 || (access_ladmin_allownum == 1 && access_ladmin_allow[0] == '\0')) {
-		login_log("- to accept any IP for remote administration" RETCODE);
-	} else {
-		login_log("- to accept following IP for remote administration:" RETCODE);
-		for(i = 0; i < access_ladmin_allownum; i++)
-			login_log("  %s" RETCODE, (char *)(access_ladmin_allow + i * ACO_STRSIZE));
-	}
-
-	if (gm_pass[0] == '\0')
-		login_log("- with a VOID 'To GM become' password (gm_pass)." RETCODE);
-	else if (strcmp(gm_pass, "gm") == 0)
-		login_log("- with the DEFAULT 'To GM become' password (gm_pass)." RETCODE);
-	else
-		login_log("- with a 'To GM become' password (gm_pass) of %d character(s)." RETCODE, strlen(gm_pass));
-	if (level_new_gm == 0)
-		login_log("- to refuse any creation of GM with @gm." RETCODE);
-	else
-		login_log("- to create GM with level '%d' when @gm is used." RETCODE, level_new_gm);
-
-	if (new_account_flag == 1)
-		login_log("- to ALLOW new users (with _F/_M)." RETCODE);
-	else
-		login_log("- to NOT ALLOW new users (with _F/_M)." RETCODE);
-	login_log("- with port: %d." RETCODE, login_port);
-	login_log("- with the accounts file name: '%s'." RETCODE, account_filename);
-	login_log("- with the GM accounts file name: '%s'." RETCODE, GM_account_filename);
-	if (gm_account_filename_check_timer == 0)
-		login_log("- to NOT check GM accounts file modifications." RETCODE);
-	else
-		login_log("- to check GM accounts file modifications every %d seconds." RETCODE, gm_account_filename_check_timer);
-
-	// not necessary to log the 'login_log_filename', we are inside :)
-
-	login_log("- with the unknown packets file name: '%s'." RETCODE, login_log_unknown_packets_filename);
-	if (save_unknown_packets)
-		login_log("- to SAVE all unkown packets." RETCODE);
-	else
-		login_log("- to SAVE only unkown packets sending by a char-server or a remote administration." RETCODE);
-	if (display_parse_login)
-		login_log("- to display normal parse packets on console." RETCODE);
-	else
-		login_log("- to NOT display normal parse packets on console." RETCODE);
-	if (display_parse_admin)
-		login_log("- to display administration parse packets on console." RETCODE);
-	else
-		login_log("- to NOT display administration parse packets on console." RETCODE);
-	if (display_parse_fromchar)
-		login_log("- to display char-server parse packets on console." RETCODE);
-	else
-		login_log("- to NOT display char-server parse packets on console." RETCODE);
-
-	if (min_level_to_connect == 0) // 0: all players, 1-99 at least gm level x
-		login_log("- with no minimum level for connection." RETCODE);
-	else if (min_level_to_connect == 99)
-		login_log("- to accept only GM with level 99." RETCODE);
-	else
-		login_log("- to accept only GM with level %d or more." RETCODE, min_level_to_connect);
-
-	if (add_to_unlimited_account)
-		login_log("- to authorize adjustment (with timeadd ladmin) on an unlimited account." RETCODE);
-	else
-		login_log("- to refuse adjustment (with timeadd ladmin) on an unlimited account. You must use timeset (ladmin command) before." RETCODE);
-
-	if (start_limited_time < 0)
-		login_log("- to create new accounts with an unlimited time." RETCODE);
-	else if (start_limited_time == 0)
-		login_log("- to create new accounts with a limited time: time of creation." RETCODE);
-	else
-		login_log("- to create new accounts with a limited time: time of creation + %d second(s)." RETCODE, start_limited_time);
-
-	if (check_ip_flag)
-		login_log("- with control of players IP between login-server and char-server." RETCODE);
-	else
-		login_log("- to not check players IP between login-server and char-server." RETCODE);
-
-	if (access_order == ACO_DENY_ALLOW) {
-		if (access_denynum == 0) {
-			login_log("- with the IP security order: 'deny,allow' (allow if not deny). You refuse no IP." RETCODE);
-		} else if (access_denynum == 1 && access_deny[0] == '\0') {
-			login_log("- with the IP security order: 'deny,allow' (allow if not deny). You refuse ALL IP." RETCODE);
-		} else {
-			login_log("- with the IP security order: 'deny,allow' (allow if not deny). Refused IP are:" RETCODE);
-			for(i = 0; i < access_denynum; i++)
-				login_log("  %s" RETCODE, (char *)(access_deny + i * ACO_STRSIZE));
-		}
-	} else if (access_order == ACO_ALLOW_DENY) {
-		if (access_allownum == 0) {
-			login_log("- with the IP security order: 'allow,deny' (deny if not allow). But, NO IP IS AUTHORISED!" RETCODE);
-		} else if (access_allownum == 1 && access_allow[0] == '\0') {
-			login_log("- with the IP security order: 'allow,deny' (deny if not allow). You authorise ALL IP." RETCODE);
-		} else {
-			login_log("- with the IP security order: 'allow,deny' (deny if not allow). Authorised IP are:" RETCODE);
-			for(i = 0; i < access_allownum; i++)
-				login_log("  %s" RETCODE, (char *)(access_allow + i * ACO_STRSIZE));
-		}
-	} else { // ACO_MUTUAL_FAILTURE
-		login_log("- with the IP security order: 'mutual-failture' (allow if in the allow list and not in the deny list)." RETCODE);
-		if (access_allownum == 0) {
-			login_log("  But, NO IP IS AUTHORISED!" RETCODE);
-		} else if (access_denynum == 1 && access_deny[0] == '\0') {
-			login_log("  But, you refuse ALL IP!" RETCODE);
-		} else {
-			if (access_allownum == 1 && access_allow[0] == '\0') {
-				login_log("  You authorise ALL IP." RETCODE);
-			} else {
-				login_log("  Authorised IP are:" RETCODE);
-				for(i = 0; i < access_allownum; i++)
-					login_log("    %s" RETCODE, (char *)(access_allow + i * ACO_STRSIZE));
-			}
-			login_log("  Refused IP are:" RETCODE);
-			for(i = 0; i < access_denynum; i++)
-				login_log("    %s" RETCODE, (char *)(access_deny + i * ACO_STRSIZE));
-		}
-	}
-}
-
-//--------------------------------------
-// Function called at exit of the server
-//--------------------------------------
-void do_final(void) {
-	int i, fd;
-
-	mmo_auth_sync();
-
-	free(auth_dat);
-	free(gm_account_db);
-	for (i = 0; i < MAX_SERVERS; i++) {
-		if ((fd = server_fd[i]) >= 0)
-			delete_session(fd);
-	}
-	delete_session(login_fd);
-
-	login_log("----End of login-server (normal end with closing of all files)." RETCODE);
-}
-
-//------------------------------
-// Main function of login-server
-//------------------------------
-int do_init(int argc, char **argv) {
-	int i, j;
-
-	// read login-server configuration
-	login_config_read((argc > 1) ? argv[1] : LOGIN_CONF_NAME);
-	display_conf_warnings(); // not in login_config_read, because we can use 'import' option, and display same message twice or more
-	save_config_in_log(); // not before, because log file name can be changed
-	login_lan_config_read((argc > 1) ? argv[1] : LAN_CONF_NAME);
-
-	srand(time(NULL));
-
-	for(i = 0; i< AUTH_FIFO_SIZE; i++)
-		auth_fifo[i].delflag = 1;
-	for(i = 0; i < MAX_SERVERS; i++)
-		server_fd[i] = -1;
-
-	gm_account_db = numdb_init();
-
-	read_gm_account();
-	mmo_auth_init();
-	set_termfunc(mmo_auth_sync);
-	set_defaultparse(parse_login);
-	login_fd = make_listen_port(login_port);
-	
-	add_timer_func_list(check_auth_sync, "check_auth_sync");
-
-	i = add_timer_interval(gettick() + 60000, check_auth_sync, 0, 0, 60000); // every 60 sec we check if we must save accounts file (only if necessary to save)
-
-	if(anti_freeze_enable > 0) {
-		add_timer_func_list(char_anti_freeze_system, "char_anti_freeze_system");
-		i = add_timer_interval(gettick() + 1000, char_anti_freeze_system, 0, 0, ANTI_FREEZE_INTERVAL * 1000);
-	}
-
-	// add timer to check GM accounts file modification
-	j = gm_account_filename_check_timer;
-	if (j == 0) // if we would not to check, we check every 60 sec, just to have timer (if we change timer, is was not necessary to check if timer already exists)
-		j = 60;
-	add_timer_func_list(check_GM_file, "check_GM_file");
-	i = add_timer_interval(gettick() + j * 1000, check_GM_file, 0, 0, j * 1000); // every x sec we check if gm file has been changed
-
-	login_log("The login-server is ready (Server is listening on the port %d)." RETCODE, login_port);
-
-	printf("The login-server is \033[1;32mready\033[0m (Server is listening on the port %d).\n\n", login_port);
-
-	atexit(do_final);
-	return 0;
-}
-
-
diff --git a/misc/src/login/login.h b/misc/src/login/login.h
deleted file mode 100644
index 3a8a6d5..0000000
--- a/misc/src/login/login.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// $Id: login.h,v 1.1.1.1 2004/09/10 17:26:53 MagicalTux Exp $
-#ifndef _LOGIN_H_
-#define _LOGIN_H_
-
-#define MAX_SERVERS 30
-
-#define LOGIN_CONF_NAME "conf/login_athena.conf"
-#define LAN_CONF_NAME "conf/lan_support.conf"
-#define PASSWORDENC 3	// A definition is given when making an encryption password correspond.
-                     	// It is 1 at the time of passwordencrypt.
-                     	// It is made into 2 at the time of passwordencrypt2.
-                     	// When it is made 3, it corresponds to both.
-#define START_ACCOUNT_NUM 2000000
-#define END_ACCOUNT_NUM 100000000
-
-struct mmo_account {
-	char* userid;
-	char* passwd;
-	int passwdenc;
-
-	long account_id;
-	long login_id1;
-	long login_id2;
-	long char_id;
-	char lastlogin[24];
-	int sex;
-};
-
-struct mmo_char_server {
-	char name[20];
-	long ip;
-	short port;
-	int users;
-	int maintenance;
-	int new;
-};
-
-#endif
diff --git a/misc/src/login/md5calc.c b/misc/src/login/md5calc.c
deleted file mode 100644
index 96bfc34..0000000
--- a/misc/src/login/md5calc.c
+++ /dev/null
@@ -1,237 +0,0 @@
-// $Id: md5calc.c,v 1.1.1.1 2004/09/10 17:26:54 MagicalTux Exp $
-/***********************************************************
- * md5 calculation algorithm
- *
- * The source code referred to the following URL.
- * http://www.geocities.co.jp/SiliconValley-Oakland/8878/lab17/lab17.html
- *
- ***********************************************************/
-
-#include "md5calc.h"
-#include <string.h>
-#include <stdio.h>
-
-#ifndef UINT_MAX
-#define UINT_MAX 4294967295U
-#endif
-
-// Global variable
-static unsigned int *pX;
-
-// Stirng Table
-static const unsigned int T[] = {
-   0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, //0
-   0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, //4
-   0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, //8
-   0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, //12
-   0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, //16
-   0xd62f105d,  0x2441453, 0xd8a1e681, 0xe7d3fbc8, //20
-   0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, //24
-   0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, //28
-   0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, //32
-   0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, //36
-   0x289b7ec6, 0xeaa127fa, 0xd4ef3085,  0x4881d05, //40
-   0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, //44
-   0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, //48
-   0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, //52
-   0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, //56
-   0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391  //60
-};
-
-// ROTATE_LEFT   The left is made to rotate x [ n-bit ]. This is diverted as it is from RFC.
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
-
-// The function used for other calculation
-static unsigned int F(unsigned int X, unsigned int Y, unsigned int Z)
-{
-   return (X & Y) | (~X & Z);
-}
-static unsigned int G(unsigned int X, unsigned int Y, unsigned int Z)
-{
-   return (X & Z) | (Y & ~Z);
-}
-static unsigned int H(unsigned int X, unsigned int Y, unsigned int Z)
-{
-   return X ^ Y ^ Z;
-}
-static unsigned int I(unsigned int X, unsigned int Y, unsigned int Z)
-{
-   return Y ^ (X | ~Z);
-}
-
-static unsigned int Round(unsigned int a, unsigned int b, unsigned int FGHI,
-                     unsigned int k, unsigned int s, unsigned int i)
-{
-   return b + ROTATE_LEFT(a + FGHI + pX[k] + T[i], s);
-}
-
-static void Round1(unsigned int *a, unsigned int b, unsigned int c,
-		unsigned int d,unsigned int k, unsigned int s, unsigned int i)
-{
-	*a = Round(*a, b, F(b,c,d), k, s, i);
-}
-static void Round2(unsigned int *a, unsigned int b, unsigned int c,
-		unsigned int d,unsigned int k, unsigned int s, unsigned int i)
-{
-	*a = Round(*a, b, G(b,c,d), k, s, i);
-}
-static void Round3(unsigned int *a, unsigned int b, unsigned int c,
-		unsigned int d,unsigned int k, unsigned int s, unsigned int i)
-{
-	*a = Round(*a, b, H(b,c,d), k, s, i);
-}
-static void Round4(unsigned int *a, unsigned int b, unsigned int c,
-		unsigned int d,unsigned int k, unsigned int s, unsigned int i)
-{
-	*a = Round(*a, b, I(b,c,d), k, s, i);
-}
-
-static void MD5_Round_Calculate(const unsigned char *block,
-	unsigned int *A2, unsigned int *B2, unsigned int *C2, unsigned int *D2)
-{
-	//create X It is since it is required.
-	unsigned int X[16]; //512bit 64byte
-	int j,k;
-
-	//Save A as AA, B as BB, C as CC, and and D as DD (saving of A, B, C, and D)
-	unsigned int A=*A2, B=*B2, C=*C2, D=*D2;
-	unsigned int AA = A,BB = B,CC = C,DD = D;
-	
-	//It is a large region variable reluctantly because of calculation of a round. . . for Round1...4
-	pX = X;
-
-	//Copy block(padding_message) i into X
-	for (j=0,k=0; j<64; j+=4,k++)
-		X[k] = ( (unsigned int )block[j] )         // 8byte*4 -> 32byte conversion
-			| ( ((unsigned int )block[j+1]) << 8 ) // A function called Decode as used in the field of RFC
-			| ( ((unsigned int )block[j+2]) << 16 )
-			| ( ((unsigned int )block[j+3]) << 24 );
-
-
-   //Round 1
-   Round1(&A,B,C,D,  0, 7,  0); Round1(&D,A,B,C,  1, 12,  1); Round1(&C,D,A,B,  2, 17,  2); Round1(&B,C,D,A,  3, 22,  3);
-   Round1(&A,B,C,D,  4, 7,  4); Round1(&D,A,B,C,  5, 12,  5); Round1(&C,D,A,B,  6, 17,  6); Round1(&B,C,D,A,  7, 22,  7);
-   Round1(&A,B,C,D,  8, 7,  8); Round1(&D,A,B,C,  9, 12,  9); Round1(&C,D,A,B, 10, 17, 10); Round1(&B,C,D,A, 11, 22, 11);
-   Round1(&A,B,C,D, 12, 7, 12); Round1(&D,A,B,C, 13, 12, 13); Round1(&C,D,A,B, 14, 17, 14); Round1(&B,C,D,A, 15, 22, 15);
-
-   //Round 2
-   Round2(&A,B,C,D,  1, 5, 16); Round2(&D,A,B,C,  6, 9, 17); Round2(&C,D,A,B, 11, 14, 18); Round2(&B,C,D,A,  0, 20, 19);
-   Round2(&A,B,C,D,  5, 5, 20); Round2(&D,A,B,C, 10, 9, 21); Round2(&C,D,A,B, 15, 14, 22); Round2(&B,C,D,A,  4, 20, 23);
-   Round2(&A,B,C,D,  9, 5, 24); Round2(&D,A,B,C, 14, 9, 25); Round2(&C,D,A,B,  3, 14, 26); Round2(&B,C,D,A,  8, 20, 27);
-   Round2(&A,B,C,D, 13, 5, 28); Round2(&D,A,B,C,  2, 9, 29); Round2(&C,D,A,B,  7, 14, 30); Round2(&B,C,D,A, 12, 20, 31);
-
-   //Round 3
-   Round3(&A,B,C,D,  5, 4, 32); Round3(&D,A,B,C,  8, 11, 33); Round3(&C,D,A,B, 11, 16, 34); Round3(&B,C,D,A, 14, 23, 35);
-   Round3(&A,B,C,D,  1, 4, 36); Round3(&D,A,B,C,  4, 11, 37); Round3(&C,D,A,B,  7, 16, 38); Round3(&B,C,D,A, 10, 23, 39);
-   Round3(&A,B,C,D, 13, 4, 40); Round3(&D,A,B,C,  0, 11, 41); Round3(&C,D,A,B,  3, 16, 42); Round3(&B,C,D,A,  6, 23, 43);
-   Round3(&A,B,C,D,  9, 4, 44); Round3(&D,A,B,C, 12, 11, 45); Round3(&C,D,A,B, 15, 16, 46); Round3(&B,C,D,A,  2, 23, 47);
-
-   //Round 4
-   Round4(&A,B,C,D,  0, 6, 48); Round4(&D,A,B,C,  7, 10, 49); Round4(&C,D,A,B, 14, 15, 50); Round4(&B,C,D,A,  5, 21, 51);
-   Round4(&A,B,C,D, 12, 6, 52); Round4(&D,A,B,C,  3, 10, 53); Round4(&C,D,A,B, 10, 15, 54); Round4(&B,C,D,A,  1, 21, 55);
-   Round4(&A,B,C,D,  8, 6, 56); Round4(&D,A,B,C, 15, 10, 57); Round4(&C,D,A,B,  6, 15, 58); Round4(&B,C,D,A, 13, 21, 59);
-   Round4(&A,B,C,D,  4, 6, 60); Round4(&D,A,B,C, 11, 10, 61); Round4(&C,D,A,B,  2, 15, 62); Round4(&B,C,D,A,  9, 21, 63);
-
-   // Then perform the following additions. (let's add)
-   *A2 = A + AA;
-   *B2 = B + BB;
-   *C2 = C + CC;
-   *D2 = D + DD;
-
-   //The clearance of confidential information
-   memset(pX, 0, sizeof(X));
-}
-
-//-------------------------------------------------------------------
-// The function for the exteriors
-
-/** output is the coded binary in the character sequence which wants to code string. */
-void MD5_String2binary(const char * string, char * output)
-{
-//var
-   /*8bit*/
-   unsigned char padding_message[64]; //Extended message   512bit 64byte
-   unsigned char *pstring;             //The position of string in the present scanning notes is held.
-
-//   unsigned char digest[16];
-   /*32bit*/
-   unsigned int string_byte_len,    //The byte chief of string is held.
-                   string_bit_len,     //The bit length of string is held.
-                   copy_len,           //The number of bytes which is used by 1-3 and which remained
-                   msg_digest[4];      //Message digest   128bit 4byte
-   unsigned int *A = &msg_digest[0], //The message digest in accordance with RFC (reference)
-                   *B = &msg_digest[1],
-                   *C = &msg_digest[2],
-                   *D = &msg_digest[3];
-	int i;
-
-//prog
-   //Step 3.Initialize MD Buffer (although it is the initialization; step 3 of A, B, C, and D -- unavoidable -- a head)
-   *A = 0x67452301;
-   *B = 0xefcdab89;
-   *C = 0x98badcfe;
-   *D = 0x10325476;
-
-   //Step 1.Append Padding Bits (extension of a mark bit)
-   //1-1
-   string_byte_len = strlen(string);    //The byte chief of a character sequence is acquired.
-   pstring = (unsigned char *)string; //The position of the present character sequence is set.
-
-   //1-2  Repeat calculation until length becomes less than 64 bytes.
-   for (i=string_byte_len; 64<=i; i-=64,pstring+=64)
-        MD5_Round_Calculate(pstring, A,B,C,D);
-
-   //1-3
-   copy_len = string_byte_len % 64;                               //The number of bytes which remained is computed.
-   strncpy((char *)padding_message, (char *)pstring, copy_len); //A message is copied to an extended bit sequence.
-   memset(padding_message+copy_len, 0, 64 - copy_len);           //It buries by 0 until it becomes extended bit length.
-   padding_message[copy_len] |= 0x80;                            //The next of a message is 1.
-
-   //1-4 
-   //If 56 bytes or more (less than 64 bytes) of remainder becomes, it will calculate by extending to 64 bytes.
-   if (56 <= copy_len) {
-       MD5_Round_Calculate(padding_message, A,B,C,D);
-       memset(padding_message, 0, 56); //56 bytes is newly fill uped with 0.
-   }
-
-
-   //Step 2.Append Length (the information on length is added)
-   string_bit_len = string_byte_len * 8;             //From the byte chief to bit length (32 bytes of low rank)
-   memcpy(&padding_message[56], &string_bit_len, 4); //32 bytes of low rank is set.
-
-   //When bit length cannot be expressed in 32 bytes of low rank, it is a beam raising to a higher rank.
-  if (UINT_MAX / 8 < string_byte_len) {
-      unsigned int high = (string_byte_len - UINT_MAX / 8) * 8;
-      memcpy(&padding_message[60], &high, 4);
-  } else
-      memset(&padding_message[60], 0, 4); //In this case, it is good for a higher rank at 0.
-
-   //Step 4.Process Message in 16-Word Blocks (calculation of MD5)
-   MD5_Round_Calculate(padding_message, A,B,C,D);
-
-
-   //Step 5.Output (output)
-   memcpy(output,msg_digest,16);
-//   memcpy (digest, msg_digest, and 16);  //8 byte*4 < - 32byte conversion   A function called Encode as used in the field of RFC
-/*   sprintf(output,
-           "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
-           digest[ 0], digest[ 1], digest[ 2], digest[ 3],
-           digest[ 4], digest[ 5], digest[ 6], digest[ 7],
-           digest[ 8], digest[ 9], digest[10], digest[11],
-           digest[12], digest[13], digest[14], digest[15]);*/
-}
-
-/** output is the coded character sequence in the character sequence which wants to code string. */
-void MD5_String(const char * string, char * output)
-{
-   unsigned char digest[16];
-
-	MD5_String2binary(string,digest);
-	sprintf(output,
-		"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
-		digest[ 0], digest[ 1], digest[ 2], digest[ 3],
-		digest[ 4], digest[ 5], digest[ 6], digest[ 7],
-		digest[ 8], digest[ 9], digest[10], digest[11],
-		digest[12], digest[13], digest[14], digest[15]);
-}
-
diff --git a/misc/src/login/md5calc.h b/misc/src/login/md5calc.h
deleted file mode 100644
index 9137b5b..0000000
--- a/misc/src/login/md5calc.h
+++ /dev/null
@@ -1,8 +0,0 @@
-// $Id: md5calc.h,v 1.1.1.1 2004/09/10 17:26:54 MagicalTux Exp $
-#ifndef _MD5CALC_H_
-#define _MD5CALC_H_
-
-void MD5_String(const char * string, char * output);
-void MD5_String2binary(const char * string, char * output);
-
-#endif
diff --git a/misc/src/login_sql/GNUmakefile b/misc/src/login_sql/GNUmakefile
deleted file mode 100644
index c245b79..0000000
--- a/misc/src/login_sql/GNUmakefile
+++ /dev/null
@@ -1,17 +0,0 @@
-all: login-server_sql
-sql: login-server_sql
-
-shared_libs=all
-COMMON_OBJ = ../common/core.o ../common/socket.o ../common/timer.o ../common/db.o ../common/malloc.o
-COMMON_H = ../common/core.h ../common/socket.h ../common/timer.h ../common/mmo.h ../common/version.h ../common/db.h ../common/malloc.h
-
-login-server_sql: login.o md5calc.o strlib.o $(COMMON_OBJ)
-	$(CC) -o ../../$@ $^ $(LIB_S)
-
-login.o: login.c login.h md5calc.h strlib.h $(COMMON_H)
-md5calc.o: md5calc.c md5calc.h
-strlib.o: strlib.c strlib.h
-
-clean:
-	rm -f *.o ../../login-server_sql
-
diff --git a/misc/src/login_sql/Makefile b/misc/src/login_sql/Makefile
deleted file mode 100644
index d1f2734..0000000
--- a/misc/src/login_sql/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-all: login-server_sql
-sql: login-server_sql
-
-shared_libs=all
-COMMON_OBJ = ../common/core.o ../common/socket.o ../common/timer.o ../common/db.o ../common/malloc.o
-COMMON_H = ../common/core.h ../common/socket.h ../common/timer.h ../common/mmo.h ../common/version.h ../common/db.h ../common/malloc.h
-
-login-server_sql: login.o md5calc.o strlib.o $(COMMON_OBJ)
-	$(CC) -o ../../$@ $^ $(LIB_S)
-
-login.o: login.c login.h md5calc.h strlib.h $(COMMON_H)
-md5calc.o: md5calc.c md5calc.h
-strlib.o: strlib.c strlib.h
-
-clean:
-	rm -f *.o ../../login-server_sql
-
diff --git a/misc/src/login_sql/login.c b/misc/src/login_sql/login.c
deleted file mode 100644
index 2fab051..0000000
--- a/misc/src/login_sql/login.c
+++ /dev/null
@@ -1,1682 +0,0 @@
-// $Id: login.c,v 1.6 2004/09/19 21:12:07 Valaris Exp $
-// original : login2.c 2003/01/28 02:29:17 Rev.1.1.1.1
-// txt version 1.100
-
-#include <sys/types.h>
-
-#ifdef LCCWIN32
-#include <winsock.h>
-#pragma lib <libmysql.lib>
-#else
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <sys/time.h>
-#include <sys/ioctl.h>
-#include <arpa/inet.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <netinet/in.h>
-#include <sys/time.h>
-#include <time.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h> // for stat/lstat/fstat
-#include <unistd.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <string.h>
-#include <arpa/inet.h>
-
-//add include for DBMS(mysql)
-#include <mysql.h>
-
-#include "strlib.h"
-#include "timer.h"
-/*
-#include "timer.h"
-#include "core.h"
-#include "socket.h"
-#include "login.h"
-#include "mmo.h"
-#include "version.h"
-#include "db.h"
-*/
-
-#include "../common/core.h"
-#include "../common/socket.h"
-#include "login.h"
-#include "../common/mmo.h"
-#include "../common/version.h"
-#include "../common/db.h"
-#include "../common/timer.h"
-
-#ifdef PASSWORDENC
-#include "md5calc.h"
-#endif
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-#define J_MAX_MALLOC_SIZE 65535
-
-//-----------------------------------------------------
-// global variable
-//-----------------------------------------------------
-int account_id_count = START_ACCOUNT_NUM;
-int server_num;
-int new_account_flag = 0;
-int login_port = 6900;
-char lan_char_ip[128]; // Lan char ip added by kashy
-int subnetmaski[4]; // Subnetmask added by kashy
-
-struct mmo_char_server server[MAX_SERVERS];
-int server_fd[MAX_SERVERS];
-int server_freezeflag[MAX_SERVERS]; // Char-server anti-freeze system. Counter. 5 ok, 4...0 freezed
-int anti_freeze_enable = 0;
-int ANTI_FREEZE_INTERVAL = 15;
-
-int login_fd;
-
-char date_format[32] = "%Y-%m-%d %H:%M:%S";
-int auth_num = 0, auth_max = 0;
-
-int min_level_to_connect = 0; // minimum level of player/GM (0: player, 1-99: gm) to connect on the server
-int check_ip_flag = 1; // It's to check IP of a player between login-server and char-server (part of anti-hacking system)
-
-MYSQL mysql_handle;
-
-int ipban = 1;
-int dynamic_account_ban = 1;
-int dynamic_account_ban_class = 0;
-int dynamic_pass_failure_ban = 1;
-int dynamic_pass_failure_ban_time = 5;
-int dynamic_pass_failure_ban_how_many = 3;
-int dynamic_pass_failure_ban_how_long = 60;
-
-int login_server_port = 3306;
-char login_server_ip[32] = "127.0.0.1";
-char login_server_id[32] = "ragnarok";
-char login_server_pw[32] = "ragnarok";
-char login_server_db[32] = "ragnarok";
-int use_md5_passwds = 0;
-char login_db[256] = "login";
-char loginlog_db[256] = "loginlog";
-
-// added to help out custom login tables, without having to recompile 
-// source so options are kept in the login_athena.conf or the inter_athena.conf
-char login_db_account_id[256] = "account_id";
-char login_db_userid[256] = "userid";
-char login_db_user_pass[256] = "user_pass";
-char login_db_level[256] = "level";
-
-char tmpsql[65535], tmp_sql[65535];
-
-//-----------------------------------------------------
-
-#define AUTH_FIFO_SIZE 256
-struct {
-	int account_id,login_id1,login_id2;
-	int ip,sex,delflag;
-} auth_fifo[AUTH_FIFO_SIZE];
-
-int auth_fifo_pos = 0;
-
-
-//-----------------------------------------------------
-
-static char md5key[20], md5keylen = 16;
-
-//-----------------------------------------------------
-// check user level
-//-----------------------------------------------------
-
-int isGM(int account_id) {
-	int level;
-
-	MYSQL_RES* 	sql_res;
-	MYSQL_ROW	sql_row;
-	level = 0;
-	sprintf(tmpsql,"SELECT `%s` FROM `%s` WHERE `%s`='%d'", login_db_level, login_db, login_db_account_id, account_id);
-	if (mysql_query(&mysql_handle, tmpsql)) {
-		printf("DB server Error (select GM Level to Memory)- %s\n", mysql_error(&mysql_handle));
-	}
-	sql_res = mysql_store_result(&mysql_handle);
-	if (sql_res) {
-		sql_row = mysql_fetch_row(sql_res);
-		level = atoi(sql_row[0]);
-		if (level > 99)
-			level = 99;
-	}
-
-	if (level == 0) {
-		return 0;
-		//not GM
-	}
-
-	mysql_free_result(sql_res);
-
-	return level;
-}
-
-//-----------------------------------------------------
-// Function to suppress control characters in a string.
-//-----------------------------------------------------
-int remove_control_chars(unsigned char *str) {
-	int i;
-	int change = 0;
-
-	for(i = 0; str[i]; i++) {
-		if (str[i] < 32) {
-			str[i] = '_';
-			change = 1;
-		}
-	}
-
-	return change;
-}
-
-//---------------------------------------------------
-// E-mail check: return 0 (not correct) or 1 (valid).
-//---------------------------------------------------
-int e_mail_check(unsigned char *email) {
-	char ch;
-	unsigned char* last_arobas;
-
-	// athena limits
-	if (strlen(email) < 3 || strlen(email) > 39)
-		return 0;
-
-	// part of RFC limits (official reference of e-mail description)
-	if (strchr(email, '@') == NULL || email[strlen(email)-1] == '@')
-		return 0;
-
-	if (email[strlen(email)-1] == '.')
-		return 0;
-
-	last_arobas = strrchr(email, '@');
-
-	if (strstr(last_arobas, "@.") != NULL ||
-	    strstr(last_arobas, "..") != NULL)
-		return 0;
-
-	for(ch = 1; ch < 32; ch++) {
-		if (strchr(last_arobas, ch) != NULL) {
-			return 0;
-			break;
-		}
-	}
-
-	if (strchr(last_arobas, ' ') != NULL ||
-	    strchr(last_arobas, ';') != NULL)
-		return 0;
-
-	// all correct
-	return 1;
-}
-
-//-----------------------------------------------------
-// Read Account database - mysql db
-//-----------------------------------------------------
-int mmo_auth_sqldb_init(void) {
-
-	printf("Login server init....\n");
-
-	// memory initialize
-	printf("memory initialize....\n");
-
-	mysql_init(&mysql_handle);
-
-	// DB connection start
-	printf("Connect Login Database Server....\n");
-	if (!mysql_real_connect(&mysql_handle, login_server_ip, login_server_id, login_server_pw,
-	    login_server_db, login_server_port, (char *)NULL, 0)) {
-		// pointer check
-		printf("%s\n", mysql_error(&mysql_handle));
-		exit(1);
-	} else {
-		printf("connect success!\n");
-	}
-
-	sprintf(tmpsql, "INSERT INTO `%s`(`time`,`ip`,`user`,`rcode`,`log`) VALUES (NOW(), '', 'lserver', '100','login server started')", loginlog_db);
-
-	//query
-	if (mysql_query(&mysql_handle, tmpsql)) {
-			printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-	}
-
-	return 0;
-}
-
-//-----------------------------------------------------
-// DB server connect check
-//-----------------------------------------------------
-void mmo_auth_sqldb_sync(void) {
-	// db connect check? or close?
-	// ping pong DB server -if losted? then connect try. else crash.
-}
-
-//-----------------------------------------------------
-// close DB
-//-----------------------------------------------------
-void mmo_db_close(void) {
-
-	//set log.
-	sprintf(tmpsql,"INSERT INTO `%s`(`time`,`ip`,`user`,`rcode`,`log`) VALUES (NOW(), '', 'lserver','100', 'login server shutdown')", loginlog_db);
-
-	//query
-	if (mysql_query(&mysql_handle, tmpsql)) {
-			printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-	}
-
-	//delete all server status
-	sprintf(tmpsql,"DELETE FROM `sstatus`");
-	//query
-	if (mysql_query(&mysql_handle, tmpsql)) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-	}
-
-	mysql_close(&mysql_handle);
-	printf("close DB connect....\n");
-
-	int i, fd;
-
-	for (i = 0; i < MAX_SERVERS; i++) {
-		if ((fd = server_fd[i]) >= 0)
-			delete_session(fd);
-	}
-	delete_session(login_fd);
-}
-
-//-----------------------------------------------------
-// Make new account
-//-----------------------------------------------------
-int mmo_auth_sqldb_new(struct mmo_account* account,const char *tmpstr, char sex) {
-	//no need on DB version
-
-	printf("Request new account.... - not support on this version\n");
-
-	return 0;
-}
-
-//-----------------------------------------------------
-// Make new account
-//-----------------------------------------------------
-int mmo_auth_new(struct mmo_account* account, const char *tmpstr, char sex) {
-
-	return 0;
-}
-
-#ifdef LCCWIN32
-extern void gettimeofday(struct timeval *t, struct timezone *dummy);
-#endif
-
-//-----------------------------------------------------
-// Auth
-//-----------------------------------------------------
-int mmo_auth( struct mmo_account* account , int fd){
-	struct timeval tv;
-	time_t ban_until_time;
-	char tmpstr[256];
-	char t_uid[256], t_pass[256];
-	char user_password[256];
-
-	MYSQL_RES* 	sql_res ;
-	MYSQL_ROW	sql_row ;
-	//int sql_fields, sql_cnt;
-	char md5str[64], md5bin[32];
-
-	char ip[16];
-
-	unsigned char *sin_addr = (unsigned char *)&session[fd]->client_addr.sin_addr;
-
-	printf ("auth start...\n");
-
-	sprintf(ip, "%d.%d.%d.%d", sin_addr[0], sin_addr[1], sin_addr[2], sin_addr[3]);
-
-	// auth start : time seed
-	gettimeofday(&tv, NULL);
-	strftime(tmpstr, 24, "%Y-%m-%d %H:%M:%S",localtime(&(tv.tv_sec)));
-	sprintf(tmpstr+19, ".%03d", (int)tv.tv_usec/1000);
-
-	jstrescapecpy(t_uid,account->userid);
-	jstrescapecpy(t_pass, account->passwd);
-
-	// make query
-	sprintf(tmpsql, "SELECT `%s`,`%s`,`%s`,`lastlogin`,`logincount`,`sex`,`connect_until`,`last_ip`,`ban_until`,`state`,`%s`"
-	                " FROM `%s` WHERE `%s`='%s'", login_db_account_id, login_db_userid, login_db_user_pass, login_db_level, login_db, login_db_userid, t_uid);
-	//login {0-account_id/1-userid/2-user_pass/3-lastlogin/4-logincount/5-sex/6-connect_untl/7-last_ip/8-ban_until/9-state}
-
-	// query
-	if (mysql_query(&mysql_handle, tmpsql)) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	if (sql_res) {
-		sql_row = mysql_fetch_row(sql_res);	//row fetching
-		if (!sql_row) {
-			//there's no id.
-			printf ("auth failed no account %s %s %s\n", tmpstr, account->userid, account->passwd);
-			mysql_free_result(sql_res);
-			return 0;
-		}
-	} else {
-		printf("mmo_auth DB result error ! \n");
-		return 0;
-	}
-	// Documented by CLOWNISIUS || LLRO || Gunstar lead this one with me
-	// IF changed to diferent returns~ you get diferent responses from your msgstringtable.txt
-	//Ireturn 2  == line 9
-	//Ireturn 5  == line 311
-	//Ireturn 6  == line 450
-	//Ireturn 7  == line 440
-	//Ireturn 8  == line 682
-	//Ireturn 9  == line 704
-	//Ireturn 10 == line 705
-	//Ireturn 11 == line 706
-	//Ireturn 12 == line 707
-	//Ireturn 13 == line 708
-	//Ireturn 14 == line 709
-	//Ireturn 15 == line 710
-	//Ireturn -1 == line 010
-	// Check status
-	{
-		if (atoi(sql_row[9]) == -3) {
-			//id is banned
-			mysql_free_result(sql_res);
-			return -3;
-		} else if (atoi(sql_row[9]) == -2) { //dynamic ban
-			//id is banned
-			mysql_free_result(sql_res);
-			//add IP list.
-			return -2;
-		}
-
-		if (use_md5_passwds) {
-			MD5_String(account->passwd,user_password);
-		} else {
-			jstrescapecpy(user_password, account->passwd);
-		}
-		printf("account id ok encval:%d\n",account->passwdenc);
-		int encpasswdok = 0;
-#ifdef PASSWORDENC
-		if (account->passwdenc > 0) {
-			printf ("start md5calc..\n");
-			int j = account->passwdenc;
-			if (j > 2)
-				j = 1;
-			do {
-				if (j == 1) {
-					sprintf(md5str, "%s%s", md5key,sql_row[2]);
-				} else if (j == 2) {
-					sprintf(md5str, "%s%s", sql_row[2], md5key);
-				} else
-					md5str[0] = 0;
-				printf("j:%d mdstr:%s\n", j, md5str);
-				MD5_String2binary(md5str, md5bin);
-				encpasswdok = (memcmp(user_password, md5bin, 16) == 0);
-			} while (j < 2 && !encpasswdok && (j++) != account->passwdenc);
-			//printf("key[%s] md5 [%s] ", md5key, md5);
-			printf("client [%s] accountpass [%s]\n", user_password, sql_row[2]);
-			printf ("end md5calc..\n");
-		}
-#endif
-		if ((strcmp(user_password, sql_row[2]) && !encpasswdok)) {
-			if (account->passwdenc == 0) {
-				printf ("auth failed pass error %s %s %s" RETCODE, tmpstr, account->userid, user_password);
-#ifdef PASSWORDENC
-			} else {
-				char logbuf[1024], *p = logbuf;
-				int j;
-				p += sprintf(p, "auth failed pass error %s %s recv-md5[", tmpstr, account->userid);
-				for(j = 0; j < 16; j++)
-					p += sprintf(p, "%02x", ((unsigned char *)user_password)[j]);
-				p += sprintf(p, "] calc-md5[");
-				for(j = 0; j < 16; j++)
-					p += sprintf(p, "%02x", ((unsigned char *)md5bin)[j]);
-				p += sprintf(p, "] md5key[");
-				for(j = 0; j < md5keylen; j++)
-					p += sprintf(p, "%02x", ((unsigned char *)md5key)[j]);
-				p += sprintf(p, "]" RETCODE);
-				printf("%s\n", p);
-#endif
-			}
-			return 1;
-		}
-		printf("auth ok %s %s" RETCODE, tmpstr, account->userid);
-	}
-
-	if (atoi(sql_row[9])) {
-		switch(atoi(sql_row[9])) { // packet 0x006a value + 1
-		case 1:   // 0 = Unregistered ID
-		case 2:   // 1 = Incorrect Password
-		case 3:   // 2 = This ID is expired
-		case 4:   // 3 = Rejected from Server
-		case 5:   // 4 = You have been blocked by the GM Team
-		case 6:   // 5 = Your Game's EXE file is not the latest version
-		case 7:   // 6 = Your are Prohibited to log in until %s
-		case 8:   // 7 = Server is jammed due to over populated
-		case 9:   // 8 = No MSG (actually, all states after 9 except 99 are No MSG, use only this)
-		case 100: // 99 = This ID has been totally erased
-			printf("Auth Error #%d\n", atoi(sql_row[9]));
-			return atoi(sql_row[9]) - 1;
-			break;
-		default:
-			return 99; // 99 = ID has been totally erased
-			break;
-		}
-	}
-
-/*
-// do not remove this section. this is meant for future, and current forums usage
-// as a login manager and CP for login server. [CLOWNISIUS]
-	if (atoi(sql_row[10]) == 1) {
-		return 4;
-	}
-
-	if (atoi(sql_row[10]) >= 5) {
-		switch(atoi(sql_row[10])) {
-		case 5:
-			return 5;
-			break;
-		case 6:
-			return 7;
-			break;
-		case 7:
-			return 9;
-			break;
-		case 8:
-			return 10;
-			break;
-		case 9:
-			return 11;
-			break;
-		default:
-			return 10;
-			break;
-		}
-	}
-*/
-	ban_until_time = atol(sql_row[8]);
-
-	//login {0-account_id/1-userid/2-user_pass/3-lastlogin/4-logincount/5-sex/6-connect_untl/7-last_ip/8-ban_until/9-state}
-	if (ban_until_time != 0) { // if account is banned
-		strftime(tmpstr, 20, date_format, localtime(&ban_until_time));
-		tmpstr[19] = '\0';
-		if (ban_until_time > time(NULL)) { // always banned
-			return 6; // 6 = Your are Prohibited to log in until %s
-		} else { // ban is finished
-			// reset the ban time
-			sprintf(tmpsql, "UPDATE `%s` SET `ban_until`='0' WHERE `%s`='%s'", login_db, login_db_userid, t_uid);
-			if (mysql_query(&mysql_handle, tmpsql)) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
-		}
-	}
-
-	if (atol(sql_row[6]) != 0 && atol(sql_row[6]) < time(NULL)) {
-		return 2; // 2 = This ID is expired
-	}
-
-	account->account_id = atoi(sql_row[0]);
-	account->login_id1 = rand();
-	account->login_id2 = rand();
-	memcpy(tmpstr, sql_row[3], 19);
-	memcpy(account->lastlogin, tmpstr, 24);
-	account->sex = sql_row[5][0] == 'S' ? 2 : sql_row[5][0]=='M';
-
-	sprintf(tmpsql, "UPDATE `%s` SET `lastlogin` = NOW(), `logincount`=`logincount` +1, `last_ip`='%s'  WHERE  `%s` = '%s'",
-	        login_db, ip, login_db_userid, sql_row[1]);
-	mysql_free_result(sql_res) ; //resource free
-	if (mysql_query(&mysql_handle, tmpsql)) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-	}
-
-	return -1;
-}
-
-// Send to char
-int charif_sendallwos(int sfd, unsigned char *buf, unsigned int len) {
-	int i, c;
-	int fd;
-
-	c = 0;
-	for(i = 0; i < MAX_SERVERS; i++) {
-		if ((fd = server_fd[i]) > 0 && fd != sfd) {
-			memcpy(WFIFOP(fd,0), buf, len);
-			WFIFOSET(fd,len);
-			c++;
-		}
-	}
-
-	return c;
-}
-
-//--------------------------------
-// Char-server anti-freeze system
-//--------------------------------
-int char_anti_freeze_system(int tid, unsigned int tick, int id, int data) {
-	int i;
-
-	for(i = 0; i < MAX_SERVERS; i++) {
-		if (server_fd[i] >= 0) {// if char-server is online
-//			printf("char_anti_freeze_system: server #%d '%s', flag: %d.\n", i, server[i].name, server_freezeflag[i]);
-			if (server_freezeflag[i]-- < 1) {// Char-server anti-freeze system. Counter. 5 ok, 4...0 freezed
-				session[server_fd[i]]->eof = 1;
-			}
-		}
-	}
-
-	return 0;
-}
-
-//-----------------------------------------------------
-// char-server packet parse
-//-----------------------------------------------------
-int parse_fromchar(int fd){
-	int i, id;
-	MYSQL_RES* sql_res;
-	MYSQL_ROW  sql_row = NULL;
-
-	unsigned char *p = (unsigned char *) &session[fd]->client_addr.sin_addr;
-	char ip[16];
-
-	sprintf(ip, "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
-
-	for(id = 0; id < MAX_SERVERS; id++)
-		if (server_fd[id] == fd)
-			break;
-
-	if (id == MAX_SERVERS || session[fd]->eof) {
-		if (id < MAX_SERVERS) {
-			printf("Char-server '%s' has disconnected.\n", server[id].name);
-			server_fd[id] = -1;
-			memset(&server[id], 0, sizeof(struct mmo_char_server));
-			// server delete
-			sprintf(tmpsql, "DELETE FROM `sstatus` WHERE `index`='%d'", id);
-			// query
-			if (mysql_query(&mysql_handle, tmpsql)) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
-		}
-		close(fd);
-		delete_session(fd);
-		return 0;
-	}
-
-	while(RFIFOREST(fd) >= 2) {
-//		printf("char_parse: %d %d packet case=%x\n", fd, RFIFOREST(fd), RFIFOW(fd, 0));
-
-		switch (RFIFOW(fd,0)) {
-		case 0x2712:
-			if (RFIFOREST(fd) < 19)
-				return 0;
-		  {
-			int account_id;
-			account_id = RFIFOL(fd,2); // speed up
-			for(i=0;i<AUTH_FIFO_SIZE;i++){
-				if (auth_fifo[i].account_id == account_id &&
-				    auth_fifo[i].login_id1 == RFIFOL(fd,6) &&
-#if CMP_AUTHFIFO_LOGIN2 != 0
-				    auth_fifo[i].login_id2 == RFIFOL(fd,10) && // relate to the versions higher than 18 
-#endif
-				    auth_fifo[i].sex == RFIFOB(fd,14) &&
-#if CMP_AUTHFIFO_IP != 0
-				    auth_fifo[i].ip == RFIFOL(fd,15) &&
-#endif
-				    !auth_fifo[i].delflag) {
-					auth_fifo[i].delflag = 1;
-					printf("auth -> %d\n", i);
-					break;
-				}
-			}
-
-			if (i != AUTH_FIFO_SIZE) { // send account_reg
-				int p;
-				time_t connect_until_time = 0;
-				char email[40] = "";
-				account_id=RFIFOL(fd,2);
-				sprintf(tmpsql, "SELECT `email`,`connect_until` FROM `%s` WHERE `%s`='%d'", login_db, login_db_account_id, account_id);
-				if (mysql_query(&mysql_handle, tmpsql)) {
-					printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-				}
-				sql_res = mysql_store_result(&mysql_handle) ;
-				if (sql_res) {
-					sql_row = mysql_fetch_row(sql_res);
-					connect_until_time = atol(sql_row[1]);
-					strcpy(email, sql_row[0]);
-				}
-				mysql_free_result(sql_res);
-				if (account_id > 0) {
-					sprintf(tmpsql, "SELECT `str`,`value` FROM `global_reg_value` WHERE `type`='1' AND `account_id`='%d'",account_id);
-					if (mysql_query(&mysql_handle, tmpsql)) {
-						printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-					}
-					sql_res = mysql_store_result(&mysql_handle) ;
-					if (sql_res) {
-						WFIFOW(fd,0) = 0x2729;
-						WFIFOL(fd,4) = account_id;
-						for(p = 8; (sql_row = mysql_fetch_row(sql_res));p+=36){
-							memcpy(WFIFOP(fd,p), sql_row[0], 32);
-							WFIFOL(fd,p+32) = atoi(sql_row[1]);
-						}
-						WFIFOW(fd,2) = p;
-						WFIFOSET(fd,p);
-						//printf("account_reg2 send : login->char (auth fifo)\n");
-						WFIFOW(fd,0) = 0x2713;
-						WFIFOL(fd,2) = account_id;
-						WFIFOB(fd,6) = 0;
-						memcpy(WFIFOP(fd, 7), email, 40);
-						WFIFOL(fd,47) = (unsigned long) connect_until_time;
-						WFIFOSET(fd,51);
-					}
-					mysql_free_result(sql_res);
-				}
-			} else {
-				WFIFOW(fd,0) = 0x2713;
-				WFIFOL(fd,2) = account_id;
-				WFIFOB(fd,6) = 1;
-				WFIFOSET(fd,51);
-			}
-			  }
-			RFIFOSKIP(fd,19);
-			break;
-
-		case 0x2714:
-			if (RFIFOREST(fd) < 6)
-				return 0;
-			// how many users on world? (update)
-			if (server[id].users != RFIFOL(fd,2))
-				printf("set users %s : %d\n", server[id].name, RFIFOL(fd,2));
-			server[id].users = RFIFOL(fd,2);
-			if(anti_freeze_enable)
-				server_freezeflag[id] = 5; // Char anti-freeze system. Counter. 5 ok, 4...0 freezed
-
-			sprintf(tmpsql,"UPDATE `sstatus` SET `user` = '%d' WHERE `index` = '%d'", server[id].users, id);
-			// query
-			if (mysql_query(&mysql_handle, tmpsql)) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
-			RFIFOSKIP(fd,6);
-			break;
-
-		// We receive an e-mail/limited time request, because a player comes back from a map-server to the char-server
-		case 0x2716:
-			if (RFIFOREST(fd) < 6)
-				return 0;
-		  {
-			int account_id;
-			time_t connect_until_time = 0;
-			char email[40] = "";
-			account_id=RFIFOL(fd,2);
-			sprintf(tmpsql,"SELECT `email`,`connect_until` FROM `%s` WHERE `%s`='%d'",login_db, login_db_account_id, account_id);
-			if(mysql_query(&mysql_handle, tmpsql)) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
-			sql_res = mysql_store_result(&mysql_handle) ;
-			if (sql_res) {
-				sql_row = mysql_fetch_row(sql_res);
-				connect_until_time = atol(sql_row[1]);
-				strcpy(email, sql_row[0]);
-			}
-			mysql_free_result(sql_res);
-			//printf("parse_fromchar: E-mail/limited time request from '%s' server (concerned account: %d)\n", server[id].name, RFIFOL(fd,2));
-			WFIFOW(fd,0) = 0x2717;
-			WFIFOL(fd,2) = RFIFOL(fd,2);
-			memcpy(WFIFOP(fd, 6), email, 40);
-			WFIFOL(fd,46) = (unsigned long) connect_until_time;
-			WFIFOSET(fd,50);
-		  }
-			RFIFOSKIP(fd,6);
-			break;
-
-		case 0x2720:	// GM
-			if (RFIFOREST(fd) < 4)
-				return 0;
-			if (RFIFOREST(fd) < RFIFOW(fd,2))
-				return 0;
-			//oldacc = RFIFOL(fd,4);
-			printf("change GM isn't support in this login server version.\n");
-			printf("change GM error 0 %s\n", RFIFOP(fd, 8));
-
-			RFIFOSKIP(fd, RFIFOW(fd, 2));
-			WFIFOW(fd, 0) = 0x2721;
-			WFIFOL(fd, 2) = RFIFOL(fd,4); // oldacc;
-			WFIFOL(fd, 6) = 0; // newacc;
-			WFIFOSET(fd, 10);
-			return 0;
-
-		// Map server send information to change an email of an account via char-server
-		case 0x2722:	// 0x2722 <account_id>.L <actual_e-mail>.40B <new_e-mail>.40B
-			if (RFIFOREST(fd) < 86)
-				return 0;
-		  {
-			int acc;
-			char actual_email[40], new_email[40];
-			acc = RFIFOL(fd,2);
-			memcpy(actual_email, RFIFOP(fd,6), 40);
-			memcpy(new_email, RFIFOP(fd,46), 40);
-			if (e_mail_check(actual_email) == 0)
-				printf("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command), but actual email is invalid (account: %d, ip: %s)" RETCODE,
-				          server[id].name, acc, ip);
-			else if (e_mail_check(new_email) == 0)
-				printf("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command) with a invalid new e-mail (account: %d, ip: %s)" RETCODE,
-				          server[id].name, acc, ip);
-			else if (strcmpi(new_email, "a@a.com") == 0)
-				printf("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command) with a default e-mail (account: %d, ip: %s)" RETCODE,
-				          server[id].name, acc, ip);
-			else {
-				sprintf(tmpsql, "SELECT `%s`,`email` FROM `%s` WHERE `%s` = '%d'", login_db_userid, login_db, login_db_account_id, acc);
-				if (mysql_query(&mysql_handle, tmpsql))
-					printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-				sql_res = mysql_store_result(&mysql_handle);
-				if (sql_res) {
-					sql_row = mysql_fetch_row(sql_res);	//row fetching
-
-					if (strcmpi(sql_row[1], actual_email) == 0) {
-						sprintf(tmpsql, "UPDATE `%s` SET `email` = '%s' WHERE `%s` = '%d'", login_db, new_email, login_db_account_id, acc);
-						// query
-						if (mysql_query(&mysql_handle, tmpsql)) {
-							printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-						}
-						printf("Char-server '%s': Modify an e-mail on an account (@email GM command) (account: %d (%s), new e-mail: %s, ip: %s)." RETCODE,
-						      server[id].name, acc, sql_row[0], actual_email, ip);
-					}
-				}
-				
-			}
-		  }	
-			RFIFOSKIP(fd, 86);
-			break;
-
-		case 0x2724:	// Receiving of map-server via char-server a status change resquest (by Yor)
-			if (RFIFOREST(fd) < 10)
-				return 0;
-		  {
-			int acc, statut;
-			acc = RFIFOL(fd,2);
-			statut = RFIFOL(fd,6);
-			sprintf(tmpsql, "SELECT `state` FROM `%s` WHERE `%s` = '%d'", login_db, login_db_account_id, acc);
-			if (mysql_query(&mysql_handle, tmpsql)) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
-			sql_res = mysql_store_result(&mysql_handle);
-			if (sql_res) {
-				sql_row = mysql_fetch_row(sql_res); // row fetching
-			}
-			if (atoi(sql_row[0]) != statut && statut != 0) {
-				unsigned char buf[16];
-				WBUFW(buf,0) = 0x2731;
-				WBUFL(buf,2) = acc;
-				WBUFB(buf,6) = 0; // 0: change of statut, 1: ban
-				WBUFL(buf,7) = statut; // status or final date of a banishment
-				charif_sendallwos(-1, buf, 11);
-			}
-			sprintf(tmpsql,"UPDATE `%s` SET `state` = '%d' WHERE `%s` = '%d'", login_db, statut,login_db_account_id,acc);
-			//query
-			if(mysql_query(&mysql_handle, tmpsql)) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
-			RFIFOSKIP(fd,10);
-		  }
-			return 0;
-
-		case 0x2725: // Receiving of map-server via char-server a ban resquest (by Yor)
-			if (RFIFOREST(fd) < 18)
-				return 0;
-		  {
-			int acc;
-			struct tm *tmtime;
-			time_t timestamp, tmptime;
-			acc = RFIFOL(fd,2);
-			sprintf(tmpsql, "SELECT `ban_until` FROM `%s` WHERE `%s` = '%d'",login_db,login_db_account_id,acc);
-			if (mysql_query(&mysql_handle, tmpsql)) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
-			sql_res = mysql_store_result(&mysql_handle);
-			if (sql_res) {
-				sql_row = mysql_fetch_row(sql_res); // row fetching
-			}
-			tmptime = atol(sql_row[0]);
-			if (tmptime == 0 || tmptime < time(NULL))
-				timestamp = time(NULL);
-			else
-				timestamp = tmptime;
-			tmtime = localtime(&timestamp);
-			tmtime->tm_year = tmtime->tm_year + (short)RFIFOW(fd,6);
-			tmtime->tm_mon = tmtime->tm_mon + (short)RFIFOW(fd,8);
-			tmtime->tm_mday = tmtime->tm_mday + (short)RFIFOW(fd,10);
-			tmtime->tm_hour = tmtime->tm_hour + (short)RFIFOW(fd,12);
-			tmtime->tm_min = tmtime->tm_min + (short)RFIFOW(fd,14);
-			tmtime->tm_sec = tmtime->tm_sec + (short)RFIFOW(fd,16);
-			timestamp = mktime(tmtime);
-			if (timestamp != -1) {
-				if (timestamp <= time(NULL))
-					timestamp = 0;
-				if (tmptime != timestamp) {
-					if (timestamp != 0) {
-						unsigned char buf[16];
-						WBUFW(buf,0) = 0x2731;
-						WBUFL(buf,2) = acc;
-						WBUFB(buf,6) = 1; // 0: change of statut, 1: ban
-						WBUFL(buf,7) = timestamp; // status or final date of a banishment
-						charif_sendallwos(-1, buf, 11);
-					}
-					printf("Account: %d Banned until: %ld\n", acc, timestamp); 
-					sprintf(tmpsql, "UPDATE `%s` SET `ban_until` = '%ld', `state`='7' WHERE `%s` = '%d'", login_db, timestamp, login_db_account_id, acc);
-					// query
-					if (mysql_query(&mysql_handle, tmpsql)) {
-						printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-					}
-				}
-			}
-			RFIFOSKIP(fd,18);
-			break;
-		  }
-			return 0;
-
-		case 0x2727:
-			if (RFIFOREST(fd) < 6)
-				return 0;
-		  {
-				int acc,sex;
-				unsigned char buf[16];
-				acc=RFIFOL(fd,4);
-				sprintf(tmpsql,"SELECT `sex` FROM `%s` WHERE `%s` = '%d'",login_db,login_db_account_id,acc);
-        
-	        if(mysql_query(&mysql_handle, tmpsql)) {
-                    printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-		    return 0;
-                }
-        
-	        sql_res = mysql_store_result(&mysql_handle) ;
-        
-	        if (sql_res)	{
-		        if (mysql_num_rows(sql_res) == 0) {
-				mysql_free_result(sql_res);
-			        return 0;
-			}
-			sql_row = mysql_fetch_row(sql_res);	//row fetching
-	        }
-	
-	        if (strcmpi(sql_row[0], "M") == 0)
-                    sex = 1;
-                else
-                    sex = 0;
-				sprintf(tmpsql,"UPDATE `%s` SET `sex` = '%c' WHERE `%s` = '%d'", login_db, (sex==0?'M':'F'), login_db_account_id, acc);
-				//query
-				if(mysql_query(&mysql_handle, tmpsql)) {
-					printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-				}
-				WBUFW(buf,0) = 0x2723;
-				WBUFL(buf,2) = acc;
-				WBUFB(buf,6) = sex;
-				charif_sendallwos(-1, buf, 7);
-				RFIFOSKIP(fd,6);
-			  }
-			  return 0;
-
-			case 0x2728:	// save account_reg
-				if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
-					return 0;
-			  {
-				int acc,p,j;
-				char str[32];
-				char temp_str[32];
-				int value;
-				acc=RFIFOL(fd,4);
-
-				if (acc>0){
-					unsigned char buf[RFIFOW(fd,2)+1];
-					for(p=8,j=0;p<RFIFOW(fd,2) && j<ACCOUNT_REG2_NUM;p+=36,j++){
-						memcpy(str,RFIFOP(fd,p),32);
-						value=RFIFOL(fd,p+32);
-						sprintf(tmpsql,"DELETE FROM `global_reg_value` WHERE `type`='1' AND `account_id`='%d' AND `str`='%s';",acc,jstrescapecpy(temp_str,str));
-						if(mysql_query(&mysql_handle, tmpsql)) {
-							printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-						}
-						sprintf(tmpsql,"INSERT INTO `global_reg_value` (`type`, `account_id`, `str`, `value`) VALUES ( 1 , '%d' , '%s' , '%d');",  acc, jstrescapecpy(temp_str,str), value);
-						if(mysql_query(&mysql_handle, tmpsql)) {
-							printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-						}
-					}
-
-					// Send to char
-					memcpy(WBUFP(buf,0),RFIFOP(fd,0),RFIFOW(fd,2));
-					WBUFW(buf,0)=0x2729;
-					charif_sendallwos(fd,buf,WBUFW(buf,2));
-				}
-			  }	
-				RFIFOSKIP(fd,RFIFOW(fd,2));
-				//printf("login: save account_reg (from char)\n");
-			    break;
-
-    case 0x272a:	// Receiving of map-server via char-server a unban resquest (by Yor)
-			if (RFIFOREST(fd) < 6)
-				return 0;
-			{
-				int acc;
-				acc = RFIFOL(fd,2);
-				sprintf(tmpsql,"SELECT `ban_until` FROM `%s` WHERE `%s` = '%d'",login_db,login_db_account_id,acc);
-                if(mysql_query(&mysql_handle, tmpsql)) {
-                    printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-                }
-                sql_res = mysql_store_result(&mysql_handle) ;
-                if (sql_res)	{
-                    sql_row = mysql_fetch_row(sql_res);	//row fetching
-                }
-				if (atol(sql_row[0]) != 0) {
-				    sprintf(tmpsql,"UPDATE `%s` SET `ban_until` = '0', `state`='0' WHERE `%s` = '%d'", login_db,login_db_account_id,acc);
-                    //query
-                    if(mysql_query(&mysql_handle, tmpsql)) {
-                        printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-                    }
-					break;
-				}
-				RFIFOSKIP(fd,6);
-			}
-			return 0;
-			
-	default:
-		printf("login: unknown packet %x! (from char).\n", RFIFOW(fd,0));
-		session[fd]->eof = 1;
-	return 0;
-	}
-	}
-
-	return 0;
-}
-
-//Lan ip check added by Kashy
-int lan_ip_check(unsigned char *p) {
-	int y;
-	int lancheck = 1;
-	int lancharip[4];
-
-	unsigned int k0, k1, k2, k3;
-	sscanf(lan_char_ip, "%d.%d.%d.%d", &k0, &k1, &k2, &k3);
-	lancharip[0] = k0; lancharip[1] = k1; lancharip[2] = k2; lancharip[3] = k3;
-
-	for(y = 0; y < 4; y++) {
-		if ((lancharip[y] & subnetmaski[y])!= (p[y]))
-		lancheck = 0;
-		break; }
-
-	printf("LAN check: %s.\n", (lancheck) ? "\033[1;32mLAN\033[0m" : "\033[1;31mWAN\033[0m");
-	return lancheck;
-}
-
-//----------------------------------------------------------------------------------------
-// Default packet parsing (normal players or administation/char-server connection requests)
-//----------------------------------------------------------------------------------------
-int parse_login(int fd) {
-	//int len;
-
-	MYSQL_RES* sql_res ;
-	MYSQL_ROW  sql_row = NULL;
-
-	char t_uid[100];
-	//int sql_fields, sql_cnt;
-	struct mmo_account account;
-
-	int result, i;
-	unsigned char *p = (unsigned char *) &session[fd]->client_addr.sin_addr;
-	char ip[16];
-
-	sprintf(ip, "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
-
-	if (ipban > 0) {
-		//ip ban
-		//p[0], p[1], p[2], p[3]
-		//request DB connection
-		//check
-		sprintf(tmpsql, "SELECT count(*) FROM `ipbanlist` WHERE `list` = '%d.*.*.*' OR `list` = '%d.%d.*.*' OR `list` = '%d.%d.%d.*' OR `list` = '%d.%d.%d.%d'",
-		  p[0], p[0], p[1], p[0], p[1], p[2], p[0], p[1], p[2], p[3]);
-		if (mysql_query(&mysql_handle, tmpsql)) {
-			printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-		}
-
-		sql_res = mysql_store_result(&mysql_handle) ;
-		sql_row = mysql_fetch_row(sql_res);	//row fetching
-
-		if (atoi(sql_row[0]) >0) {
-			// ip ban ok.
-			printf ("packet from banned ip : %d.%d.%d.%d" RETCODE, p[0], p[1], p[2], p[3]);
-			sprintf(tmpsql,"INSERT INTO `%s`(`time`,`ip`,`user`,`rcode`,`log`) VALUES (NOW(), '%d.%d.%d.%d', 'unknown','-3', 'ip banned')", loginlog_db, p[0], p[1], p[2], p[3]);
-
-			// query
-			if(mysql_query(&mysql_handle, tmpsql)) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
-			printf ("close session connection...\n");
-
-			// close connection
-			session[fd]->eof = 1;
-
-		} else {
-			printf ("packet from ip (ban check ok) : %d.%d.%d.%d" RETCODE, p[0], p[1], p[2], p[3]);
-		}
-		mysql_free_result(sql_res);
-	}
-
-	if (session[fd]->eof) {
-		for(i = 0; i < MAX_SERVERS; i++)
-			if (server_fd[i] == fd)
-				server_fd[i] = -1;
-		close(fd);
-		delete_session(fd);
-		return 0;
-	}
-
-	while(RFIFOREST(fd)>=2){
-		printf("parse_login : %d %d packet case=%x\n", fd, RFIFOREST(fd), RFIFOW(fd,0));
-
-		switch(RFIFOW(fd,0)){
-		case 0x200:		// New alive packet: structure: 0x200 <account.userid>.24B. used to verify if client is always alive.
-			if (RFIFOREST(fd) < 26)
-				return 0;
-			RFIFOSKIP(fd,26);
-			break;
-
-		case 0x204:		// New alive packet: structure: 0x204 <encrypted.account.userid>.16B. (new ragexe from 22 june 2004)
-			if (RFIFOREST(fd) < 18)
-				return 0;
-			RFIFOSKIP(fd,18);
-			break;
-
-		case 0x64:		// request client login
-		case 0x01dd:	// request client login with encrypt
-			if(RFIFOREST(fd)< ((RFIFOW(fd, 0) ==0x64)?55:47))
-				return 0;
-
-			printf("client connection request %s from %d.%d.%d.%d\n", RFIFOP(fd, 6), p[0], p[1], p[2], p[3]);
-
-			account.userid = RFIFOP(fd, 6);
-			account.passwd = RFIFOP(fd, 30);
-#ifdef PASSWORDENC
-			account.passwdenc= (RFIFOW(fd,0)==0x64)?0:PASSWORDENC;
-#else
-			account.passwdenc=0;
-#endif
-			result=mmo_auth(&account, fd);
-
-		jstrescapecpy(t_uid,RFIFOP(fd, 6));
-		if(result==-1){
-		    int gm_level = isGM(account.account_id);
-            if (min_level_to_connect > gm_level) {
-					WFIFOW(fd,0) = 0x81;
-					WFIFOL(fd,2) = 1; // 01 = Server closed
-					WFIFOSET(fd,3);
-		    } else {
-                    if (p[0] != 127) {
-                         sprintf(tmpsql,"INSERT INTO `%s`(`time`,`ip`,`user`,`rcode`,`log`) VALUES (NOW(), '%d.%d.%d.%d', '%s','100', 'login ok')", loginlog_db, p[0], p[1], p[2], p[3], t_uid);
-                         //query
-                         if(mysql_query(&mysql_handle, tmpsql)) {
-                              printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-                         }
-                    }
-                    if (gm_level)
-						printf("Connection of the GM (level:%d) account '%s' accepted.\n", gm_level, account.userid);
-					else
-						printf("Connection of the account '%s' accepted.\n", account.userid);
-                    server_num=0;
-				for(i = 0; i < MAX_SERVERS; i++) {
-					if (server_fd[i] >= 0) {
-						//Lan check added by Kashy
-						if (lan_ip_check(p))
-							WFIFOL(fd,47+server_num*32) = inet_addr(lan_char_ip);
-						else
-                            WFIFOL(fd,47+server_num*32) = server[i].ip;
-                            WFIFOW(fd,47+server_num*32+4) = server[i].port;
-                            memcpy(WFIFOP(fd,47+server_num*32+6), server[i].name, 20);
-                            WFIFOW(fd,47+server_num*32+26) = server[i].users;
-                            WFIFOW(fd,47+server_num*32+28) = server[i].maintenance;
-                            WFIFOW(fd,47+server_num*32+30) = server[i].new;
-                            server_num++;
-                        }
-                    }
-                    // if at least 1 char-server
-                    if (server_num > 0) {
-                        WFIFOW(fd,0)=0x69;
-                        WFIFOW(fd,2)=47+32*server_num;
-                        WFIFOL(fd,4)=account.login_id1;
-                        WFIFOL(fd,8)=account.account_id;
-                        WFIFOL(fd,12)=account.login_id2;
-                        WFIFOL(fd,16)=0;
-                        memcpy(WFIFOP(fd,20),account.lastlogin,24);
-                        WFIFOB(fd,46)=account.sex;
-                        WFIFOSET(fd,47+32*server_num);
-                        if(auth_fifo_pos>=AUTH_FIFO_SIZE)
-                            auth_fifo_pos=0;
-                        auth_fifo[auth_fifo_pos].account_id=account.account_id;
-                        auth_fifo[auth_fifo_pos].login_id1=account.login_id1;
-                        auth_fifo[auth_fifo_pos].login_id2=account.login_id2;
-                        auth_fifo[auth_fifo_pos].sex=account.sex;
-                        auth_fifo[auth_fifo_pos].delflag=0;
-                        auth_fifo[auth_fifo_pos].ip = session[fd]->client_addr.sin_addr.s_addr;
-                        auth_fifo_pos++;
-                    } else {
-                        WFIFOW(fd,0) = 0x81;
-                        WFIFOL(fd,2) = 1; // 01 = Server closed
-                        WFIFOSET(fd,3);
-                    }
-            }
-      } else {
-		char tmp_sql[512];
-		char error[64];
-		sprintf(tmp_sql,"INSERT INTO `%s`(`time`,`ip`,`user`,`rcode`,`log`) VALUES (NOW(), '%d.%d.%d.%d', '%s', '%d','login failed : %%s')", loginlog_db, p[0], p[1], p[2], p[3], t_uid, result);
-		switch((result + 1)) {
-		case -2:  //-3 = Account Banned
-			sprintf(tmpsql,tmp_sql,"Account banned.");
-			sprintf(error,"Account banned.");
-		break;
-		case -1:  //-2 = Dynamic Ban
-			sprintf(tmpsql,tmp_sql,"dynamic ban (ip and account).");
-			sprintf(error,"dynamic ban (ip and account).");
-		break;
-		case 1:   // 0 = Unregistered ID
-			sprintf(tmpsql,tmp_sql,"Unregisterd ID.");
-			sprintf(error,"Unregisterd ID.");
-		break;
-		case 2:   // 1 = Incorrect Password
-			sprintf(tmpsql,tmp_sql,"Incorrect Password.");
-			sprintf(error,"Incorrect Password.");
-		break;
-		case 3:   // 2 = This ID is expired
-			sprintf(tmpsql,tmp_sql,"Account Expired.");
-			sprintf(error,"Account Expired.");
-		break;
-		case 4:   // 3 = Rejected from Server
-			sprintf(tmpsql,tmp_sql,"Rejected from server.");
-			sprintf(error,"Rejected from server.");
-		break;
-		case 5:   // 4 = You have been blocked by the GM Team
-			sprintf(tmpsql,tmp_sql,"Blocked by GM.");
-			sprintf(error,"Blocked by GM.");
-		break;
-		case 6:   // 5 = Your Game's EXE file is not the latest version
-			sprintf(tmpsql,tmp_sql,"Not latest game EXE.");
-			sprintf(error,"Not latest game EXE.");
-		break;
-		case 7:   // 6 = Your are Prohibited to log in until %s
-			sprintf(tmpsql,tmp_sql,"Banned.");
-			sprintf(error,"Banned.");
-		break;
-		case 8:   // 7 = Server is jammed due to over populated
-			sprintf(tmpsql,tmp_sql,"Server Over-population.");
-			sprintf(error,"Server Over-population.");
-		break;
-		case 9:   // 8 = No MSG (actually, all states after 9 except 99 are No MSG, use only this)
-			sprintf(tmpsql,tmp_sql," ");
-			sprintf(error," ");
-		break;
-		case 100: // 99 = This ID has been totally erased
-			sprintf(tmpsql,tmp_sql,"Account gone.");
-			sprintf(error,"Account gone.");
-		break;
-		default:
-			sprintf(tmpsql,tmp_sql,"Uknown Error.");
-			sprintf(error,"Uknown Error.");
-		break;
-			}
-			//query
-			if(mysql_query(&mysql_handle, tmpsql)) {
-					printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
-			if ((result == 1) && (dynamic_pass_failure_ban != 0)){	// failed password
-				sprintf(tmpsql,"SELECT count(*) FROM `%s` WHERE `ip` = '%d.%d.%d.%d' AND `rcode` = '1' AND `time` > NOW() - INTERVAL %d MINUTE",
-				  loginlog_db, p[0], p[1], p[2], p[3], dynamic_pass_failure_ban_time);	//how many times filed account? in one ip.
-				if(mysql_query(&mysql_handle, tmpsql)) {
-						printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-				}
-				//check query result
-				sql_res = mysql_store_result(&mysql_handle) ;
-				sql_row = mysql_fetch_row(sql_res);	//row fetching
-
-				if (atoi(sql_row[0]) >= dynamic_pass_failure_ban_how_many ) {
-					sprintf(tmpsql,"INSERT INTO `ipbanlist`(`list`,`btime`,`rtime`,`reason`) VALUES ('%d.%d.%d.*', NOW() , NOW() +  INTERVAL %d MINUTE ,'Password error ban: %s')", p[0], p[1], p[2], dynamic_pass_failure_ban_how_long, t_uid);
-					if(mysql_query(&mysql_handle, tmpsql)) {
-							printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-					}
-				}
-				mysql_free_result(sql_res);
-			}
-			else if (result == -2){	//dynamic banned - add ip to ban list.
-				sprintf(tmpsql,"INSERT INTO `ipbanlist`(`list`,`btime`,`rtime`,`reason`) VALUES ('%d.%d.%d.*', NOW() , NOW() +  INTERVAL 1 MONTH ,'Dynamic banned user id : %s')", p[0], p[1], p[2], t_uid);
-				if(mysql_query(&mysql_handle, tmpsql)) {
-						printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-				}
-				result = -3;
-			}
-
-			sprintf(tmpsql,"SELECT `ban_until` FROM `%s` WHERE `%s` = '%s'",login_db,login_db_userid, t_uid);
-            if(mysql_query(&mysql_handle, tmpsql)) {
-                printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-            }
-            sql_res = mysql_store_result(&mysql_handle) ;
-            if (sql_res)	{
-                sql_row = mysql_fetch_row(sql_res);	//row fetching
-            }
-			//cannot connect login failed
-			memset(WFIFOP(fd,0),'\0',23);
-			WFIFOW(fd,0)=0x6a;
-			WFIFOB(fd,2)=result;
-			if (result == 6) { // 6 = Your are Prohibited to log in until %s
-				if (atol(sql_row[0]) != 0) { // if account is banned, we send ban timestamp
-					char tmpstr[256];
-					time_t ban_until_time;
-					ban_until_time = atol(sql_row[0]);
-					strftime(tmpstr, 20, date_format, localtime(&ban_until_time));
-					tmpstr[19] = '\0';
-					memcpy(WFIFOP(fd,3), tmpstr, 20);
-				} else { // we send error message
-					memcpy(WFIFOP(fd,3), error, 20);
-				}
-			}
-			WFIFOSET(fd,23);
-		}
-		RFIFOSKIP(fd,(RFIFOW(fd,0)==0x64)?55:47);
-		break;
-
-	case 0x01db:	// request password key
-		if (session[fd]->session_data) {
-			printf("login: abnormal request of MD5 key (already opened session).\n");
-			session[fd]->eof = 1;
-			return 0;
-		}
-		printf("Request Password key -%s\n",md5key);
-		RFIFOSKIP(fd,2);
-		WFIFOW(fd,0)=0x01dc;
-		WFIFOW(fd,2)=4+md5keylen;
-		memcpy(WFIFOP(fd,4),md5key,md5keylen);
-		WFIFOSET(fd,WFIFOW(fd,2));
-		break;
-
-	case 0x2710:	// request Char-server connection
-				if(RFIFOREST(fd)<86)
-					return 0;
-				{
-					sprintf(tmpsql,"INSERT INTO `%s`(`time`,`ip`,`user`,`rcode`,`log`) VALUES (NOW(), '%d.%d.%d.%d', '%s@%s','100', 'charserver - %s@%d.%d.%d.%d:%d')", loginlog_db, p[0], p[1], p[2], p[3], RFIFOP(fd, 2),RFIFOP(fd, 60),RFIFOP(fd, 60), RFIFOB(fd, 54), RFIFOB(fd, 55), RFIFOB(fd, 56), RFIFOB(fd, 57), RFIFOW(fd, 58));
-
-					//query
-					if(mysql_query(&mysql_handle, tmpsql)) {
-							printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-					}
-					printf("server connection request %s @ %d.%d.%d.%d:%d (%d.%d.%d.%d)\n",
-						RFIFOP(fd, 60), RFIFOB(fd, 54), RFIFOB(fd, 55), RFIFOB(fd, 56), RFIFOB(fd, 57), RFIFOW(fd, 58),
-						p[0], p[1], p[2], p[3]);
-				unsigned char* server_name;
-				account.userid = RFIFOP(fd, 2);
-				account.passwd = RFIFOP(fd, 26);
-				account.passwdenc = 0;
-				server_name = RFIFOP(fd,60);
-				result = mmo_auth(&account, fd);
-		//printf("Result: %d - Sex: %d - Account ID: %d\n",result,account.sex,(int) account.account_id);
-
-				if(result == -1 && account.sex==2 && account.account_id<MAX_SERVERS && server_fd[account.account_id]==-1){
-				    printf("Connection of the char-server '%s' accepted.\n", server_name);
-			        memset(&server[account.account_id], 0, sizeof(struct mmo_char_server));
-					server[account.account_id].ip=RFIFOL(fd,54);
-					server[account.account_id].port=RFIFOW(fd,58);
-					memcpy(server[account.account_id].name,RFIFOP(fd,60),20);
-					server[account.account_id].users=0;
-					server[account.account_id].maintenance=RFIFOW(fd,82);
-					server[account.account_id].new=RFIFOW(fd,84);
-					server_fd[account.account_id]=fd;
-					if(anti_freeze_enable)
-						server_freezeflag[account.account_id] = 5; // Char-server anti-freeze system. Counter. 5 ok, 4...0 freezed
-					sprintf(tmpsql,"DELETE FROM `sstatus` WHERE `index`='%ld'", account.account_id);
-					//query
-					if(mysql_query(&mysql_handle, tmpsql)) {
-							printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-					}
-
-					jstrescapecpy(t_uid,server[account.account_id].name);
-					sprintf(tmpsql,"INSERT INTO `sstatus`(`index`,`name`,`user`) VALUES ( '%ld', '%s', '%d')",
-						account.account_id, server[account.account_id].name,0);
-					//query
-					if(mysql_query(&mysql_handle, tmpsql)) {
-							printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-					}
-					WFIFOW(fd,0)=0x2711;
-					WFIFOB(fd,2)=0;
-					WFIFOSET(fd,3);
-					session[fd]->func_parse=parse_fromchar;
-					realloc_fifo(fd,FIFOSIZE_SERVERLINK,FIFOSIZE_SERVERLINK);
-				} else {
-					WFIFOW(fd, 0) =0x2711;
-					WFIFOB(fd, 2)=3;
-					WFIFOSET(fd, 3);
-				}
-	  }
-				RFIFOSKIP(fd, 86);
-				return 0;
-
-		case 0x7530:	// request Athena information
-			WFIFOW(fd,0)=0x7531;
-			WFIFOB(fd,2)=ATHENA_MAJOR_VERSION;
-			WFIFOB(fd,3)=ATHENA_MINOR_VERSION;
-			WFIFOB(fd,4)=ATHENA_REVISION;
-			WFIFOB(fd,5)=ATHENA_RELEASE_FLAG;
-			WFIFOB(fd,6)=ATHENA_OFFICIAL_FLAG;
-			WFIFOB(fd,7)=ATHENA_SERVER_LOGIN;
-			WFIFOW(fd,8)=ATHENA_MOD_VERSION;
-			WFIFOSET(fd,10);
-			RFIFOSKIP(fd,2);
-			printf ("Athena version check...\n");
-			break;
-
-		case 0x7532:
-		default:
-			printf ("End of connection (ip: %s)" RETCODE, ip);
-			session[fd]->eof = 1;
-			return 0;
-		}
-	}
-
-	return 0;
-}
-
-//-------------------------------------------------
-// Return numerical value of a switch configuration
-// on/off, english, fran�ais, deutsch, espa�ol
-//-------------------------------------------------
-int config_switch(const char *str) {
-	if (strcmpi(str, "on") == 0 || strcmpi(str, "yes") == 0 || strcmpi(str, "oui") == 0 || strcmpi(str, "ja") == 0 || strcmpi(str, "si") == 0)
-		return 1;
-	if (strcmpi(str, "off") == 0 || strcmpi(str, "no") == 0 || strcmpi(str, "non") == 0 || strcmpi(str, "nein") == 0)
-		return 0;
-
-	return atoi(str);
-}
-
-
-//Lan Support conf reading added by Kashy
-int login_lan_config_read(const char *lancfgName){
-	int i;
-	char subnetmask[128];
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp;
-
-	fp=fopen(lancfgName, "r");
-
-	if (fp == NULL) {
-		printf("file not found: %s\n", lancfgName);
-		return 1;
-	}
-	printf("Start reading of Lan Support configuration file\n");
-	while(fgets(line, sizeof(line)-1, fp)){
-		if (line[0] == '/' && line[1] == '/')
-			continue;
-
-		i = sscanf(line,"%[^:]: %[^\r\n]",w1,w2);
-		if(i!=2)
-			continue;
-
-		else if(strcmpi(w1,"lan_char_ip")==0){
-			strcpy(lan_char_ip, w2);
-			printf ("set Lan_Char_IP : %s\n",w2);
-			}
-
-		else if(strcmpi(w1,"subnetmask")==0){
-			strcpy(subnetmask, w2);
-			unsigned int k0, k1, k2, k3;
-			sscanf(subnetmask, "%d.%d.%d.%d", &k0, &k1, &k2, &k3);
-			subnetmaski[0] = k0; subnetmaski[1] = k1; subnetmaski[2] = k2; subnetmaski[3] = k3;
-			printf ("set subnetmask : %s\n",w2);
-			}
-		}
-	fclose(fp);
-
-	{
-		unsigned int a0, a1, a2, a3;
-		unsigned char p[4];
-		sscanf(lan_char_ip, "%d.%d.%d.%d", &a0, &a1, &a2, &a3);
-		p[0] = a0; p[1] = a1; p[2] = a2; p[3] = a3;
-		printf("LAN test of LAN IP of the char-server: ");
-		if (lan_ip_check(p) == 0) {
-			printf("\033[1;31m***ERROR: LAN IP of the char-server doesn't belong to the specified Sub-network\033[0m\n");
-		}
-	}
-
-	printf("End reading of Lan Support configuration file\n");
-
-	return 0;
-}
-
-//-----------------------------------------------------
-//BANNED IP CHECK.
-//-----------------------------------------------------
-int ip_ban_check(int tid, unsigned int tick, int id, int data){
-
-	//query
-	if(mysql_query(&mysql_handle, "DELETE FROM `ipbanlist` WHERE `rtime` <= NOW()")) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-	}
-
-	return 0;
-}
-
-//-----------------------------------------------------
-// reading configuration
-//-----------------------------------------------------
-int login_config_read(const char *cfgName){
-	int i;
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp;
-
-	fp=fopen(cfgName,"r");
-
-	if(fp==NULL){
-		printf("Configuration file (%s) not found.\n", cfgName);
-		return 1;
-	}
-	printf ("start reading configuration...\n");
-	while(fgets(line, sizeof(line)-1, fp)){
-		if(line[0] == '/' && line[1] == '/')
-			continue;
-
-		i=sscanf(line,"%[^:]: %[^\r\n]",w1,w2);
-		if(i!=2)
-			continue;
-
-		else if(strcmpi(w1,"login_port")==0){
-			login_port=atoi(w2);
-			printf ("set login_port : %s\n",w2);
-		}
-		else if(strcmpi(w1,"ipban")==0){
-			ipban=atoi(w2);
-			printf ("set ipban : %d\n",ipban);
-		}
-		//account ban -> ip ban
-		else if(strcmpi(w1,"dynamic_account_ban")==0){
-			dynamic_account_ban=atoi(w2);
-			printf ("set dynamic_account_ban : %d\n",dynamic_account_ban);
-		}
-		else if(strcmpi(w1,"dynamic_account_ban_class")==0){
-			dynamic_account_ban_class=atoi(w2);
-			printf ("set dynamic_account_ban_class : %d\n",dynamic_account_ban_class);
-		}
-		//dynamic password error ban
-		else if(strcmpi(w1,"dynamic_pass_failure_ban")==0){
-			dynamic_pass_failure_ban=atoi(w2);
-			printf ("set dynamic_pass_failure_ban : %d\n",dynamic_pass_failure_ban);
-		}
-		else if(strcmpi(w1,"dynamic_pass_failure_ban_time")==0){
-			dynamic_pass_failure_ban_time=atoi(w2);
-			printf ("set dynamic_pass_failure_ban_time : %d\n",dynamic_pass_failure_ban_time);
-		}
-		else if(strcmpi(w1,"dynamic_pass_failure_ban_how_many")==0){
-			dynamic_pass_failure_ban_how_many=atoi(w2);
-			printf ("set dynamic_pass_failure_ban_how_many : %d\n",dynamic_pass_failure_ban_how_many);
-		}
-		else if(strcmpi(w1,"dynamic_pass_failure_ban_how_long")==0){
-			dynamic_pass_failure_ban_how_long=atoi(w2);
-			printf ("set dynamic_pass_failure_ban_how_long : %d\n",dynamic_pass_failure_ban_how_long);
-		} 
-		else if(strcmpi(w1,"anti_freeze_enable")==0){
-			anti_freeze_enable = config_switch(w2);
-		} 
-		else if (strcmpi(w1, "anti_freeze_interval") == 0) {
-			ANTI_FREEZE_INTERVAL = atoi(w2);
-			if (ANTI_FREEZE_INTERVAL < 5)
-				ANTI_FREEZE_INTERVAL = 5; // minimum 5 seconds
-		} 
-		else if (strcmpi(w1, "import") == 0) {
-			login_config_read(w2);
-		} 
-		else if(strcmpi(w1,"use_MD5_passwords")==0){
-			if (!strcmpi(w2,"yes")) {
-				use_md5_passwds=1;
-			} else if (!strcmpi(w2,"no")){
-				use_md5_passwds=0;
-			}
-			printf ("Using MD5 Passwords: %s \n",w2);
-		}
-        else if (strcmpi(w1, "date_format") == 0) { // note: never have more than 19 char for the date!
-				switch (atoi(w2)) {
-				case 0:
-					strcpy(date_format, "%d-%m-%Y %H:%M:%S"); // 31-12-2004 23:59:59
-					break;
-				case 1:
-					strcpy(date_format, "%m-%d-%Y %H:%M:%S"); // 12-31-2004 23:59:59
-					break;
-				case 2:
-					strcpy(date_format, "%Y-%d-%m %H:%M:%S"); // 2004-31-12 23:59:59
-					break;
-				case 3:
-					strcpy(date_format, "%Y-%m-%d %H:%M:%S"); // 2004-12-31 23:59:59
-					break;
-				}
-		}
-        else if (strcmpi(w1, "min_level_to_connect") == 0) {
-				min_level_to_connect = atoi(w2);
-		}
-        else if (strcmpi(w1, "check_ip_flag") == 0) {
-                check_ip_flag = config_switch(w2);
-    	}
- 	}
-	fclose(fp);
-	printf ("End reading configuration...\n");
-	return 0;
-}
-
-void sql_config_read(const char *cfgName){ /* Kalaspuff, to get login_db */
-	int i;
-	char line[1024], w1[1024], w2[1024];
-	printf("reading configure: %s\n", cfgName);
-	FILE *fp=fopen(cfgName,"r");
-	if(fp==NULL){
-		printf("file not found: %s\n",cfgName);
-		exit(1);
-	}
-	while(fgets(line, sizeof(line)-1, fp)){
-		if(line[0] == '/' && line[1] == '/')
-			continue;
-		i=sscanf(line,"%[^:]: %[^\r\n]",w1,w2);
-		if(i!=2)
-			continue;
-		if (strcmpi(w1, "login_db") == 0) {
-			strcpy(login_db, w2);
-		}
-		//add for DB connection
-		else if(strcmpi(w1,"login_server_ip")==0){
-			strcpy(login_server_ip, w2);
-			printf ("set login_server_ip : %s\n",w2);
-		}
-		else if(strcmpi(w1,"login_server_port")==0){
-			login_server_port=atoi(w2);
-			printf ("set login_server_port : %s\n",w2);
-		}
-		else if(strcmpi(w1,"login_server_id")==0){
-			strcpy(login_server_id, w2);
-			printf ("set login_server_id : %s\n",w2);
-		}
-		else if(strcmpi(w1,"login_server_pw")==0){
-			strcpy(login_server_pw, w2);
-			printf ("set login_server_pw : %s\n",w2);
-		}
-		else if(strcmpi(w1,"login_server_db")==0){
-			strcpy(login_server_db, w2);
-			printf ("set login_server_db : %s\n",w2);
-		}
-		//added for custom column names for custom login table
-		else if(strcmpi(w1,"login_db_account_id")==0){
-			strcpy(login_db_account_id, w2);
-		}
-		else if(strcmpi(w1,"login_db_userid")==0){
-			strcpy(login_db_userid, w2);
-		}
-		else if(strcmpi(w1,"login_db_user_pass")==0){
-			strcpy(login_db_user_pass, w2);
-		}
-		else if(strcmpi(w1,"login_db_level")==0){
-			strcpy(login_db_level, w2);
-		}
-		//end of custom table config
-		else if (strcmpi(w1, "loginlog_db") == 0) {
-			strcpy(loginlog_db, w2);
-		}
-        }
-        fclose(fp);
-        printf("reading configure done.....\n");
-}
-
-int do_init(int argc,char **argv){
-	//initialize login server
-	int i;
-
-	//read login configue
-	login_config_read( (argc>1)?argv[1]:LOGIN_CONF_NAME );
-	sql_config_read(SQL_CONF_NAME);
-	login_lan_config_read((argc > 1) ? argv[1] : LAN_CONF_NAME);
-	//Generate Passworded Key.
-	printf ("memset md5key \n");
-	memset(md5key, 0, sizeof(md5key));
-	printf ("memset md5key complete\n");
-	printf ("memset keyleng\n");
-	md5keylen=rand()%4+12;
-	for(i=0;i<md5keylen;i++)
-		md5key[i]=rand()%255+1;
-	printf ("memset keyleng complete\n");
-
-	printf ("set FIFO Size\n");
-	for(i=0;i<AUTH_FIFO_SIZE;i++)
-		auth_fifo[i].delflag=1;
-	printf ("set FIFO Size complete\n");
-
-	printf ("set max servers\n");
-	for(i=0;i<MAX_SERVERS;i++)
-		server_fd[i]=-1;
-	printf ("set max servers complete\n");
-	//server port open & binding
-
-	login_fd=make_listen_port(login_port);
-
-	//Auth start
-	printf ("Running mmo_auth_sqldb_init()\n");
-	mmo_auth_sqldb_init();
-	printf ("finished mmo_auth_sqldb_init()\n");
-	//sync account when terminating.
-	//but no need when you using DBMS (mysql)
-	set_termfunc(mmo_db_close);
-
-	//set default parser as parse_login function
-	set_defaultparse(parse_login);
-
-	if(anti_freeze_enable > 0) {
-		add_timer_func_list(char_anti_freeze_system, "char_anti_freeze_system");
-		i = add_timer_interval(gettick()+1000, char_anti_freeze_system, 0, 0, ANTI_FREEZE_INTERVAL * 1000);
-	}
-
-	// ban deleter timer - 1 minute term
-	printf("add interval tic (ip_ban_check)....\n");
-	i=add_timer_interval(gettick()+10, ip_ban_check,0,0,60*1000);
-
-	printf("The login-server is \033[1;32mready\033[0m (Server is listening on the port %d).\n\n", login_port);
-
-	return 0;
-}
-
-
diff --git a/misc/src/login_sql/login.h b/misc/src/login_sql/login.h
deleted file mode 100644
index 6335168..0000000
--- a/misc/src/login_sql/login.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef _LOGIN_H_
-#define _LOGIN_H_
-
-#define MAX_SERVERS 30
-
-#define LOGIN_CONF_NAME	"conf/login_athena.conf"
-#define SQL_CONF_NAME "conf/inter_athena.conf"
-#define LAN_CONF_NAME     "conf/lan_support.conf"
-
-#define PASSWORDENC		3	// A definition is given when making an encryption password correspond.
-							// It is 1 at the time of passwordencrypt.
-							// It is made into 2 at the time of passwordencrypt2.
-							// When it is made 3, it corresponds to both.
-
-#define START_ACCOUNT_NUM	  2000000
-#define END_ACCOUNT_NUM		100000000
-
-struct mmo_account {
-	char* userid;
-	char* passwd;
-	int passwdenc;
-
-	long account_id;
-	long login_id1;
-	long login_id2;
-	long char_id;
-	char lastlogin[24];
-	int sex;
-};
-
-struct mmo_char_server {
-	char name[20];
-	long ip;
-	short port;
-	int users;
-	int maintenance;
-	int new;
-};
-
-
-#endif
diff --git a/misc/src/login_sql/make.sh b/misc/src/login_sql/make.sh
deleted file mode 100644
index 198d33b..0000000
--- a/misc/src/login_sql/make.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-	rsqlt=`rm -rf *.o`
-	gcc -c login.c -I/usr/local/include/mysql/
-	gcc -c md5calc.c -I/usr/local/include/mysql/
-	gcc -c strlib.c
-	gcc -o login-server login.o strlib.o md5calc.o ../common/core.o ../common/socket.o ../common/timer.o ../common/db.o -L/usr/local/lib/mysql/ -lmysqlclient -lz
diff --git a/misc/src/login_sql/md5calc.c b/misc/src/login_sql/md5calc.c
deleted file mode 100644
index 58cea12..0000000
--- a/misc/src/login_sql/md5calc.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/***********************************************************
- * md5 calculation algorithm
- *
- * The source code referred to the following URL.
- * http://www.geocities.co.jp/SiliconValley-Oakland/8878/lab17/lab17.html
- *
- ***********************************************************/
-
-#include "md5calc.h"
-#include <string.h>
-#include <stdio.h>
-
-#ifndef UINT_MAX
-#define UINT_MAX 4294967295U
-#endif
-
-// Global variable
-static unsigned int *pX;
-
-// Stirng Table
-static const unsigned int T[] = {
-   0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, //0
-   0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, //4
-   0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, //8
-   0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, //12
-   0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, //16
-   0xd62f105d,  0x2441453, 0xd8a1e681, 0xe7d3fbc8, //20
-   0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, //24
-   0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, //28
-   0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, //32
-   0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, //36
-   0x289b7ec6, 0xeaa127fa, 0xd4ef3085,  0x4881d05, //40
-   0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, //44
-   0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, //48
-   0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, //52
-   0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, //56
-   0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391  //60
-};
-
-// ROTATE_LEFT   The left is made to rotate x [ n-bit ]. This is diverted as it is from RFC.
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
-
-// The function used for other calculation
-static unsigned int F(unsigned int X, unsigned int Y, unsigned int Z)
-{
-   return (X & Y) | (~X & Z);
-}
-static unsigned int G(unsigned int X, unsigned int Y, unsigned int Z)
-{
-   return (X & Z) | (Y & ~Z);
-}
-static unsigned int H(unsigned int X, unsigned int Y, unsigned int Z)
-{
-   return X ^ Y ^ Z;
-}
-static unsigned int I(unsigned int X, unsigned int Y, unsigned int Z)
-{
-   return Y ^ (X | ~Z);
-}
-
-static unsigned int Round(unsigned int a, unsigned int b, unsigned int FGHI,
-                     unsigned int k, unsigned int s, unsigned int i)
-{
-   return b + ROTATE_LEFT(a + FGHI + pX[k] + T[i], s);
-}
-
-static void Round1(unsigned int *a, unsigned int b, unsigned int c,
-		unsigned int d,unsigned int k, unsigned int s, unsigned int i)
-{
-	*a = Round(*a, b, F(b,c,d), k, s, i);
-}
-static void Round2(unsigned int *a, unsigned int b, unsigned int c,
-		unsigned int d,unsigned int k, unsigned int s, unsigned int i)
-{
-	*a = Round(*a, b, G(b,c,d), k, s, i);
-}
-static void Round3(unsigned int *a, unsigned int b, unsigned int c,
-		unsigned int d,unsigned int k, unsigned int s, unsigned int i)
-{
-	*a = Round(*a, b, H(b,c,d), k, s, i);
-}
-static void Round4(unsigned int *a, unsigned int b, unsigned int c,
-		unsigned int d,unsigned int k, unsigned int s, unsigned int i)
-{
-	*a = Round(*a, b, I(b,c,d), k, s, i);
-}
-
-static void MD5_Round_Calculate(const unsigned char *block,
-	unsigned int *A2, unsigned int *B2, unsigned int *C2, unsigned int *D2)
-{
-	//create X It is since it is required.
-	unsigned int X[16]; //512bit 64byte
-	int j,k;
-
-	//Save A as AA, B as BB, C as CC, and and D as DD (saving of A, B, C, and D)
-	unsigned int A=*A2, B=*B2, C=*C2, D=*D2;
-	unsigned int AA = A,BB = B,CC = C,DD = D;
-	
-	//It is a large region variable reluctantly because of calculation of a round. . . for Round1...4
-	pX = X;
-
-	//Copy block(padding_message) i into X
-	for (j=0,k=0; j<64; j+=4,k++)
-		X[k] = ( (unsigned int )block[j] )         // 8byte*4 -> 32byte conversion
-			| ( ((unsigned int )block[j+1]) << 8 ) // A function called Decode as used in the field of RFC
-			| ( ((unsigned int )block[j+2]) << 16 )
-			| ( ((unsigned int )block[j+3]) << 24 );
-
-
-   //Round 1
-   Round1(&A,B,C,D,  0, 7,  0); Round1(&D,A,B,C,  1, 12,  1); Round1(&C,D,A,B,  2, 17,  2); Round1(&B,C,D,A,  3, 22,  3);
-   Round1(&A,B,C,D,  4, 7,  4); Round1(&D,A,B,C,  5, 12,  5); Round1(&C,D,A,B,  6, 17,  6); Round1(&B,C,D,A,  7, 22,  7);
-   Round1(&A,B,C,D,  8, 7,  8); Round1(&D,A,B,C,  9, 12,  9); Round1(&C,D,A,B, 10, 17, 10); Round1(&B,C,D,A, 11, 22, 11);
-   Round1(&A,B,C,D, 12, 7, 12); Round1(&D,A,B,C, 13, 12, 13); Round1(&C,D,A,B, 14, 17, 14); Round1(&B,C,D,A, 15, 22, 15);
-
-   //Round 2
-   Round2(&A,B,C,D,  1, 5, 16); Round2(&D,A,B,C,  6, 9, 17); Round2(&C,D,A,B, 11, 14, 18); Round2(&B,C,D,A,  0, 20, 19);
-   Round2(&A,B,C,D,  5, 5, 20); Round2(&D,A,B,C, 10, 9, 21); Round2(&C,D,A,B, 15, 14, 22); Round2(&B,C,D,A,  4, 20, 23);
-   Round2(&A,B,C,D,  9, 5, 24); Round2(&D,A,B,C, 14, 9, 25); Round2(&C,D,A,B,  3, 14, 26); Round2(&B,C,D,A,  8, 20, 27);
-   Round2(&A,B,C,D, 13, 5, 28); Round2(&D,A,B,C,  2, 9, 29); Round2(&C,D,A,B,  7, 14, 30); Round2(&B,C,D,A, 12, 20, 31);
-
-   //Round 3
-   Round3(&A,B,C,D,  5, 4, 32); Round3(&D,A,B,C,  8, 11, 33); Round3(&C,D,A,B, 11, 16, 34); Round3(&B,C,D,A, 14, 23, 35);
-   Round3(&A,B,C,D,  1, 4, 36); Round3(&D,A,B,C,  4, 11, 37); Round3(&C,D,A,B,  7, 16, 38); Round3(&B,C,D,A, 10, 23, 39);
-   Round3(&A,B,C,D, 13, 4, 40); Round3(&D,A,B,C,  0, 11, 41); Round3(&C,D,A,B,  3, 16, 42); Round3(&B,C,D,A,  6, 23, 43);
-   Round3(&A,B,C,D,  9, 4, 44); Round3(&D,A,B,C, 12, 11, 45); Round3(&C,D,A,B, 15, 16, 46); Round3(&B,C,D,A,  2, 23, 47);
-
-   //Round 4
-   Round4(&A,B,C,D,  0, 6, 48); Round4(&D,A,B,C,  7, 10, 49); Round4(&C,D,A,B, 14, 15, 50); Round4(&B,C,D,A,  5, 21, 51);
-   Round4(&A,B,C,D, 12, 6, 52); Round4(&D,A,B,C,  3, 10, 53); Round4(&C,D,A,B, 10, 15, 54); Round4(&B,C,D,A,  1, 21, 55);
-   Round4(&A,B,C,D,  8, 6, 56); Round4(&D,A,B,C, 15, 10, 57); Round4(&C,D,A,B,  6, 15, 58); Round4(&B,C,D,A, 13, 21, 59);
-   Round4(&A,B,C,D,  4, 6, 60); Round4(&D,A,B,C, 11, 10, 61); Round4(&C,D,A,B,  2, 15, 62); Round4(&B,C,D,A,  9, 21, 63);
-
-   // Then perform the following additions. (let's add)
-   *A2 = A + AA;
-   *B2 = B + BB;
-   *C2 = C + CC;
-   *D2 = D + DD;
-
-   //The clearance of confidential information
-   memset(pX, 0, sizeof(X));
-}
-
-//-------------------------------------------------------------------
-// The function for the exteriors
-
-/** output is the coded binary in the character sequence which wants to code string. */
-void MD5_String2binary(const char * string, char * output)
-{
-//var
-   /*8bit*/
-   unsigned char padding_message[64]; //Extended message   512bit 64byte
-   unsigned char *pstring;             //The position of string in the present scanning notes is held.
-
-//   unsigned char digest[16];
-   /*32bit*/
-   unsigned int string_byte_len,    //The byte chief of string is held.
-                   string_bit_len,     //The bit length of string is held.
-                   copy_len,           //The number of bytes which is used by 1-3 and which remained
-                   msg_digest[4];      //Message digest   128bit 4byte
-   unsigned int *A = &msg_digest[0], //The message digest in accordance with RFC (reference)
-                   *B = &msg_digest[1],
-                   *C = &msg_digest[2],
-                   *D = &msg_digest[3];
-	int i;
-
-//prog
-   //Step 3.Initialize MD Buffer (although it is the initialization; step 3 of A, B, C, and D -- unavoidable -- a head)
-   *A = 0x67452301;
-   *B = 0xefcdab89;
-   *C = 0x98badcfe;
-   *D = 0x10325476;
-
-   //Step 1.Append Padding Bits (extension of a mark bit)
-   //1-1
-   string_byte_len = strlen(string);    //The byte chief of a character sequence is acquired.
-   pstring = (unsigned char *)string; //The position of the present character sequence is set.
-
-   //1-2  Repeat calculation until length becomes less than 64 bytes.
-   for (i=string_byte_len; 64<=i; i-=64,pstring+=64)
-        MD5_Round_Calculate(pstring, A,B,C,D);
-
-   //1-3
-   copy_len = string_byte_len % 64;                               //The number of bytes which remained is computed.
-   strncpy((char *)padding_message, (char *)pstring, copy_len); //A message is copied to an extended bit sequence.
-   memset(padding_message+copy_len, 0, 64 - copy_len);           //It buries by 0 until it becomes extended bit length.
-   padding_message[copy_len] |= 0x80;                            //The next of a message is 1.
-
-   //1-4 
-   //If 56 bytes or more (less than 64 bytes) of remainder becomes, it will calculate by extending to 64 bytes.
-   if (56 <= copy_len) {
-       MD5_Round_Calculate(padding_message, A,B,C,D);
-       memset(padding_message, 0, 56); //56 bytes is newly fill uped with 0.
-   }
-
-
-   //Step 2.Append Length (the information on length is added)
-   string_bit_len = string_byte_len * 8;             //From the byte chief to bit length (32 bytes of low rank)
-   memcpy(&padding_message[56], &string_bit_len, 4); //32 bytes of low rank is set.
-
-   //When bit length cannot be expressed in 32 bytes of low rank, it is a beam raising to a higher rank.
-  if (UINT_MAX / 8 < string_byte_len) {
-      unsigned int high = (string_byte_len - UINT_MAX / 8) * 8;
-      memcpy(&padding_message[60], &high, 4);
-  } else
-      memset(&padding_message[60], 0, 4); //In this case, it is good for a higher rank at 0.
-
-   //Step 4.Process Message in 16-Word Blocks (calculation of MD5)
-   MD5_Round_Calculate(padding_message, A,B,C,D);
-
-
-   //Step 5.Output (output)
-   memcpy(output,msg_digest,16);
-//   memcpy (digest, msg_digest, and 16);  //8 byte*4 < - 32byte conversion   A function called Encode as used in the field of RFC
-/*   sprintf(output,
-           "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
-           digest[ 0], digest[ 1], digest[ 2], digest[ 3],
-           digest[ 4], digest[ 5], digest[ 6], digest[ 7],
-           digest[ 8], digest[ 9], digest[10], digest[11],
-           digest[12], digest[13], digest[14], digest[15]);*/
-}
-
-/** output is the coded character sequence in the character sequence which wants to code string. */
-void MD5_String(const char * string, char * output)
-{
-   unsigned char digest[16];
-
-	MD5_String2binary(string,digest);
-	sprintf(output,
-		"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
-		digest[ 0], digest[ 1], digest[ 2], digest[ 3],
-		digest[ 4], digest[ 5], digest[ 6], digest[ 7],
-		digest[ 8], digest[ 9], digest[10], digest[11],
-		digest[12], digest[13], digest[14], digest[15]);
-}
-
diff --git a/misc/src/login_sql/md5calc.h b/misc/src/login_sql/md5calc.h
deleted file mode 100644
index 9bc554f..0000000
--- a/misc/src/login_sql/md5calc.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef _MD5CALC_H_
-#define _MD5CALC_H_
-
-void MD5_String(const char * string, char * output);
-void MD5_String2binary(const char * string, char * output);
-
-#endif
diff --git a/misc/src/login_sql/readme.txt b/misc/src/login_sql/readme.txt
deleted file mode 100644
index b945af7..0000000
--- a/misc/src/login_sql/readme.txt
+++ /dev/null
@@ -1,120 +0,0 @@
-// Encoded UTF-8
-//---------------------------------------------
-// 007 - by Jazz
-1. 0590 official versionに合わせて修正しました.
-
-//---------------------------------------------
-// 006 - by Jazz
-1. パスワード決まった回数間違い時自動 IP遮断具現.
-2. login_athena.confを修正
-
-//---------------------------------------------
-// 005 - by Jazz
-1. 許容しない IDが接近の時自動で IP遮断機能具現.
-2. 自動で遮断解除機能具現.
-
-//---------------------------------------------
-// 004 - by Jazz
-1. aphostropy 問題を解決しました. これは保安と連関がある問題です.
-2. SQLの構造を修正しました.
-3. server 状態を SQLで出力.
-
-//---------------------------------------------
-// 003 - by Jazz
-1. 接続記録を DBで出力.
-2. IP基盤の接続遮断具現.
-
-//---------------------------------------------
-// 002 - by Jazz
-1. いくつかの詳細問題点修正.
-
-//---------------------------------------------
-// 001 - by Jazz
-1. 一番目安定 versionです.
-
-
-// notice some..
-In this program, new parts are under BSD License.
-and imported parts are under GPL as athena did.
-
-this program is not public license. but modification and editing are
-unlimit permitted. but auther don't have any responsibility on that.
-
-this realase does not gurantee working perfectly. and, I would
-answer neither that question nor technical one.
-
-I use...
-P4 2.4Gh/512MB/WinXP/cygwin
-
-athena is under GPL license.
-Ragnarok is Gravity's trademark.
-login-db for athena is BSD license except code from original athena.
-cygwin is Redhat's trademark.
-
-// About compile.
-You need mysqlclient library to compile this. You can get this by
-compiling mysql source.
-
-"-lmysqlclient" option needed when you did compile.
-
-some patch need on mysql when you did compile under cygwin.
-
-// 몇가지 정보에 대하여
-
-이 프로그램에서 새로 만들어진 부분은 BSD 라이센스 아래에 배포 됩니다.
-그리고 import 된 부분은 원래 athena의 GPL 라이센스 아래에 있습니다.
-
-이 프로그램은 public license가 아닙니다. 하지만 변경, 개조, 수정은
-무제한 허용되며 그에 대한 책임은 저자가 지지 않습니다.
-
-현재 이 릴리즈는 완벽히 동작함을 보장하지 않습니다. 그리고 그에 대한
-상담 또한 절대 받지 않습니다.
-
-기술적인 부분의 상담은 받지 않습니다.
-
-개발 환경
-P4 2.4Gh/512MB/WinXP/cygwin
-
-athena는 GPL 라이센스를 준수 합니다.
-Ragnarok는 Gravity의 trademark입니다.
-login-db for athena는 athena에서 가져온 부분을 제외하면 BSD 라이센스를 따릅니다.
-cygwin은 Redhat의 trademark입니다.
-
-// 컴파일에 대하여.
-
-이 프로그램을 컴파일하기 위하여 mysqlclient에 대한 library가 필요합니다.
-이는 mysql의 소스를 컴파일하면 얻을수 있습니다.
-
-컴파일시에 -lmysqlclient 옵션이 필요합니다.
-
-cygwin의 경우는 몇가지 패치가 필요합니다.
-
-// いくつかの情報に対して
-
-このプログラムで新たに作られた部分は BSD ライセンスの下に配布になります.
-そして import になった部分は元々 athenaの GPL ライセンスの下にあります.
-
-このプログラムは public licenseではないです. しかし変更, 改造, 修正は
-無制限許容されてそれに対する責任は著者が負けないです.
-
-現在このリリースは完壁に動作することを保障しないです. そして彼に大韓
-相談も絶対受けないです.
-
-技術的な部分の相談は受けないです.
-
-開発環境
-P4 2.4Gh/512MB/WinXP/cygwin
-
-athenaは GPL ライセンスを守ります.
-Ragnarokは Gravityの trademarkです.
-login-db for athenaは athenaから持って来た部分を除けば BSD ライセンスに付きます.
-cygwinは Redhatの trademarkです.
-
-// コンパイルに対して.
-
-このプログラムをコンパイルするために mysqlclientに対する libraryが必要です.
-これは mysqlのソースをコンパイルすれば得ることができます.
-
-コンパイルの時に -lmysqlclient オプションが必要です.
-
-cygwinの場合はいくつかのパッチが必要です.
\ No newline at end of file
diff --git a/misc/src/login_sql/strlib.c b/misc/src/login_sql/strlib.c
deleted file mode 100644
index 7f6e197..0000000
--- a/misc/src/login_sql/strlib.c
+++ /dev/null
@@ -1,58 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "strlib.h"
-#include "utils.h"
-
-//-----------------------------------------------
-// string lib.
-unsigned char* jstrescape (unsigned char* pt) {
-	//copy from here
-	unsigned char * ptr;
-	int i =0, j=0;
-
-	//copy string to temporary
-	CREATE(ptr, char, J_MAX_MALLOC_SIZE);
-	strcpy (ptr,pt);
-
-	while (ptr[i] != '\0') {
-		switch (ptr[i]) {
-			case '\'':
-				pt[j++] = '\\';
-				pt[j++] = ptr[i++];
-				break;
-			case '\\':
-				pt[j++] = '\\';
-				pt[j++] = ptr[i++];
-				break;
-			default:
-				pt[j++] = ptr[i++];
-		}
-	}
-	pt[j++] = '\0';
-	free (ptr);
-	return (unsigned char*) &pt[0];
-}
-
-unsigned char* jstrescapecpy (unsigned char* pt,unsigned char* spt) {
-	//copy from here
-	int i =0, j=0;
-
-	while (spt[i] != '\0') {
-		switch (spt[i]) {
-			case '\'':
-				pt[j++] = '\\';
-				pt[j++] = spt[i++];
-				break;
-			case '\\':
-				pt[j++] = '\\';
-				pt[j++] = spt[i++];
-				break;
-			default:
-				pt[j++] = spt[i++];
-		}
-	}
-	pt[j++] = '\0';
-	return (unsigned char*) &pt[0];
-}
diff --git a/misc/src/login_sql/strlib.h b/misc/src/login_sql/strlib.h
deleted file mode 100644
index ddf29ab..0000000
--- a/misc/src/login_sql/strlib.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef _J_STR_LIB_H_
-#define _J_STR_LIB_H_
-#define J_MAX_MALLOC_SIZE 65535
-// String function library.
-// code by Jioh L. Jung (ziozzang@4wish.net)
-// This code is under license "BSD"
-unsigned char* jstrescape (unsigned char* pt);
-unsigned char* jstrescapecpy (unsigned char* pt,unsigned char* spt);
-#endif
diff --git a/misc/src/login_sql/timer.h b/misc/src/login_sql/timer.h
deleted file mode 100644
index be9706a..0000000
--- a/misc/src/login_sql/timer.h
+++ /dev/null
@@ -1,43 +0,0 @@
-// original : core.h 2003/03/14 11:55:25 Rev 1.4
-
-#ifndef	_TIMER_H_
-#define	_TIMER_H_
-
-#define BASE_TICK 5
-
-#define TIMER_ONCE_AUTODEL 1
-#define TIMER_INTERVAL 2
-#define TIMER_REMOVE_HEAP 16
-
-#define DIFF_TICK(a,b) ((int)((a)-(b)))
-
-// Struct declaration
-
-struct TimerData {
-	unsigned int tick;
-	int (*func)(int,unsigned int,int,int);
-	int id;
-	int data;
-	int type;
-	int interval;
-	int heap_pos;
-};
-
-// Function prototype declaration
-
-unsigned int gettick_nocache(void);
-unsigned int gettick(void);
-
-int add_timer(unsigned int,int (*)(int,unsigned int,int,int),int,int);
-int add_timer_interval(unsigned int,int (*)(int,unsigned int,int,int),int,int,int);
-int delete_timer(int,int (*)(int,unsigned int,int,int));
-
-int addtick_timer(int tid,unsigned int tick);
-struct TimerData *get_timer(int tid);
-
-int do_timer(unsigned int tick);
-
-int add_timer_func_list(int (*)(int,unsigned int,int,int),char*);
-char* search_timer_func_list(int (*)(int,unsigned int,int,int));
-
-#endif	// _TIMER_H_
diff --git a/misc/src/map/GNUmakefile b/misc/src/map/GNUmakefile
deleted file mode 100644
index 852bbb9..0000000
--- a/misc/src/map/GNUmakefile
+++ /dev/null
@@ -1,72 +0,0 @@
-all: txt sql
-
-txt: txtobj map-server
-
-sql: sqlobj map-server_sql
-
-txtobj:
-	mkdir txtobj
-
-sqlobj:
-	mkdir sqlobj
-
-COMMON_OBJ = ../common/core.o ../common/socket.o ../common/timer.o ../common/grfio.o ../common/db.o ../common/lock.o ../common/nullpo.o ../common/malloc.o
-LIBS = -lz -lm
-
-map-server: txtobj/map.o txtobj/chrif.o txtobj/clif.o txtobj/pc.o txtobj/npc.o txtobj/chat.o txtobj/path.o txtobj/itemdb.o txtobj/mob.o txtobj/script.o txtobj/storage.o txtobj/skill.o txtobj/atcommand.o txtobj/battle.o txtobj/intif.o txtobj/trade.o txtobj/party.o txtobj/vending.o txtobj/guild.o txtobj/pet.o $(COMMON_OBJ)
-	$(CC) -o ../../$@ $^ $(LIBS)
-
-map-server_sql: sqlobj/map.o sqlobj/chrif.o sqlobj/clif.o sqlobj/pc.o sqlobj/npc.o sqlobj/chat.o sqlobj/path.o sqlobj/itemdb.o sqlobj/mob.o sqlobj/script.o sqlobj/storage.o sqlobj/skill.o sqlobj/atcommand.o sqlobj/battle.o sqlobj/intif.o sqlobj/trade.o sqlobj/party.o sqlobj/vending.o sqlobj/guild.o sqlobj/pet.o sqlobj/mail.o $(COMMON_OBJ)
-	$(CC) -o ../../$@ $^ $(LIB_S)
-
-txtobj/%.o: %.c
-	$(COMPILE.c) -DTXT_ONLY $(OUTPUT_OPTION) $<
-
-sqlobj/%.o: %.c
-	$(COMPILE.c) $(OUTPUT_OPTION) $<
-
-txtobj/map.o: map.c map.h chrif.h clif.h npc.h pc.h mob.h chat.h skill.h itemdb.h storage.h party.h pet.h atcommand.h ../common/core.h ../common/timer.h ../common/db.h ../common/grfio.h ../common/mmo.h
-txtobj/chrif.o: chrif.c map.h battle.h chrif.h clif.h intif.h pc.h npc.h ../common/socket.h ../common/timer.h ../common/mmo.h
-txtobj/clif.o: clif.c map.h chrif.h clif.h mob.h intif.h pc.h npc.h itemdb.h chat.h script.h storage.h party.h guild.h atcommand.h pet.h atcommand.h ../common/socket.h ../common/timer.h ../common/mmo.h ../common/version.h
-txtobj/pc.o: pc.c map.h clif.h intif.h pc.h npc.h mob.h itemdb.h battle.h skill.h script.h party.h guild.h pet.h trade.h storage.h chat.h vending.h ../common/timer.h ../common/mmo.h ../common/db.h
-txtobj/npc.o: npc.c map.h npc.h clif.h pc.h script.h mob.h itemdb.h battle.h ../common/db.h ../common/timer.h ../common/mmo.h
-txtobj/chat.o: chat.c map.h clif.h pc.h chat.h ../common/db.h ../common/mmo.h
-txtobj/path.o: path.c map.h battle.h ../common/mmo.h
-txtobj/itemdb.o: itemdb.c map.h battle.h itemdb.h ../common/db.h ../common/grfio.h ../common/mmo.h
-txtobj/mob.o: mob.c map.h clif.h intif.h pc.h mob.h skill.h battle.h npc.h itemdb.h ../common/timer.h ../common/socket.h ../common/mmo.h
-txtobj/script.o: script.c itemdb.h map.h pc.h mob.h clif.h intif.h npc.h script.h storage.h skill.h pet.h battle.h ../common/timer.h ../common/socket.h ../common/db.h ../common/mmo.h ../common/lock.h
-txtobj/storage.o: storage.c itemdb.h pc.h clif.h intif.h storage.h guild.h ../common/mmo.h ../common/db.h
-txtobj/skill.o: skill.c skill.h map.h clif.h pc.h mob.h battle.h itemdb.h script.h ../common/timer.h ../common/mmo.h
-txtobj/atcommand.o: atcommand.c atcommand.h itemdb.h pc.h map.h skill.h clif.h mob.h intif.h battle.h storage.h guild.h pet.h ../common/socket.h ../common/timer.h ../common/mmo.h
-txtobj/battle.o: battle.c battle.h skill.h map.h mob.h pc.h pet.h guild.h ../common/timer.h ../common/mmo.h
-txtobj/intif.o: intif.c intif.h chrif.h clif.h party.h guild.h storage.h map.h battle.h pet.h ../common/socket.h ../common/mmo.h
-txtobj/trade.o: trade.c trade.h clif.h itemdb.h map.h pc.h npc.h ../common/mmo.h
-txtobj/party.o: party.c party.h clif.h intif.h pc.h map.h battle.h ../common/db.h ../common/socket.h ../common/timer.h ../common/mmo.h
-txtobj/vending.o: vending.c vending.h clif.h itemdb.h map.h pc.h ../common/mmo.h
-txtobj/guild.o: guild.c guild.h storage.h battle.h clif.h intif.h pc.h npc.h map.h ../common/db.h ../common/socket.h ../common/timer.h ../common/mmo.h
-txtobj/pet.o: pet.c pet.h map.h clif.h chrif.h intif.h pc.h itemdb.h battle.h mob.h npc.h script.h ../common/db.h ../common/socket.h ../common/timer.h ../common/mmo.h
-
-sqlobj/map.o: map.c map.h chrif.h clif.h npc.h pc.h mob.h chat.h skill.h itemdb.h storage.h party.h pet.h atcommand.h ../common/core.h ../common/timer.h ../common/db.h ../common/grfio.h ../common/mmo.h
-sqlobj/chrif.o: chrif.c map.h battle.h chrif.h clif.h intif.h pc.h npc.h ../common/socket.h ../common/timer.h ../common/mmo.h
-sqlobj/clif.o: clif.c map.h chrif.h clif.h mob.h intif.h pc.h npc.h itemdb.h chat.h script.h storage.h party.h guild.h atcommand.h pet.h atcommand.h ../common/socket.h ../common/timer.h ../common/mmo.h ../common/version.h
-sqlobj/pc.o: pc.c map.h clif.h intif.h pc.h npc.h mob.h itemdb.h battle.h skill.h script.h party.h guild.h pet.h trade.h storage.h chat.h vending.h ../common/timer.h ../common/mmo.h ../common/db.h
-sqlobj/npc.o: npc.c map.h npc.h clif.h pc.h script.h mob.h itemdb.h battle.h ../common/db.h ../common/timer.h ../common/mmo.h
-sqlobj/chat.o: chat.c map.h clif.h pc.h chat.h ../common/db.h ../common/mmo.h
-sqlobj/path.o: path.c map.h battle.h ../common/mmo.h
-sqlobj/itemdb.o: itemdb.c map.h battle.h itemdb.h ../common/db.h ../common/grfio.h ../common/mmo.h
-sqlobj/mob.o: mob.c map.h clif.h intif.h pc.h mob.h skill.h battle.h npc.h itemdb.h ../common/timer.h ../common/socket.h ../common/mmo.h
-sqlobj/script.o: script.c itemdb.h map.h pc.h mob.h clif.h intif.h npc.h script.h storage.h skill.h pet.h battle.h ../common/timer.h ../common/socket.h ../common/db.h ../common/mmo.h ../common/lock.h
-sqlobj/storage.o: storage.c itemdb.h pc.h clif.h intif.h storage.h guild.h ../common/mmo.h ../common/db.h
-sqlobj/skill.o: skill.c skill.h map.h clif.h pc.h mob.h battle.h itemdb.h script.h ../common/timer.h ../common/mmo.h
-sqlobj/atcommand.o: atcommand.c atcommand.h itemdb.h pc.h map.h skill.h clif.h mob.h intif.h battle.h storage.h guild.h pet.h ../common/socket.h ../common/timer.h ../common/mmo.h
-sqlobj/battle.o: battle.c battle.h skill.h map.h mob.h pc.h pet.h guild.h ../common/timer.h ../common/mmo.h
-sqlobj/intif.o: intif.c intif.h chrif.h clif.h party.h guild.h storage.h map.h battle.h pet.h ../common/socket.h ../common/mmo.h
-sqlobj/trade.o: trade.c trade.h clif.h itemdb.h map.h pc.h npc.h ../common/mmo.h
-sqlobj/party.o: party.c party.h clif.h intif.h pc.h map.h battle.h ../common/db.h ../common/socket.h ../common/timer.h ../common/mmo.h
-sqlobj/vending.o: vending.c vending.h clif.h itemdb.h map.h pc.h ../common/mmo.h
-sqlobj/guild.o: guild.c guild.h storage.h battle.h clif.h intif.h pc.h npc.h map.h ../common/db.h ../common/socket.h ../common/timer.h ../common/mmo.h
-sqlobj/pet.o: pet.c pet.h map.h clif.h chrif.h intif.h pc.h itemdb.h battle.h mob.h npc.h script.h ../common/db.h ../common/socket.h ../common/timer.h ../common/mmo.h
-sqlobj/mail.o: mail.c mail.h
-
-clean:
-	rm -rf *.o ../../map-server ../../map-server_sql sqlobj txtobj
diff --git a/misc/src/map/Makefile b/misc/src/map/Makefile
deleted file mode 100644
index 3f5396e..0000000
--- a/misc/src/map/Makefile
+++ /dev/null
@@ -1,72 +0,0 @@
-all: txt sql
-
-txt: txtobj map-server
-
-sql: sqlobj map-server_sql
-
-txtobj:
-	mkdir txtobj
-
-sqlobj:
-	mkdir sqlobj
-
-COMMON_OBJ = ../common/core.o ../common/socket.o ../common/timer.o ../common/grfio.o ../common/db.o ../common/lock.o ../common/nullpo.o ../common/malloc.o
-LIBS = -lz -lm
-
-map-server: txtobj/map.o txtobj/chrif.o txtobj/clif.o txtobj/pc.o txtobj/npc.o txtobj/chat.o txtobj/path.o txtobj/itemdb.o txtobj/mob.o txtobj/script.o txtobj/storage.o txtobj/skill.o txtobj/atcommand.o txtobj/battle.o txtobj/intif.o txtobj/trade.o txtobj/party.o txtobj/vending.o txtobj/guild.o txtobj/pet.o $(COMMON_OBJ)
-	$(CC) -o ../../$@ $> $(LIBS)
-
-map-server_sql: sqlobj/map.o sqlobj/chrif.o sqlobj/clif.o sqlobj/pc.o sqlobj/npc.o sqlobj/chat.o sqlobj/path.o sqlobj/itemdb.o sqlobj/mob.o sqlobj/script.o sqlobj/storage.o sqlobj/skill.o sqlobj/atcommand.o sqlobj/battle.o sqlobj/intif.o sqlobj/trade.o sqlobj/party.o sqlobj/vending.o sqlobj/guild.o sqlobj/pet.o sqlobj/mail.o $(COMMON_OBJ)
-	$(CC) -o ../../$@ $> $(LIB_S)
-
-txtobj/%.o: %.c
-	$(COMPILE.c) -DTXT_ONLY $(OUTPUT_OPTION) $<
-
-sqlobj/%.o: %.c
-	$(COMPILE.c) $(OUTPUT_OPTION) $<
-
-txtobj/map.o: map.c map.h chrif.h clif.h npc.h pc.h mob.h chat.h skill.h itemdb.h storage.h party.h pet.h atcommand.h ../common/core.h ../common/timer.h ../common/db.h ../common/grfio.h ../common/mmo.h
-txtobj/chrif.o: chrif.c map.h battle.h chrif.h clif.h intif.h pc.h npc.h ../common/socket.h ../common/timer.h ../common/mmo.h
-txtobj/clif.o: clif.c map.h chrif.h clif.h mob.h intif.h pc.h npc.h itemdb.h chat.h script.h storage.h party.h guild.h atcommand.h pet.h atcommand.h ../common/socket.h ../common/timer.h ../common/mmo.h ../common/version.h
-txtobj/pc.o: pc.c map.h clif.h intif.h pc.h npc.h mob.h itemdb.h battle.h skill.h script.h party.h guild.h pet.h trade.h storage.h chat.h vending.h ../common/timer.h ../common/mmo.h ../common/db.h
-txtobj/npc.o: npc.c map.h npc.h clif.h pc.h script.h mob.h itemdb.h battle.h ../common/db.h ../common/timer.h ../common/mmo.h
-txtobj/chat.o: chat.c map.h clif.h pc.h chat.h ../common/db.h ../common/mmo.h
-txtobj/path.o: path.c map.h battle.h ../common/mmo.h
-txtobj/itemdb.o: itemdb.c map.h battle.h itemdb.h ../common/db.h ../common/grfio.h ../common/mmo.h
-txtobj/mob.o: mob.c map.h clif.h intif.h pc.h mob.h skill.h battle.h npc.h itemdb.h ../common/timer.h ../common/socket.h ../common/mmo.h
-txtobj/script.o: script.c itemdb.h map.h pc.h mob.h clif.h intif.h npc.h script.h storage.h skill.h pet.h battle.h ../common/timer.h ../common/socket.h ../common/db.h ../common/mmo.h ../common/lock.h
-txtobj/storage.o: storage.c itemdb.h pc.h clif.h intif.h storage.h guild.h ../common/mmo.h ../common/db.h
-txtobj/skill.o: skill.c skill.h map.h clif.h pc.h mob.h battle.h itemdb.h script.h ../common/timer.h ../common/mmo.h
-txtobj/atcommand.o: atcommand.c atcommand.h itemdb.h pc.h map.h skill.h clif.h mob.h intif.h battle.h storage.h guild.h pet.h ../common/socket.h ../common/timer.h ../common/mmo.h
-txtobj/battle.o: battle.c battle.h skill.h map.h mob.h pc.h pet.h guild.h ../common/timer.h ../common/mmo.h
-txtobj/intif.o: intif.c intif.h chrif.h clif.h party.h guild.h storage.h map.h battle.h pet.h ../common/socket.h ../common/mmo.h
-txtobj/trade.o: trade.c trade.h clif.h itemdb.h map.h pc.h npc.h ../common/mmo.h
-txtobj/party.o: party.c party.h clif.h intif.h pc.h map.h battle.h ../common/db.h ../common/socket.h ../common/timer.h ../common/mmo.h
-txtobj/vending.o: vending.c vending.h clif.h itemdb.h map.h pc.h ../common/mmo.h
-txtobj/guild.o: guild.c guild.h storage.h battle.h clif.h intif.h pc.h npc.h map.h ../common/db.h ../common/socket.h ../common/timer.h ../common/mmo.h
-txtobj/pet.o: pet.c pet.h map.h clif.h chrif.h intif.h pc.h itemdb.h battle.h mob.h npc.h script.h ../common/db.h ../common/socket.h ../common/timer.h ../common/mmo.h
-
-sqlobj/map.o: map.c map.h chrif.h clif.h npc.h pc.h mob.h chat.h skill.h itemdb.h storage.h party.h pet.h atcommand.h ../common/core.h ../common/timer.h ../common/db.h ../common/grfio.h ../common/mmo.h
-sqlobj/chrif.o: chrif.c map.h battle.h chrif.h clif.h intif.h pc.h npc.h ../common/socket.h ../common/timer.h ../common/mmo.h
-sqlobj/clif.o: clif.c map.h chrif.h clif.h mob.h intif.h pc.h npc.h itemdb.h chat.h script.h storage.h party.h guild.h atcommand.h pet.h atcommand.h ../common/socket.h ../common/timer.h ../common/mmo.h ../common/version.h
-sqlobj/pc.o: pc.c map.h clif.h intif.h pc.h npc.h mob.h itemdb.h battle.h skill.h script.h party.h guild.h pet.h trade.h storage.h chat.h vending.h ../common/timer.h ../common/mmo.h ../common/db.h
-sqlobj/npc.o: npc.c map.h npc.h clif.h pc.h script.h mob.h itemdb.h battle.h ../common/db.h ../common/timer.h ../common/mmo.h
-sqlobj/chat.o: chat.c map.h clif.h pc.h chat.h ../common/db.h ../common/mmo.h
-sqlobj/path.o: path.c map.h battle.h ../common/mmo.h
-sqlobj/itemdb.o: itemdb.c map.h battle.h itemdb.h ../common/db.h ../common/grfio.h ../common/mmo.h
-sqlobj/mob.o: mob.c map.h clif.h intif.h pc.h mob.h skill.h battle.h npc.h itemdb.h ../common/timer.h ../common/socket.h ../common/mmo.h
-sqlobj/script.o: script.c itemdb.h map.h pc.h mob.h clif.h intif.h npc.h script.h storage.h skill.h pet.h battle.h ../common/timer.h ../common/socket.h ../common/db.h ../common/mmo.h ../common/lock.h
-sqlobj/storage.o: storage.c itemdb.h pc.h clif.h intif.h storage.h guild.h ../common/mmo.h ../common/db.h
-sqlobj/skill.o: skill.c skill.h map.h clif.h pc.h mob.h battle.h itemdb.h script.h ../common/timer.h ../common/mmo.h
-sqlobj/atcommand.o: atcommand.c atcommand.h itemdb.h pc.h map.h skill.h clif.h mob.h intif.h battle.h storage.h guild.h pet.h ../common/socket.h ../common/timer.h ../common/mmo.h
-sqlobj/battle.o: battle.c battle.h skill.h map.h mob.h pc.h pet.h guild.h ../common/timer.h ../common/mmo.h
-sqlobj/intif.o: intif.c intif.h chrif.h clif.h party.h guild.h storage.h map.h battle.h pet.h ../common/socket.h ../common/mmo.h
-sqlobj/trade.o: trade.c trade.h clif.h itemdb.h map.h pc.h npc.h ../common/mmo.h
-sqlobj/party.o: party.c party.h clif.h intif.h pc.h map.h battle.h ../common/db.h ../common/socket.h ../common/timer.h ../common/mmo.h
-sqlobj/vending.o: vending.c vending.h clif.h itemdb.h map.h pc.h ../common/mmo.h
-sqlobj/guild.o: guild.c guild.h storage.h battle.h clif.h intif.h pc.h npc.h map.h ../common/db.h ../common/socket.h ../common/timer.h ../common/mmo.h
-sqlobj/pet.o: pet.c pet.h map.h clif.h chrif.h intif.h pc.h itemdb.h battle.h mob.h npc.h script.h ../common/db.h ../common/socket.h ../common/timer.h ../common/mmo.h
-sqlobj/mail.o: mail.c mail.h
-
-clean:
-	rm -rf *.o ../../map-server ../../map-server_sql sqlobj txtobj
diff --git a/misc/src/map/atcommand.c b/misc/src/map/atcommand.c
deleted file mode 100644
index 8dc39ba..0000000
--- a/misc/src/map/atcommand.c
+++ /dev/null
@@ -1,7753 +0,0 @@
-// $Id: atcommand.c 148 2004-09-30 14:05:37Z MouseJstr $
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-
-#include "socket.h"
-#include "timer.h"
-#include "nullpo.h"
-
-#include "clif.h"
-#include "chrif.h"
-#include "intif.h"
-#include "itemdb.h"
-#include "map.h"
-#include "pc.h"
-#include "skill.h"
-#include "mob.h"
-#include "pet.h"
-#include "battle.h"
-#include "party.h"
-#include "guild.h"
-#include "atcommand.h"
-#include "script.h"
-#include "npc.h"
-#include "trade.h"
-#include "core.h"
-
-#ifndef TXT_ONLY
-#include "mail.h"
-#endif
-
-#define STATE_BLIND 0x10
-
-static char command_symbol = '@'; // first char of the commands (by [Yor])
-
-static char msg_table[1000][1024]; // Server messages (0-499 reserved for GM commands, 500-999 reserved for others)
-
-#define ATCOMMAND_FUNC(x) int atcommand_ ## x (const int fd, struct map_session_data* sd, const char* command, const char* message)
-ATCOMMAND_FUNC(broadcast);
-ATCOMMAND_FUNC(localbroadcast);
-ATCOMMAND_FUNC(rurap);
-ATCOMMAND_FUNC(rura);
-ATCOMMAND_FUNC(where);
-ATCOMMAND_FUNC(jumpto);
-ATCOMMAND_FUNC(jump);
-ATCOMMAND_FUNC(who);
-ATCOMMAND_FUNC(who2);
-ATCOMMAND_FUNC(who3);
-ATCOMMAND_FUNC(whomap);
-ATCOMMAND_FUNC(whomap2);
-ATCOMMAND_FUNC(whomap3);
-ATCOMMAND_FUNC(whogm); // by Yor
-ATCOMMAND_FUNC(save);
-ATCOMMAND_FUNC(load);
-ATCOMMAND_FUNC(speed);
-ATCOMMAND_FUNC(storage);
-ATCOMMAND_FUNC(guildstorage);
-ATCOMMAND_FUNC(option);
-ATCOMMAND_FUNC(hide);
-ATCOMMAND_FUNC(jobchange);
-ATCOMMAND_FUNC(die);
-ATCOMMAND_FUNC(kill);
-ATCOMMAND_FUNC(alive);
-ATCOMMAND_FUNC(kami);
-ATCOMMAND_FUNC(heal);
-ATCOMMAND_FUNC(item);
-ATCOMMAND_FUNC(item2);
-ATCOMMAND_FUNC(itemreset);
-ATCOMMAND_FUNC(itemcheck);
-ATCOMMAND_FUNC(baselevelup);
-ATCOMMAND_FUNC(joblevelup);
-ATCOMMAND_FUNC(help);
-ATCOMMAND_FUNC(gm);
-ATCOMMAND_FUNC(pvpoff);
-ATCOMMAND_FUNC(pvpon);
-ATCOMMAND_FUNC(gvgoff);
-ATCOMMAND_FUNC(gvgon);
-ATCOMMAND_FUNC(model);
-ATCOMMAND_FUNC(go);
-ATCOMMAND_FUNC(monster);
-ATCOMMAND_FUNC(spawn);
-ATCOMMAND_FUNC(killmonster);
-ATCOMMAND_FUNC(killmonster2);
-ATCOMMAND_FUNC(refine);
-ATCOMMAND_FUNC(produce);
-ATCOMMAND_FUNC(memo);
-ATCOMMAND_FUNC(gat);
-ATCOMMAND_FUNC(packet);
-ATCOMMAND_FUNC(statuspoint);
-ATCOMMAND_FUNC(skillpoint);
-ATCOMMAND_FUNC(zeny);
-ATCOMMAND_FUNC(param);
-ATCOMMAND_FUNC(guildlevelup);
-ATCOMMAND_FUNC(makeegg);
-ATCOMMAND_FUNC(hatch);
-ATCOMMAND_FUNC(petfriendly);
-ATCOMMAND_FUNC(pethungry);
-ATCOMMAND_FUNC(petrename);
-ATCOMMAND_FUNC(charpetrename); // by Yor
-ATCOMMAND_FUNC(recall);
-ATCOMMAND_FUNC(recallall);
-ATCOMMAND_FUNC(character_job);
-ATCOMMAND_FUNC(revive);
-ATCOMMAND_FUNC(character_stats);
-ATCOMMAND_FUNC(character_stats_all);
-ATCOMMAND_FUNC(character_option);
-ATCOMMAND_FUNC(character_save);
-ATCOMMAND_FUNC(night);
-ATCOMMAND_FUNC(day);
-ATCOMMAND_FUNC(doom);
-ATCOMMAND_FUNC(doommap);
-ATCOMMAND_FUNC(raise);
-ATCOMMAND_FUNC(raisemap);
-ATCOMMAND_FUNC(character_baselevel);
-ATCOMMAND_FUNC(character_joblevel);
-ATCOMMAND_FUNC(kick);
-ATCOMMAND_FUNC(kickall);
-ATCOMMAND_FUNC(allskill);
-ATCOMMAND_FUNC(questskill);
-ATCOMMAND_FUNC(charquestskill);
-ATCOMMAND_FUNC(lostskill);
-ATCOMMAND_FUNC(charlostskill);
-ATCOMMAND_FUNC(spiritball);
-ATCOMMAND_FUNC(party);
-ATCOMMAND_FUNC(guild);
-ATCOMMAND_FUNC(charskreset);
-ATCOMMAND_FUNC(charstreset);
-ATCOMMAND_FUNC(charreset);
-ATCOMMAND_FUNC(charstpoint);
-ATCOMMAND_FUNC(charmodel);
-ATCOMMAND_FUNC(charskpoint);
-ATCOMMAND_FUNC(charzeny);
-ATCOMMAND_FUNC(agitstart);
-ATCOMMAND_FUNC(agitend);
-ATCOMMAND_FUNC(reloaditemdb);
-ATCOMMAND_FUNC(reloadmobdb);
-ATCOMMAND_FUNC(reloadskilldb);
-#ifndef TXT_ONLY
-ATCOMMAND_FUNC(rehash);// by Fr3DBr
-#else /* TXT_ONLY */
-ATCOMMAND_FUNC(reloadscript);
-#endif /* TXT_ONLY */
-ATCOMMAND_FUNC(reloadgmdb); // by Yor
-ATCOMMAND_FUNC(mapexit);
-ATCOMMAND_FUNC(idsearch);
-ATCOMMAND_FUNC(mapinfo);
-ATCOMMAND_FUNC(dye); //** by fritz
-ATCOMMAND_FUNC(hair_style); //** by fritz
-ATCOMMAND_FUNC(hair_color); //** by fritz
-ATCOMMAND_FUNC(stat_all); //** by fritz
-ATCOMMAND_FUNC(char_change_sex); // by Yor
-ATCOMMAND_FUNC(char_block); // by Yor
-ATCOMMAND_FUNC(char_ban); // by Yor
-ATCOMMAND_FUNC(char_unblock); // by Yor
-ATCOMMAND_FUNC(char_unban); // by Yor
-ATCOMMAND_FUNC(mount_peco); // by Valaris
-ATCOMMAND_FUNC(char_mount_peco); // by Yor
-ATCOMMAND_FUNC(guildspy); // [Syrus22]
-ATCOMMAND_FUNC(partyspy); // [Syrus22]
-ATCOMMAND_FUNC(repairall); // [Valaris]
-ATCOMMAND_FUNC(guildrecall); // by Yor
-ATCOMMAND_FUNC(partyrecall); // by Yor
-//ATCOMMAND_FUNC(nuke); // [Valaris]
-ATCOMMAND_FUNC(enablenpc);
-ATCOMMAND_FUNC(disablenpc);
-ATCOMMAND_FUNC(servertime); // by Yor
-ATCOMMAND_FUNC(chardelitem); // by Yor
-ATCOMMAND_FUNC(jail); // by Yor
-ATCOMMAND_FUNC(unjail); // by Yor
-ATCOMMAND_FUNC(disguise); // [Valaris]
-ATCOMMAND_FUNC(undisguise); // by Yor
-ATCOMMAND_FUNC(ignorelist); // by Yor
-ATCOMMAND_FUNC(charignorelist); // by Yor
-ATCOMMAND_FUNC(inall); // by Yor
-ATCOMMAND_FUNC(exall); // by Yor
-ATCOMMAND_FUNC(chardisguise); // Kalaspuff
-ATCOMMAND_FUNC(charundisguise); // Kalaspuff
-ATCOMMAND_FUNC(email); // by Yor
-ATCOMMAND_FUNC(effect);//by Apple
-ATCOMMAND_FUNC(character_item_list); // by Yor
-ATCOMMAND_FUNC(character_storage_list); // by Yor
-ATCOMMAND_FUNC(character_cart_list); // by Yor
-ATCOMMAND_FUNC(addwarp); // by MouseJstr
-ATCOMMAND_FUNC(follow); // by MouseJstr
-ATCOMMAND_FUNC(skillon); // by MouseJstr
-ATCOMMAND_FUNC(skilloff); // by MouseJstr
-ATCOMMAND_FUNC(killer); // by MouseJstr
-ATCOMMAND_FUNC(npcmove); // by MouseJstr
-ATCOMMAND_FUNC(killable); // by MouseJstr
-ATCOMMAND_FUNC(charkillable); // by MouseJstr
-ATCOMMAND_FUNC(chareffect); // by MouseJstr
-ATCOMMAND_FUNC(chardye); // by MouseJstr
-ATCOMMAND_FUNC(charhairstyle); // by MouseJstr
-ATCOMMAND_FUNC(charhaircolor); // by MouseJstr
-ATCOMMAND_FUNC(dropall); // by MouseJstr
-ATCOMMAND_FUNC(chardropall); // by MouseJstr
-ATCOMMAND_FUNC(storeall); // by MouseJstr
-ATCOMMAND_FUNC(charstoreall); // by MouseJstr
-ATCOMMAND_FUNC(skillid); // by MouseJstr
-ATCOMMAND_FUNC(useskill); // by MouseJstr
-ATCOMMAND_FUNC(summon);
-ATCOMMAND_FUNC(rain);
-ATCOMMAND_FUNC(snow);
-ATCOMMAND_FUNC(sakura);
-ATCOMMAND_FUNC(fog);
-ATCOMMAND_FUNC(leaves);
-ATCOMMAND_FUNC(adjgmlvl); // by MouseJstr
-ATCOMMAND_FUNC(adjcmdlvl); // by MouseJstr
-ATCOMMAND_FUNC(trade); // by MouseJstr
-ATCOMMAND_FUNC(unmute); // [Valaris]
-
-#ifndef TXT_ONLY
-ATCOMMAND_FUNC(checkmail); // [Valaris]
-ATCOMMAND_FUNC(listmail); // [Valaris]
-ATCOMMAND_FUNC(listnewmail); // [Valaris]
-ATCOMMAND_FUNC(readmail); // [Valaris]
-ATCOMMAND_FUNC(sendmail); // [Valaris]
-ATCOMMAND_FUNC(sendprioritymail); // [Valaris]
-ATCOMMAND_FUNC(deletemail); // [Valaris]
-ATCOMMAND_FUNC(sound); // [Valaris]
-ATCOMMAND_FUNC(refreshonline); // [Valaris]
-#endif /* TXT_ONLY */
-
-/*==========================================
- *AtCommandInfo atcommand_info[]�\���̂̒�`
- *------------------------------------------
- */
-
-// First char of commands is configured in atcommand_athena.conf. Leave @ in this list for default value.
-// to set default level, read atcommand_athena.conf first please.
-static AtCommandInfo atcommand_info[] = {
-	{ AtCommand_RuraP,               "@rura+",           60, atcommand_rurap },
-	{ AtCommand_RuraP,               "@charwarp",        60, atcommand_rurap },
-	{ AtCommand_Rura,                "@rura",            40, atcommand_rura },
-	{ AtCommand_Warp,                "@warp",            40, atcommand_rura },
-	{ AtCommand_Where,               "@where",            1, atcommand_where },
-	{ AtCommand_JumpTo,              "@jumpto",          20, atcommand_jumpto }, // + /shift
-	{ AtCommand_JumpTo,              "@warpto",          20, atcommand_jumpto },
-	{ AtCommand_JumpTo,              "@goto",            20, atcommand_jumpto },
-	{ AtCommand_Jump,                "@jump",            40, atcommand_jump },
-	{ AtCommand_Who,                 "@who",             20, atcommand_who },
-	{ AtCommand_Who,                 "@whois",           20, atcommand_who },
-	{ AtCommand_Who2,                "@who2",            20, atcommand_who2 },
-	{ AtCommand_Who3,                "@who3",            20, atcommand_who3 },
-	{ AtCommand_WhoMap,              "@whomap",          20, atcommand_whomap },
-	{ AtCommand_WhoMap2,             "@whomap2",         20, atcommand_whomap2 },
-	{ AtCommand_WhoMap3,             "@whomap3",         20, atcommand_whomap3 },
-	{ AtCommand_WhoGM,               "@whogm",           20, atcommand_whogm }, // by Yor
-	{ AtCommand_Save,                "@save",            40, atcommand_save },
-	{ AtCommand_Load,                "@return",          40, atcommand_load },
-	{ AtCommand_Load,                "@load",            40, atcommand_load },
-	{ AtCommand_Speed,               "@speed",           40, atcommand_speed },
-	{ AtCommand_Storage,             "@storage",          1, atcommand_storage },
-	{ AtCommand_GuildStorage,        "@gstorage",        50, atcommand_guildstorage },
-	{ AtCommand_Option,              "@option",          40, atcommand_option },
-	{ AtCommand_Hide,                "@hide",            40, atcommand_hide }, // + /hide
-	{ AtCommand_JobChange,           "@jobchange",       40, atcommand_jobchange },
-	{ AtCommand_JobChange,           "@job",             40, atcommand_jobchange },
-	{ AtCommand_Die,                 "@die",              1, atcommand_die },
-	{ AtCommand_Kill,                "@kill",            60, atcommand_kill },
-	{ AtCommand_Alive,               "@alive",           60, atcommand_alive },
-	{ AtCommand_Kami,                "@kami",            40, atcommand_kami },
-	{ AtCommand_KamiB,               "@kamib",           40, atcommand_kami },
-	{ AtCommand_Heal,                "@heal",            40, atcommand_heal },
-	{ AtCommand_Item,                "@item",            60, atcommand_item },
-	{ AtCommand_Item2,               "@item2",           60, atcommand_item2 },
-	{ AtCommand_ItemReset,           "@itemreset",       40, atcommand_itemreset },
-	{ AtCommand_ItemCheck,           "@itemcheck",       60, atcommand_itemcheck },
-	{ AtCommand_BaseLevelUp,         "@lvup",            60, atcommand_baselevelup },
-	{ AtCommand_BaseLevelUp,         "@blevel",          60, atcommand_baselevelup },
-	{ AtCommand_BaseLevelUp,         "@baselvlup",       60, atcommand_baselevelup },
-	{ AtCommand_JobLevelUp,          "@jlevel",          60, atcommand_joblevelup },
-	{ AtCommand_JobLevelUp,          "@joblvup",         60, atcommand_joblevelup },
-	{ AtCommand_JobLevelUp,          "@joblvlup",        60, atcommand_joblevelup },
-	{ AtCommand_H,                   "@h",               20, atcommand_help },
-	{ AtCommand_Help,                "@help",            20, atcommand_help },
-	{ AtCommand_GM,                  "@gm",             100, atcommand_gm },
-	{ AtCommand_PvPOff,              "@pvpoff",          40, atcommand_pvpoff },
-	{ AtCommand_PvPOn,               "@pvpon",           40, atcommand_pvpon },
-	{ AtCommand_GvGOff,              "@gvgoff",          40, atcommand_gvgoff },
-	{ AtCommand_GvGOff,              "@gpvpoff",         40, atcommand_gvgoff },
-	{ AtCommand_GvGOn,               "@gvgon",           40, atcommand_gvgon },
-	{ AtCommand_GvGOn,               "@gpvpon",          40, atcommand_gvgon },
-	{ AtCommand_Model,               "@model",           20, atcommand_model },
-	{ AtCommand_Go,                  "@go",              10, atcommand_go },
-	{ AtCommand_Spawn,               "@monster",         50, atcommand_spawn },
-	{ AtCommand_Spawn,               "@spawn",           50, atcommand_spawn },
-	//{ AtCommand_Spawn,               "@summon",          50, atcommand_spawn },
-	{ AtCommand_Monster,             "@monster2",        50, atcommand_monster },
-	{ AtCommand_KillMonster,         "@killmonster",     60, atcommand_killmonster },
-	{ AtCommand_KillMonster2,        "@killmonster2",    40, atcommand_killmonster2 },
-	{ AtCommand_Refine,              "@refine",          60, atcommand_refine },
-	{ AtCommand_Produce,             "@produce",         60, atcommand_produce },
-	{ AtCommand_Memo,                "@memo",            40, atcommand_memo },
-	{ AtCommand_GAT,                 "@gat",             99, atcommand_gat }, // debug function
-	{ AtCommand_Packet,              "@packet",          99, atcommand_packet }, // debug function
-	{ AtCommand_StatusPoint,         "@stpoint",         60, atcommand_statuspoint },
-	{ AtCommand_SkillPoint,          "@skpoint",         60, atcommand_skillpoint },
-	{ AtCommand_Zeny,                "@zeny",            60, atcommand_zeny },
-	{ AtCommand_Strength,            "@str",             60, atcommand_param },
-	{ AtCommand_Agility,             "@agi",             60, atcommand_param },
-	{ AtCommand_Vitality,            "@vit",             60, atcommand_param },
-	{ AtCommand_Intelligence,        "@int",             60, atcommand_param },
-	{ AtCommand_Dexterity,           "@dex",             60, atcommand_param },
-	{ AtCommand_Luck,                "@luk",             60, atcommand_param },
-	{ AtCommand_GuildLevelUp,        "@guildlvup",       60, atcommand_guildlevelup },
-	{ AtCommand_GuildLevelUp,        "@guildlvlup",      60, atcommand_guildlevelup },
-	{ AtCommand_MakeEgg,             "@makeegg",         60, atcommand_makeegg },
-	{ AtCommand_Hatch,               "@hatch",           60, atcommand_hatch },
-	{ AtCommand_PetFriendly,         "@petfriendly",     40, atcommand_petfriendly },
-	{ AtCommand_PetHungry,           "@pethungry",       40, atcommand_pethungry },
-	{ AtCommand_PetRename,           "@petrename",        1, atcommand_petrename },
-	{ AtCommand_CharPetRename,       "@charpetrename",   50, atcommand_charpetrename }, // by Yor
-	{ AtCommand_Recall,              "@recall",          60, atcommand_recall }, // + /recall
-	{ AtCommand_CharacterJob,        "@charjob",         60, atcommand_character_job },
-	{ AtCommand_CharacterJob,        "@charjobchange",   60, atcommand_character_job },
-	{ AtCommand_Revive,              "@revive",          60, atcommand_revive },
-	{ AtCommand_CharacterStats,      "@charstats",       40, atcommand_character_stats },
-	{ AtCommand_CharacterStatsAll,   "@charstatsall",    40, atcommand_character_stats_all },
-	{ AtCommand_CharacterOption,     "@charoption",      60, atcommand_character_option },
-	{ AtCommand_CharacterSave,       "@charsave",        60, atcommand_character_save },
-	{ AtCommand_Night,               "@night",           80, atcommand_night },
-	{ AtCommand_Day,                 "@day",             80, atcommand_day },
-	{ AtCommand_Doom,                "@doom",            80, atcommand_doom },
-	{ AtCommand_DoomMap,             "@doommap",         80, atcommand_doommap },
-	{ AtCommand_Raise,               "@raise",           80, atcommand_raise },
-	{ AtCommand_RaiseMap,            "@raisemap",        80, atcommand_raisemap },
-	{ AtCommand_CharacterBaseLevel,  "@charbaselvl",     60, atcommand_character_baselevel },
-	{ AtCommand_CharacterJobLevel,   "@charjlvl",        60, atcommand_character_joblevel },
-	{ AtCommand_Kick,                "@kick",            20, atcommand_kick }, // + right click menu for GM "(name) force to quit"
-	{ AtCommand_KickAll,             "@kickall",         99, atcommand_kickall },
-	{ AtCommand_AllSkill,            "@allskill",        60, atcommand_allskill },
-	{ AtCommand_AllSkill,            "@allskills",       60, atcommand_allskill },
-	{ AtCommand_AllSkill,            "@skillall",        60, atcommand_allskill },
-	{ AtCommand_AllSkill,            "@skillsall",       60, atcommand_allskill },
-	{ AtCommand_QuestSkill,          "@questskill",      40, atcommand_questskill },
-	{ AtCommand_CharQuestSkill,      "@charquestskill",  60, atcommand_charquestskill },
-	{ AtCommand_LostSkill,           "@lostskill",       40, atcommand_lostskill },
-	{ AtCommand_CharLostSkill,       "@charlostskill",   60, atcommand_charlostskill },
-	{ AtCommand_SpiritBall,          "@spiritball",      40, atcommand_spiritball },
-	{ AtCommand_Party,               "@party",            1, atcommand_party },
-	{ AtCommand_Guild,               "@guild",           50, atcommand_guild },
-	{ AtCommand_AgitStart,           "@agitstart",       60, atcommand_agitstart },
-	{ AtCommand_AgitEnd,             "@agitend",         60, atcommand_agitend },
-	{ AtCommand_MapExit,             "@mapexit",         99, atcommand_mapexit },
-	{ AtCommand_IDSearch,            "@idsearch",        60, atcommand_idsearch },
-	{ AtCommand_MapMove,             "@mapmove",         40, atcommand_rura }, // /mm command
-	{ AtCommand_Broadcast,           "@broadcast",       40, atcommand_broadcast }, // /b and /nb command
-	{ AtCommand_LocalBroadcast,      "@localbroadcast",  40, atcommand_localbroadcast }, // /lb and /nlb command
-	{ AtCommand_RecallAll,           "@recallall",       80, atcommand_recallall },
-	{ AtCommand_CharSkReset,         "@charskreset",     60, atcommand_charskreset },
-	{ AtCommand_CharStReset,         "@charstreset",     60, atcommand_charstreset },
-	{ AtCommand_ReloadItemDB,        "@reloaditemdb",    99, atcommand_reloaditemdb }, // admin command
-	{ AtCommand_ReloadMobDB,         "@reloadmobdb",     99, atcommand_reloadmobdb }, // admin command
-	{ AtCommand_ReloadSkillDB,       "@reloadskilldb",   99, atcommand_reloadskilldb }, // admin command
-#ifndef TXT_ONLY
-	{ AtCommand_Rehash,              "@rehash",          99, atcommand_rehash }, // admin command
-#else /* TXT_ONLY */
-	{ AtCommand_ReloadScript,        "@reloadscript",    99, atcommand_reloadscript }, // admin command
-#endif /* TXT_ONLY */
-	{ AtCommand_ReloadGMDB,          "@reloadgmdb",      99, atcommand_reloadgmdb }, // admin command
-	{ AtCommand_CharReset,           "@charreset",       60, atcommand_charreset },
-	{ AtCommand_CharModel,           "@charmodel",       50, atcommand_charmodel },
-	{ AtCommand_CharSKPoint,         "@charskpoint",     60, atcommand_charskpoint },
-	{ AtCommand_CharSTPoint,         "@charstpoint",     60, atcommand_charstpoint },
-	{ AtCommand_CharZeny,            "@charzeny",        60, atcommand_charzeny },
-	{ AtCommand_MapInfo,             "@mapinfo",         99, atcommand_mapinfo },
-	{ AtCommand_Dye,                 "@dye",             40, atcommand_dye }, // by fritz
-	{ AtCommand_Dye,                 "@ccolor",          40, atcommand_dye }, // by fritz
-	{ AtCommand_Hstyle,              "@hairstyle",       40, atcommand_hair_style }, // by fritz
-	{ AtCommand_Hstyle,              "@hstyle",          40, atcommand_hair_style }, // by fritz
-	{ AtCommand_Hcolor,              "@haircolor",       40, atcommand_hair_color }, // by fritz
-	{ AtCommand_Hcolor,              "@hcolor",          40, atcommand_hair_color }, // by fritz
-	{ AtCommand_StatAll,             "@statall",         60, atcommand_stat_all }, // by fritz
-	{ AtCommand_StatAll,             "@statsall",        60, atcommand_stat_all },
-	{ AtCommand_StatAll,             "@allstats",        60, atcommand_stat_all }, // by fritz
-	{ AtCommand_StatAll,             "@allstat",         60, atcommand_stat_all }, // by fritz
-	{ AtCommand_CharChangeSex,       "@charchangesex",   60, atcommand_char_change_sex }, // by Yor
-	{ AtCommand_CharBlock,           "@block",           60, atcommand_char_block }, // by Yor
-	{ AtCommand_CharBlock,           "@charblock",       60, atcommand_char_block }, // by Yor
-	{ AtCommand_CharBan,             "@ban",             60, atcommand_char_ban }, // by Yor
-	{ AtCommand_CharBan,             "@banish",          60, atcommand_char_ban }, // by Yor
-	{ AtCommand_CharBan,             "@charban",         60, atcommand_char_ban }, // by Yor
-	{ AtCommand_CharBan,             "@charbanish",      60, atcommand_char_ban }, // by Yor
-	{ AtCommand_CharUnBlock,         "@unblock",         60, atcommand_char_unblock }, // by Yor
-	{ AtCommand_CharUnBlock,         "@charunblock",     60, atcommand_char_unblock }, // by Yor
-	{ AtCommand_CharUnBan,           "@unban",           60, atcommand_char_unban }, // by Yor
-	{ AtCommand_CharUnBan,           "@unbanish",        60, atcommand_char_unban }, // by Yor
-	{ AtCommand_CharUnBan,           "@charunban",       60, atcommand_char_unban }, // by Yor
-	{ AtCommand_CharUnBan,           "@charunbanish",    60, atcommand_char_unban }, // by Yor
-	{ AtCommand_MountPeco,           "@mountpeco",       20, atcommand_mount_peco }, // by Valaris
-	{ AtCommand_CharMountPeco,       "@charmountpeco",   50, atcommand_char_mount_peco }, // by Yor
-	{ AtCommand_GuildSpy,            "@guildspy",        60, atcommand_guildspy }, // [Syrus22]
-	{ AtCommand_PartySpy,            "@partyspy",        60, atcommand_partyspy }, // [Syrus22]
-	{ AtCommand_RepairAll,           "@repairall",       60, atcommand_repairall }, // [Valaris]
-	{ AtCommand_GuildRecall,         "@guildrecall",     60, atcommand_guildrecall }, // by Yor
-	{ AtCommand_PartyRecall,         "@partyrecall",     60, atcommand_partyrecall }, // by Yor
-//	{ AtCommand_Nuke,                "@nuke",            60, atcommand_nuke }, // [Valaris]
-	{ AtCommand_Enablenpc,           "@enablenpc",       80, atcommand_enablenpc }, // []
-	{ AtCommand_Disablenpc,          "@disablenpc",      80, atcommand_disablenpc }, // []
-	{ AtCommand_ServerTime,          "@time",             0, atcommand_servertime }, // by Yor
-	{ AtCommand_ServerTime,          "@date",             0, atcommand_servertime }, // by Yor
-	{ AtCommand_ServerTime,          "@server_date",      0, atcommand_servertime }, // by Yor
-	{ AtCommand_ServerTime,          "@serverdate",       0, atcommand_servertime }, // by Yor
-	{ AtCommand_ServerTime,          "@server_time",      0, atcommand_servertime }, // by Yor
-	{ AtCommand_ServerTime,          "@servertime",       0, atcommand_servertime }, // by Yor
-	{ AtCommand_CharDelItem,         "@chardelitem",     60, atcommand_chardelitem }, // by Yor
-	{ AtCommand_Jail,                "@jail",            60, atcommand_jail }, // by Yor
-	{ AtCommand_UnJail,              "@unjail",          60, atcommand_unjail }, // by Yor
-	{ AtCommand_UnJail,              "@discharge",       60, atcommand_unjail }, // by Yor
-	{ AtCommand_Disguise,            "@disguise",        20, atcommand_disguise }, // [Valaris]
-	{ AtCommand_UnDisguise,          "@undisguise",      20, atcommand_undisguise }, // by Yor
-	{ AtCommand_IgnoreList,          "@ignorelist",       0, atcommand_ignorelist }, // by Yor
-	{ AtCommand_CharIgnoreList,      "@charignorelist",  20, atcommand_charignorelist }, // by Yor
-	{ AtCommand_IgnoreList,          "@inall",           20, atcommand_inall }, // by Yor
-	{ AtCommand_ExAll,               "@exall",           20, atcommand_exall }, // by Yor
-	{ AtCommand_CharDisguise,        "@chardisguise",    60, atcommand_chardisguise }, // Kalaspuff
-	{ AtCommand_CharUnDisguise,      "@charundisguise",  60, atcommand_charundisguise }, // Kalaspuff
-	{ AtCommand_EMail,               "@email",            0, atcommand_email }, // by Yor
-	{ AtCommand_Effect,              "@effect",          40, atcommand_effect }, // by Apple
-	{ AtCommand_Char_Item_List,      "@charitemlist",    40, atcommand_character_item_list }, // by Yor
-	{ AtCommand_Char_Storage_List,   "@charstoragelist", 40, atcommand_character_storage_list }, // by Yor
-	{ AtCommand_Char_Cart_List,      "@charcartlist",    40, atcommand_character_cart_list }, // by Yor
-	{ AtCommand_Follow,      "@follow",    10, atcommand_follow }, // by MouseJstr
-	{ AtCommand_AddWarp,      "@addwarp",    20, atcommand_addwarp }, // by MouseJstr
-	{ AtCommand_SkillOn,      "@skillon",    20, atcommand_skillon }, // by MouseJstr
-	{ AtCommand_SkillOff,      "@skilloff",    20, atcommand_skilloff }, // by MouseJstr
-	{ AtCommand_Killer,      "@killer",    60, atcommand_killer }, // by MouseJstr
-	{ AtCommand_NpcMove,      "@npcmove",    20, atcommand_npcmove }, // by MouseJstr
-	{ AtCommand_Killable,      "@killable",    40, atcommand_killable }, // by MouseJstr
-	{ AtCommand_CharKillable,      "@charkillable",    40, atcommand_charkillable }, // by MouseJstr
- 	{ AtCommand_Chareffect,  "@chareffect",  40, atcommand_chareffect  }, // MouseJstr
-	//{ AtCommand_Chardye,  "@chardye",  40, atcommand_chardye }, // MouseJstr
-	//{ AtCommand_Charhairstyle,  "@charhairstyle",  40, atcommand_charhairstyle }, // MouseJstr
-	//{ AtCommand_Charhaircolor,  "@charhaircolor",  40, atcommand_charhaircolor }, // MouseJstr
-	{ AtCommand_Dropall,  "@dropall",  40, atcommand_dropall }, // MouseJstr
-	{ AtCommand_Chardropall,  "@chardropall",  40, atcommand_chardropall }, // MouseJstr
-	{ AtCommand_Storeall,  "@storeall",  40, atcommand_storeall }, // MouseJstr
-	{ AtCommand_Charstoreall,  "@charstoreall",  40, atcommand_charstoreall }, // MouseJstr
-	{ AtCommand_Skillid,  "@skillid",  40, atcommand_skillid }, // MouseJstr
-	{ AtCommand_Useskill,  "@useskill",  40, atcommand_useskill }, // MouseJstr
-	{ AtCommand_Rain,	             "@rain",	99, atcommand_rain },
-	{ AtCommand_Snow,           "@snow",	99, atcommand_snow },
-	{ AtCommand_Sakura,         "@sakura",	99, atcommand_sakura },
-	{ AtCommand_Fog,	            "@fog",	99, atcommand_fog },
-	{ AtCommand_Leaves,         "@leaves",	99, atcommand_leaves },
-	//{ AtCommand_Shuffle,         "@shuffle",	99, atcommand_shuffle },
-	//{ AtCommand_Maintenance, "@maintenance", 99, atcommand_maintenance },
-	//{ AtCommand_Misceffect,    "@misceffect", 60, atcommand_misceffect },
-	{ AtCommand_Summon,      "@summon", 60, atcommand_summon },
-	{ AtCommand_AdjGmLvl,      "@adjgmlvl", 99, atcommand_adjgmlvl },
-	{ AtCommand_AdjCmdLvl,      "@adjcmdlvl", 99, atcommand_adjcmdlvl },
-	{ AtCommand_Trade,      "@trade", 60, atcommand_trade },
-	{ AtCommand_UnMute,	"@unmute", 60, atcommand_unmute }, // [Valaris]
-
-#ifndef TXT_ONLY // sql-only commands
-	{ AtCommand_CheckMail,		 "@checkmail",	      1, atcommand_listmail }, // [Valaris]
-	{ AtCommand_ListMail,		 "@listmail",	      1, atcommand_listmail }, // [Valaris]
-	{ AtCommand_ListNewMail,	 "@listnewmail",      1, atcommand_listmail }, // [Valaris]
-	{ AtCommand_ReadMail,		 "@readmail",	      1, atcommand_readmail }, // [Valaris]
-	{ AtCommand_DeleteMail,		 "@deletemail",	      1, atcommand_readmail }, // [Valaris]
-	{ AtCommand_SendMail,		 "@sendmail",	      1, atcommand_sendmail }, // [Valaris]
-	{ AtCommand_SendPriorityMail,	 "@sendprioritymail",80, atcommand_sendmail }, // [Valaris]
-	{ AtCommand_RefreshOnline,	 "@refreshonline",   99, atcommand_refreshonline }, // [Valaris]
-#endif /* TXT_ONLY */
-
-// add new commands before this line
-	{ AtCommand_Unknown,             NULL,                1, NULL }
-};
-
-/*====================================================
- * This function return the name of the job (by [Yor])
- *----------------------------------------------------
- */
-char * job_name(int class) {
-	switch (class) {
-	case 0:    return "Novice";
-	case 1:    return "Swordsman";
-	case 2:    return "Mage";
-	case 3:    return "Archer";
-	case 4:    return "Acolyte";
-	case 5:    return "Merchant";
-	case 6:    return "Thief";
-	case 7:    return "Knight";
-	case 8:    return "Priest";
-	case 9:    return "Wizard";
-	case 10:   return "Blacksmith";
-	case 11:   return "Hunter";
-	case 12:   return "Assassin";
-	case 13:   return "Knight 2";
-	case 14:   return "Crusader";
-	case 15:   return "Monk";
-	case 16:   return "Sage";
-	case 17:   return "Rogue";
-	case 18:   return "Alchemist";
-	case 19:   return "Bard";
-	case 20:   return "Dancer";
-	case 21:   return "Crusader 2";
-	case 22:   return "Wedding";
-	case 23:   return "Super Novice";
-	case 4001: return "Novice High";
-	case 4002: return "Swordsman High";
-	case 4003: return "Mage High";
-	case 4004: return "Archer High";
-	case 4005: return "Acolyte High";
-	case 4006: return "Merchant High";
-	case 4007: return "Thief High";
-	case 4008: return "Lord Knight";
-	case 4009: return "High Priest";
-	case 4010: return "High Wizard";
-	case 4011: return "Whitesmith";
-	case 4012: return "Sniper";
-	case 4013: return "Assassin Cross";
-	case 4014: return "Peko Knight";
-	case 4015: return "Paladin";
-	case 4016: return "Champion";
-	case 4017: return "Professor";
-	case 4018: return "Stalker";
-	case 4019: return "Creator";
-	case 4020: return "Clown";
-	case 4021: return "Gypsy";
-	case 4022: return "Peko Paladin";
-	case 4023: return "Baby Novice";
-	case 4024: return "Baby Swordsman";
-	case 4025: return "Baby Mage";
-	case 4026: return "Baby Archer";
-	case 4027: return "Baby Acolyte";
-	case 4028: return "Baby Merchant";
-	case 4029: return "Baby Thief";
-	case 4030: return "Baby Knight";
-	case 4031: return "Baby Priest";
-	case 4032: return "Baby Wizard";
-	case 4033: return "Baby Blacksmith";
-	case 4034: return "Baby Hunter";
-	case 4035: return "Baby Assassin";
-	case 4036: return "Baby Peco Knight";
-	case 4037: return "Baby Crusader";
-	case 4038: return "Baby Monk";
-	case 4039: return "Baby Sage";
-	case 4040: return "Baby Rogue";
-	case 4041: return "Baby Alchemist";
-	case 4042: return "Baby Bard";
-	case 4043: return "Baby Dancer";
-	case 4044: return "Baby Peco Crusader";
-	case 4045: return "Super Baby";
-	}
-	return "Unknown Job";
-}
-
-//-----------------------------------------------------------
-// Return the message string of the specified number by [Yor]
-//-----------------------------------------------------------
-char * msg_txt(int msg_number) {
-	if (msg_number >= 0 && msg_number < (int)(sizeof(msg_table) / sizeof(msg_table[0])) &&
-	    msg_table[msg_number] != NULL && msg_table[msg_number][0] != '\0')
-		return msg_table[msg_number];
-
-	return "??";
-}
-
-//------------------------------------------------------------
-// E-mail check: return 0 (not correct) or 1 (valid). by [Yor]
-//------------------------------------------------------------
-int e_mail_check(unsigned char *email) {
-	char ch;
-	unsigned char* last_arobas;
-
-	// athena limits
-	if (strlen(email) < 3 || strlen(email) > 39)
-		return 0;
-
-	// part of RFC limits (official reference of e-mail description)
-	if (strchr(email, '@') == NULL || email[strlen(email)-1] == '@')
-		return 0;
-
-	if (email[strlen(email)-1] == '.')
-		return 0;
-
-	last_arobas = strrchr(email, '@');
-
-	if (strstr(last_arobas, "@.") != NULL ||
-	    strstr(last_arobas, "..") != NULL)
-		return 0;
-
-	for(ch = 1; ch < 32; ch++) {
-		if (strchr(last_arobas, ch) != NULL) {
-			return 0;
-			break;
-		}
-	}
-
-	if (strchr(last_arobas, ' ') != NULL ||
-	    strchr(last_arobas, ';') != NULL)
-		return 0;
-
-	// all correct
-	return 1;
-}
-
-/*==========================================
- * get_atcommand_level @�R�}���h�̕K�v���x�����擾
- *------------------------------------------
- */
-int get_atcommand_level(const AtCommandType type) {
-	int i;
-
-	for (i = 0; atcommand_info[i].type != AtCommand_None; i++)
-		if (atcommand_info[i].type == type)
-			return atcommand_info[i].level;
-
-	return 100; // 100: command can not be used
-}
-
-/*==========================================
- *is_atcommand @�R�}���h�ɑ��݂��邩�ǂ����m�F����
- *------------------------------------------
- */
-AtCommandType
-is_atcommand(const int fd, struct map_session_data* sd, const char* message, int gmlvl) {
-	const char* str = message;
-	int s_flag = 0;
-	AtCommandInfo info;
-	AtCommandType type;
-
-	nullpo_retr(AtCommand_None, sd);
-
-	if (!message || !*message)
-		return AtCommand_None;
-
-	memset(&info, 0, sizeof(info));
-	str += strlen(sd->status.name);
-	while (*str && (isspace(*str) || (s_flag == 0 && *str == ':'))) {
-		if (*str == ':')
-			s_flag = 1;
-		str++;
-	}
-	if (!*str)
-		return AtCommand_None;
-
-	type = atcommand(gmlvl > 0 ? gmlvl : pc_isGM(sd), str, &info);
-	if (type != AtCommand_None) {
-		char command[100];
-		char output[200];
-		const char* p = str;
-		memset(command, '\0', sizeof(command));
-		memset(output, '\0', sizeof(output));
-		while (*p && !isspace(*p))
-			p++;
-		if (p - str >= sizeof(command)) // too long
-			return AtCommand_Unknown;
-		strncpy(command, str, p - str);
-		while (isspace(*p))
-			p++;
-
-		if (type == AtCommand_Unknown || info.proc == NULL) {
-			sprintf(output, msg_table[153], command); // %s is Unknown Command.
-			clif_displaymessage(fd, output);
-		} else {
-			if (info.proc(fd, sd, command, p) != 0) {
-				// Command can not be executed
-				sprintf(output, msg_table[154], command); // %s failed.
-				clif_displaymessage(fd, output);
-			}
-		}
-
-		return info.type;
-	}
-
-	return AtCommand_None;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-AtCommandType atcommand(const int level, const char* message, struct AtCommandInfo* info) {
-	char* p = (char *)message; // it's 'char' and not 'const char' to have possibility to modify the first character if necessary
-
-	if (!info)
-		return AtCommand_None;
-	if (battle_config.atc_gmonly != 0 && !level) // level = pc_isGM(sd)
-		return AtCommand_None;
-	if (!p || !*p) {
-		fprintf(stderr, "at command message is empty\n");
-		return AtCommand_None;
-	}
-
-	if (*p == command_symbol) { // check first char.
-		char command[101];
-		int i = 0;
-		memset(info, 0, sizeof(AtCommandInfo));
-		sscanf(p, "%100s", command);
-		command[sizeof(command)-1] = '\0';
-
-		while (atcommand_info[i].type != AtCommand_Unknown) {
-			if (strcmpi(command+1, atcommand_info[i].command+1) == 0 && level >= atcommand_info[i].level) {
-				p[0] = atcommand_info[i].command[0]; // set correct first symbol for after.
-				break;
-			}
-			i++;
-		}
-
-		if (atcommand_info[i].type == AtCommand_Unknown) {
-			// doesn't return Unknown if player is normal player (display the text, not display: unknown command)
-			if (level == 0)
-				return AtCommand_None;
-			else
-				return AtCommand_Unknown;
-		}
-		memcpy(info, &atcommand_info[i], sizeof atcommand_info[i]);
-	} else {
-		return AtCommand_None;
-	}
-
-	return info->type;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-static int atkillmonster_sub(struct block_list *bl, va_list ap) {
-	int flag = va_arg(ap, int);
-
-	nullpo_retr(0, bl);
-
-	if (flag)
-		mob_damage(NULL, (struct mob_data *)bl, ((struct mob_data *)bl)->hp, 2);
-	else
-		mob_delete((struct mob_data *)bl);
-
-	return 0;
-}
-
-#ifndef TXT_ONLY
-static int atkillnpc_sub(struct block_list *bl, va_list ap)
-{
-        int flag = va_arg(ap,int);
-
-        nullpo_retr(0, bl);
-
-        npc_delete((struct npc_data *)bl);
-
-        flag = 0;
-
-        return 0;
-}
-
-void rehash( const int fd, struct map_session_data* sd )
-{
-        int map_id = 0;
-
-        int LOADED_MAPS = map_num;
-	
-        for (map_id = 0; map_id < LOADED_MAPS;map_id++) {
-
-            if (map_id > LOADED_MAPS)
-                break;
-
-            map_foreachinarea(atkillmonster_sub, map_id, 0, 0, map[map_id].xs, map[map_id].ys, BL_MOB, 0);
-            map_foreachinarea(atkillnpc_sub, map_id, 0, 0, map[map_id].xs, map[map_id].ys, BL_NPC, 0);
-        }
-}
-
-#endif /* not TXT_ONLY */
-/*==========================================
- * Read Message Data
- *------------------------------------------
- */
-int msg_config_read(const char *cfgName) {
-	int msg_number;
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp;
-
-	if ((fp = fopen(cfgName, "r")) == NULL) {
-		printf("Messages file not found: %s\n", cfgName);
-		return 1;
-	}
-
-	while(fgets(line, sizeof(line)-1, fp)) {
-		if (line[0] == '/' && line[1] == '/')
-			continue;
-		if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) == 2) {
-			if (strcmpi(w1, "import") == 0) {
-				msg_config_read(w2);
-			} else {
-				msg_number = atoi(w1);
-				if (msg_number >= 0 && msg_number < (int)(sizeof(msg_table) / sizeof(msg_table[0])))
-					strcpy(msg_table[msg_number], w2);
-				//	printf("message #%d: '%s'.\n", msg_number, msg_table[msg_number]);
-			}
-		}
-	}
-	fclose(fp);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-static AtCommandInfo* get_atcommandinfo_byname(const char* name) {
-	int i;
-
-	for (i = 0; atcommand_info[i].type != AtCommand_Unknown; i++)
-		if (strcmpi(atcommand_info[i].command + 1, name) == 0)
-			return &atcommand_info[i];
-
-	return NULL;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_config_read(const char *cfgName) {
-	char line[1024], w1[1024], w2[1024];
-	AtCommandInfo* p;
-	FILE* fp;
-
-	if ((fp = fopen(cfgName, "r")) == NULL) {
-		printf("At commands configuration file not found: %s\n", cfgName);
-		return 1;
-	}
-
-	while (fgets(line, sizeof(line)-1, fp)) {
-		if (line[0] == '/' && line[1] == '/')
-			continue;
-
-		if (sscanf(line, "%1023[^:]:%1023s", w1, w2) != 2)
-			continue;
-		p = get_atcommandinfo_byname(w1);
-		if (p != NULL) {
-			p->level = atoi(w2);
-			if (p->level > 100)
-				p->level = 100;
-			else if (p->level < 0)
-				p->level = 0;
-		}
-
-		if (strcmpi(w1, "import") == 0)
-			atcommand_config_read(w2);
-		else if (strcmpi(w1, "command_symbol") == 0 && w2[0] > 31 &&
-		         w2[0] != '/' && // symbol of standard ragnarok GM commands
-		         w2[0] != '%') // symbol of party chat speaking
-			command_symbol = w2[0];
-	}
-	fclose(fp);
-
-	return 0;
-}
-
-/*==========================================
-// @ command processing functions
- *------------------------------------------
- */
-
-/*==========================================
- * @rura+
- *------------------------------------------
- */
-int atcommand_rurap(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char map_name[100];
-	char character[100];
-	int x = 0, y = 0;
-	struct map_session_data *pl_sd;
-	int m;
-
-	memset(map_name, '\0', sizeof(map_name));
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%99s %d %d %99[^\n]", map_name, &x, &y, character) < 4) {
-		clif_displaymessage(fd, "Usage: @charwarp/@rura+ <mapname> <x> <y> <char name>");
-		return -1;
-	}
-
-	if (x <= 0)
-		x = rand() % 399 + 1;
-	if (y <= 0)
-		y = rand() % 399 + 1;
-	if (strstr(map_name, ".gat") == NULL && strstr(map_name, ".afm") == NULL && strlen(map_name) < 13) // 16 - 4 (.gat)
-		strcat(map_name, ".gat");
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can rura+ only lower or same GM level
-			if (x > 0 && x < 400 && y > 0 && y < 400) {
-				m = map_mapname2mapid(map_name);
-				if (m >= 0 && map[m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-					clif_displaymessage(fd, "You are not authorised to warp someone to this map.");
-					return -1;
-				}
-				if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-					clif_displaymessage(fd, "You are not authorised to warp this player from its actual map.");
-					return -1;
-				}
-				if (pc_setpos(pl_sd, map_name, x, y, 3) == 0) {
-					clif_displaymessage(pl_sd->fd, msg_table[0]); // Warped.
-					clif_displaymessage(fd, msg_table[15]); // Player warped (message sends to player too).
-				} else {
-					clif_displaymessage(fd, msg_table[1]); // Map not found.
-					return -1;
-				}
-			} else {
-				clif_displaymessage(fd, msg_table[2]); // Coordinates out of range.
-				return -1;
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-// @rura
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_rura(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char map_name[100];
-	int x = 0, y = 0;
-	int m;
-
-	memset(map_name, '\0', sizeof(map_name));
-
-	if (!message || !*message || sscanf(message, "%99s %d %d", map_name, &x, &y) < 1) {
-		clif_displaymessage(fd, "Please, enter a map (usage: @warp/@rura/@mapmove <mapname> <x> <y>).");
-		return -1;
-	}
-
-	if (x <= 0)
-		x = rand() % 399 + 1;
-	if (y <= 0)
-		y = rand() % 399 + 1;
-
-	if (strstr(map_name, ".gat") == NULL && strstr(map_name, ".afm") == NULL && strlen(map_name) < 13) // 16 - 4 (.gat)
-		strcat(map_name, ".gat");
-
-	if (x > 0 && x < 400 && y > 0 && y < 400) {
-		m = map_mapname2mapid(map_name);
-		if (m >= 0 && map[m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-			clif_displaymessage(fd, "You are not authorised to warp you to this map.");
-			return -1;
-		}
-		if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-			clif_displaymessage(fd, "You are not authorised to warp you from your actual map.");
-			return -1;
-		}
-		if (pc_setpos(sd, map_name, x, y, 3) == 0)
-			clif_displaymessage(fd, msg_table[0]); // Warped.
-		else {
-			clif_displaymessage(fd, msg_table[1]); // Map not found.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[2]); // Coordinates out of range.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_where(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	char output[200];
-	struct map_session_data *pl_sd;
-
-	memset(character, '\0', sizeof(character));
-	memset(output, '\0', sizeof(output));
-
-	if (sscanf(message, "%99[^\n]", character) < 1)
-		strcpy(character, sd->status.name);
-
-	if ((pl_sd = map_nick2sd(character)) != NULL &&
-		!((battle_config.hide_GM_session || (pl_sd->status.option & OPTION_HIDE)) && (pc_isGM(pl_sd) > pc_isGM(sd)))) { // you can look only lower or same level
-		sprintf(output, "%s: %s (%d,%d)", pl_sd->status.name, pl_sd->mapname, pl_sd->bl.x, pl_sd->bl.y);
-		clif_displaymessage(fd, output);
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_jumpto(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	char output[200];
-	struct map_session_data *pl_sd;
-
-	memset(character, '\0', sizeof(character));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @jumpto/@warpto/@goto <char name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-			clif_displaymessage(fd, "You are not authorised to warp you to the map of this player.");
-			return -1;
-		}
-		if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-			clif_displaymessage(fd, "You are not authorised to warp you from your actual map.");
-			return -1;
-		}
-		pc_setpos(sd, pl_sd->mapname, pl_sd->bl.x, pl_sd->bl.y, 3);
-		sprintf(output, msg_table[4], character); // Jump to %s
-		clif_displaymessage(fd, output);
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_jump(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char output[200];
-	int x = 0, y = 0;
-
-	memset(output, '\0', sizeof(output));
-
-	sscanf(message, "%d %d", &x, &y);
-
-	if (x <= 0)
-		x = rand() % 399 + 1;
-	if (y <= 0)
-		y = rand() % 399 + 1;
-	if (x > 0 && x < 400 && y > 0 && y < 400) {
-		if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-			clif_displaymessage(fd, "You are not authorised to warp you to your actual map.");
-			return -1;
-		}
-		if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-			clif_displaymessage(fd, "You are not authorised to warp you from your actual map.");
-			return -1;
-		}
-		pc_setpos(sd, sd->mapname, x, y, 3);
-		sprintf(output, msg_table[5], x, y); // Jump to %d %d
-		clif_displaymessage(fd, output);
-	} else {
-		clif_displaymessage(fd, msg_table[2]); // Coordinates out of range.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_who(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char output[200];
-	struct map_session_data *pl_sd;
-	int i, j, count;
-	int pl_GM_level, GM_level;
-	char match_text[100];
-	char player_name[24];
-
-	memset(output, '\0', sizeof(output));
-	memset(match_text, '\0', sizeof(match_text));
-	memset(player_name, '\0', sizeof(player_name));
-
-	if (sscanf(message, "%99[^\n]", match_text) < 1)
-		strcpy(match_text, "");
-	for (j = 0; match_text[j]; j++)
-		match_text[j] = tolower(match_text[j]);
-
-	count = 0;
-	GM_level = pc_isGM(sd);
-	for (i = 0; i < fd_max; i++) {
-		if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) {
-			pl_GM_level = pc_isGM(pl_sd);
-			if (!((battle_config.hide_GM_session || (pl_sd->status.option & OPTION_HIDE)) && (pl_GM_level > GM_level))) { // you can look only lower or same level
-				memcpy(player_name, pl_sd->status.name, 24);
-				for (j = 0; player_name[j]; j++)
-					player_name[j] = tolower(player_name[j]);
-				if (strstr(player_name, match_text) != NULL) { // search with no case sensitive
-					if (pl_GM_level > 0)
-						sprintf(output, "Name: %s (GM:%d) | Location: %s %d %d", pl_sd->status.name, pl_GM_level, pl_sd->mapname, pl_sd->bl.x, pl_sd->bl.y);
-					else
-						sprintf(output, "Name: %s | Location: %s %d %d", pl_sd->status.name, pl_sd->mapname, pl_sd->bl.x, pl_sd->bl.y);
-					clif_displaymessage(fd, output);
-					count++;
-				}
-			}
-		}
-	}
-
-	if (count == 0)
-		clif_displaymessage(fd, msg_table[28]); // No player found.
-	else if (count == 1)
-		clif_displaymessage(fd, msg_table[29]); // 1 player found.
-	else {
-		sprintf(output, msg_table[30], count); // %d players found.
-		clif_displaymessage(fd, output);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_who2(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char output[200];
-	struct map_session_data *pl_sd;
-	int i, j, count;
-	int pl_GM_level, GM_level;
-	char match_text[100];
-	char player_name[24];
-
-	memset(output, '\0', sizeof(output));
-	memset(match_text, '\0', sizeof(match_text));
-	memset(player_name, '\0', sizeof(player_name));
-
-	if (sscanf(message, "%99[^\n]", match_text) < 1)
-		strcpy(match_text, "");
-	for (j = 0; match_text[j]; j++)
-		match_text[j] = tolower(match_text[j]);
-
-	count = 0;
-	GM_level = pc_isGM(sd);
-	for (i = 0; i < fd_max; i++) {
-		if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) {
-			pl_GM_level = pc_isGM(pl_sd);
-			if (!((battle_config.hide_GM_session || (pl_sd->status.option & OPTION_HIDE)) && (pl_GM_level > GM_level))) { // you can look only lower or same level
-				memcpy(player_name, pl_sd->status.name, 24);
-				for (j = 0; player_name[j]; j++)
-					player_name[j] = tolower(player_name[j]);
-				if (strstr(player_name, match_text) != NULL) { // search with no case sensitive
-					if (pl_GM_level > 0)
-						sprintf(output, "Name: %s (GM:%d) | BLvl: %d | Job: %s (Lvl: %d)", pl_sd->status.name, pl_GM_level, pl_sd->status.base_level, job_name(pl_sd->status.class), pl_sd->status.job_level);
-					else
-						sprintf(output, "Name: %s | BLvl: %d | Job: %s (Lvl: %d)", pl_sd->status.name, pl_sd->status.base_level, job_name(pl_sd->status.class), pl_sd->status.job_level);
-					clif_displaymessage(fd, output);
-					count++;
-				}
-			}
-		}
-	}
-
-	if (count == 0)
-		clif_displaymessage(fd, msg_table[28]); // No player found.
-	else if (count == 1)
-		clif_displaymessage(fd, msg_table[29]); // 1 player found.
-	else {
-		sprintf(output, msg_table[30], count); // %d players found.
-		clif_displaymessage(fd, output);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_who3(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char temp0[100];
-	char temp1[100];
-	char output[200];
-	struct map_session_data *pl_sd;
-	int i, j, count;
-	int pl_GM_level, GM_level;
-	char match_text[100];
-	char player_name[24];
-	struct guild *g;
-	struct party *p;
-
-	memset(temp0, '\0', sizeof(temp0));
-	memset(temp1, '\0', sizeof(temp1));
-	memset(output, '\0', sizeof(output));
-	memset(match_text, '\0', sizeof(match_text));
-	memset(player_name, '\0', sizeof(player_name));
-
-	if (sscanf(message, "%99[^\n]", match_text) < 1)
-		strcpy(match_text, "");
-	for (j = 0; match_text[j]; j++)
-		match_text[j] = tolower(match_text[j]);
-
-	count = 0;
-	GM_level = pc_isGM(sd);
-	for (i = 0; i < fd_max; i++) {
-		if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) {
-			pl_GM_level = pc_isGM(pl_sd);
-			if (!((battle_config.hide_GM_session || (pl_sd->status.option & OPTION_HIDE)) && (pl_GM_level > GM_level))) { // you can look only lower or same level
-				memcpy(player_name, pl_sd->status.name, 24);
-				for (j = 0; player_name[j]; j++)
-					player_name[j] = tolower(player_name[j]);
-				if (strstr(player_name, match_text) != NULL) { // search with no case sensitive
-					g = guild_search(pl_sd->status.guild_id);
-					if (g == NULL)
-						sprintf(temp1, "None");
-					else
-						sprintf(temp1, "%s", g->name);
-					p = party_search(pl_sd->status.party_id);
-					if (p == NULL)
-						sprintf(temp0, "None");
-					else
-						sprintf(temp0, "%s", p->name);
-					if (pl_GM_level > 0)
-						sprintf(output, "Name: %s (GM:%d) | Party: '%s' | Guild: '%s'", pl_sd->status.name, pl_GM_level, temp0, temp1);
-					else
-						sprintf(output, "Name: %s | Party: '%s' | Guild: '%s'", pl_sd->status.name, temp0, temp1);
-					clif_displaymessage(fd, output);
-					count++;
-				}
-			}
-		}
-	}
-
-	if (count == 0)
-		clif_displaymessage(fd, msg_table[28]); // No player found.
-	else if (count == 1)
-		clif_displaymessage(fd, msg_table[29]); // 1 player found.
-	else {
-		sprintf(output, msg_table[30], count); // %d players found.
-		clif_displaymessage(fd, output);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_whomap(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char output[200];
-	struct map_session_data *pl_sd;
-	int i, count;
-	int pl_GM_level, GM_level;
-	int map_id;
-	char map_name[100];
-
-	memset(output, '\0', sizeof(output));
-	memset(map_name, '\0', sizeof(map_name));
-
-	if (!message || !*message)
-		map_id = sd->bl.m;
-	else {
-		sscanf(message, "%99s", map_name);
-		if (strstr(map_name, ".gat") == NULL && strstr(map_name, ".afm") == NULL && strlen(map_name) < 13) // 16 - 4 (.gat)
-			strcat(map_name, ".gat");
-		if ((map_id = map_mapname2mapid(map_name)) < 0)
-			map_id = sd->bl.m;
-	}
-
-	count = 0;
-	GM_level = pc_isGM(sd);
-	for (i = 0; i < fd_max; i++) {
-		if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) {
-			pl_GM_level = pc_isGM(pl_sd);
-			if (!((battle_config.hide_GM_session || (pl_sd->status.option & OPTION_HIDE)) && (pl_GM_level > GM_level))) { // you can look only lower or same level
-				if (pl_sd->bl.m == map_id) {
-					if (pl_GM_level > 0)
-						sprintf(output, "Name: %s (GM:%d) | Location: %s %d %d", pl_sd->status.name, pl_GM_level, pl_sd->mapname, pl_sd->bl.x, pl_sd->bl.y);
-					else
-						sprintf(output, "Name: %s | Location: %s %d %d", pl_sd->status.name, pl_sd->mapname, pl_sd->bl.x, pl_sd->bl.y);
-					clif_displaymessage(fd, output);
-					count++;
-				}
-			}
-		}
-	}
-
-	if (count == 0)
-		sprintf(output, msg_table[54], map[map_id].name); // No player found in map '%s'.
-	else if (count == 1)
-		sprintf(output, msg_table[55], map[map_id].name); // 1 player found in map '%s'.
-	else {
-		sprintf(output, msg_table[56], count, map[map_id].name); // %d players found in map '%s'.
-	}
-	clif_displaymessage(fd, output);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_whomap2(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char output[200];
-	struct map_session_data *pl_sd;
-	int i, count;
-	int pl_GM_level, GM_level;
-	int map_id = 0;
-	char map_name[100];
-
-	memset(output, '\0', sizeof(output));
-	memset(map_name, '\0', sizeof(map_name));
-
-	if (!message || !*message)
-		map_id = sd->bl.m;
-	else {
-		sscanf(message, "%99s", map_name);
-		if (strstr(map_name, ".gat") == NULL && strstr(map_name, ".afm") == NULL && strlen(map_name) < 13) // 16 - 4 (.gat)
-			strcat(map_name, ".gat");
-		if ((map_id = map_mapname2mapid(map_name)) < 0)
-			map_id = sd->bl.m;
-	}
-
-	count = 0;
-	GM_level = pc_isGM(sd);
-	for (i = 0; i < fd_max; i++) {
-		if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) {
-			pl_GM_level = pc_isGM(pl_sd);
-			if (!((battle_config.hide_GM_session || (pl_sd->status.option & OPTION_HIDE)) && (pl_GM_level > GM_level))) { // you can look only lower or same level
-				if (pl_sd->bl.m == map_id) {
-					if (pl_GM_level > 0)
-						sprintf(output, "Name: %s (GM:%d) | BLvl: %d | Job: %s (Lvl: %d)", pl_sd->status.name, pl_GM_level, pl_sd->status.base_level, job_name(pl_sd->status.class), pl_sd->status.job_level);
-					else
-						sprintf(output, "Name: %s | BLvl: %d | Job: %s (Lvl: %d)", pl_sd->status.name, pl_sd->status.base_level, job_name(pl_sd->status.class), pl_sd->status.job_level);
-					clif_displaymessage(fd, output);
-					count++;
-				}
-			}
-		}
-	}
-
-	if (count == 0)
-		sprintf(output, msg_table[54], map[map_id].name); // No player found in map '%s'.
-	else if (count == 1)
-		sprintf(output, msg_table[55], map[map_id].name); // 1 player found in map '%s'.
-	else {
-		sprintf(output, msg_table[56], count, map[map_id].name); // %d players found in map '%s'.
-	}
-	clif_displaymessage(fd, output);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_whomap3(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char temp0[100];
-	char temp1[100];
-	char output[200];
-	struct map_session_data *pl_sd;
-	int i, count;
-	int pl_GM_level, GM_level;
-	int map_id = 0;
-	char map_name[100];
-	struct guild *g;
-	struct party *p;
-
-	memset(temp0, '\0', sizeof(temp0));
-	memset(temp1, '\0', sizeof(temp1));
-	memset(output, '\0', sizeof(output));
-	memset(map_name, '\0', sizeof(map_name));
-
-	if (!message || !*message)
-		map_id = sd->bl.m;
-	else {
-		sscanf(message, "%99s", map_name);
-		if (strstr(map_name, ".gat") == NULL && strstr(map_name, ".afm") == NULL && strlen(map_name) < 13) // 16 - 4 (.gat)
-			strcat(map_name, ".gat");
-		if ((map_id = map_mapname2mapid(map_name)) < 0)
-			map_id = sd->bl.m;
-	}
-
-	count = 0;
-	GM_level = pc_isGM(sd);
-	for (i = 0; i < fd_max; i++) {
-		if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) {
-			pl_GM_level = pc_isGM(pl_sd);
-			if (!((battle_config.hide_GM_session || (pl_sd->status.option & OPTION_HIDE)) && (pl_GM_level > GM_level))) { // you can look only lower or same level
-				if (pl_sd->bl.m == map_id) {
-					g = guild_search(pl_sd->status.guild_id);
-					if (g == NULL)
-						sprintf(temp1, "None");
-					else
-						sprintf(temp1, "%s", g->name);
-					p = party_search(pl_sd->status.party_id);
-					if (p == NULL)
-						sprintf(temp0, "None");
-					else
-						sprintf(temp0, "%s", p->name);
-					if (pl_GM_level > 0)
-						sprintf(output, "Name: %s (GM:%d) | Party: '%s' | Guild: '%s'", pl_sd->status.name, pl_GM_level, temp0, temp1);
-					else
-						sprintf(output, "Name: %s | Party: '%s' | Guild: '%s'", pl_sd->status.name, temp0, temp1);
-					clif_displaymessage(fd, output);
-					count++;
-				}
-			}
-		}
-	}
-
-	if (count == 0)
-		sprintf(output, msg_table[54], map[map_id].name); // No player found in map '%s'.
-	else if (count == 1)
-		sprintf(output, msg_table[55], map[map_id].name); // 1 player found in map '%s'.
-	else {
-		sprintf(output, msg_table[56], count, map[map_id].name); // %d players found in map '%s'.
-	}
-	clif_displaymessage(fd, output);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_whogm(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char temp0[100];
-	char temp1[100];
-	char output[200];
-	struct map_session_data *pl_sd;
-	int i, j, count;
-	int pl_GM_level, GM_level;
-	char match_text[100];
-	char player_name[24];
-	struct guild *g;
-	struct party *p;
-
-	memset(temp0, '\0', sizeof(temp0));
-	memset(temp1, '\0', sizeof(temp1));
-	memset(output, '\0', sizeof(output));
-	memset(match_text, '\0', sizeof(match_text));
-	memset(player_name, '\0', sizeof(player_name));
-
-	if (sscanf(message, "%99[^\n]", match_text) < 1)
-		strcpy(match_text, "");
-	for (j = 0; match_text[j]; j++)
-		match_text[j] = tolower(match_text[j]);
-
-	count = 0;
-	GM_level = pc_isGM(sd);
-	for (i = 0; i < fd_max; i++) {
-		if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) {
-			pl_GM_level = pc_isGM(pl_sd);
-			if (pl_GM_level > 0) {
-				if (!((battle_config.hide_GM_session || (pl_sd->status.option & OPTION_HIDE)) && (pl_GM_level > GM_level))) { // you can look only lower or same level
-					memcpy(player_name, pl_sd->status.name, 24);
-					for (j = 0; player_name[j]; j++)
-						player_name[j] = tolower(player_name[j]);
-					if (strstr(player_name, match_text) != NULL) { // search with no case sensitive
-						sprintf(output, "Name: %s (GM:%d) | Location: %s %d %d", pl_sd->status.name, pl_GM_level, pl_sd->mapname, pl_sd->bl.x, pl_sd->bl.y);
-						clif_displaymessage(fd, output);
-						sprintf(output, "       BLvl: %d | Job: %s (Lvl: %d)", pl_sd->status.base_level, job_name(pl_sd->status.class), pl_sd->status.job_level);
-						clif_displaymessage(fd, output);
-						g = guild_search(pl_sd->status.guild_id);
-						if (g == NULL)
-							sprintf(temp1, "None");
-						else
-							sprintf(temp1, "%s", g->name);
-						p = party_search(pl_sd->status.party_id);
-						if (p == NULL)
-							sprintf(temp0, "None");
-						else
-							sprintf(temp0, "%s", p->name);
-						sprintf(output, "       Party: '%s' | Guild: '%s'", temp0, temp1);
-						clif_displaymessage(fd, output);
-						count++;
-					}
-				}
-			}
-		}
-	}
-
-	if (count == 0)
-		clif_displaymessage(fd, msg_table[150]); // No GM found.
-	else if (count == 1)
-		clif_displaymessage(fd, msg_table[151]); // 1 GM found.
-	else {
-		sprintf(output, msg_table[152], count); // %d GMs found.
-		clif_displaymessage(fd, output);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_save(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	pc_setsavepoint(sd, sd->mapname, sd->bl.x, sd->bl.y);
-	if (sd->status.pet_id > 0 && sd->pd)
-		intif_save_petdata(sd->status.account_id, &sd->pet);
-	pc_makesavestatus(sd);
-	chrif_save(sd);
-	storage_storage_save(sd);
-	clif_displaymessage(fd, msg_table[6]); // Character data respawn point saved.
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_load(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int m;
-
-	m = map_mapname2mapid(sd->status.save_point.map);
-	if (m >= 0 && map[m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-		clif_displaymessage(fd, "You are not authorised to warp you to your save map.");
-		return -1;
-	}
-	if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-		clif_displaymessage(fd, "You are not authorised to warp you from your actual map.");
-		return -1;
-	}
-
-	pc_setpos(sd, sd->status.save_point.map, sd->status.save_point.x, sd->status.save_point.y, 0);
-	clif_displaymessage(fd, msg_table[7]); // Warping to respawn point.
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_speed(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char output[200];
-	int speed;
-
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message) {
-		sprintf(output, "Please, enter a speed value (usage: @speed <%d-%d>).", MIN_WALK_SPEED, MAX_WALK_SPEED);
-		clif_displaymessage(fd, output);
-		return -1;
-	}
-
-	speed = atoi(message);
-	if (speed >= MIN_WALK_SPEED && speed <= MAX_WALK_SPEED) {
-		sd->speed = speed;
-		//sd->walktimer = x;
-		//���̕���lj� by ��
-		clif_updatestatus(sd, SP_SPEED);
-		clif_displaymessage(fd, msg_table[8]); // Speed changed.
-	} else {
-		sprintf(output, "Please, enter a valid speed value (usage: @speed <%d-%d>).", MIN_WALK_SPEED, MAX_WALK_SPEED);
-		clif_displaymessage(fd, output);
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_storage(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	storage_storageopen(sd);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_guildstorage(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	if (sd->status.guild_id > 0)
-		storage_guild_storageopen(sd);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_option(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int param1 = 0, param2 = 0, param3 = 0;
-
-	if (!message || !*message || sscanf(message, "%d %d %d", &param1, &param2, &param3) < 1 || param1 < 0 || param2 < 0 || param3 < 0) {
-		clif_displaymessage(fd, "Please, enter at least a option (usage: @option <param1:0+> <param2:0+> <param3:0+>).");
-		return -1;
-	}
-
-	sd->opt1 = param1;
-	sd->opt2 = param2;
-	if (!(sd->status.option & CART_MASK) && param3 & CART_MASK) {
-		clif_cart_itemlist(sd);
-		clif_cart_equiplist(sd);
-		clif_updatestatus(sd, SP_CARTINFO);
-	}
-	sd->status.option = param3;
-	// fix pecopeco display
-	if (sd->status.class == 13 || sd->status.class == 21 || sd->status.class == 4014 || sd->status.class == 4022) {
-		if (!pc_isriding(sd)) { // sd have the new value...
-			if (sd->status.class == 13)
-				sd->status.class = sd->view_class = 7;
-			else if (sd->status.class == 21)
-				sd->status.class = sd->view_class = 14;
-			else if (sd->status.class == 4014)
-				sd->status.class = sd->view_class = 4008;
-			else if (sd->status.class == 4022)
-				sd->status.class = sd->view_class = 4015;
-		}
-	} else {
-		if (pc_isriding(sd)) { // sd have the new value...
-			if (sd->disguise > 0) { // temporary prevention of crash caused by peco + disguise, will look into a better solution [Valaris] (code added by [Yor])
-				sd->status.option &= ~0x0020;
-			} else {
-				if (sd->status.class == 7)
-					sd->status.class = sd->view_class = 13;
-				else if (sd->status.class == 14)
-					sd->status.class = sd->view_class = 21;
-				else if (sd->status.class == 4008)
-					sd->status.class = sd->view_class = 4014;
-				else if (sd->status.class == 4015)
-					sd->status.class = sd->view_class = 4022;
-				else
-					sd->status.option &= ~0x0020;
-			}
-		}
-	}
-
-	clif_changeoption(&sd->bl);
-	pc_calcstatus(sd, 0);
-	clif_displaymessage(fd, msg_table[9]); // Options changed.
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_hide(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	if (sd->status.option & OPTION_HIDE) {
-		sd->status.option &= ~OPTION_HIDE;
-		clif_displaymessage(fd, msg_table[10]); // Invisible: Off
-	} else {
-		sd->status.option |= OPTION_HIDE;
-		clif_displaymessage(fd, msg_table[11]); // Invisible: On
-	}
-	clif_changeoption(&sd->bl);
-
-	return 0;
-}
-
-/*==========================================
- * �]�E���� upper���w�肷��Ɠ]����{�q�ɂ��Ȃ��
- *------------------------------------------
- */
-int atcommand_jobchange(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int job = 0, upper = -1;
-
-	if (!message || !*message || sscanf(message, "%d %d", &job, &upper) < 1) {
-		clif_displaymessage(fd, "Please, enter job ID (usage: @job/@jobchange <job ID>).");
-		return -1;
-	}
-
-	if (job == 37 ||job == 45)
-		return 0;
-
-	if ((job >= 0 && job < MAX_PC_CLASS)) {
-
-		// fix pecopeco display
-		if ((job != 13 && job != 21 && job != 4014 && job != 4022)) {
-			if (pc_isriding(sd)) {
-				if (sd->status.class == 13)
-					sd->status.class = sd->view_class = 7;
-				if (sd->status.class == 21)
-					sd->status.class = sd->view_class = 14;
-				if (sd->status.class == 4014)
-					sd->status.class = sd->view_class = 4008;
-				if (sd->status.class == 4022)
-					sd->status.class = sd->view_class = 4015;
-				sd->status.option &= ~0x0020;
-				clif_changeoption(&sd->bl);
-				pc_calcstatus(sd, 0);
-			}
-		} else {
-			if (!pc_isriding(sd)) {
-				if (job == 13)
-					job = 7;
-				if (job == 21)
-					job = 14;
-				if (job == 4014)
-					job = 4008;
-				if (job == 4022)
-					job = 4015;
-			}
-		}
-
-		if (pc_jobchange(sd, job, upper) == 0)
-			clif_displaymessage(fd, msg_table[12]); // Your job has been changed.
-		else {
-			clif_displaymessage(fd, msg_table[155]); // Impossible to change your job.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, "Please, enter a valid job ID (usage: @job/@jobchange <job ID>).");
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_die(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	pc_damage(NULL, sd, sd->status.hp + 1);
-	clif_displaymessage(fd, msg_table[13]); // A pity! You've died.
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_kill(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	struct map_session_data *pl_sd;
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @kill <char name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can kill only lower or same level
-			pc_damage(NULL, pl_sd, pl_sd->status.hp + 1);
-			clif_displaymessage(fd, msg_table[14]); // Character killed.
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_alive(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	sd->status.hp = sd->status.max_hp;
-	sd->status.sp = sd->status.max_sp;
-	pc_setstand(sd);
-	if (battle_config.pc_invincible_time > 0)
-		pc_setinvincibletimer(sd, battle_config.pc_invincible_time);
-	clif_updatestatus(sd, SP_HP);
-	clif_updatestatus(sd, SP_SP);
-	clif_resurrection(&sd->bl, 1);
-	clif_displaymessage(fd, msg_table[16]); // You've been revived! It's a miracle!
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_kami(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char output[200];
-
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message) {
-		clif_displaymessage(fd, "Please, enter a message (usage: @kami <message>).");
-		return -1;
-	}
-
-	sscanf(message, "%199[^\n]", output);
-	intif_GMmessage(output, strlen(output) + 1, (*(command + 5) == 'b') ? 0x10 : 0);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_heal(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int hp = 0, sp = 0; // [Valaris] thanks to fov
-
-	sscanf(message, "%d %d", &hp, &sp);
-
-	if (hp == 0 && sp == 0) {
-		hp = sd->status.max_hp - sd->status.hp;
-		sp = sd->status.max_sp - sd->status.sp;
-	} else {
-		if (hp > 0 && (hp > sd->status.max_hp || hp > (sd->status.max_hp - sd->status.hp))) // fix positiv overflow
-			hp = sd->status.max_hp - sd->status.hp;
-		else if (hp < 0 && (hp < -sd->status.max_hp || hp < (1 - sd->status.hp))) // fix negativ overflow
-			hp = 1 - sd->status.hp;
-		if (sp > 0 && (sp > sd->status.max_sp || sp > (sd->status.max_sp - sd->status.sp))) // fix positiv overflow
-			sp = sd->status.max_sp - sd->status.sp;
-		else if (sp < 0 && (sp < -sd->status.max_sp || sp < (1 - sd->status.sp))) // fix negativ overflow
-			sp = 1 - sd->status.sp;
-	}
-
-	if (hp > 0) // display like heal
-		clif_heal(fd, SP_HP, hp);
-	else if (hp < 0) // display like damage
-		clif_damage(&sd->bl,&sd->bl, gettick(), 0, 0, -hp, 0 , 4, 0);
-	if (sp > 0) // no display when we lost SP
-		clif_heal(fd, SP_SP, sp);
-
-	if (hp != 0 || sp != 0) {
-		pc_heal(sd, hp, sp);
-		if (hp >= 0 && sp >= 0)
-			clif_displaymessage(fd, msg_table[17]); // HP, SP recovered.
-		else
-			clif_displaymessage(fd, msg_table[156]); // HP or/and SP modified.
-	} else {
-		clif_displaymessage(fd, msg_table[157]); // HP and SP are already with the good value.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @item command (usage: @item <name/id_of_item> <quantity>) (modified by [Yor] for pet_egg)
- *------------------------------------------
- */
-int atcommand_item(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char item_name[100];
-	int number = 0, item_id, flag;
-	struct item item_tmp;
-	struct item_data *item_data;
-	int get_count, i, pet_id;
-
-	memset(item_name, '\0', sizeof(item_name));
-
-	if (!message || !*message || sscanf(message, "%99s %d", item_name, &number) < 1) {
-		clif_displaymessage(fd, "Please, enter an item name/id (usage: @item <item name or ID> [quantity]).");
-		return -1;
-	}
-
-	if (number <= 0)
-		number = 1;
-
-	item_id = 0;
-	if ((item_data = itemdb_searchname(item_name)) != NULL ||
-	    (item_data = itemdb_exists(atoi(item_name))) != NULL)
-		item_id = item_data->nameid;
-
-	if (item_id >= 500) {
-		get_count = number;
-		// check pet egg
-		pet_id = search_petDB_index(item_id, PET_EGG);
-		if (item_data->type == 4 || item_data->type == 5 ||
-			item_data->type == 7 || item_data->type == 8) {
-			get_count = 1;
-		}
-		for (i = 0; i < number; i += get_count) {
-			// if 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, pet_db[pet_id].intimate,
-				                 100, 0, 1, pet_db[pet_id].jname);
-			// if not pet egg
-			} else {
-				memset(&item_tmp, 0, sizeof(item_tmp));
-				item_tmp.nameid = item_id;
-				item_tmp.identify = 1;
-				if ((flag = pc_additem((struct map_session_data*)sd, &item_tmp, get_count)))
-					clif_additem((struct map_session_data*)sd, 0, 0, flag);
-			}
-		}
-		clif_displaymessage(fd, msg_table[18]); // Item created.
-	} else {
-		clif_displaymessage(fd, msg_table[19]); // Invalid item ID or name.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_item2(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct item item_tmp;
-	struct item_data *item_data;
-	char item_name[100];
-	int item_id, number = 0;
-	int identify = 0, refine = 0, attr = 0;
-	int c1 = 0, c2 = 0, c3 = 0, c4 = 0;
-	int flag;
-	int loop, get_count, i;
-
-	memset(item_name, '\0', sizeof(item_name));
-
-	if (!message || !*message || sscanf(message, "%99s %d %d %d %d %d %d %d %d", item_name, &number, &identify, &refine, &attr, &c1, &c2, &c3, &c4) < 9) {
-		clif_displaymessage(fd, "Please, enter all informations (usage: @item2 <item name or ID> <quantity>");
-		clif_displaymessage(fd, "  <Identify_flag> <refine> <attribut> <Card1> <Card2> <Card3> <Card4>).");
-		return -1;
-	}
-
-	if (number <= 0)
-		number = 1;
-
-	item_id = 0;
-	if ((item_data = itemdb_searchname(item_name)) != NULL ||
-	    (item_data = itemdb_exists(atoi(item_name))) != NULL)
-		item_id = item_data->nameid;
-
-	if (item_id > 500) {
-		loop = 1;
-		get_count = number;
-		if (item_data->type == 4 || item_data->type == 5 ||
-			item_data->type == 7 || item_data->type == 8) {
-			loop = number;
-			get_count = 1;
-			if (item_data->type == 7) {
-				identify = 1;
-				refine = 0;
-			}
-			if (item_data->type == 8)
-				refine = 0;
-			if (refine > 10)
-				refine = 10;
-		} else {
-			identify = 1;
-			refine = attr = 0;
-		}
-		for (i = 0; i < loop; i++) {
-			memset(&item_tmp, 0, sizeof(item_tmp));
-			item_tmp.nameid = item_id;
-			item_tmp.identify = identify;
-			item_tmp.refine = refine;
-			item_tmp.attribute = attr;
-			item_tmp.card[0] = c1;
-			item_tmp.card[1] = c2;
-			item_tmp.card[2] = c3;
-			item_tmp.card[3] = c4;
-			if ((flag = pc_additem(sd, &item_tmp, get_count)))
-				clif_additem(sd, 0, 0, flag);
-		}
-		clif_displaymessage(fd, msg_table[18]); // Item created.
-	} else {
-		clif_displaymessage(fd, msg_table[19]); // Invalid item ID or name.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_itemreset(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int i;
-
-	for (i = 0; i < MAX_INVENTORY; i++) {
-		if (sd->status.inventory[i].amount && sd->status.inventory[i].equip == 0)
-			pc_delitem(sd, i, sd->status.inventory[i].amount, 0);
-	}
-	clif_displaymessage(fd, msg_table[20]); // All of your items have been removed.
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_itemcheck(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	pc_checkitem(sd);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_baselevelup(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int level, i;
-
-	if (!message || !*message || (level = atoi(message)) == 0) {
-		clif_displaymessage(fd, "Please, enter a level adjustement (usage: @lvup/@blevel/@baselvlup <number of levels>).");
-		return -1;
-	}
-
-	if (level > 0) {
-		if (sd->status.base_level == battle_config.maximum_level) {	// check for max level by Valaris
-			clif_displaymessage(fd, msg_table[47]); // Base level can't go any higher.
-			return -1;
-		}	// End Addition
-		if (level > battle_config.maximum_level || level > (battle_config.maximum_level - sd->status.base_level)) // fix positiv overflow
-			level = battle_config.maximum_level - sd->status.base_level;
-		for (i = 1; i <= level; i++)
-			sd->status.status_point += (sd->status.base_level + i + 14) / 5;
-		sd->status.base_level += level;
-		clif_updatestatus(sd, SP_BASELEVEL);
-		clif_updatestatus(sd, SP_NEXTBASEEXP);
-		clif_updatestatus(sd, SP_STATUSPOINT);
-		pc_calcstatus(sd, 0);
-		pc_heal(sd, sd->status.max_hp, sd->status.max_sp);
-		clif_misceffect(&sd->bl, 0);
-		clif_displaymessage(fd, msg_table[21]); // Base level raised.
-	} else {
-		if (sd->status.base_level == 1) {
-			clif_displaymessage(fd, msg_table[158]); // Base level can't go any lower.
-			return -1;
-		}
-		if (level < -battle_config.maximum_level || level < (1 - sd->status.base_level)) // fix negativ overflow
-			level = 1 - sd->status.base_level;
-		if (sd->status.status_point > 0) {
-			for (i = 0; i > level; i--)
-				sd->status.status_point -= (sd->status.base_level + i + 14) / 5;
-			if (sd->status.status_point < 0)
-				sd->status.status_point = 0;
-			clif_updatestatus(sd, SP_STATUSPOINT);
-		} // to add: remove status points from stats
-		sd->status.base_level += level;
-		clif_updatestatus(sd, SP_BASELEVEL);
-		clif_updatestatus(sd, SP_NEXTBASEEXP);
-		pc_calcstatus(sd, 0);
-		clif_displaymessage(fd, msg_table[22]); // Base level lowered.
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_joblevelup(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int up_level = 50, level;
-
-	if (!message || !*message || (level = atoi(message)) == 0) {
-		clif_displaymessage(fd, "Please, enter a level adjustement (usage: @joblvup/@jlevel/@joblvlup <number of levels>).");
-		return -1;
-	}
-
-	if (sd->status.class == 0 || sd->status.class == 4001)
-		up_level -= 40;
-	else if ((sd->status.class > 4007 && sd->status.class < 4024) || sd->status.class == 23)
-		up_level += 20;
-
-	if (level > 0) {
-		if (sd->status.job_level == up_level) {
-			clif_displaymessage(fd, msg_table[23]); // Job level can't go any higher.
-			return -1;
-		}
-		if (level > up_level || level > (up_level - sd->status.job_level)) // fix positiv overflow
-			level = up_level - sd->status.job_level;
-		sd->status.job_level += level;
-		clif_updatestatus(sd, SP_JOBLEVEL);
-		clif_updatestatus(sd, SP_NEXTJOBEXP);
-		sd->status.skill_point += level;
-		clif_updatestatus(sd, SP_SKILLPOINT);
-		pc_calcstatus(sd, 0);
-		clif_misceffect(&sd->bl, 1);
-		clif_displaymessage(fd, msg_table[24]); // Job level raised.
-	} else {
-		if (sd->status.job_level == 1) {
-			clif_displaymessage(fd, msg_table[159]); // Job level can't go any lower.
-			return -1;
-		}
-		if (level < -up_level || level < (1 - sd->status.job_level)) // fix negativ overflow
-			level = 1 - sd->status.job_level;
-		sd->status.job_level += level;
-		clif_updatestatus(sd, SP_JOBLEVEL);
-		clif_updatestatus(sd, SP_NEXTJOBEXP);
-		if (sd->status.skill_point > 0) {
-			sd->status.skill_point += level;
-			if (sd->status.skill_point < 0)
-				sd->status.skill_point = 0;
-			clif_updatestatus(sd, SP_SKILLPOINT);
-		} // to add: remove status points from skills
-		pc_calcstatus(sd, 0);
-		clif_displaymessage(fd, msg_table[25]); // Job level lowered.
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_help(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char buf[2048], w1[2048], w2[2048];
-	int i, gm_level;
-	FILE* fp;
-
-	memset(buf, '\0', sizeof(buf));
-
-	if ((fp = fopen(help_txt, "r")) != NULL) {
-		clif_displaymessage(fd, msg_table[26]); // Help commands:
-		gm_level = pc_isGM(sd);
-		while(fgets(buf, sizeof(buf) - 1, fp) != NULL) {
-			if (buf[0] == '/' && buf[1] == '/')
-				continue;
-			for (i = 0; buf[i] != '\0'; i++) {
-				if (buf[i] == '\r' || buf[i] == '\n') {
-					buf[i] = '\0';
-					break;
-				}
-			}
-			if (sscanf(buf, "%2047[^:]:%2047[^\n]", w1, w2) < 2)
-				clif_displaymessage(fd, buf);
-			else if (gm_level >= atoi(w1))
-				clif_displaymessage(fd, w2);
-		}
-		fclose(fp);
-	} else {
-		clif_displaymessage(fd, msg_table[27]); // File help.txt not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_gm(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char password[100];
-
-	memset(password, '\0', sizeof(password));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", password) < 1) {
-		clif_displaymessage(fd, "Please, enter a password (usage: @gm <password>).");
-		return -1;
-	}
-
-	if (pc_isGM(sd)) { // a GM can not use this function. only a normal player (become gm is not for gm!)
-		clif_displaymessage(fd, msg_table[50]); // You already have some GM powers.
-		return -1;
-	} else
-		chrif_changegm(sd->status.account_id, password, strlen(password) + 1);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_pvpoff(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	int i;
-
-	if (battle_config.pk_mode) { //disable command if server is in PK mode [Valaris]
-		clif_displaymessage(fd, msg_table[52]); // This option cannot be used in PK Mode.
-		return -1;
-	}
-
-	if (map[sd->bl.m].flag.pvp) {
-		map[sd->bl.m].flag.pvp = 0;
-		clif_send0199(sd->bl.m, 0);
-		for (i = 0; i < fd_max; i++) {	//�l�������[�v
-			if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) {
-				if (sd->bl.m == pl_sd->bl.m) {
-					clif_pvpset(pl_sd, 0, 0, 2);
-					if (pl_sd->pvp_timer != -1) {
-						delete_timer(pl_sd->pvp_timer, pc_calc_pvprank_timer);
-						pl_sd->pvp_timer = -1;
-					}
-				}
-			}
-		}
-		clif_displaymessage(fd, msg_table[31]); // PvP: Off.
-	} else {
-		clif_displaymessage(fd, msg_table[160]); // PvP is already Off.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_pvpon(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	int i;
-
-	if (battle_config.pk_mode) { //disable command if server is in PK mode [Valaris]
-		clif_displaymessage(fd, msg_table[52]); // This option cannot be used in PK Mode.
-		return -1;
-	}
-
-	if (!map[sd->bl.m].flag.pvp && !map[sd->bl.m].flag.nopvp) {
-		map[sd->bl.m].flag.pvp = 1;
-		clif_send0199(sd->bl.m, 1);
-		for (i = 0; i < fd_max; i++) {
-			if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) {
-				if (sd->bl.m == pl_sd->bl.m && pl_sd->pvp_timer == -1) {
-					pl_sd->pvp_timer = add_timer(gettick() + 200,
-						pc_calc_pvprank_timer, pl_sd->bl.id, 0);
-					pl_sd->pvp_rank = 0;
-					pl_sd->pvp_lastusers = 0;
-					pl_sd->pvp_point = 5;
-				}
-			}
-		}
-		clif_displaymessage(fd, msg_table[32]); // PvP: On.
-	} else {
-		clif_displaymessage(fd, msg_table[161]); // PvP is already On.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_gvgoff(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	if (map[sd->bl.m].flag.gvg) {
-		map[sd->bl.m].flag.gvg = 0;
-		clif_send0199(sd->bl.m, 0);
-		clif_displaymessage(fd, msg_table[33]); // GvG: Off.
-	} else {
-		clif_displaymessage(fd, msg_table[162]); // GvG is already Off.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_gvgon(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	if (!map[sd->bl.m].flag.gvg) {
-		map[sd->bl.m].flag.gvg = 1;
-		clif_send0199(sd->bl.m, 3);
-		clif_displaymessage(fd, msg_table[34]); // GvG: On.
-	} else {
-		clif_displaymessage(fd, msg_table[163]); // GvG is already On.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_model(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int hair_style = 0, hair_color = 0, cloth_color = 0;
-	char output[200];
-
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%d %d %d", &hair_style, &hair_color, &cloth_color) < 1) {
-		sprintf(output, "Please, enter at least a value (usage: @model <hair ID: %d-%d> <hair color: %d-%d> <clothes color: %d-%d>).",
-		        MIN_HAIR_STYLE, MAX_HAIR_STYLE, MIN_HAIR_COLOR, MAX_HAIR_COLOR, MIN_CLOTH_COLOR, MAX_CLOTH_COLOR);
-		clif_displaymessage(fd, output);
-		return -1;
-	}
-
-	if (hair_style >= MIN_HAIR_STYLE && hair_style <= MAX_HAIR_STYLE &&
-		hair_color >= MIN_HAIR_COLOR && hair_color <= MAX_HAIR_COLOR &&
-		cloth_color >= MIN_CLOTH_COLOR && cloth_color <= MAX_CLOTH_COLOR) {
-		//���̐F�ύX
-		if (cloth_color != 0 && sd->status.sex == 1 && (sd->status.class == 12 ||  sd->status.class == 17)) {
-			//���̐F�������E�̔���
-			clif_displaymessage(fd, msg_table[35]); // You can't use this command with this class.
-			return -1;
-		} else {
-			pc_changelook(sd, LOOK_HAIR, hair_style);
-			pc_changelook(sd, LOOK_HAIR_COLOR, hair_color);
-			pc_changelook(sd, LOOK_CLOTHES_COLOR, cloth_color);
-			clif_displaymessage(fd, msg_table[36]); // Appearence changed.
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[37]); // An invalid number was specified.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @dye && @ccolor
- *------------------------------------------
- */
-int atcommand_dye(const int fd, struct map_session_data* sd, const char* command, const char* message)
-{
-	int cloth_color = 0;
-	char output[200];
-
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%d", &cloth_color) < 1) {
-		sprintf(output, "Please, enter a clothes color (usage: @dye/@ccolor <clothes color: %d-%d>).", MIN_CLOTH_COLOR, MAX_CLOTH_COLOR);
-		clif_displaymessage(fd, output);
-		return -1;
-	}
-
-	if (cloth_color >= MIN_CLOTH_COLOR && cloth_color <= MAX_CLOTH_COLOR) {
-		if (cloth_color != 0 && sd->status.sex == 1 && (sd->status.class == 12 || sd->status.class == 17)) {
-			clif_displaymessage(fd, msg_table[35]); // You can't use this command with this class.
-			return -1;
-		} else {
-			pc_changelook(sd, LOOK_CLOTHES_COLOR, cloth_color);
-			clif_displaymessage(fd, msg_table[36]); // Appearence changed.
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[37]); // An invalid number was specified.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @chardye by [MouseJstr]
- *------------------------------------------
- */
-int
-atcommand_chardye(const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	return 0;
-}
-
-/*==========================================
- * @hairstyle && @hstyle
- *------------------------------------------
- */
-int atcommand_hair_style(const int fd, struct map_session_data* sd, const char* command, const char* message)
-{
-	int hair_style = 0;
-	char output[200];
-
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%d", &hair_style) < 1) {
-		sprintf(output, "Please, enter a hair style (usage: @hairstyle/@hstyle <hair ID: %d-%d>).", MIN_HAIR_STYLE, MAX_HAIR_STYLE);
-		clif_displaymessage(fd, output);
-		return -1;
-	}
-
-	if (hair_style >= MIN_HAIR_STYLE && hair_style <= MAX_HAIR_STYLE) {
-		if (hair_style != 0 && sd->status.sex == 1 && (sd->status.class == 12 || sd->status.class == 17)) {
-			clif_displaymessage(fd, msg_table[35]); // You can't use this command with this class.
-			return -1;
-		} else {
-			pc_changelook(sd, LOOK_HAIR, hair_style);
-			clif_displaymessage(fd, msg_table[36]); // Appearence changed.
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[37]); // An invalid number was specified.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @charhairstyle by [MouseJstr]
- *------------------------------------------
- */
-int
-atcommand_charhairstyle(const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-        return 0;
-}
-
-/*==========================================
- * @haircolor && @hcolor
- *------------------------------------------
- */
-int atcommand_hair_color(const int fd, struct map_session_data* sd, const char* command, const char* message)
-{
-	int hair_color = 0;
-	char output[200];
-
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%d", &hair_color) < 1) {
-		sprintf(output, "Please, enter a hair color (usage: @haircolor/@hcolor <hair color: %d-%d>).", MIN_HAIR_COLOR, MAX_HAIR_COLOR);
-		clif_displaymessage(fd, output);
-		return -1;
-	}
-
-	if (hair_color >= MIN_HAIR_COLOR && hair_color <= MAX_HAIR_COLOR) {
-		if (hair_color != 0 && sd->status.sex == 1 && (sd->status.class == 12 || sd->status.class == 17)) {
-			clif_displaymessage(fd, msg_table[35]); // You can't use this command with this class.
-			return -1;
-		} else {
-			pc_changelook(sd, LOOK_HAIR_COLOR, hair_color);
-			clif_displaymessage(fd, msg_table[36]); // Appearence changed.
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[37]); // An invalid number was specified.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @charhaircolor by [MouseJstr]
- *------------------------------------------
- */
-int
-atcommand_charhaircolor(const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-        return 0;
-}
-
-/*==========================================
- * @go [city_number/city_name]: improved by [yor] to add city names and help
- *------------------------------------------
- */
-int atcommand_go(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int i;
-	int town;
-	char map_name[100];
-	char output[200];
-	int m;
-
-	struct { char map[16]; int x,   y; } data[] = {
-	       { "prontera.gat", 156, 191  },	//	 0=Prontera
-	       { "morocc.gat",   156,  93  },	//	 1=Morroc
-	       { "geffen.gat",   119,  59  },	//	 2=Geffen
-	       { "payon.gat",    162, 233  },	//	 3=Payon
-	       { "alberta.gat",  192, 147  },	//	 4=Alberta
-	       { "izlude.gat",   128, 114  },	//	 5=Izlude
-	       { "aldebaran.gat",140, 131  },	//	 6=Al de Baran
-	       { "xmas.gat",     147, 134  },	//	 7=Lutie
-	       { "comodo.gat",   209, 143  },	//	 8=Comodo
-	       { "yuno.gat",     157,  51  },	//	 9=Yuno
-	       { "amatsu.gat",   198,  84  },	//	10=Amatsu
-	       { "gonryun.gat",  160, 120  },	//	11=Gon Ryun
-	       { "umbala.gat",    89, 157  },	//	12=Umbala
-	       { "niflheim.gat",  21, 153  },	//	13=Niflheim
-	       { "louyang.gat",  217,  40  },	//	14=Lou Yang
-	       { "new_1-1.gat",   53, 111  },	//	15=Start point
-	       { "sec_pri.gat",   23,  61  },	//	16=Prison
-	};
-
-	memset(map_name, '\0', sizeof(map_name));
-	memset(output, '\0', sizeof(output));
-
-	// get the number
-	town = atoi(message);
-
-	// if no value, display all value
-	if (!message || !*message || sscanf(message, "%99s", map_name) < 1 || town < -3 || town >= (int)(sizeof(data) / sizeof(data[0]))) {
-		clif_displaymessage(fd, msg_table[38]); // Invalid location number or name.
-		clif_displaymessage(fd, msg_table[82]); // Please, use one of this number/name:
-		clif_displaymessage(fd, "-3=(Memo point 2)   4=Alberta       11=Gon Ryun");
-		clif_displaymessage(fd, "-2=(Memo point 1)   5=Izlude        12=Umbala");
-		clif_displaymessage(fd, "-1=(Memo point 0)   6=Al de Baran   13=Niflheim");
-		clif_displaymessage(fd, " 0=Prontera         7=Lutie         14=Lou Yang");
-		clif_displaymessage(fd, " 1=Morroc           8=Comodo        15=Start point");
-		clif_displaymessage(fd, " 2=Geffen           9=Yuno          16=Prison");
-		clif_displaymessage(fd, " 3=Payon           10=Amatsu");
-		return -1;
-	} else {
-		// get possible name of the city and add .gat if not in the name
-		map_name[sizeof(map_name)-1] = '\0';
-		for (i = 0; map_name[i]; i++)
-			map_name[i] = tolower(map_name[i]);
-		if (strstr(map_name, ".gat") == NULL && strstr(map_name, ".afm") == NULL && strlen(map_name) < 13) // 16 - 4 (.gat)
-			strcat(map_name, ".gat");
-		// try to see if it's a name, and not a number (try a lot of possibilities, write errors and abbreviations too)
-		if (strncmp(map_name, "prontera.gat", 3) == 0) { // 3 first characters
-			town = 0;
-		} else if (strncmp(map_name, "morocc.gat", 3) == 0) { // 3 first characters
-			town = 1;
-		} else if (strncmp(map_name, "geffen.gat", 3) == 0) { // 3 first characters
-			town = 2;
-		} else if (strncmp(map_name, "payon.gat", 3) == 0 || // 3 first characters
-		           strncmp(map_name, "paion.gat", 3) == 0) { // writing error (3 first characters)
-			town = 3;
-		} else if (strncmp(map_name, "alberta.gat", 3) == 0) { // 3 first characters
-			town = 4;
-		} else if (strncmp(map_name, "izlude.gat", 3) == 0 || // 3 first characters
-		           strncmp(map_name, "islude.gat", 3) == 0) { // writing error (3 first characters)
-			town = 5;
-		} else if (strncmp(map_name, "aldebaran.gat", 3) == 0 || // 3 first characters
-		           strcmp(map_name,  "al.gat") == 0) { // al (de baran)
-			town = 6;
-		} else if (strncmp(map_name, "lutie.gat", 3) == 0 || // name of the city, not name of the map (3 first characters)
-		           strcmp(map_name,  "christmas.gat") == 0 || // name of the symbol
-		           strncmp(map_name, "xmas.gat", 3) == 0 || // 3 first characters
-		           strncmp(map_name, "x-mas.gat", 3) == 0) { // writing error (3 first characters)
-			town = 7;
-		} else if (strncmp(map_name, "comodo.gat", 3) == 0) { // 3 first characters
-			town = 8;
-		} else if (strncmp(map_name, "yuno.gat", 3) == 0) { // 3 first characters
-			town = 9;
-		} else if (strncmp(map_name, "amatsu.gat", 3) == 0 || // 3 first characters
-		           strncmp(map_name, "ammatsu.gat", 3) == 0) { // writing error (3 first characters)
-			town = 10;
-		} else if (strncmp(map_name, "gonryun.gat", 3) == 0) { // 3 first characters
-			town = 11;
-		} else if (strncmp(map_name, "umbala.gat", 3) == 0) { // 3 first characters
-			town = 12;
-		} else if (strncmp(map_name, "niflheim.gat", 3) == 0) { // 3 first characters
-			town = 13;
-		} else if (strncmp(map_name, "louyang.gat", 3) == 0) { // 3 first characters
-			town = 14;
-		} else if (strncmp(map_name, "new_1-1.gat", 3) == 0 || // 3 first characters (or "newbies")
-		           strncmp(map_name, "startpoint.gat", 3) == 0 || // name of the position (3 first characters)
-		           strncmp(map_name, "begining.gat", 3) == 0) { // name of the position (3 first characters)
-			town = 15;
-		} else if (strncmp(map_name, "sec_pri.gat", 3) == 0 || // 3 first characters
-		           strncmp(map_name, "prison.gat", 3) == 0 || // name of the position (3 first characters)
-		           strncmp(map_name, "jails.gat", 3) == 0) { // name of the position
-			town = 16;
-		}
-
-		if (town >= -3 && town <= -1) {
-			if (sd->status.memo_point[-town-1].map[0]) {
-				m = map_mapname2mapid(sd->status.memo_point[-town-1].map);
-				if (m >= 0 && map[m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-					clif_displaymessage(fd, "You are not authorised to warp you to this memo map.");
-					return -1;
-				}
-				if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-					clif_displaymessage(fd, "You are not authorised to warp you from your actual map.");
-					return -1;
-				}
-				if (pc_setpos(sd, sd->status.memo_point[-town-1].map, sd->status.memo_point[-town-1].x, sd->status.memo_point[-town-1].y, 3) == 0) {
-					clif_displaymessage(fd, msg_table[0]); // Warped.
-				} else {
-					clif_displaymessage(fd, msg_table[1]); // Map not found.
-					return -1;
-				}
-			} else {
-				sprintf(output, msg_table[164], -town-1); // Your memo point #%d doesn't exist.
-				clif_displaymessage(fd, output);
-				return -1;
-			}
-		} else if (town >= 0 && town < (int)(sizeof(data) / sizeof(data[0]))) {
-			m = map_mapname2mapid(data[town].map);
-			if (m >= 0 && map[m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-				clif_displaymessage(fd, "You are not authorised to warp you to this destination map.");
-				return -1;
-			}
-			if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-				clif_displaymessage(fd, "You are not authorised to warp you from your actual map.");
-				return -1;
-			}
-			if (pc_setpos(sd, data[town].map, data[town].x, data[town].y, 3) == 0) {
-				clif_displaymessage(fd, msg_table[0]); // Warped.
-			} else {
-				clif_displaymessage(fd, msg_table[1]); // Map not found.
-				return -1;
-			}
-		} else { // if you arrive here, you have an error in town variable when reading of names
-			clif_displaymessage(fd, msg_table[38]); // Invalid location number or name.
-			return -1;
-		}
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_monster(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char name[100];
-	char monster[100];
-	char output[200];
-	int mob_id;
-	int number = 0;
-	int x = 0, y = 0;
-	int count;
-	int i, j, k;
-	int mx, my, range;
-
-	memset(name, '\0', sizeof(name));
-	memset(monster, '\0', sizeof(monster));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message ||
-	    (sscanf(message, "\"%[^\"]\" %99s %d %d %d", name, monster, &number, &x, &y) < 2 &&
-	     sscanf(message, "%99s \"%[^\"]\" %d %d %d", monster, name, &number, &x, &y) < 2 &&
-	     sscanf(message, "%99s %99s %d %d %d", name, monster, &number, &x, &y) < 2)) {
-		clif_displaymessage(fd, msg_table[80]); // Give a display name and monster name/id please.
-		return -1;
-	}
-
-	if ((mob_id = mobdb_searchname(monster)) == 0) // check name first (to avoid possible name begining by a number)
-		mob_id = mobdb_checkid(atoi(monster));
-
-	if (mob_id == 0) {
-		clif_displaymessage(fd, msg_table[40]); // Invalid monster ID or name.
-		return -1;
-	}
-
-	if (mob_id == 1288) {
-		clif_displaymessage(fd, msg_table[83]); // Cannot spawn emperium.
-		return -1;
-	}
-
-	if (number <= 0)
-		number = 1;
-
-	if (strlen(name) < 1)
-		strcpy(name, "--ja--");
-
-	// If value of atcommand_spawn_quantity_limit directive is greater than or equal to 1 and quantity of monsters is greater than value of the directive
-	if (battle_config.atc_spawn_quantity_limit >= 1 && number > battle_config.atc_spawn_quantity_limit)
-		number = battle_config.atc_spawn_quantity_limit;
-
-	if (battle_config.etc_log)
-		printf("%s monster='%s' name='%s' id=%d count=%d (%d,%d)\n", command, monster, name, mob_id, number, x, y);
-
-	count = 0;
-	range = sqrt(number) / 2;
-	range = range * 2 + 5; // calculation of an odd number (+ 4 area around)
-	for (i = 0; i < number; i++) {
-		j = 0;
-		k = 0;
-		while(j++ < 8 && k == 0) { // try 8 times to spawn the monster (needed for close area)
-			if (x <= 0)
-				mx = sd->bl.x + (rand() % range - (range / 2));
-			else
-				mx = x;
-			if (y <= 0)
-				my = sd->bl.y + (rand() % range - (range / 2));
-			else
-				my = y;
-			k = mob_once_spawn((struct map_session_data*)sd, "this", mx, my, name, mob_id, 1, "");
-		}
-		count += (k != 0) ? 1 : 0;
-	}
-
-	if (count != 0)
-		if (number == count)
-			clif_displaymessage(fd, msg_table[39]); // All monster summoned!
-		else {
-			sprintf(output, msg_table[240], count); // %d monster(s) summoned!
-			clif_displaymessage(fd, output);
-		}
-	else {
-		clif_displaymessage(fd, msg_table[40]); // Invalid monster ID or name.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_spawn(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message) {
-	char name[100];
-	char monster[100];
-	char output[200];
-	int mob_id;
-	int number = 0;
-	int x = 0, y = 0;
-	int count;
-	int i, j, k;
-	int mx, my, range;
-
-	memset(name, '\0', sizeof(name));
-	memset(monster, '\0', sizeof(monster));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message ||
-	    (sscanf(message, "\"%[^\"]\" %99s %d %d %d", name, monster, &number, &x, &y) < 2 &&
-	     sscanf(message, "%99s \"%[^\"]\" %d %d %d", monster, name, &number, &x, &y) < 2 &&
-	     sscanf(message, "%99s %d %99s %d %d", monster, &number, name, &x, &y) < 1)) {
-		clif_displaymessage(fd, msg_table[143]); // Give a monster name/id please.
-		return -1;
-	}
-
-	// If monster identifier/name argument is a name
-	if ((mob_id = mobdb_searchname(monster)) == 0) // check name first (to avoid possible name begining by a number)
-		mob_id = mobdb_checkid(atoi(monster));
-
-	if (mob_id == 0) {
-		clif_displaymessage(fd, msg_table[40]); // Invalid monster ID or name.
-		return -1;
-	}
-
-	if (mob_id == 1288) {
-		clif_displaymessage(fd, msg_table[83]); // Cannot spawn emperium.
-		return -1;
-	}
-
-	if (number <= 0)
-		number = 1;
-
-	if (strlen(name) < 1)
-		strcpy(name, "--ja--");
-
-	// If value of atcommand_spawn_quantity_limit directive is greater than or equal to 1 and quantity of monsters is greater than value of the directive
-	if (battle_config.atc_spawn_quantity_limit >= 1 && number > battle_config.atc_spawn_quantity_limit)
-		number = battle_config.atc_spawn_quantity_limit;
-
-	if (battle_config.etc_log)
-		printf("%s monster='%s' name='%s' id=%d count=%d (%d,%d)\n", command, monster, name, mob_id, number, x, y);
-
-	count = 0;
-	range = sqrt(number) / 2;
-	range = range * 2 + 5; // calculation of an odd number (+ 4 area around)
-	for (i = 0; i < number; i++) {
-		j = 0;
-		k = 0;
-		while(j++ < 8 && k == 0) { // try 8 times to spawn the monster (needed for close area)
-			if (x <= 0)
-				mx = sd->bl.x + (rand() % range - (range / 2));
-			else
-				mx = x;
-			if (y <= 0)
-				my = sd->bl.y + (rand() % range - (range / 2));
-			else
-				my = y;
-			k = mob_once_spawn((struct map_session_data*)sd, "this", mx, my, name, mob_id, 1, "");
-		}
-		count += (k != 0) ? 1 : 0;
-	}
-
-	if (count != 0)
-		if (number == count)
-			clif_displaymessage(fd, msg_table[39]); // All monster summoned!
-		else {
-			sprintf(output, msg_table[240], count); // %d monster(s) summoned!
-			clif_displaymessage(fd, output);
-		}
-	else {
-		clif_displaymessage(fd, msg_table[40]); // Invalid monster ID or name.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void atcommand_killmonster_sub(
-	const int fd, struct map_session_data* sd, const char* message,
-	const int drop)
-{
-	int map_id;
-	char map_name[100];
-
-	memset(map_name, '\0', sizeof(map_name));
-
-	if (!message || !*message || sscanf(message, "%99s", map_name) < 1)
-		map_id = sd->bl.m;
-	else {
-		if (strstr(map_name, ".gat") == NULL && strstr(map_name, ".afm") == NULL && strlen(map_name) < 13) // 16 - 4 (.gat)
-			strcat(map_name, ".gat");
-		if ((map_id = map_mapname2mapid(map_name)) < 0)
-			map_id = sd->bl.m;
-	}
-
-	map_foreachinarea(atkillmonster_sub, map_id, 0, 0, map[map_id].xs, map[map_id].ys, BL_MOB, drop);
-
-	clif_displaymessage(fd, msg_table[165]); // All monsters killed!
-
-	return;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_killmonster(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	atcommand_killmonster_sub(fd, sd, message, 1);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_killmonster2(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	atcommand_killmonster_sub(fd, sd, message, 0);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_refine(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int i, position = 0, refine = 0, current_position, final_refine;
-	int count;
-	char output[200];
-
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%d %d", &position, &refine) < 2) {
-		clif_displaymessage(fd, "Please, enter a position and a amount (usage: @refine <equip position> <+/- amount>).");
-		return -1;
-	}
-
-	if (refine < -10)
-		refine = -10;
-	else if (refine > 10)
-		refine = 10;
-	else if (refine == 0)
-		refine = 1;
-
-	count = 0;
-	for (i = 0; i < MAX_INVENTORY; i++) {
-		if (sd->status.inventory[i].nameid &&	// �Y�����̑����𐸘B����
-		    (sd->status.inventory[i].equip & position ||
-			(sd->status.inventory[i].equip && !position))) {
-			final_refine = sd->status.inventory[i].refine + refine;
-			if (final_refine > 10)
-				final_refine = 10;
-			else if (final_refine < 0)
-				final_refine = 0;
-			if (sd->status.inventory[i].refine != final_refine) {
-				sd->status.inventory[i].refine = final_refine;
-				current_position = sd->status.inventory[i].equip;
-				pc_unequipitem(sd, i, 0);
-				clif_refine(fd, sd, 0, i, sd->status.inventory[i].refine);
-				clif_delitem(sd, i, 1);
-				clif_additem(sd, i, 1, 0);
-				pc_equipitem(sd, i, current_position);
-				clif_misceffect((struct block_list*)&sd->bl, 3);
-				count++;
-			}
-		}
-	}
-
-	if (count == 0)
-		clif_displaymessage(fd, msg_table[166]); // No item has been refined!
-	else if (count == 1)
-		clif_displaymessage(fd, msg_table[167]); // 1 item has been refined!
-	else {
-		sprintf(output, msg_table[168], count); // %d items have been refined!
-		clif_displaymessage(fd, output);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_produce(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char item_name[100];
-	int item_id, attribute = 0, star = 0;
-	int flag = 0;
-	struct item_data *item_data;
-	struct item tmp_item;
-	char output[200];
-
-	memset(output, '\0', sizeof(output));
-	memset(item_name, '\0', sizeof(item_name));
-
-	if (!message || !*message || sscanf(message, "%99s %d %d", item_name, &attribute, &star) < 1) {
-		clif_displaymessage(fd, "Please, enter at least an item name/id (usage: @produce <equip name or equip ID> <element> <# of very's>).");
-		return -1;
-	}
-
-	item_id = 0;
-	if ((item_data = itemdb_searchname(item_name)) != NULL ||
-	    (item_data = itemdb_exists(atoi(item_name))) != NULL)
-		item_id = item_data->nameid;
-
-	if (itemdb_exists(item_id) &&
-	    (item_id <= 500 || item_id > 1099) &&
-	    (item_id < 4001 || item_id > 4148) &&
-	    (item_id < 7001 || item_id > 10019) &&
-	    itemdb_isequip(item_id)) {
-		if (attribute < MIN_ATTRIBUTE || attribute > MAX_ATTRIBUTE)
-			attribute = ATTRIBUTE_NORMAL;
-		if (star < MIN_STAR || star > MAX_STAR)
-			star = 0;
-		memset(&tmp_item, 0, sizeof tmp_item);
-		tmp_item.nameid = item_id;
-		tmp_item.amount = 1;
-		tmp_item.identify = 1;
-		tmp_item.card[0] = 0x00ff;
-		tmp_item.card[1] = ((star * 5) << 8) + attribute;
-		*((unsigned long *)(&tmp_item.card[2])) = sd->char_id;
-		clif_produceeffect(sd, 0, item_id); // �����G�t�F�N�g�p�P�b�g
-		clif_misceffect(&sd->bl, 3); // ���l�ɂ�������ʒm
-		if ((flag = pc_additem(sd, &tmp_item, 1)))
-			clif_additem(sd, 0, 0, flag);
-	} else {
-		if (battle_config.error_log)
-			printf("@produce NOT WEAPON [%d]\n", item_id);
-		if (item_id != 0 && itemdb_exists(item_id))
-			sprintf(output, msg_table[169], item_id, item_data->name); // This item (%d: '%s') is not an equipment.
-		else
-			sprintf(output, msg_table[170]); // This item is not an equipment.
-		clif_displaymessage(fd, output);
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * Sub-function to display actual memo points
- *------------------------------------------
- */
-void atcommand_memo_sub(struct map_session_data* sd) {
-	int i;
-	char output[200];
-
-	memset(output, '\0', sizeof(output));
-
-	clif_displaymessage(sd->fd,  "Your actual memo positions are (except respawn point):");
-	for (i = MIN_PORTAL_MEMO; i <= MAX_PORTAL_MEMO; i++) {
-		if (sd->status.memo_point[i].map[0])
-			sprintf(output, "%d - %s (%d,%d)", i, sd->status.memo_point[i].map, sd->status.memo_point[i].x, sd->status.memo_point[i].y);
-		else
-			sprintf(output, msg_table[171], i); // %d - void
-		clif_displaymessage(sd->fd, output);
-	}
-
-	return;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_memo(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int position = 0;
-	char output[200];
-
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%d", &position) < 1)
-		atcommand_memo_sub(sd);
-	else {
-		if (position >= MIN_PORTAL_MEMO && position <= MAX_PORTAL_MEMO) {
-			if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-				clif_displaymessage(fd, "You are not authorised to memo this map.");
-				return -1;
-			}
-			if (sd->status.memo_point[position].map[0]) {
-				sprintf(output, msg_table[172], position, sd->status.memo_point[position].map, sd->status.memo_point[position].x, sd->status.memo_point[position].y); // You replace previous memo position %d - %s (%d,%d).
-				clif_displaymessage(fd, output);
-			}
-			memcpy(sd->status.memo_point[position].map, map[sd->bl.m].name, 24);
-			sd->status.memo_point[position].x = sd->bl.x;
-			sd->status.memo_point[position].y = sd->bl.y;
-			clif_skill_memo(sd, 0);
-			if (pc_checkskill(sd, AL_WARP) <= (position + 1))
-				clif_displaymessage(fd, msg_table[173]); // Note: you don't have the 'Warp' skill level to use it.
-			atcommand_memo_sub(sd);
-		} else {
-			sprintf(output, "Please, enter a valid position (usage: @memo <memo_position:%d-%d>).", MIN_PORTAL_MEMO, MAX_PORTAL_MEMO);
-			clif_displaymessage(fd, output);
-			atcommand_memo_sub(sd);
-			return -1;
-		}
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_gat(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char output[200];
-	int y;
-
-	memset(output, '\0', sizeof(output));
-
-	for (y = 2; y >= -2; y--) {
-		sprintf(output, "%s (x= %d, y= %d) %02X %02X %02X %02X %02X",
-		         map[sd->bl.m].name,   sd->bl.x - 2, sd->bl.y + y,
-		         map_getcell(sd->bl.m, sd->bl.x - 2, sd->bl.y + y),
-		         map_getcell(sd->bl.m, sd->bl.x - 1, sd->bl.y + y),
-		         map_getcell(sd->bl.m, sd->bl.x,     sd->bl.y + y),
-		         map_getcell(sd->bl.m, sd->bl.x + 1, sd->bl.y + y),
-		         map_getcell(sd->bl.m, sd->bl.x + 2, sd->bl.y + y));
-		clif_displaymessage(fd, output);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_packet(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int x = 0, y = 0;
-
-	if (!message || !*message || sscanf(message, "%d %d", &x, &y) < 2) {
-		clif_displaymessage(fd, "Please, enter a status type/flag (usage: @packet <status type> <flag>).");
-		return -1;
-	}
-
-	clif_status_change(&sd->bl, x, y);
-
-	return 0;
-}
-
-/*==========================================
- * @stpoint (Rewritten by [Yor])
- *------------------------------------------
- */
-int atcommand_statuspoint(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int point, new_status_point;
-
-	if (!message || !*message || (point = atoi(message)) == 0) {
-		clif_displaymessage(fd, "Please, enter a number (usage: @stpoint <number of points>).");
-		return -1;
-	}
-
-	new_status_point = (int)sd->status.status_point + point;
-	if (point > 0 && (point > 0x7FFF || new_status_point > 0x7FFF)) // fix positiv overflow
-		new_status_point = 0x7FFF;
-	else if (point < 0 && (point < -0x7FFF || new_status_point < 0)) // fix negativ overflow
-		new_status_point = 0;
-
-	if (new_status_point != (int)sd->status.status_point) {
-		sd->status.status_point = (short)new_status_point;
-		clif_updatestatus(sd, SP_STATUSPOINT);
-		clif_displaymessage(fd, msg_table[174]); // Number of status points changed!
-	} else {
-		if (point < 0)
-			clif_displaymessage(fd, msg_table[41]); // Impossible to decrease the number/value.
-		else
-			clif_displaymessage(fd, msg_table[149]); // Impossible to increase the number/value.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @skpoint (Rewritten by [Yor])
- *------------------------------------------
- */
-int atcommand_skillpoint(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int point, new_skill_point;
-
-	if (!message || !*message || (point = atoi(message)) == 0) {
-		clif_displaymessage(fd, "Please, enter a number (usage: @skpoint <number of points>).");
-		return -1;
-	}
-
-	new_skill_point = (int)sd->status.skill_point + point;
-	if (point > 0 && (point > 0x7FFF || new_skill_point > 0x7FFF)) // fix positiv overflow
-		new_skill_point = 0x7FFF;
-	else if (point < 0 && (point < -0x7FFF || new_skill_point < 0)) // fix negativ overflow
-		new_skill_point = 0;
-
-	if (new_skill_point != (int)sd->status.skill_point) {
-		sd->status.skill_point = (short)new_skill_point;
-		clif_updatestatus(sd, SP_SKILLPOINT);
-		clif_displaymessage(fd, msg_table[175]); // Number of skill points changed!
-	} else {
-		if (point < 0)
-			clif_displaymessage(fd, msg_table[41]); // Impossible to decrease the number/value.
-		else
-			clif_displaymessage(fd, msg_table[149]); // Impossible to increase the number/value.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @zeny (Rewritten by [Yor])
- *------------------------------------------
- */
-int atcommand_zeny(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int zeny, new_zeny;
-
-	if (!message || !*message || (zeny = atoi(message)) == 0) {
-		clif_displaymessage(fd, "Please, enter an amount (usage: @zeny <amount>).");
-		return -1;
-	}
-
-	new_zeny = sd->status.zeny + zeny;
-	if (zeny > 0 && (zeny > MAX_ZENY || new_zeny > MAX_ZENY)) // fix positiv overflow
-		new_zeny = MAX_ZENY;
-	else if (zeny < 0 && (zeny < -MAX_ZENY || new_zeny < 0)) // fix negativ overflow
-		new_zeny = 0;
-
-	if (new_zeny != sd->status.zeny) {
-		sd->status.zeny = new_zeny;
-		clif_updatestatus(sd, SP_ZENY);
-		clif_displaymessage(fd, msg_table[176]); // Number of zenys changed!
-	} else {
-		if (zeny < 0)
-			clif_displaymessage(fd, msg_table[41]); // Impossible to decrease the number/value.
-		else
-			clif_displaymessage(fd, msg_table[149]); // Impossible to increase the number/value.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_param(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int i, index, value = 0, new_value;
-	const char* param[] = { "@str", "@agi", "@vit", "@int", "@dex", "@luk", NULL };
-	short* status[] = {
-		&sd->status.str,  &sd->status.agi, &sd->status.vit,
-		&sd->status.int_, &sd->status.dex, &sd->status.luk
-	};
-	char output[200];
-
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%d", &value) < 1 || value == 0) {
-		sprintf(output, "Please, enter a valid value (usage: @str,@agi,@vit,@int,@dex,@luk <+/-adjustement>).");
-		clif_displaymessage(fd, output);
-		return -1;
-	}
-
-	index = -1;
-	for (i = 0; param[i] != NULL; i++) {
-		if (strcmpi(command, param[i]) == 0) {
-			index = i;
-			break;
-		}
-	}
-	if (index < 0 || index > MAX_STATUS_TYPE) { // normaly impossible...
-		sprintf(output, "Please, enter a valid value (usage: @str,@agi,@vit,@int,@dex,@luk <+/-adjustement>).");
-		clif_displaymessage(fd, output);
-		return -1;
-	}
-
-	new_value = (int)*status[index] + value;
-	if (value > 0 && (value > battle_config.max_parameter || new_value > battle_config.max_parameter)) // fix positiv overflow
-		new_value = battle_config.max_parameter;
-	else if (value < 0 && (value < -battle_config.max_parameter || new_value < 1)) // fix negativ overflow
-		new_value = 1;
-
-	if (new_value != (int)*status[index]) {
-		*status[index] = new_value;
-		clif_updatestatus(sd, SP_STR + index);
-		clif_updatestatus(sd, SP_USTR + index);
-		pc_calcstatus(sd, 0);
-		clif_displaymessage(fd, msg_table[42]); // Stat changed.
-	} else {
-		if (value < 0)
-			clif_displaymessage(fd, msg_table[41]); // Impossible to decrease the number/value.
-		else
-			clif_displaymessage(fd, msg_table[149]); // Impossible to increase the number/value.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-//** Stat all by fritz (rewritten by [Yor])
-int atcommand_stat_all(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int index, count, value = 0, new_value;
-	short* status[] = {
-		&sd->status.str,  &sd->status.agi, &sd->status.vit,
-		&sd->status.int_, &sd->status.dex, &sd->status.luk
-	};
-
-	if (!message || !*message || sscanf(message, "%d", &value) < 1 || value == 0)
-		value = battle_config.max_parameter;
-
-	count = 0;
-	for (index = 0; index < (int)(sizeof(status) / sizeof(status[0])); index++) {
-
-		new_value = (int)*status[index] + value;
-		if (value > 0 && (value > battle_config.max_parameter || new_value > battle_config.max_parameter)) // fix positiv overflow
-			new_value = battle_config.max_parameter;
-		else if (value < 0 && (value < -battle_config.max_parameter || new_value < 1)) // fix negativ overflow
-			new_value = 1;
-
-		if (new_value != (int)*status[index]) {
-			*status[index] = new_value;
-			clif_updatestatus(sd, SP_STR + index);
-			clif_updatestatus(sd, SP_USTR + index);
-			pc_calcstatus(sd, 0);
-			count++;
-		}
-	}
-
-	if (count > 0) // if at least 1 stat modified
-		clif_displaymessage(fd, msg_table[84]); // All stats changed!
-	else {
-		if (value < 0)
-			clif_displaymessage(fd, msg_table[177]); // Impossible to decrease a stat.
-		else
-			clif_displaymessage(fd, msg_table[178]); // Impossible to increase a stat.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_guildlevelup(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int level = 0;
-	short added_level;
-	struct guild *guild_info;
-
-	if (!message || !*message || sscanf(message, "%d", &level) < 1 || level == 0) {
-		clif_displaymessage(fd, "Please, enter a valid level (usage: @guildlvup/@guildlvlup <# of levels>).");
-		return -1;
-	}
-
-	if (sd->status.guild_id <= 0 || (guild_info = guild_search(sd->status.guild_id)) == NULL) {
-		clif_displaymessage(fd, msg_table[43]); // You're not in a guild.
-		return -1;
-	}
-	if (strcmp(sd->status.name, guild_info->master) != 0) {
-		clif_displaymessage(fd, msg_table[44]); // You're not the master of your guild.
-		return -1;
-	}
-
-	added_level = (short)level;
-	if (level > 0 && (level > MAX_GUILDLEVEL || added_level > ((short)MAX_GUILDLEVEL - guild_info->guild_lv))) // fix positiv overflow
-		added_level = (short)MAX_GUILDLEVEL - guild_info->guild_lv;
-	else if (level < 0 && (level < -MAX_GUILDLEVEL || added_level < (1 - guild_info->guild_lv))) // fix negativ overflow
-		added_level = 1 - guild_info->guild_lv;
-
-	if (added_level != 0) {
-		intif_guild_change_basicinfo(guild_info->guild_id, GBI_GUILDLV, &added_level, 2);
-		clif_displaymessage(fd, msg_table[179]); // Guild level changed.
-	} else {
-		clif_displaymessage(fd, msg_table[45]); // Guild level change failed.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_makeegg(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct item_data *item_data;
-	int id, pet_id;
-
-	if (!message || !*message) {
-		clif_displaymessage(fd, "Please, enter a monter/egg name/id (usage: @makeegg <pet_id>).");
-		return -1;
-	}
-
-	if ((item_data = itemdb_searchname(message)) != NULL) // for egg name
-		id = item_data->nameid;
-	else if ((id = mobdb_searchname(message)) == 0) // for monster name
-		id = atoi(message);
-
-	pet_id = search_petDB_index(id, PET_CLASS);
-	if (pet_id < 0)
-		pet_id = 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, pet_db[pet_id].intimate,
-			100, 0, 1, pet_db[pet_id].jname);
-	} else {
-		clif_displaymessage(fd, msg_table[180]); // The monter/egg name/id doesn't exist.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_hatch(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	if (sd->status.pet_id <= 0)
-		clif_sendegg(sd);
-	else {
-		clif_displaymessage(fd, msg_table[181]); // You already have a pet.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_petfriendly(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int friendly;
-	int t;
-
-	if (!message || !*message || (friendly = atoi(message)) < 0) {
-		clif_displaymessage(fd, "Please, enter a valid value (usage: @petfriendly <0-1000>).");
-		return -1;
-	}
-
-	if (sd->status.pet_id > 0 && sd->pd) {
-		if (friendly >= 0 && friendly <= 1000) {
-			if (friendly != sd->pet.intimate) {
-				t = sd->pet.intimate;
-				sd->pet.intimate = friendly;
-				clif_send_petstatus(sd);
-				if (battle_config.pet_status_support) {
-					if ((sd->pet.intimate > 0 && t <= 0) ||
-					    (sd->pet.intimate <= 0 && t > 0)) {
-						if (sd->bl.prev != NULL)
-							pc_calcstatus(sd, 0);
-						else
-							pc_calcstatus(sd, 2);
-					}
-				}
-				clif_displaymessage(fd, msg_table[182]); // Pet friendly value changed!
-			} else {
-				clif_displaymessage(fd, msg_table[183]); // Pet friendly is already the good value.
-				return -1;
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[37]); // An invalid number was specified.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[184]); // Sorry, but you have no pet.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_pethungry(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int hungry;
-
-	if (!message || !*message || (hungry = atoi(message)) < 0) {
-		clif_displaymessage(fd, "Please, enter a valid number (usage: @pethungry <0-100>).");
-		return -1;
-	}
-
-	if (sd->status.pet_id > 0 && sd->pd) {
-		if (hungry >= 0 && hungry <= 100) {
-			if (hungry != sd->pet.hungry) {
-				sd->pet.hungry = hungry;
-				clif_send_petstatus(sd);
-				clif_displaymessage(fd, msg_table[185]); // Pet hungry value changed!
-			} else {
-				clif_displaymessage(fd, msg_table[186]); // Pet hungry is already the good value.
-				return -1;
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[37]); // An invalid number was specified.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[184]); // Sorry, but you have no pet.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_petrename(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	if (sd->status.pet_id > 0 && sd->pd) {
-		if (sd->pet.rename_flag != 0) {
-			sd->pet.rename_flag = 0;
-			intif_save_petdata(sd->status.account_id, &sd->pet);
-			clif_send_petstatus(sd);
-			clif_displaymessage(fd, msg_table[187]); // You can now rename your pet.
-		} else {
-			clif_displaymessage(fd, msg_table[188]); // You can already rename your pet.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[184]); // Sorry, but you have no pet.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_charpetrename(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	struct map_session_data *pl_sd;
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @charpetrename <char name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pl_sd->status.pet_id > 0 && pl_sd->pd) {
-			if (pl_sd->pet.rename_flag != 0) {
-				pl_sd->pet.rename_flag = 0;
-				intif_save_petdata(pl_sd->status.account_id, &pl_sd->pet);
-				clif_send_petstatus(pl_sd);
-				clif_displaymessage(fd, msg_table[189]); // This player can now rename his/her pet.
-			} else {
-				clif_displaymessage(fd, msg_table[190]); // This player can already rename his/her pet.
-				return -1;
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[191]); // Sorry, but this player has no pet.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_recall(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	char output[200];
-	struct map_session_data *pl_sd;
-
-	memset(character, '\0', sizeof(character));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @recall <char name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can recall only lower or same level
-			if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-				clif_displaymessage(fd, "You are not authorised to warp somenone to your actual map.");
-				return -1;
-			}
-			if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-				clif_displaymessage(fd, "You are not authorised to warp this player from its actual map.");
-				return -1;
-			}
-			pc_setpos(pl_sd, sd->mapname, sd->bl.x, sd->bl.y, 2);
-			sprintf(output, msg_table[46], character); // %s recalled!
-			clif_displaymessage(fd, output);
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �ΏۃL�����N�^�[��]�E������ upper�w��œ]����{�q���”\
- *------------------------------------------
- */
-int atcommand_character_job(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	struct map_session_data* pl_sd;
-	int job = 0, upper = -1;
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message) {
-		clif_displaymessage(fd, "Please, enter a job and a player name (usage: @charjob/@charjobchange <job ID> <char name>).");
-		return -1;
-	}
-
-	if (sscanf(message, "%d %d %99[^\n]", &job, &upper, character) < 3) { //upper�w�肵�Ă���
-		upper = -1;
-		if (sscanf(message, "%d %99[^\n]", &job, character) < 2) { //upper�w�肵�ĂȂ���ɉ�������Ȃ�
-			clif_displaymessage(fd, "Please, enter a job and a player name (usage: @charjob/@charjobchange <job ID> <char name>).");
-			return -1;
-		}
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can change job only to lower or same level
-			if ((job >= 0 && job < MAX_PC_CLASS)) {
-
-				// fix pecopeco display
-				if ((job != 13 && job != 21 && job != 4014 && job != 4022)) {
-					if (pc_isriding(sd)) {
-						if (pl_sd->status.class == 13)
-							pl_sd->status.class = pl_sd->view_class = 7;
-						if (pl_sd->status.class == 21)
-							pl_sd->status.class = pl_sd->view_class = 14;
-						if (pl_sd->status.class == 4014)
-							pl_sd->status.class = pl_sd->view_class = 4008;
-						if (pl_sd->status.class == 4022)
-							pl_sd->status.class = pl_sd->view_class = 4015;
-						pl_sd->status.option &= ~0x0020;
-						clif_changeoption(&pl_sd->bl);
-						pc_calcstatus(pl_sd, 0);
-					}
-				} else {
-					if (!pc_isriding(sd)) {
-						if (job == 13)
-							job = 7;
-						if (job == 21)
-							job = 14;
-						if (job == 4014)
-							job = 4008;
-						if (job == 4022)
-							job = 4015;
-					}
-				}
-
-				if (pc_jobchange(pl_sd, job, upper) == 0)
-					clif_displaymessage(fd, msg_table[48]); // Character's job changed.
-				else {
-					clif_displaymessage(fd, msg_table[192]); // Impossible to change the character's job.
-					return -1;
-				}
-			} else {
-				clif_displaymessage(fd, msg_table[49]); // Invalid job ID.
-				return -1;
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_revive(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	struct map_session_data *pl_sd;
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @revive <char name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		pl_sd->status.hp = pl_sd->status.max_hp;
-		pc_setstand(pl_sd);
-		if (battle_config.pc_invincible_time > 0)
-			pc_setinvincibletimer(sd, battle_config.pc_invincible_time);
-		clif_updatestatus(pl_sd, SP_HP);
-		clif_updatestatus(pl_sd, SP_SP);
-		clif_resurrection(&pl_sd->bl, 1);
-		clif_displaymessage(fd, msg_table[51]); // Character revived.
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_character_stats(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	char job_jobname[100];
-	char output[200];
-	struct map_session_data *pl_sd;
-	int i;
-
-	memset(character, '\0', sizeof(character));
-	memset(job_jobname, '\0', sizeof(job_jobname));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @charstats <char name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		struct {
-			const char* format;
-			int value;
-		} output_table[] = {
-			{ "Base Level - %d", pl_sd->status.base_level },
-			{ job_jobname, pl_sd->status.job_level },
-			{ "Hp - %d",    pl_sd->status.hp },
-			{ "MaxHp - %d", pl_sd->status.max_hp },
-			{ "Sp - %d",    pl_sd->status.sp },
-			{ "MaxSp - %d", pl_sd->status.max_sp },
-			{ "Str - %3d",  pl_sd->status.str },
-			{ "Agi - %3d",  pl_sd->status.agi },
-			{ "Vit - %3d",  pl_sd->status.vit },
-			{ "Int - %3d",  pl_sd->status.int_ },
-			{ "Dex - %3d",  pl_sd->status.dex },
-			{ "Luk - %3d",  pl_sd->status.luk },
-			{ "Zeny - %d",  pl_sd->status.zeny },
-			{ NULL, 0 }
-		};
-		sprintf(job_jobname, "Job - %s %s", job_name(pl_sd->status.class), "(level %d)");
-		sprintf(output, msg_table[53], pl_sd->status.name); // '%s' stats:
-		clif_displaymessage(fd, output);
-		for (i = 0; output_table[i].format != NULL; i++) {
-			sprintf(output, output_table[i].format, output_table[i].value);
-			clif_displaymessage(fd, output);
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-//** Character Stats All by fritz
-int atcommand_character_stats_all(const int fd, struct map_session_data* sd, const char* command, const char* message)
-{
-	char output[1024], gmlevel[1024];
-	int i;
-	int count;
-	struct map_session_data *pl_sd;
-
-	memset(output, '\0', sizeof(output));
-	memset(gmlevel, '\0', sizeof(gmlevel));
-
-	count = 0;
-	for(i = 0; i < fd_max; i++) {
-		if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) {
-
-			if (pc_isGM(pl_sd) > 0)
-				sprintf(gmlevel, "| GM Lvl: %d", pc_isGM(pl_sd));
-			else
-				sprintf(gmlevel, " ");
-
-			sprintf(output, "Name: %s | BLvl: %d | Job: %s (Lvl: %d) | HP: %d/%d | SP: %d/%d", pl_sd->status.name, pl_sd->status.base_level, job_name(pl_sd->status.class), pl_sd->status.job_level, pl_sd->status.hp, pl_sd->status.max_hp, pl_sd->status.sp, pl_sd->status.max_sp);
-			clif_displaymessage(fd, output);
-			sprintf(output, "STR: %d | AGI: %d | VIT: %d | INT: %d | DEX: %d | LUK: %d | Zeny: %d %s", pl_sd->status.str, pl_sd->status.agi, pl_sd->status.vit, pl_sd->status.int_, pl_sd->status.dex, pl_sd->status.luk, pl_sd->status.zeny, gmlevel);
-			clif_displaymessage(fd, output);
-			clif_displaymessage(fd, "--------");
-			count++;
-		}
-	}
-
-	if (count == 0)
-		clif_displaymessage(fd, msg_table[28]); // No player found.
-	else if (count == 1)
-		clif_displaymessage(fd, msg_table[29]); // 1 player found.
-	else {
-		sprintf(output, msg_table[30], count); // %d players found.
-		clif_displaymessage(fd, output);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_character_option(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	int opt1 = 0, opt2 = 0, opt3 = 0;
-	struct map_session_data* pl_sd;
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%d %d %d %99[^\n]", &opt1, &opt2, &opt3, character) < 4 || opt1 < 0 || opt2 < 0 || opt3 < 0) {
-		clif_displaymessage(fd, "Please, enter valid options and a player name (usage: @charoption <param1> <param2> <param3> <charname>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can change option only to lower or same level
-			pl_sd->opt1 = opt1;
-			pl_sd->opt2 = opt2;
-			pl_sd->status.option = opt3;
-			// fix pecopeco display
-			if (pl_sd->status.class == 13 || pl_sd->status.class == 21 || pl_sd->status.class == 4014 || pl_sd->status.class == 4022) {
-				if (!pc_isriding(pl_sd)) { // pl_sd have the new value...
-					if (pl_sd->status.class == 13)
-						pl_sd->status.class = pl_sd->view_class = 7;
-					else if (pl_sd->status.class == 21)
-						pl_sd->status.class = pl_sd->view_class = 14;
-					else if (pl_sd->status.class == 4014)
-						pl_sd->status.class = pl_sd->view_class = 4008;
-					else if (pl_sd->status.class == 4022)
-						pl_sd->status.class = pl_sd->view_class = 4015;
-				}
-			} else {
-				if (pc_isriding(pl_sd)) { // pl_sd have the new value...
-					if (pl_sd->disguise > 0) { // temporary prevention of crash caused by peco + disguise, will look into a better solution [Valaris] (code added by [Yor])
-						pl_sd->status.option &= ~0x0020;
-					} else {
-						if (pl_sd->status.class == 7)
-							pl_sd->status.class = pl_sd->view_class = 13;
-						else if (pl_sd->status.class == 14)
-							pl_sd->status.class = pl_sd->view_class = 21;
-						else if (pl_sd->status.class == 4008)
-							pl_sd->status.class = pl_sd->view_class = 4014;
-						else if (pl_sd->status.class == 4015)
-							pl_sd->status.class = pl_sd->view_class = 4022;
-						else
-							pl_sd->status.option &= ~0x0020;
-					}
-				}
-			}
-			clif_changeoption(&pl_sd->bl);
-			pc_calcstatus(pl_sd, 0);
-			clif_displaymessage(fd, msg_table[58]); // Character's options changed.
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * charchangesex command (usage: charchangesex <player_name>)
- *------------------------------------------
- */
-int atcommand_char_change_sex(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @charchangesex <name>).");
-		return -1;
-	}
-
-	// check player name
-	if (strlen(character) < 4) {
-		clif_displaymessage(fd, msg_table[86]); // Sorry, but a player name have at least 4 characters.
-		return -1;
-	} else if (strlen(character) > 23) {
-		clif_displaymessage(fd, msg_table[87]); // Sorry, but a player name have 23 characters maximum.
-		return -1;
-	} else {
-		chrif_char_ask_name(sd->status.account_id, character, 5, 0, 0, 0, 0, 0, 0); // type: 5 - changesex
-		clif_displaymessage(fd, msg_table[88]); // Character name sends to char-server to ask it.
-	}
-
-	return 0;
-}
-
-/*==========================================
- * charblock command (usage: charblock <player_name>)
- * This command do a definitiv ban on a player
- *------------------------------------------
- */
-int atcommand_char_block(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @charblock/@block <name>).");
-		return -1;
-	}
-
-	// check player name
-	if (strlen(character) < 4) {
-		clif_displaymessage(fd, msg_table[86]); // Sorry, but a player name have at least 4 characters.
-		return -1;
-	} else if (strlen(character) > 23) {
-		clif_displaymessage(fd, msg_table[87]); // Sorry, but a player name have 23 characters maximum.
-		return -1;
-	} else {
-		chrif_char_ask_name(sd->status.account_id, character, 1, 0, 0, 0, 0, 0, 0); // type: 1 - block
-		clif_displaymessage(fd, msg_table[88]); // Character name sends to char-server to ask it.
-	}
-
-	return 0;
-}
-
-/*==========================================
- * charban command (usage: charban <time> <player_name>)
- * This command do a limited ban on a player
- * Time is done as follows:
- *   Adjustment value (-1, 1, +1, etc...)
- *   Modified element:
- *     a or y: year
- *     m:  month
- *     j or d: day
- *     h:  hour
- *     mn: minute
- *     s:  second
- * <example> @ban +1m-2mn1s-6y test_player
- *           this example adds 1 month and 1 second, and substracts 2 minutes and 6 years at the same time.
- *------------------------------------------
- */
-int atcommand_char_ban(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char modif[100], character[100];
-	char * modif_p;
-	int year, month, day, hour, minute, second, value;
-
-	memset(modif, '\0', sizeof(modif));
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%s %99[^\n]", modif, character) < 2) {
-		clif_displaymessage(fd, "Please, enter ban time and a player name (usage: @charban/@ban/@banish/@charbanish <time> <name>).");
-		return -1;
-	}
-
-	modif[sizeof(modif)-1] = '\0';
-	character[sizeof(character)-1] = '\0';
-
-	modif_p = modif;
-	year = month = day = hour = minute = second = 0;
-	while (modif_p[0] != '\0') {
-		value = atoi(modif_p);
-		if (value == 0)
-			modif_p++;
-		else {
-			if (modif_p[0] == '-' || modif_p[0] == '+')
-				modif_p++;
-			while (modif_p[0] >= '0' && modif_p[0] <= '9')
-				modif_p++;
-			if (modif_p[0] == 's') {
-				second = value;
-				modif_p++;
-			} else if (modif_p[0] == 'm' && modif_p[1] == 'n') {
-				minute = value;
-				modif_p = modif_p + 2;
-			} else if (modif_p[0] == 'h') {
-				hour = value;
-				modif_p++;
-			} else if (modif_p[0] == 'd' || modif_p[0] == 'j') {
-				day = value;
-				modif_p++;
-			} else if (modif_p[0] == 'm') {
-				month = value;
-				modif_p++;
-			} else if (modif_p[0] == 'y' || modif_p[0] == 'a') {
-				year = value;
-				modif_p++;
-			} else if (modif_p[0] != '\0') {
-				modif_p++;
-			}
-		}
-	}
-	if (year == 0 && month == 0 && day == 0 && hour == 0 && minute == 0 && second == 0) {
-		clif_displaymessage(fd, msg_table[85]); // Invalid time for ban command.
-		return -1;
-	}
-
-	// check player name
-	if (strlen(character) < 4) {
-		clif_displaymessage(fd, msg_table[86]); // Sorry, but a player name have at least 4 characters.
-		return -1;
-	} else if (strlen(character) > 23) {
-		clif_displaymessage(fd, msg_table[87]); // Sorry, but a player name have 23 characters maximum.
-		return -1;
-	} else {
-		chrif_char_ask_name(sd->status.account_id, character, 2, year, month, day, hour, minute, second); // type: 2 - ban
-		clif_displaymessage(fd, msg_table[88]); // Character name sends to char-server to ask it.
-	}
-
-	return 0;
-}
-
-/*==========================================
- * charunblock command (usage: charunblock <player_name>)
- *------------------------------------------
- */
-int atcommand_char_unblock(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @charunblock <player_name>).");
-		return -1;
-	}
-
-	// check player name
-	if (strlen(character) < 4) {
-		clif_displaymessage(fd, msg_table[86]); // Sorry, but a player name have at least 4 characters.
-		return -1;
-	} else if (strlen(character) > 23) {
-		clif_displaymessage(fd, msg_table[87]); // Sorry, but a player name have 23 characters maximum.
-		return -1;
-	} else {
-		// send answer to login server via char-server
-		chrif_char_ask_name(sd->status.account_id, character, 3, 0, 0, 0, 0, 0, 0); // type: 3 - unblock
-		clif_displaymessage(fd, msg_table[88]); // Character name sends to char-server to ask it.
-	}
-
-	return 0;
-}
-
-/*==========================================
- * charunban command (usage: charunban <player_name>)
- *------------------------------------------
- */
-int atcommand_char_unban(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @charunban <player_name>).");
-		return -1;
-	}
-
-	// check player name
-	if (strlen(character) < 4) {
-		clif_displaymessage(fd, msg_table[86]); // Sorry, but a player name have at least 4 characters.
-		return -1;
-	} else if (strlen(character) > 23) {
-		clif_displaymessage(fd, msg_table[87]); // Sorry, but a player name have 23 characters maximum.
-		return -1;
-	} else {
-		// send answer to login server via char-server
-		chrif_char_ask_name(sd->status.account_id, character, 4, 0, 0, 0, 0, 0, 0); // type: 4 - unban
-		clif_displaymessage(fd, msg_table[88]); // Character name sends to char-server to ask it.
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_character_save(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char map_name[100];
-	char character[100];
-	struct map_session_data* pl_sd;
-	int x = 0, y = 0;
-	int m;
-
-	memset(map_name, '\0', sizeof(map_name));
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%99s %d %d %99[^\n]", map_name, &x, &y, character) < 4 || x < 0 || y < 0) {
-		clif_displaymessage(fd, "Please, enter a valid save point and a player name (usage: @charsave <map> <x> <y> <charname>).");
-		return -1;
-	}
-
-	if (strstr(map_name, ".gat") == NULL && strstr(map_name, ".afm") == NULL && strlen(map_name) < 13) // 16 - 4 (.gat)
-		strcat(map_name, ".gat");
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can change save point only to lower or same gm level
-			m = map_mapname2mapid(map_name);
-			if (m < 0) {
-				clif_displaymessage(fd, msg_table[1]); // Map not found.
-				return -1;
-			} else {
-				if (m >= 0 && map[m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-					clif_displaymessage(fd, "You are not authorised to set this map as a save map.");
-					return -1;
-				}
-				pc_setsavepoint(pl_sd, map_name, x, y);
-				clif_displaymessage(fd, msg_table[57]); // Character's respawn point changed.
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_night(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	int i;
-
-	if (night_flag != 1) {
-		night_flag = 1; // 0=day, 1=night [Yor]
-		for(i = 0; i < fd_max; i++) {
-			if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) {
-				pl_sd->opt2 |= STATE_BLIND;
-				clif_changeoption(&pl_sd->bl);
-				clif_displaymessage(pl_sd->fd, msg_table[59]); // Night has fallen.
-			}
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[89]); // Sorry, it's already the night. Impossible to execute the command.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_day(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	int i;
-
-	if (night_flag != 0) {
-		night_flag = 0; // 0=day, 1=night [Yor]
-		for(i = 0; i < fd_max; i++) {
-			if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) {
-				pl_sd->opt2 &= ~STATE_BLIND;
-				clif_changeoption(&pl_sd->bl);
-				clif_displaymessage(pl_sd->fd, msg_table[60]); // Day has arrived.
-			}
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[90]); // Sorry, it's already the day. Impossible to execute the command.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_doom(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	int i;
-
-	for(i = 0; i < fd_max; i++) {
-		if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth && i != fd &&
-		    pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can doom only lower or same gm level
-			pc_damage(NULL, pl_sd, pl_sd->status.hp + 1);
-			clif_displaymessage(pl_sd->fd, msg_table[61]); // The holy messenger has given judgement.
-		}
-	}
-	clif_displaymessage(fd, msg_table[62]); // Judgement was made.
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_doommap(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	int i;
-
-	for (i = 0; i < fd_max; i++) {
-		if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth && i != fd && sd->bl.m == pl_sd->bl.m &&
-		    pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can doom only lower or same gm level
-			pc_damage(NULL, pl_sd, pl_sd->status.hp + 1);
-			clif_displaymessage(pl_sd->fd, msg_table[61]); // The holy messenger has given judgement.
-		}
-	}
-	clif_displaymessage(fd, msg_table[62]); // Judgement was made.
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-static void atcommand_raise_sub(struct map_session_data* sd)
-{
-	if (sd && sd->state.auth && pc_isdead(sd)) {
-		sd->status.hp = sd->status.max_hp;
-		sd->status.sp = sd->status.max_sp;
-		pc_setstand(sd);
-		clif_updatestatus(sd, SP_HP);
-		clif_updatestatus(sd, SP_SP);
-		clif_resurrection(&sd->bl, 1);
-		clif_displaymessage(sd->fd, msg_table[63]); // Mercy has been shown.
-	}
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_raise(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int i;
-
-	for (i = 0; i < fd_max; i++) {
-		if (session[i])
-			atcommand_raise_sub(session[i]->session_data);
-	}
-	clif_displaymessage(fd, msg_table[64]); // Mercy has been granted.
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_raisemap(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	int i;
-
-	for (i = 0; i < fd_max; i++) {
-		if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth && sd->bl.m == pl_sd->bl.m)
-			atcommand_raise_sub(pl_sd);
-	}
-	clif_displaymessage(fd, msg_table[64]); // Mercy has been granted.
-
-	return 0;
-}
-
-/*==========================================
- * atcommand_character_baselevel @charbaselvl�őΏۃL�����̃��x�����グ��
- *------------------------------------------
-*/
-int atcommand_character_baselevel(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	char character[100];
-	int level = 0, i;
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%d %99[^\n]", &level, character) < 2 || level == 0) {
-		clif_displaymessage(fd, "Please, enter a level adjustement and a player name (usage: @charbaselvl <#> <nickname>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can change base level only lower or same gm level
-
-			if (level > 0) {
-				if (pl_sd->status.base_level == battle_config.maximum_level) {	// check for max level by Valaris
-					clif_displaymessage(fd, msg_table[91]); // Character's base level can't go any higher.
-					return 0;
-				}	// End Addition
-				if (level > battle_config.maximum_level || level > (battle_config.maximum_level - pl_sd->status.base_level)) // fix positiv overflow
-					level = battle_config.maximum_level - pl_sd->status.base_level;
-				for (i = 1; i <= level; i++)
-					pl_sd->status.status_point += (pl_sd->status.base_level + i + 14) / 5;
-				pl_sd->status.base_level += level;
-				clif_updatestatus(pl_sd, SP_BASELEVEL);
-				clif_updatestatus(pl_sd, SP_NEXTBASEEXP);
-				clif_updatestatus(pl_sd, SP_STATUSPOINT);
-				pc_calcstatus(pl_sd, 0);
-				pc_heal(pl_sd, pl_sd->status.max_hp, pl_sd->status.max_sp);
-				clif_misceffect(&pl_sd->bl, 0);
-				clif_displaymessage(fd, msg_table[65]); // Character's base level raised.
-			} else {
-				if (pl_sd->status.base_level == 1) {
-					clif_displaymessage(fd, msg_table[193]); // Character's base level can't go any lower.
-					return -1;
-				}
-				if (level < -battle_config.maximum_level || level < (1 - pl_sd->status.base_level)) // fix negativ overflow
-					level = 1 - pl_sd->status.base_level;
-				if (pl_sd->status.status_point > 0) {
-					for (i = 0; i > level; i--)
-						pl_sd->status.status_point -= (pl_sd->status.base_level + i + 14) / 5;
-					if (pl_sd->status.status_point < 0)
-						pl_sd->status.status_point = 0;
-					clif_updatestatus(pl_sd, SP_STATUSPOINT);
-				} // to add: remove status points from stats
-				pl_sd->status.base_level += level;
-				clif_updatestatus(pl_sd, SP_BASELEVEL);
-				clif_updatestatus(pl_sd, SP_NEXTBASEEXP);
-				pc_calcstatus(pl_sd, 0);
-				clif_displaymessage(fd, msg_table[66]); // Character's base level lowered.
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0; //����I��
-}
-
-/*==========================================
- * atcommand_character_joblevel @charjoblvl�őΏۃL������Job���x�����グ��
- *------------------------------------------
- */
-int atcommand_character_joblevel(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	char character[100];
-	int max_level = 50, level = 0;
-	//�]����{�q�̏ꍇ�̌��̐E�Ƃ��Z�o����
-	struct pc_base_job pl_s_class;
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%d %99[^\n]", &level, character) < 2 || level == 0) {
-		clif_displaymessage(fd, "Please, enter a level adjustement and a player name (usage: @charjlvl <#> <nickname>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		pl_s_class = pc_calc_base_job(pl_sd->status.class);
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can change job level only lower or same gm level
-			if (pl_s_class.job == 0)
-				max_level -= 40;
-			if ((pl_s_class.job == 23) || (pl_s_class.upper == 1 && pl_s_class.type == 2)) //�X�p�m�r�Ɠ]���E��Job���x���̍ō���70
-				max_level += 20;
-
-			if (level > 0) {
-				if (pl_sd->status.job_level == max_level) {
-					clif_displaymessage(fd, msg_table[67]); // Character's job level can't go any higher.
-					return -1;
-				}
-				if (pl_sd->status.job_level + level > max_level)
-					level = max_level - pl_sd->status.job_level;
-				pl_sd->status.job_level += level;
-				clif_updatestatus(pl_sd, SP_JOBLEVEL);
-				clif_updatestatus(pl_sd, SP_NEXTJOBEXP);
-				pl_sd->status.skill_point += level;
-				clif_updatestatus(pl_sd, SP_SKILLPOINT);
-				pc_calcstatus(pl_sd, 0);
-				clif_misceffect(&pl_sd->bl, 1);
-				clif_displaymessage(fd, msg_table[68]); // character's job level raised.
-			} else {
-				if (pl_sd->status.job_level == 1) {
-					clif_displaymessage(fd, msg_table[194]); // Character's job level can't go any lower.
-					return -1;
-				}
-				if (pl_sd->status.job_level + level < 1)
-					level = 1 - pl_sd->status.job_level;
-				pl_sd->status.job_level += level;
-				clif_updatestatus(pl_sd, SP_JOBLEVEL);
-				clif_updatestatus(pl_sd, SP_NEXTJOBEXP);
-				if (pl_sd->status.skill_point > 0) {
-					pl_sd->status.skill_point += level;
-					if (pl_sd->status.skill_point < 0)
-						pl_sd->status.skill_point = 0;
-					clif_updatestatus(pl_sd, SP_SKILLPOINT);
-				} // to add: remove status points from skills
-				pc_calcstatus(pl_sd, 0);
-				clif_displaymessage(fd, msg_table[69]); // Character's job level lowered.
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_kick(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	char character[100];
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @kick <charname>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) // you can kick only lower or same gm level
-			clif_GM_kick(sd, pl_sd, 1);
-		else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_kickall(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	int i;
-
-	for (i = 0; i < fd_max; i++) {
-		if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth &&
-		    pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can kick only lower or same gm level
-			if (sd->status.account_id != pl_sd->status.account_id)
-				clif_GM_kick(sd, pl_sd, 0);
-			}
-		}
-
-	clif_displaymessage(fd, msg_table[195]); // All players have been kicked!
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_allskill(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	pc_allskillup(sd); // all skills
-	sd->status.skill_point = 0; // 0 skill points
-	clif_updatestatus(sd, SP_SKILLPOINT); // update
-	clif_displaymessage(fd, msg_table[76]); // You have received all skills.
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_questskill(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int skill_id;
-
-	if (!message || !*message || (skill_id = atoi(message)) < 0) {
-		clif_displaymessage(fd, "Please, enter a quest skill number (usage: @questskill <#:0+>).");
-		return -1;
-	}
-
-	if (skill_id >= 0 && skill_id < MAX_SKILL_DB) {
-		if (skill_get_inf2(skill_id) & 0x01) {
-			if (pc_checkskill(sd, skill_id) == 0) {
-				pc_skill(sd, skill_id, 1, 0);
-				clif_displaymessage(fd, msg_table[70]); // You have learned the skill.
-			} else {
-				clif_displaymessage(fd, msg_table[196]); // You already have this quest skill.
-				return -1;
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[197]); // This skill number doesn't exist or isn't a quest skill.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[198]); // This skill number doesn't exist.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_charquestskill(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	struct map_session_data *pl_sd;
-	int skill_id = 0;
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%d %99[^\n]", &skill_id, character) < 2 || skill_id < 0) {
-		clif_displaymessage(fd, "Please, enter a quest skill number and a player name (usage: @charquestskill <#:0+> <char_name>).");
-		return -1;
-	}
-
-	if (skill_id >= 0 && skill_id < MAX_SKILL_DB) {
-		if (skill_get_inf2(skill_id) & 0x01) {
-			if ((pl_sd = map_nick2sd(character)) != NULL) {
-				if (pc_checkskill(pl_sd, skill_id) == 0) {
-					pc_skill(pl_sd, skill_id, 1, 0);
-					clif_displaymessage(fd, msg_table[199]); // This player has learned the skill.
-				} else {
-					clif_displaymessage(fd, msg_table[200]); // This player already has this quest skill.
-					return -1;
-				}
-			} else {
-				clif_displaymessage(fd, msg_table[3]); // Character not found.
-				return -1;
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[197]); // This skill number doesn't exist or isn't a quest skill.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[198]); // This skill number doesn't exist.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_lostskill(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int skill_id;
-
-	if (!message || !*message || (skill_id = atoi(message)) < 0) {
-		clif_displaymessage(fd, "Please, enter a quest skill number (usage: @lostskill <#:0+>).");
-		return -1;
-	}
-
-	if (skill_id >= 0 && skill_id < MAX_SKILL) {
-		if (skill_get_inf2(skill_id) & 0x01) {
-			if (pc_checkskill(sd, skill_id) > 0) {
-				sd->status.skill[skill_id].lv = 0;
-				sd->status.skill[skill_id].flag = 0;
-				clif_skillinfoblock(sd);
-				clif_displaymessage(fd, msg_table[71]); // You have forgotten the skill.
-			} else {
-				clif_displaymessage(fd, msg_table[201]); // You don't have this quest skill.
-				return -1;
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[197]); // This skill number doesn't exist or isn't a quest skill.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[198]); // This skill number doesn't exist.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_charlostskill(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	struct map_session_data *pl_sd;
-	int skill_id = 0;
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%d %99[^\n]", &skill_id, character) < 2 || skill_id < 0) {
-		clif_displaymessage(fd, "Please, enter a quest skill number and a player name (usage: @charlostskill <#:0+> <char_name>).");
-		return -1;
-	}
-
-	if (skill_id >= 0 && skill_id < MAX_SKILL) {
-		if (skill_get_inf2(skill_id) & 0x01) {
-			if ((pl_sd = map_nick2sd(character)) != NULL) {
-				if (pc_checkskill(pl_sd, skill_id) > 0) {
-					pl_sd->status.skill[skill_id].lv = 0;
-					pl_sd->status.skill[skill_id].flag = 0;
-					clif_skillinfoblock(pl_sd);
-					clif_displaymessage(fd, msg_table[202]); // This player has forgotten the skill.
-				} else {
-					clif_displaymessage(fd, msg_table[203]); // This player doesn't have this quest skill.
-					return -1;
-				}
-			} else {
-				clif_displaymessage(fd, msg_table[3]); // Character not found.
-				return -1;
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[197]); // This skill number doesn't exist or isn't a quest skill.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[198]); // This skill number doesn't exist.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_spiritball(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int number;
-
-	if (!message || !*message || (number = atoi(message)) < 0) {
-		clif_displaymessage(fd, "Please, enter a spirit ball number (usage: @spiritball <number: 0-1000>).");
-		return -1;
-	}
-
-	// set max number to avoid server/client crash (500 create big balls of several balls: no visial difference with more)
-	if (number > 500)
-		number = 500;
-
-	if (number >= 0 && number <= 0x7FFF) {
-		if (sd->spiritball != number || number > 499) {
-			if (sd->spiritball > 0)
-				pc_delspiritball(sd, sd->spiritball, 1);
-			sd->spiritball = number;
-			clif_spiritball(sd);
-			// no message, player can look the difference
-			if (number > 1000)
-				clif_displaymessage(fd, msg_table[204]); // WARNING: more than 1000 spiritballs can CRASH your server and/or client!
-		} else {
-			clif_displaymessage(fd, msg_table[205]); // You already have this number of spiritballs.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[37]); // An invalid number was specified.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_party(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char party[100];
-
-	memset(party, '\0', sizeof(party));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", party) < 1) {
-		clif_displaymessage(fd, "Please, enter a party name (usage: @party <party_name>).");
-		return -1;
-	}
-
-	party_create(sd, party);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_guild(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char guild[100];
-	int prev;
-
-	memset(guild, '\0', sizeof(guild));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", guild) < 1) {
-		clif_displaymessage(fd, "Please, enter a guild name (usage: @guild <guild_name>).");
-		return -1;
-	}
-
-	prev = battle_config.guild_emperium_check;
-	battle_config.guild_emperium_check = 0;
-	guild_create(sd, guild);
-	battle_config.guild_emperium_check = prev;
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_agitstart(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	if (agit_flag == 1) {
-		clif_displaymessage(fd, msg_table[73]); // Already it has started siege warfare.
-		return -1;
-	}
-
-	agit_flag = 1;
-	guild_agit_start();
-	clif_displaymessage(fd, msg_table[72]); // Guild siege warfare start!
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_agitend(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	if (agit_flag == 0) {
-		clif_displaymessage(fd, msg_table[75]); // Siege warfare hasn't started yet.
-		return -1;
-	}
-
-	agit_flag = 0;
-	guild_agit_end();
-	clif_displaymessage(fd, msg_table[74]); // Guild siege warfare end!
-
-	return 0;
-}
-
-/*==========================================
- * @mapexit�Ń}�b�v�T�[�o�[���I��������
- *------------------------------------------
- */
-int atcommand_mapexit(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	int i;
-
-	for (i = 0; i < fd_max; i++) {
-		if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) {
-			if (sd->status.account_id != pl_sd->status.account_id)
-				clif_GM_kick(sd, pl_sd, 0);
-		}
-	}
-	clif_GM_kick(sd, sd, 0);
-
-	runflag = 0;
-
-        return 0;
-}
-
-/*==========================================
- * idsearch <part_of_name>: revrited by [Yor]
- *------------------------------------------
- */
-int atcommand_idsearch(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char item_name[100];
-	char output[200];
-	int i, match;
-	struct item_data *item;
-
-	memset(item_name, '\0', sizeof(item_name));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%99s", item_name) < 0) {
-		clif_displaymessage(fd, "Please, enter a part of item name (usage: @idsearch <part_of_item_name>).");
-		return -1;
-	}
-
-	sprintf(output, msg_table[77], item_name); // The reference result of '%s' (name: id):
-	clif_displaymessage(fd, output);
-	match = 0;
-	for(i = 0; i < 20000; i++) {
-		if ((item = itemdb_exists(i)) != NULL && strstr(item->jname, item_name) != NULL) {
-			match++;
-			sprintf(output, msg_table[78], item->jname, item->nameid); // %s: %d
-			clif_displaymessage(fd, output);
-		}
-	}
-	sprintf(output, msg_table[79], match); // It is %d affair above.
-	clif_displaymessage(fd, output);
-
-	return 0;
-}
-
-/*==========================================
- * Character Skill Reset
- *------------------------------------------
- */
-int atcommand_charskreset(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	char output[200];
-	struct map_session_data *pl_sd;
-
-	memset(character, '\0', sizeof(character));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @charskreset <charname>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can reset skill points only lower or same gm level
-			pc_resetskill(pl_sd);
-			sprintf(output, msg_table[206], character); // '%s' skill points reseted!
-			clif_displaymessage(fd, output);
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * Character Stat Reset
- *------------------------------------------
- */
-int atcommand_charstreset(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	char output[200];
-	struct map_session_data *pl_sd;
-
-	memset(character, '\0', sizeof(character));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @charstreset <charname>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can reset stats points only lower or same gm level
-			pc_resetstate(pl_sd);
-			sprintf(output, msg_table[207], character); // '%s' stats points reseted!
-			clif_displaymessage(fd, output);
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * Character Reset
- *------------------------------------------
- */
-int atcommand_charreset(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	char output[200];
-	struct map_session_data *pl_sd;
-
-	memset(character, '\0', sizeof(character));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @charreset <charname>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can reset a character only for lower or same GM level
-			pc_resetstate(pl_sd);
-			pc_resetskill(pl_sd);
-			sprintf(output, msg_table[208], character); // '%s' skill and stats points reseted!
-			clif_displaymessage(fd, output);
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * Character Model by chbrules
- *------------------------------------------
- */
-int atcommand_charmodel(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int hair_style = 0, hair_color = 0, cloth_color = 0;
-	struct map_session_data *pl_sd;
-	char character[100];
-	char output[200];
-
-	memset(character, '\0', sizeof(character));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%d %d %d %99[^\n]", &hair_style, &hair_color, &cloth_color, character) < 4 || hair_style < 0 || hair_color < 0 || cloth_color < 0) {
-		sprintf(output, "Please, enter a valid model and a player name (usage: @charmodel <hair ID: %d-%d> <hair color: %d-%d> <clothes color: %d-%d> <name>).",
-		        MIN_HAIR_STYLE, MAX_HAIR_STYLE, MIN_HAIR_COLOR, MAX_HAIR_COLOR, MIN_CLOTH_COLOR, MAX_CLOTH_COLOR);
-		clif_displaymessage(fd, output);
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (hair_style >= MIN_HAIR_STYLE && hair_style <= MAX_HAIR_STYLE &&
-		    hair_color >= MIN_HAIR_COLOR && hair_color <= MAX_HAIR_COLOR &&
-		    cloth_color >= MIN_CLOTH_COLOR && cloth_color <= MAX_CLOTH_COLOR) {
-
-			if (cloth_color != 0 &&
-			    pl_sd->status.sex == 1 &&
-			    (pl_sd->status.class == 12 ||  pl_sd->status.class == 17)) {
-				clif_displaymessage(fd, msg_table[35]); // You can't use this command with this class.
-				return -1;
-			} else {
-				pc_changelook(pl_sd, LOOK_HAIR, hair_style);
-				pc_changelook(pl_sd, LOOK_HAIR_COLOR, hair_color);
-				pc_changelook(pl_sd, LOOK_CLOTHES_COLOR, cloth_color);
-				clif_displaymessage(fd, msg_table[36]); // Appearence changed.
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[37]); // An invalid number was specified.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * Character Skill Point (Rewritten by [Yor])
- *------------------------------------------
- */
-int atcommand_charskpoint(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	char character[100];
-	int new_skill_point;
-	int point = 0;
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%d %99[^\n]", &point, character) < 2 || point == 0) {
-		clif_displaymessage(fd, "Please, enter a number and a player name (usage: @charskpoint <amount> <name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		new_skill_point = (int)pl_sd->status.skill_point + point;
-		if (point > 0 && (point > 0x7FFF || new_skill_point > 0x7FFF)) // fix positiv overflow
-			new_skill_point = 0x7FFF;
-		else if (point < 0 && (point < -0x7FFF || new_skill_point < 0)) // fix negativ overflow
-			new_skill_point = 0;
-		if (new_skill_point != (int)pl_sd->status.skill_point) {
-			pl_sd->status.skill_point = new_skill_point;
-			clif_updatestatus(pl_sd, SP_SKILLPOINT);
-			clif_displaymessage(fd, msg_table[209]); // Character's number of skill points changed!
-		} else {
-			if (point < 0)
-				clif_displaymessage(fd, msg_table[41]); // Impossible to decrease the number/value.
-			else
-				clif_displaymessage(fd, msg_table[149]); // Impossible to increase the number/value.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * Character Status Point (rewritten by [Yor])
- *------------------------------------------
- */
-int atcommand_charstpoint(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	char character[100];
-	int new_status_point;
-	int point = 0;
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%d %99[^\n]", &point, character) < 2 || point == 0) {
-		clif_displaymessage(fd, "Please, enter a number and a player name (usage: @charstpoint <amount> <name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		new_status_point = (int)pl_sd->status.status_point + point;
-		if (point > 0 && (point > 0x7FFF || new_status_point > 0x7FFF)) // fix positiv overflow
-			new_status_point = 0x7FFF;
-		else if (point < 0 && (point < -0x7FFF || new_status_point < 0)) // fix negativ overflow
-			new_status_point = 0;
-		if (new_status_point != (int)pl_sd->status.status_point) {
-			pl_sd->status.status_point = new_status_point;
-			clif_updatestatus(pl_sd, SP_STATUSPOINT);
-			clif_displaymessage(fd, msg_table[210]); // Character's number of status points changed!
-		} else {
-			if (point < 0)
-				clif_displaymessage(fd, msg_table[41]); // Impossible to decrease the number/value.
-			else
-				clif_displaymessage(fd, msg_table[149]); // Impossible to increase the number/value.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * Character Zeny Point (Rewritten by [Yor])
- *------------------------------------------
- */
-int atcommand_charzeny(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	char character[100];
-	int zeny = 0, new_zeny;
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%d %99[^\n]", &zeny, character) < 2 || zeny == 0) {
-		clif_displaymessage(fd, "Please, enter a number and a player name (usage: @charzeny <zeny> <name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		new_zeny = pl_sd->status.zeny + zeny;
-		if (zeny > 0 && (zeny > MAX_ZENY || new_zeny > MAX_ZENY)) // fix positiv overflow
-			new_zeny = MAX_ZENY;
-		else if (zeny < 0 && (zeny < -MAX_ZENY || new_zeny < 0)) // fix negativ overflow
-			new_zeny = 0;
-		if (new_zeny != pl_sd->status.zeny) {
-			pl_sd->status.zeny = new_zeny;
-			clif_updatestatus(pl_sd, SP_ZENY);
-			clif_displaymessage(fd, msg_table[211]); // Character's number of zenys changed!
-		} else {
-			if (zeny < 0)
-				clif_displaymessage(fd, msg_table[41]); // Impossible to decrease the number/value.
-			else
-				clif_displaymessage(fd, msg_table[149]); // Impossible to increase the number/value.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * Recall All Characters Online To Your Location
- *------------------------------------------
- */
-int atcommand_recallall(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	int i;
-	int count;
-	char output[200];
-
-	memset(output, '\0', sizeof(output));
-
-	if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-		clif_displaymessage(fd, "You are not authorised to warp somenone to your actual map.");
-		return -1;
-	}
-
-	count = 0;
-	for (i = 0; i < fd_max; i++) {
-		if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth && sd->status.account_id != pl_sd->status.account_id &&
-		    pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can recall only lower or same level
-			if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd))
-				count++;
-			else
-				pc_setpos(pl_sd, sd->mapname, sd->bl.x, sd->bl.y, 2);
-		}
-	}
-
-	clif_displaymessage(fd, msg_table[92]); // All characters recalled!
-	if (count) {
-		sprintf(output, "Because you are not authorised to warp from some maps, %d player(s) have not been recalled.", count);
-		clif_displaymessage(fd, output);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * Recall online characters of a guild to your location
- *------------------------------------------
- */
-int atcommand_guildrecall(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	int i;
-	char guild_name[100];
-	char output[200];
-	struct guild *g;
-	int count;
-
-	memset(guild_name, '\0', sizeof(guild_name));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", guild_name) < 1) {
-		clif_displaymessage(fd, "Please, enter a guild name/id (usage: @guildrecall <guild_name/id>).");
-		return -1;
-	}
-
-	if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-		clif_displaymessage(fd, "You are not authorised to warp somenone to your actual map.");
-		return -1;
-	}
-
-	if ((g = guild_searchname(guild_name)) != NULL || // name first to avoid error when name begin with a number
-	    (g = guild_search(atoi(message))) != NULL) {
-		count = 0;
-		for (i = 0; i < fd_max; i++) {
-			if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth &&
-			    sd->status.account_id != pl_sd->status.account_id &&
-			    pl_sd->status.guild_id == g->guild_id) {
-				if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd))
-					count++;
-				else
-					pc_setpos(pl_sd, sd->mapname, sd->bl.x, sd->bl.y, 2);
-			}
-		}
-		sprintf(output, msg_table[93], g->name); // All online characters of the %s guild are near you.
-		clif_displaymessage(fd, output);
-		if (count) {
-			sprintf(output, "Because you are not authorised to warp from some maps, %d player(s) have not been recalled.", count);
-			clif_displaymessage(fd, output);
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[94]); // Incorrect name/ID, or no one from the guild is online.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * Recall online characters of a party to your location
- *------------------------------------------
- */
-int atcommand_partyrecall(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int i;
-	struct map_session_data *pl_sd;
-	char party_name[100];
-	char output[200];
-	struct party *p;
-	int count;
-
-	memset(party_name, '\0', sizeof(party_name));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", party_name) < 1) {
-		clif_displaymessage(fd, "Please, enter a party name/id (usage: @partyrecall <party_name/id>).");
-		return -1;
-	}
-
-	if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) {
-		clif_displaymessage(fd, "You are not authorised to warp somenone to your actual map.");
-		return -1;
-	}
-
-	if ((p = party_searchname(party_name)) != NULL || // name first to avoid error when name begin with a number
-	    (p = party_search(atoi(message))) != NULL) {
-		count = 0;
-		for (i = 0; i < fd_max; i++) {
-			if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth &&
-			    sd->status.account_id != pl_sd->status.account_id &&
-			    pl_sd->status.party_id == p->party_id) {
-				if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd))
-					count++;
-				else
-					pc_setpos(pl_sd, sd->mapname, sd->bl.x, sd->bl.y, 2);
-			}
-		}
-		sprintf(output, msg_table[95], p->name); // All online characters of the %s party are near you.
-		clif_displaymessage(fd, output);
-		if (count) {
-			sprintf(output, "Because you are not authorised to warp from some maps, %d player(s) have not been recalled.", count);
-			clif_displaymessage(fd, output);
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[96]); // Incorrect name or ID, or no one from the party is online.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_reloaditemdb(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	itemdb_reload();
-	clif_displaymessage(fd, msg_table[97]); // Item database reloaded.
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_reloadmobdb(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	mob_reload();
-	clif_displaymessage(fd, msg_table[98]); // Monster database reloaded.
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_reloadskilldb(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	skill_reload();
-	clif_displaymessage(fd, msg_table[99]); // Skill database reloaded.
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-#ifndef TXT_ONLY
-int atcommand_rehash(
-#else /* TXT_ONLY */
-int atcommand_reloadscript(
-#endif /* TXT_ONLY */
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-#ifndef TXT_ONLY
-	atcommand_broadcast( fd, sd, "@broadcast", "eAthena SQL Server is Rehashing..." );
-	atcommand_broadcast( fd, sd, "@broadcast", "You will feel a bit of lag at this point !" );
-	
-        rehash( fd, sd );
-
-	atcommand_broadcast( fd, sd, "@broadcast", "Reloading NPCs..." );
-#endif /* not TXT_ONLY */
-	do_init_npc();
-	do_init_script();
-
-	npc_event_do_oninit();
-
-	clif_displaymessage(fd, msg_table[100]); // Scripts reloaded.
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_reloadgmdb( // by [Yor]
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	chrif_reloadGMdb();
-
-	clif_displaymessage(fd, msg_table[101]); // Login-server asked to reload GM accounts and their level.
-
-	return 0;
-}
-
-/*==========================================
- * @mapinfo <map name> [0-3] by MC_Cameri
- * => Shows information about the map [map name]
- * 0 = no additional information
- * 1 = Show users in that map and their location
- * 2 = Shows NPCs in that map
- * 3 = Shows the shops/chats in that map (not implemented)
- *------------------------------------------
- */
-int atcommand_mapinfo(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	struct npc_data *nd = NULL;
-	struct chat_data *cd = NULL;
-	char output[200], map_name[100];
-	char direction[12];
-	int m_id, i, chat_num, list = 0;
-
-	memset(output, '\0', sizeof(output));
-	memset(map_name, '\0', sizeof(map_name));
-	memset(direction, '\0', sizeof(direction));
-
-	sscanf(message, "%d %99[^\n]", &list, map_name);
-
-	if (list < 0 || list > 3) {
-		clif_displaymessage(fd, "Please, enter at least a valid list number (usage: @mapinfo <0-3> [map]).");
-		return -1;
-	}
-
-	if (map_name[0] == '\0')
-		strcpy(map_name, sd->mapname);
-	if (strstr(map_name, ".gat") == NULL && strstr(map_name, ".afm") == NULL && strlen(map_name) < 13) // 16 - 4 (.gat)
-		strcat(map_name, ".gat");
-
-	if ((m_id = map_mapname2mapid(map_name)) < 0) {
-		clif_displaymessage(fd, msg_table[1]); // Map not found.
-		return -1;
-	}
-
-	clif_displaymessage(fd, "------ Map Info ------");
-	sprintf(output, "Map Name: %s", map_name);
-	clif_displaymessage(fd, output);
-	sprintf(output, "Players In Map: %d", map[m_id].users);
-	clif_displaymessage(fd, output);
-	sprintf(output, "NPCs In Map: %d", map[m_id].npc_num);
-	clif_displaymessage(fd, output);
-	chat_num = 0;
-	for (i = 0; i < fd_max; i++) {
-		if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth &&
-		    (cd = (struct chat_data*)map_id2bl(pl_sd->chatID))) {
-			chat_num++;
-		}
-	}
-	sprintf(output, "Chats In Map: %d", chat_num);
-	clif_displaymessage(fd, output);
-	clif_displaymessage(fd, "------ Map Flags ------");
-	sprintf(output, "Player vs Player: %s | No Guild: %s | No Party: %s",
-	        (map[m_id].flag.pvp) ? "True" : "False",
-	        (map[m_id].flag.pvp_noguild) ? "True" : "False",
-	        (map[m_id].flag.pvp_noparty) ? "True" : "False");
-	clif_displaymessage(fd, output);
-	sprintf(output, "Guild vs Guild: %s | No Party: %s", (map[m_id].flag.gvg) ? "True" : "False", (map[m_id].flag.gvg_noparty) ? "True" : "False");
-	clif_displaymessage(fd, output);
-	sprintf(output, "No Dead Branch: %s", (map[m_id].flag.nobranch) ? "True" : "False");
-	clif_displaymessage(fd, output);
-	sprintf(output, "No Memo: %s", (map[m_id].flag.nomemo) ? "True" : "False");
-	clif_displaymessage(fd, output);
-	sprintf(output, "No Penalty: %s", (map[m_id].flag.nopenalty) ? "True" : "False");
-	clif_displaymessage(fd, output);
-	sprintf(output, "No Return: %s", (map[m_id].flag.noreturn) ? "True" : "False");
-	clif_displaymessage(fd, output);
-	sprintf(output, "No Save: %s", (map[m_id].flag.nosave) ? "True" : "False");
-	clif_displaymessage(fd, output);
-	sprintf(output, "No Teleport: %s", (map[m_id].flag.noteleport) ? "True" : "False");
-	clif_displaymessage(fd, output);
-	sprintf(output, "No Monster Teleport: %s", (map[m_id].flag.monster_noteleport) ? "True" : "False");
-	clif_displaymessage(fd, output);
-	sprintf(output, "No Zeny Penalty: %s", (map[m_id].flag.nozenypenalty) ? "True" : "False");
-	clif_displaymessage(fd, output);
-
-	switch (list) {
-	case 0:
-		// Do nothing. It's list 0, no additional display.
-		break;
-	case 1:
-		clif_displaymessage(fd, "----- Players in Map -----");
-		for (i = 0; i < fd_max; i++) {
-			if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth && strcmp(pl_sd->mapname, map_name) == 0) {
-				sprintf(output, "Player '%s' (session #%d) | Location: %d,%d",
-				        pl_sd->status.name, i, pl_sd->bl.x, pl_sd->bl.y);
-				clif_displaymessage(fd, output);
-			}
-		}
-		break;
-	case 2:
-		clif_displaymessage(fd, "----- NPCs in Map -----");
-		for (i = 0; i < map[m_id].npc_num;) {
-			nd = map[m_id].npc[i];
-			switch(nd->dir) {
-			case 0:  strcpy(direction, "North"); break;
-			case 1:  strcpy(direction, "North West"); break;
-			case 2:  strcpy(direction, "West"); break;
-			case 3:  strcpy(direction, "South West"); break;
-			case 4:  strcpy(direction, "South"); break;
-			case 5:  strcpy(direction, "South East"); break;
-			case 6:  strcpy(direction, "East"); break;
-			case 7:  strcpy(direction, "North East"); break;
-			case 9:  strcpy(direction, "North"); break;
-			default: strcpy(direction, "Unknown"); break;
-			}
-			sprintf(output, "NPC %d: %s | Direction: %s | Sprite: %d | Location: %d %d",
-			        ++i, nd->name, direction, nd->class, nd->bl.x, nd->bl.y);
-			clif_displaymessage(fd, output);
-		}
-		break;
-	case 3:
-		clif_displaymessage(fd, "----- Chats in Map -----");
-		for (i = 0; i < fd_max; i++) {
-			if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth &&
-			    (cd = (struct chat_data*)map_id2bl(pl_sd->chatID)) &&
-			    strcmp(pl_sd->mapname, map_name) == 0 &&
-			    cd->usersd[0] == pl_sd) {
-				sprintf(output, "Chat %d: %s | Player: %s | Location: %d %d",
-				        i, cd->title, pl_sd->status.name, cd->bl.x, cd->bl.y);
-				clif_displaymessage(fd, output);
-				sprintf(output, "   Users: %d/%d | Password: %s | Public: %s",
-				        cd->users, cd->limit, cd->pass, (cd->pub) ? "Yes" : "No");
-				clif_displaymessage(fd, output);
-			}
-		}
-		break;
-	default: // normally impossible to arrive here
-		clif_displaymessage(fd, "Please, enter at least a valid list number (usage: @mapinfo <0-3> [map]).");
-		return -1;
-		break;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_mount_peco(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	if (sd->disguise > 0) { // temporary prevention of crash caused by peco + disguise, will look into a better solution [Valaris]
-		clif_displaymessage(fd, msg_table[212]); // Cannot mount a Peco while in disguise.
-		return -1;
-	}
-
-	if (!pc_isriding(sd)) { // if actually no peco
-		if (sd->status.class == 7 || sd->status.class == 14 || sd->status.class == 4008 || sd->status.class == 4015) {
-			if (sd->status.class == 7)
-				sd->status.class = sd->view_class = 13;
-			else if (sd->status.class == 14)
-				sd->status.class = sd->view_class = 21;
-			else if (sd->status.class == 4008)
-				sd->status.class = sd->view_class = 4014;
-			else if (sd->status.class == 4015)
-				sd->status.class = sd->view_class = 4022;
-			pc_setoption(sd, sd->status.option | 0x0020);
-			clif_displaymessage(fd, msg_table[102]); // Mounted Peco.
-		} else {
-			clif_displaymessage(fd, msg_table[213]); // You can not mount a peco with your job.
-			return -1;
-		}
-	} else {
-		if (sd->status.class == 13)
-			sd->status.class = sd->view_class = 7;
-		else if (sd->status.class == 21)
-			sd->status.class = sd->view_class = 14;
-		else if (sd->status.class == 4014)
-			sd->status.class = sd->view_class = 4008;
-		else if (sd->status.class == 4022)
-			sd->status.class = sd->view_class = 4015;
-		pc_setoption(sd, sd->status.option & ~0x0020);
-		clif_displaymessage(fd, msg_table[214]); // Unmounted Peco.
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_char_mount_peco(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	struct map_session_data *pl_sd;
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @charmountpeco <char_name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pl_sd->disguise > 0) { // temporary prevention of crash caused by peco + disguise, will look into a better solution [Valaris]
-			clif_displaymessage(fd, msg_table[215]); // This player cannot mount a Peco while in disguise.
-			return -1;
-		}
-
-		if (!pc_isriding(pl_sd)) { // if actually no peco
-			if (pl_sd->status.class == 7 || pl_sd->status.class == 14 || pl_sd->status.class == 4008 || pl_sd->status.class == 4015) {
-				if (pl_sd->status.class == 7)
-					pl_sd->status.class = pl_sd->view_class = 13;
-				else if (pl_sd->status.class == 14)
-					pl_sd->status.class = pl_sd->view_class = 21;
-				else if (pl_sd->status.class == 4008)
-					pl_sd->status.class = pl_sd->view_class = 4014;
-				else if (pl_sd->status.class == 4015)
-					pl_sd->status.class = pl_sd->view_class = 4022;
-				pc_setoption(pl_sd, pl_sd->status.option | 0x0020);
-				clif_displaymessage(fd, msg_table[216]); // Now, this player mounts a peco.
-			} else {
-				clif_displaymessage(fd, msg_table[217]); // This player can not mount a peco with his/her job.
-				return -1;
-			}
-		} else {
-			if (pl_sd->status.class == 13)
-				pl_sd->status.class = pl_sd->view_class = 7;
-			else if (pl_sd->status.class == 21)
-				pl_sd->status.class = pl_sd->view_class = 14;
-			else if (pl_sd->status.class == 4014)
-				pl_sd->status.class = pl_sd->view_class = 4008;
-			else if (pl_sd->status.class == 4022)
-				pl_sd->status.class = pl_sd->view_class = 4015;
-			pc_setoption(pl_sd, pl_sd->status.option & ~0x0020);
-			clif_displaymessage(fd, msg_table[218]); // Now, this player has not more peco.
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *Spy Commands by Syrus22
- *------------------------------------------
- */
-int atcommand_guildspy(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char guild_name[100];
-	char output[200];
-	struct guild *g;
-
-	memset(guild_name, '\0', sizeof(guild_name));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", guild_name) < 1) {
-		clif_displaymessage(fd, "Please, enter a guild name/id (usage: @guildspy <guild_name/id>).");
-		return -1;
-	}
-
-	if ((g = guild_searchname(guild_name)) != NULL || // name first to avoid error when name begin with a number
-	    (g = guild_search(atoi(message))) != NULL) {
-		if (sd->guildspy == g->guild_id) {
-			sd->guildspy = 0;
-			sprintf(output, msg_table[103], g->name); // No longer spying on the %s guild.
-			clif_displaymessage(fd, output);
-		} else {
-			sd->guildspy = g->guild_id;
-			sprintf(output, msg_table[104], g->name); // Spying on the %s guild.
-			clif_displaymessage(fd, output);
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[94]); // Incorrect name/ID, or no one from the guild is online.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_partyspy(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char party_name[100];
-	char output[200];
-	struct party *p;
-
-	memset(party_name, '\0', sizeof(party_name));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", party_name) < 1) {
-		clif_displaymessage(fd, "Please, enter a party name/id (usage: @partyspy <party_name/id>).");
-		return -1;
-	}
-
-	if ((p = party_searchname(party_name)) != NULL || // name first to avoid error when name begin with a number
-	    (p = party_search(atoi(message))) != NULL) {
-		if (sd->partyspy == p->party_id) {
-			sd->partyspy = 0;
-			sprintf(output, msg_table[105], p->name); // No longer spying on the %s party.
-			clif_displaymessage(fd, output);
-		} else {
-			sd->partyspy = p->party_id;
-			sprintf(output, msg_table[106], p->name); // Spying on the %s party.
-			clif_displaymessage(fd, output);
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[96]); // Incorrect name or ID, or no one from the party is online.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @repairall [Valaris]
- *------------------------------------------
- */
-int atcommand_repairall(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int count, i;
-
-	count = 0;
-	for (i = 0; i < MAX_INVENTORY; i++) {
-		if (sd->status.inventory[i].nameid && sd->status.inventory[i].broken == 1) {
-			sd->status.inventory[i].broken = 0;
-			clif_produceeffect(sd, 0, sd->status.inventory[i].nameid);
-			count++;
-		}
-	}
-
-	if (count > 0) {
-		clif_misceffect(&sd->bl, 3);
-		clif_equiplist(sd);
-		clif_displaymessage(fd, msg_table[107]); // All items have been repaired.
-	} else {
-		clif_displaymessage(fd, msg_table[108]); // No item need to be repaired.
-		return -1;
-	}
-
-	return 0;
-}
-
-/* Removed @nuke for now in favor of alchemist marine sphere skill [Valaris]
-int atcommand_nuke(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	struct map_session_data *pl_sd;
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @nuke <char name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can kill only lower or same GM level
-			skill_castend_damage_id(&pl_sd->bl, &pl_sd->bl, NPC_SELFDESTRUCTION, 99, gettick(), 0);
-			clif_displaymessage(fd, msg_table[109]); // Player has been nuked!
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-*/
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_enablenpc(const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char NPCname[100];
-
-	memset(NPCname, '\0', sizeof(NPCname));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", NPCname) < 1) {
-		clif_displaymessage(fd, "Please, enter a NPC name (usage: @npcon <NPC_name>).");
-		return -1;
-	}
-
-	if (npc_name2id(NPCname) != NULL) {
-		npc_enable(NPCname, 1);
-		clif_displaymessage(fd, msg_table[110]); // Npc Enabled.
-	} else {
-		clif_displaymessage(fd, msg_table[111]); // This NPC doesn't exist.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int atcommand_disablenpc(const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char NPCname[100];
-
-	memset(NPCname, '\0', sizeof(NPCname));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", NPCname) < 1) {
-		clif_displaymessage(fd, "Please, enter a NPC name (usage: @npcoff <NPC_name>).");
-		return -1;
-	}
-
-	if (npc_name2id(NPCname) != NULL) {
-		npc_enable(NPCname, 0);
-		clif_displaymessage(fd, msg_table[112]); // Npc Disabled.
-	} else {
-		clif_displaymessage(fd, msg_table[111]); // This NPC doesn't exist.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * time in txt for time command (by [Yor])
- *------------------------------------------
- */
-char * txt_time(unsigned int duration) {
-	int days, hours, minutes, seconds;
-	char temp[256];
-	static char temp1[256];
-
-	memset(temp, '\0', sizeof(temp));
-	memset(temp1, '\0', sizeof(temp1));
-
-	if (duration < 0)
-		duration = 0;
-
-	days = duration / (60 * 60 * 24);
-	duration = duration - (60 * 60 * 24 * days);
-	hours = duration / (60 * 60);
-	duration = duration - (60 * 60 * hours);
-	minutes = duration / 60;
-	seconds = duration - (60 * minutes);
-
-	if (days < 2)
-		sprintf(temp, msg_table[219], days); // %d day
-	else
-		sprintf(temp, msg_table[220], days); // %d days
-	if (hours < 2)
-		sprintf(temp1, msg_table[221], temp, hours); // %s %d hour
-	else
-		sprintf(temp1, msg_table[222], temp, hours); // %s %d hours
-	if (minutes < 2)
-		sprintf(temp, msg_table[223], temp1, minutes); // %s %d minute
-	else
-		sprintf(temp, msg_table[224], temp1, minutes); // %s %d minutes
-	if (seconds < 2)
-		sprintf(temp1, msg_table[225], temp, seconds); // %s and %d second
-	else
-		sprintf(temp1, msg_table[226], temp, seconds); // %s and %d seconds
-
-	return temp1;
-}
-
-/*==========================================
- * @time/@date/@server_date/@serverdate/@server_time/@servertime: Display the date/time of the server (by [Yor]
- * Calculation management of GM modification (@day/@night GM commands) is done
- *------------------------------------------
- */
-int atcommand_servertime(const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct TimerData * timer_data;
-	struct TimerData * timer_data2;
-	time_t time_server;  // variable for number of seconds (used with time() function)
-	struct tm *datetime; // variable for time in structure ->tm_mday, ->tm_sec, ...
-	char temp[256];
-
-	memset(temp, '\0', sizeof(temp));
-
-	time(&time_server);  // get time in seconds since 1/1/1970
-	datetime = localtime(&time_server); // convert seconds in structure
-	// like sprintf, but only for date/time (Sunday, November 02 2003 15:12:52)
-	strftime(temp, sizeof(temp)-1, msg_table[230], datetime); // Server time (normal time): %A, %B %d %Y %X.
-	clif_displaymessage(fd, temp);
-
-	if (battle_config.night_duration == 0 && battle_config.day_duration == 0) {
-		if (night_flag == 0)
-			clif_displaymessage(fd, msg_table[231]); // Game time: The game is in permanent daylight.
-		else
-			clif_displaymessage(fd, msg_table[232]); // Game time: The game is in permanent night.
-	} else if (battle_config.night_duration == 0)
-		if (night_flag == 1) { // we start with night
-			timer_data = get_timer(day_timer_tid);
-			sprintf(temp, msg_table[233], txt_time((timer_data->tick - gettick()) / 1000)); // Game time: The game is actualy in night for %s.
-			clif_displaymessage(fd, temp);
-			clif_displaymessage(fd, msg_table[234]); // Game time: After, the game will be in permanent daylight.
-		} else
-			clif_displaymessage(fd, msg_table[231]); // Game time: The game is in permanent daylight.
-	else if (battle_config.day_duration == 0)
-		if (night_flag == 0) { // we start with day
-			timer_data = get_timer(night_timer_tid);
-			sprintf(temp, msg_table[235], txt_time((timer_data->tick - gettick()) / 1000)); // Game time: The game is actualy in daylight for %s.
-			clif_displaymessage(fd, temp);
-			clif_displaymessage(fd, msg_table[236]); // Game time: After, the game will be in permanent night.
-		} else
-			clif_displaymessage(fd, msg_table[232]); // Game time: The game is in permanent night.
-	else {
-		if (night_flag == 0) {
-			timer_data = get_timer(night_timer_tid);
-			timer_data2 = get_timer(day_timer_tid);
-			sprintf(temp, msg_table[235], txt_time((timer_data->tick - gettick()) / 1000)); // Game time: The game is actualy in daylight for %s.
-			clif_displaymessage(fd, temp);
-			if (timer_data->tick > timer_data2->tick)
-				sprintf(temp, msg_table[237], txt_time((timer_data->interval - abs(timer_data->tick - timer_data2->tick)) / 1000)); // Game time: After, the game will be in night for %s.
-			else
-				sprintf(temp, msg_table[237], txt_time(abs(timer_data->tick - timer_data2->tick) / 1000)); // Game time: After, the game will be in night for %s.
-			clif_displaymessage(fd, temp);
-			sprintf(temp, msg_table[238], txt_time(timer_data->interval / 1000)); // Game time: A day cycle has a normal duration of %s.
-			clif_displaymessage(fd, temp);
-		} else {
-			timer_data = get_timer(day_timer_tid);
-			timer_data2 = get_timer(night_timer_tid);
-			sprintf(temp, msg_table[233], txt_time((timer_data->tick - gettick()) / 1000)); // Game time: The game is actualy in night for %s.
-			clif_displaymessage(fd, temp);
-			if (timer_data->tick > timer_data2->tick)
-				sprintf(temp, msg_table[239], txt_time((timer_data->interval - abs(timer_data->tick - timer_data2->tick)) / 1000)); // Game time: After, the game will be in daylight for %s.
-			else
-				sprintf(temp, msg_table[239], txt_time(abs(timer_data->tick - timer_data2->tick) / 1000)); // Game time: After, the game will be in daylight for %s.
-			clif_displaymessage(fd, temp);
-			sprintf(temp, msg_table[238], txt_time(timer_data->interval / 1000)); // Game time: A day cycle has a normal duration of %s.
-			clif_displaymessage(fd, temp);
-		}
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @chardelitem <item_name_or_ID> <quantity> <player> (by [Yor]
- * removes <quantity> item from a character
- * item can be equiped or not.
- * Inspired from a old command created by RoVeRT
- *------------------------------------------
- */
-int atcommand_chardelitem(const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	char character[100];
-	char item_name[100];
-	int i, number = 0, item_id, item_position, count;
-	char output[200];
-	struct item_data *item_data;
-
-	memset(character, '\0', sizeof(character));
-	memset(item_name, '\0', sizeof(item_name));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%s %d %99[^\n]", item_name, &number, character) < 3 || number < 1) {
-		clif_displaymessage(fd, "Please, enter an item name/id, a quantity and a player name (usage: @chardelitem <item_name_or_ID> <quantity> <player>).");
-		return -1;
-	}
-
-	item_id = 0;
-	if ((item_data = itemdb_searchname(item_name)) != NULL ||
-	    (item_data = itemdb_exists(atoi(item_name))) != NULL)
-		item_id = item_data->nameid;
-
-	if (item_id > 500) {
-		if ((pl_sd = map_nick2sd(character)) != NULL) {
-			if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can kill only lower or same level
-				item_position = pc_search_inventory(pl_sd, item_id);
-				if (item_position >= 0) {
-					count = 0;
-					for(i = 0; i < number && item_position >= 0; i++) {
-						pc_delitem(pl_sd, item_position, 1, 0);
-						count++;
-						item_position = pc_search_inventory(pl_sd, item_id); // for next loop
-					}
-					sprintf(output, msg_table[113], count); // %d item(s) removed by a GM.
-					clif_displaymessage(pl_sd->fd, output);
-					if (number == count)
-						sprintf(output, msg_table[114], count); // %d item(s) removed from the player.
-					else
-						sprintf(output, msg_table[115], count, count, number); // %d item(s) removed. Player had only %d on %d items.
-					clif_displaymessage(fd, output);
-				} else {
-					clif_displaymessage(fd, msg_table[116]); // Character does not have the item.
-					return -1;
-				}
-			} else {
-				clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-				return -1;
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[3]); // Character not found.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[19]); // Invalid item ID or name.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @jail <char_name> by [Yor]
- * Special warp! No check with nowarp and nowarpto flag
- *------------------------------------------
- */
-int atcommand_jail(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	struct map_session_data *pl_sd;
-	int x, y;
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @jail <char_name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can jail only lower or same GM
-			switch(rand() % 2) {
-			case 0:
-				x = 24;
-				y = 75;
-				break;
-			default:
-				x = 49;
-				y = 75;
-				break;
-			}
-			if (pc_setpos(pl_sd, "sec_pri.gat", x, y, 3) == 0) {
-				pc_setsavepoint(pl_sd, "sec_pri.gat", x, y); // Save Char Respawn Point in the jail room [Lupus]
-				clif_displaymessage(pl_sd->fd, msg_table[117]); // GM has send you in jails.
-				clif_displaymessage(fd, msg_table[118]); // Player warped in jails.
-			} else {
-				clif_displaymessage(fd, msg_table[1]); // Map not found.
-				return -1;
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @unjail/@discharge <char_name> by [Yor]
- * Special warp! No check with nowarp and nowarpto flag
- *------------------------------------------
- */
-int atcommand_unjail(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	struct map_session_data *pl_sd;
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @unjail/@discharge <char_name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can jail only lower or same GM
-			if (pl_sd->bl.m != map_mapname2mapid("sec_pri.gat")) {
-				clif_displaymessage(fd, msg_table[119]); // This player is not in jails.
-				return -1;
-			} else if (pc_setpos(pl_sd, "prontera.gat", 156, 191, 3) == 0) {
-				pc_setsavepoint(pl_sd, "prontera.gat", 156, 191); // Save char respawn point in Prontera
-				clif_displaymessage(pl_sd->fd, msg_table[120]); // GM has discharge you.
-				clif_displaymessage(fd, msg_table[121]); // Player warped to Prontera.
-			} else {
-				clif_displaymessage(fd, msg_table[1]); // Map not found.
-				return -1;
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @disguise <mob_id> by [Valaris] (simplified by [Yor])
- *------------------------------------------
- */
-int atcommand_disguise(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int mob_id;
-
-	if (!message || !*message) {
-		clif_displaymessage(fd, "Please, enter a Monster/NPC name/id (usage: @disguise <monster_name_or_monster_ID>).");
-		return -1;
-	}
-
-	if ((mob_id = mobdb_searchname(message)) == 0) // check name first (to avoid possible name begining by a number)
-		mob_id = atoi(message);
-
-	if ((mob_id >=  46 && mob_id <= 125) || (mob_id >= 700 && mob_id <= 718) || // NPC
-	    (mob_id >= 721 && mob_id <= 755) || (mob_id >= 757 && mob_id <= 811) || // NPC
-	    (mob_id >= 813 && mob_id <= 834) || // NPC
-	    (mob_id > 1000 && mob_id < 1521)) { // monsters
-		if (pc_isriding(sd)) { // temporary prevention of crash caused by peco + disguise, will look into a better solution [Valaris]
-			clif_displaymessage(fd, msg_table[227]); // Cannot wear disguise while riding a Peco.
-			return -1;
-		}
-		sd->disguiseflag = 1; // set to override items with disguise script [Valaris]
-		sd->disguise = mob_id;
-		pc_setpos(sd, sd->mapname, sd->bl.x, sd->bl.y, 3);
-		clif_displaymessage(fd, msg_table[122]); // Disguise applied.
-	} else {
-		clif_displaymessage(fd, msg_table[123]); // Monster/NPC name/id hasn't been found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @undisguise by [Yor]
- *------------------------------------------
- */
-int atcommand_undisguise(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	if (sd->disguise) {
-		clif_clearchar(&sd->bl, 9);
-		sd->disguise = 0;
-		pc_setpos(sd, sd->mapname, sd->bl.x, sd->bl.y, 3);
-		clif_displaymessage(fd, msg_table[124]); // Undisguise applied.
-	} else {
-		clif_displaymessage(fd, msg_table[125]); // You're not disguised.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @broadcast by [Valaris]
- *------------------------------------------
- */
-int atcommand_broadcast(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char output[200];
-
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message) {
-		clif_displaymessage(fd, "Please, enter a message (usage: @broadcast <message>).");
-		return -1;
-	}
-
-	sprintf(output, "%s : %s", sd->status.name, message);
-	intif_GMmessage(output, strlen(output) + 1, 0);
-
-	return 0;
-}
-
-/*==========================================
- * @localbroadcast by [Valaris]
- *------------------------------------------
- */
-int atcommand_localbroadcast(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char output[200];
-
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message) {
-		clif_displaymessage(fd, "Please, enter a message (usage: @localbroadcast <message>).");
-		return -1;
-	}
-
-	sprintf(output, "%s : %s", sd->status.name, message);
-
-	clif_GMmessage(&sd->bl, output, strlen(output) + 1, 1); // 1: ALL_SAMEMAP
-
-	return 0;
-}
-
-/*==========================================
- * @ignorelist by [Yor]
- *------------------------------------------
- */
-int atcommand_ignorelist(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char output[200];
-	int count;
-	int i;
-
-	memset(output, '\0', sizeof(output));
-
-	count = 0;
-	for(i = 0; i < (int)(sizeof(sd->ignore) / sizeof(sd->ignore[0])); i++)
-		if (sd->ignore[i].name[0])
-			count++;
-
-	if (sd->ignoreAll == 0)
-		if (count == 0)
-			clif_displaymessage(fd, msg_table[126]); // You accept any wisp (no wisper is refused).
-		else {
-			sprintf(output, msg_table[127], count); // You accept any wisp, except thoses from %d player(s):
-			clif_displaymessage(fd, output);
-		}
-	else
-		if (count == 0)
-			clif_displaymessage(fd, msg_table[128]); // You refuse all wisps (no specifical wisper is refused).
-		else {
-			sprintf(output, msg_table[129], count); // You refuse all wisps, AND refuse wisps from %d player(s):
-			clif_displaymessage(fd, output);
-		}
-
-	if (count > 0)
-		for(i = 0; i < (int)(sizeof(sd->ignore) / sizeof(sd->ignore[0])); i++)
-			if (sd->ignore[i].name[0])
-				clif_displaymessage(fd, sd->ignore[i].name);
-
-	return 0;
-}
-
-/*==========================================
- * @charignorelist <player_name> by [Yor]
- *------------------------------------------
- */
-int atcommand_charignorelist(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	struct map_session_data *pl_sd;
-	char output[200];
-	int count;
-	int i;
-
-	memset(character, '\0', sizeof(character));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @charignorelist <char name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		count = 0;
-		for(i = 0; i < (int)(sizeof(pl_sd->ignore) / sizeof(pl_sd->ignore[0])); i++)
-			if (pl_sd->ignore[i].name[0])
-				count++;
-
-		if (pl_sd->ignoreAll == 0)
-			if (count == 0) {
-				sprintf(output, msg_table[130], pl_sd->status.name); // '%s' accept any wisp (no wisper is refused).
-				clif_displaymessage(fd, output);
-			} else {
-				sprintf(output, msg_table[131], pl_sd->status.name, count); // '%s' accept any wisp, except thoses from %d player(s):
-				clif_displaymessage(fd, output);
-			}
-		else
-			if (count == 0) {
-				sprintf(output, msg_table[132], pl_sd->status.name); // '%s' refuse all wisps (no specifical wisper is refused).
-				clif_displaymessage(fd, output);
-			} else {
-				sprintf(output, msg_table[133], pl_sd->status.name, count); // '%s' refuse all wisps, AND refuse wisps from %d player(s):
-				clif_displaymessage(fd, output);
-			}
-
-		if (count > 0)
-			for(i = 0; i < (int)(sizeof(pl_sd->ignore) / sizeof(pl_sd->ignore[0])); i++)
-				if (pl_sd->ignore[i].name[0])
-					clif_displaymessage(fd, pl_sd->ignore[i].name);
-
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @inall <player_name> by [Yor]
- *------------------------------------------
- */
-int atcommand_inall(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	char output[200];
-	struct map_session_data *pl_sd;
-
-	memset(character, '\0', sizeof(character));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @inall <char name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can change wisp option only to lower or same level
-			if (pl_sd->ignoreAll == 0) {
-				sprintf(output, msg_table[134], pl_sd->status.name); // '%s' already accepts all wispers.
-				clif_displaymessage(fd, output);
-				return -1;
-			} else {
-				pl_sd->ignoreAll = 0;
-				sprintf(output, msg_table[135], pl_sd->status.name); // '%s' now accepts all wispers.
-				clif_displaymessage(fd, output);
-				// message to player
-				clif_displaymessage(pl_sd->fd, msg_table[136]); // A GM has authorised all wispers for you.
-				WFIFOW(pl_sd->fd,0) = 0x0d2; // R 00d2 <type>.B <fail>.B: type: 0: deny, 1: allow, fail: 0: success, 1: fail
-				WFIFOB(pl_sd->fd,2) = 1;
-				WFIFOB(pl_sd->fd,3) = 0; // success
-				WFIFOSET(pl_sd->fd, 4); // packet_len_table[0x0d2]
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @exall <player_name> by [Yor]
- *------------------------------------------
- */
-int atcommand_exall(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	char output[200];
-	struct map_session_data *pl_sd;
-
-	memset(character, '\0', sizeof(character));
-	memset(output, '\0', sizeof(output));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @exall <char name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can change wisp option only to lower or same level
-			if (pl_sd->ignoreAll == 1) {
-				sprintf(output, msg_table[137], pl_sd->status.name); // '%s' already blocks all wispers.
-				clif_displaymessage(fd, output);
-				return -1;
-			} else {
-				pl_sd->ignoreAll = 1;
-				sprintf(output, msg_table[138], pl_sd->status.name); // '%s' blocks now all wispers.
-				clif_displaymessage(fd, output);
-				// message to player
-				clif_displaymessage(pl_sd->fd, msg_table[139]); // A GM has blocked all wispers for you.
-				WFIFOW(pl_sd->fd,0) = 0x0d2; // R 00d2 <type>.B <fail>.B: type: 0: deny, 1: allow, fail: 0: success, 1: fail
-				WFIFOB(pl_sd->fd,2) = 0;
-				WFIFOB(pl_sd->fd,3) = 0; // success
-				WFIFOSET(pl_sd->fd,4); // packet_len_table[0x0d2]
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @chardisguise <mob_id> <character> by Kalaspuff (based off Valaris' and Yor's work)
- *------------------------------------------
- */
-int atcommand_chardisguise(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int mob_id;
-	char character[100];
-	char mob_name[100];
-	struct map_session_data* pl_sd;
-
-	memset(character, '\0', sizeof(character));
-	memset(mob_name, '\0', sizeof(mob_name));
-
-	if (!message || !*message || sscanf(message, "%s %99[^\n]", mob_name, character) < 2) {
-		clif_displaymessage(fd, "Please, enter a Monster/NPC name/id and a player name (usage: @chardisguise <monster_name_or_monster_ID> <char name>).");
-		return -1;
-	}
-
-	if ((mob_id = mobdb_searchname(mob_name)) == 0) // check name first (to avoid possible name begining by a number)
-		mob_id = atoi(mob_name);
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can disguise only lower or same level
-			if ((mob_id >=  46 && mob_id <= 125) || (mob_id >= 700 && mob_id <= 718) || // NPC
-			    (mob_id >= 721 && mob_id <= 755) || (mob_id >= 757 && mob_id <= 811) || // NPC
-			    (mob_id >= 813 && mob_id <= 834) || // NPC
-			    (mob_id > 1000 && mob_id < 1521)) { // monsters
-				if (pc_isriding(pl_sd)) { // temporary prevention of crash caused by peco + disguise, will look into a better solution [Valaris]
-					clif_displaymessage(fd, msg_table[228]); // Character cannot wear disguise while riding a Peco.
-					return -1;
-				}
-				pl_sd->disguiseflag = 1; // set to override items with disguise script [Valaris]
-				pl_sd->disguise = mob_id;
-				pc_setpos(pl_sd, pl_sd->mapname, pl_sd->bl.x, pl_sd->bl.y, 3);
-				clif_displaymessage(fd, msg_table[140]); // Character's disguise applied.
-			} else {
-				clif_displaymessage(fd, msg_table[123]); // Monster/NPC name/id hasn't been found.
-				return -1;
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @charundisguise <character> by Kalaspuff (based off Yor's work)
- *------------------------------------------
- */
-int atcommand_charundisguise(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	struct map_session_data* pl_sd;
-
-	memset(character, '\0', sizeof(character));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @charundisguise <char name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can undisguise only lower or same level
-			if (pl_sd->disguise) {
-				clif_clearchar(&pl_sd->bl, 9);
-				pl_sd->disguise = 0;
-				pc_setpos(pl_sd, pl_sd->mapname, pl_sd->bl.x, pl_sd->bl.y, 3);
-				clif_displaymessage(fd, msg_table[141]); // Character's undisguise applied.
-			} else {
-				clif_displaymessage(fd, msg_table[142]); // Character is not disguised.
-				return -1;
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @email <actual@email> <new@email> by [Yor]
- *------------------------------------------
- */
-int atcommand_email(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char actual_email[100];
-	char new_email[100];
-
-	memset(actual_email, '\0', sizeof(actual_email));
-	memset(new_email, '\0', sizeof(new_email));
-
-	if (!message || !*message || sscanf(message, "%99s %99s", actual_email, new_email) < 2) {
-		clif_displaymessage(fd, "Please enter 2 emails (usage: @email <actual@email> <new@email>).");
-		return -1;
-	}
-
-	if (e_mail_check(actual_email) == 0) {
-		clif_displaymessage(fd, msg_table[144]); // Invalid actual email. If you have default e-mail, give a@a.com.
-		return -1;
-	} else if (e_mail_check(new_email) == 0) {
-		clif_displaymessage(fd, msg_table[145]); // Invalid new email. Please enter a real e-mail.
-		return -1;
-	} else if (strcmpi(new_email, "a@a.com") == 0) {
-		clif_displaymessage(fd, msg_table[146]); // New email must be a real e-mail.
-		return -1;
-	} else if (strcmpi(actual_email, new_email) == 0) {
-		clif_displaymessage(fd, msg_table[147]); // New email must be different of the actual e-mail.
-		return -1;
-	} else {
-		chrif_changeemail(sd->status.account_id, actual_email, new_email);
-		clif_displaymessage(fd, msg_table[148]); // Information sended to login-server via char-server.
-	}
-
-	return 0;
-}
-
-/*==========================================
- *@effect
- *------------------------------------------
- */
-int atcommand_effect(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	int type = 0, flag = 0, i;
-
-	if (!message || !*message || sscanf(message, "%d %d", &type,&flag) < 2) {
-		clif_displaymessage(fd, "Please, enter at least a option (usage: @effect <type+>).");
-		return -1;
-	}
-	if(flag <=0){
-		clif_specialeffect(&sd->bl, type, flag);
-		clif_displaymessage(fd, msg_table[229]); // Your effect has changed.
-	}
-	else{
-		for (i = 0; i < fd_max; i++) {
-			if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) {
-				clif_specialeffect(&pl_sd->bl, type, flag);
-				clif_displaymessage(pl_sd->fd, msg_table[229]); // Your effect has changed.
-			}
-		}
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @charitemlist <character>: Displays the list of a player's items.
- *------------------------------------------
- */
-int
-atcommand_character_item_list(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	struct item_data *item_data, *item_temp;
-	int i, j, equip, count, counter, counter2;
-	char character[100], output[200], equipstr[100], outputtmp[200];
-
-	memset(character, '\0', sizeof(character));
-	memset(output, '\0', sizeof(output));
-	memset(equipstr, '\0', sizeof(equipstr));
-	memset(outputtmp, '\0', sizeof(outputtmp));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @charitemlist <char name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can look items only lower or same level
-			counter = 0;
-			count = 0;
-			for (i = 0; i < MAX_INVENTORY; i++) {
-				if (pl_sd->status.inventory[i].nameid > 0 && (item_data = itemdb_search(pl_sd->status.inventory[i].nameid)) != NULL) {
-					counter = counter + pl_sd->status.inventory[i].amount;
-					count++;
-					if (count == 1) {
-						sprintf(output, "------ Items list of '%s' ------", pl_sd->status.name);
-						clif_displaymessage(fd, output);
-					}
-					if ((equip = pl_sd->status.inventory[i].equip)) {
-						strcpy(equipstr, "| equiped: ");
-						if (equip & 4)
-							strcat(equipstr, "robe/gargment, ");
-						if (equip & 8)
-							strcat(equipstr, "left accessory, ");
-						if (equip & 16)
-							strcat(equipstr, "body/armor, ");
-						if ((equip & 34) == 2)
-							strcat(equipstr, "right hand, ");
-						if ((equip & 34) == 32)
-							strcat(equipstr, "left hand, ");
-						if ((equip & 34) == 34)
-							strcat(equipstr, "both hands, ");
-						if (equip & 64)
-							strcat(equipstr, "feet, ");
-						if (equip & 128)
-							strcat(equipstr, "right accessory, ");
-						if ((equip & 769) == 1)
-							strcat(equipstr, "lower head, ");
-						if ((equip & 769) == 256)
-							strcat(equipstr, "top head, ");
-						if ((equip & 769) == 257)
-							strcat(equipstr, "lower/top head, ");
-						if ((equip & 769) == 512)
-							strcat(equipstr, "mid head, ");
-						if ((equip & 769) == 512)
-							strcat(equipstr, "lower/mid head, ");
-						if ((equip & 769) == 769)
-							strcat(equipstr, "lower/mid/top head, ");
-						// remove final ', '
-						equipstr[strlen(equipstr) - 2] = '\0';
-					} else
-						memset(equipstr, '\0', sizeof(equipstr));
-					if (sd->status.inventory[i].refine)
-						sprintf(output, "%d %s %+d (%s %+d, id: %d) %s", pl_sd->status.inventory[i].amount, item_data->name, pl_sd->status.inventory[i].refine, item_data->jname, pl_sd->status.inventory[i].refine, pl_sd->status.inventory[i].nameid, equipstr);
-					else
-						sprintf(output, "%d %s (%s, id: %d) %s", pl_sd->status.inventory[i].amount, item_data->name, item_data->jname, pl_sd->status.inventory[i].nameid, equipstr);
-					clif_displaymessage(fd, output);
-					memset(output, '\0', sizeof(output));
-					counter2 = 0;
-					for (j = 0; j < item_data->slot; j++) {
-						if (pl_sd->status.inventory[i].card[j]) {
-							if ((item_temp = itemdb_search(pl_sd->status.inventory[i].card[j])) != NULL) {
-								if (output[0] == '\0')
-									sprintf(outputtmp, " -> (card(s): #%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname);
-								else
-									sprintf(outputtmp, "#%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname);
-								strcat(output, outputtmp);
-							}
-						}
-					}
-					if (output[0] != '\0') {
-						output[strlen(output) - 2] = ')';
-						output[strlen(output) - 1] = '\0';
-						clif_displaymessage(fd, output);
-					}
-				}
-			}
-			if (count == 0)
-				clif_displaymessage(fd, "No item found on this player.");
-			else {
-				sprintf(output, "%d item(s) found in %d kind(s) of items.", counter, count);
-				clif_displaymessage(fd, output);
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @charstoragelist <character>: Displays the items list of a player's storage.
- *------------------------------------------
- */
-int
-atcommand_character_storage_list(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct storage *stor;
-	struct map_session_data *pl_sd;
-	struct item_data *item_data, *item_temp;
-	int i, j, count, counter, counter2;
-	char character[100], output[200], outputtmp[200];
-
-	memset(character, '\0', sizeof(character));
-	memset(output, '\0', sizeof(output));
-	memset(outputtmp, '\0', sizeof(outputtmp));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @charitemlist <char name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can look items only lower or same level
-			if((stor = account2storage2(pl_sd->status.account_id)) != NULL) {
-				counter = 0;
-				count = 0;
-				for (i = 0; i < MAX_STORAGE; i++) {
-					if (stor->storage[i].nameid > 0 && (item_data = itemdb_search(stor->storage[i].nameid)) != NULL) {
-						counter = counter + stor->storage[i].amount;
-						count++;
-						if (count == 1) {
-							sprintf(output, "------ Storage items list of '%s' ------", pl_sd->status.name);
-							clif_displaymessage(fd, output);
-						}
-						if (stor->storage[i].refine)
-							sprintf(output, "%d %s %+d (%s %+d, id: %d)", stor->storage[i].amount, item_data->name, stor->storage[i].refine, item_data->jname, stor->storage[i].refine, stor->storage[i].nameid);
-						else
-							sprintf(output, "%d %s (%s, id: %d)", stor->storage[i].amount, item_data->name, item_data->jname, stor->storage[i].nameid);
-						clif_displaymessage(fd, output);
-						memset(output, '\0', sizeof(output));
-						counter2 = 0;
-						for (j = 0; j < item_data->slot; j++) {
-							if (stor->storage[i].card[j]) {
-								if ((item_temp = itemdb_search(stor->storage[i].card[j])) != NULL) {
-									if (output[0] == '\0')
-										sprintf(outputtmp, " -> (card(s): #%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname);
-									else
-										sprintf(outputtmp, "#%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname);
-									strcat(output, outputtmp);
-								}
-							}
-						}
-						if (output[0] != '\0') {
-							output[strlen(output) - 2] = ')';
-							output[strlen(output) - 1] = '\0';
-							clif_displaymessage(fd, output);
-						}
-					}
-				}
-				if (count == 0)
-					clif_displaymessage(fd, "No item found in the storage of this player.");
-				else {
-					sprintf(output, "%d item(s) found in %d kind(s) of items.", counter, count);
-					clif_displaymessage(fd, output);
-				}
-			} else {
-				clif_displaymessage(fd, "This player has no storage.");
-				return -1;
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @charcartlist <character>: Displays the items list of a player's cart.
- *------------------------------------------
- */
-int
-atcommand_character_cart_list(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd;
-	struct item_data *item_data, *item_temp;
-	int i, j, count, counter, counter2;
-	char character[100], output[200], outputtmp[200];
-
-	memset(character, '\0', sizeof(character));
-	memset(output, '\0', sizeof(output));
-	memset(outputtmp, '\0', sizeof(outputtmp));
-
-	if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
-		clif_displaymessage(fd, "Please, enter a player name (usage: @charitemlist <char name>).");
-		return -1;
-	}
-
-	if ((pl_sd = map_nick2sd(character)) != NULL) {
-		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can look items only lower or same level
-			counter = 0;
-			count = 0;
-			for (i = 0; i < MAX_CART; i++) {
-				if (pl_sd->status.cart[i].nameid > 0 && (item_data = itemdb_search(pl_sd->status.cart[i].nameid)) != NULL) {
-					counter = counter + pl_sd->status.cart[i].amount;
-					count++;
-					if (count == 1) {
-						sprintf(output, "------ Cart items list of '%s' ------", pl_sd->status.name);
-						clif_displaymessage(fd, output);
-					}
-					if (pl_sd->status.cart[i].refine)
-						sprintf(output, "%d %s %+d (%s %+d, id: %d)", pl_sd->status.cart[i].amount, item_data->name, pl_sd->status.cart[i].refine, item_data->jname, pl_sd->status.cart[i].refine, pl_sd->status.cart[i].nameid);
-					else
-						sprintf(output, "%d %s (%s, id: %d)", pl_sd->status.cart[i].amount, item_data->name, item_data->jname, pl_sd->status.cart[i].nameid);
-					clif_displaymessage(fd, output);
-					memset(output, '\0', sizeof(output));
-					counter2 = 0;
-					for (j = 0; j < item_data->slot; j++) {
-						if (pl_sd->status.cart[i].card[j]) {
-							if ((item_temp = itemdb_search(pl_sd->status.cart[i].card[j])) != NULL) {
-								if (output[0] == '\0')
-									sprintf(outputtmp, " -> (card(s): #%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname);
-								else
-									sprintf(outputtmp, "#%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname);
-								strcat(output, outputtmp);
-							}
-						}
-					}
-					if (output[0] != '\0') {
-						output[strlen(output) - 2] = ')';
-						output[strlen(output) - 1] = '\0';
-						clif_displaymessage(fd, output);
-					}
-				}
-			}
-			if (count == 0)
-				clif_displaymessage(fd, "No item found in the cart of this player.");
-			else {
-				sprintf(output, "%d item(s) found in %d kind(s) of items.", counter, count);
-				clif_displaymessage(fd, output);
-			}
-		} else {
-			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
-			return -1;
-		}
-	} else {
-		clif_displaymessage(fd, msg_table[3]); // Character not found.
-		return -1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * @killer by MouseJstr
- * enable killing players even when not in pvp
- *------------------------------------------
- */
-int
-atcommand_killer(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	sd->special_state.killer = !sd->special_state.killer;
-
-	if(sd->special_state.killer)
-	  clif_displaymessage(fd, msg_table[241]);
-        else
-	  clif_displaymessage(fd, msg_table[242]);
-
-	return 0;
-}
-
-/*==========================================
- * @killable by MouseJstr
- * enable other people killing you
- *------------------------------------------
- */
-int
-atcommand_killable(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	sd->special_state.killable = !sd->special_state.killable;
-
-	if(sd->special_state.killable)
-	  clif_displaymessage(fd, msg_table[242]);
-        else
-	  clif_displaymessage(fd, msg_table[241]);
-
-	return 0;
-}
-
-/*==========================================
- * @charkillable by MouseJstr
- * enable another player to be killed
- *------------------------------------------
- */
-int
-atcommand_charkillable(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd = NULL;
-
-	if (!message || !*message)
-		return -1;
-
-	if((pl_sd=map_nick2sd((char *) message)) == NULL)
-                return -1;
-
-	pl_sd->special_state.killable = !pl_sd->special_state.killable;
-
-	if(pl_sd->special_state.killable)
-	  clif_displaymessage(fd, "The player is now killable");
-        else
-	  clif_displaymessage(fd, "The player is no longer killable");
-
-	return 0;
-}
-
-
-/*==========================================
- * @skillon by MouseJstr
- * turn skills on for the map
- *------------------------------------------
- */
-int
-atcommand_skillon(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	map[sd->bl.m].flag.noskill = 0;
-	clif_displaymessage(fd, msg_table[244]);
-	return 0;
-}
-
-/*==========================================
- * @skilloff by MouseJstr
- * Turn skills off on the map
- *------------------------------------------
- */
-int
-atcommand_skilloff(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	map[sd->bl.m].flag.noskill = 1;
-	clif_displaymessage(fd, msg_table[243]);
-	return 0;
-}
-
-/*==========================================
- * @npcmove by MouseJstr
- *
- * move a npc
- *------------------------------------------
- */
-int
-atcommand_npcmove(const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char character[100];
-	int x = 0, y = 0;
-	struct npc_data *nd = 0;
-	
-	if( sd == NULL )
-		return -1;
-
-	if (!message || !*message)
-		return -1;
-
-	memset(character, '\0', sizeof character);
-
-	if (sscanf(message, "%d %d %99[^\n]", &x, &y, character) < 4)
-		return -1;
-
-        nd=npc_name2id(character);
-        if (nd==NULL)
-	     return -1;
-
-        npc_enable(character, 0);
-        nd->bl.x = x;
-        nd->bl.y = y;
-        npc_enable(character, 1);
-
-   return 0;
-}
-
-/*==========================================
- * @addwarp by MouseJstr
- *
- * Create a new static warp point.
- *------------------------------------------
- */
-int
-atcommand_addwarp(const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char w1[64], w3[64], w4[64];
-	char map[30], output[200];
-	int x,y,ret;
-
-	if (!message || !*message)
-		return -1;
-
-	if (sscanf(message, "%99s %d %d[^\n]", map, &x, &y ) < 3)
-		return -1;
-
-	sprintf(w1,"%s,%d,%d", sd->mapname, sd->bl.x, sd->bl.y);
-	sprintf(w3,"%s%d%d%d%d", map,sd->bl.x, sd->bl.y, x, y);
-	sprintf(w4,"1,1,%s.gat,%d,%d", map, x, y);
-
-	ret = npc_parse_warp(w1, "warp", w3, w4);
-
-	sprintf(output, "New warp NPC => %s",w3); 
-
-	clif_displaymessage(fd, output);
-
-	return ret;
-}
-
-/*==========================================
- * @follow by [MouseJstr]
- *
- * Follow a player .. staying no more then 5 spaces away
- *------------------------------------------
- */
-int
-atcommand_follow(const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd = NULL;
-
-	if (!message || !*message)
-		return -1;
-	if((pl_sd=map_nick2sd((char *) message)) != NULL)
-		pc_follow(sd, pl_sd->bl.id);
-	else
-		return 1;
-	return 0;
-}
-
-
-/*==========================================
- * @chareffect by [MouseJstr]
- *
- * Create a effect localized on another character
- *------------------------------------------
- */
-int
-atcommand_chareffect(const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd = NULL;
-	char target[255];
-	int type = 0;
-
-	if (!message || !*message || sscanf(message, "%d %s", &type, target) != 2) {
-		clif_displaymessage(fd, "usage: @chareffect <type+> <target>.");
-		return -1;
-	}
-
-	if((pl_sd=map_nick2sd((char *) target)) == NULL)
-		return -1;
-
-	clif_specialeffect(&pl_sd->bl, type, 0);
-	clif_displaymessage(fd, msg_table[229]); // Your effect has changed.
-
-	return 0;
-}
-/*==========================================
- * @dropall by [MouseJstr]
- *
- * Drop all your possession on the ground
- *------------------------------------------
- */
-int
-atcommand_dropall(const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int i;
-	for (i = 0; i < MAX_INVENTORY; i++) {
-	if (sd->status.inventory[i].amount) {
-		if(sd->status.inventory[i].equip != 0)
-			pc_unequipitem(sd, i, 0);
-		pc_dropitem(sd,  i, sd->status.inventory[i].amount);
-		}
-	}
-	return 0;
-}
-/*==========================================
- * @chardropall by [MouseJstr]
- * 
- * Throw all the characters possessions on the ground.  Normally
- * done in response to them being disrespectful of a GM
- *------------------------------------------
- */
-int
-atcommand_chardropall(const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int i;
-	struct map_session_data *pl_sd = NULL;
-
-	if (!message || !*message)
-		return -1;
-	if((pl_sd=map_nick2sd((char *) message)) == NULL)
-		return -1;
-	for (i = 0; i < MAX_INVENTORY; i++) {
-		if (pl_sd->status.inventory[i].amount) {
-			if(pl_sd->status.inventory[i].equip != 0)
-				pc_unequipitem(pl_sd, i, 0);
-			pc_dropitem(pl_sd,  i, pl_sd->status.inventory[i].amount);
-		}
-	}
-
-	clif_displaymessage(pl_sd->fd, "Ever play 52 card pickup?");
-	clif_displaymessage(fd, "It is done");
-	//clif_displaymessage(fd, "It is offical.. your a jerk");
-
-	return 0;
-}
-/*==========================================
- * @storeall by [MouseJstr]
- *
- * Put everything into storage to simplify your inventory to make
- * debugging easie
- *------------------------------------------
- */
-int
-atcommand_storeall(const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int i;
-	if (storage_storageopen(sd) == 1) {
-		clif_displaymessage(fd, "run this command again..");
-		return 0;
-	}
-	for (i = 0; i < MAX_INVENTORY; i++) {
-		if (sd->status.inventory[i].amount) {
-			if(sd->status.inventory[i].equip != 0)
-				pc_unequipitem(sd, i, 0);
-			storage_storageadd(sd,  i, sd->status.inventory[i].amount);
-		}
-	}
-	storage_storageclose(sd);
-
-	clif_displaymessage(fd, "It is done");
-	return 0;
-}
-/*==========================================
- * @charstoreall by [MouseJstr]
- *
- * A way to screw with players who piss you off
- *------------------------------------------
- */
-int
-atcommand_charstoreall(const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int i;
-	struct map_session_data *pl_sd = NULL;
-
-	if (!message || !*message)
-		return -1;
-	if((pl_sd=map_nick2sd((char *) message)) == NULL) 
-		return -1;
-
-	if (storage_storageopen(pl_sd) == 1) {
-		clif_displaymessage(fd, "Had to open the characters storage window...");
-		clif_displaymessage(fd, "run this command again..");
-		return 0;
-	}
-	for (i = 0; i < MAX_INVENTORY; i++) {
-		if (pl_sd->status.inventory[i].amount) {
-			if(pl_sd->status.inventory[i].equip != 0)
-				pc_unequipitem(pl_sd, i, 0);
-			storage_storageadd(pl_sd,  i, sd->status.inventory[i].amount);
-		}
-	}
-	storage_storageclose(pl_sd);
-
-	clif_displaymessage(pl_sd->fd, "Everything you own has been put away for safe keeping.");
-	clif_displaymessage(pl_sd->fd, "go to the nearest kafka to retrieve it..");
-	clif_displaymessage(pl_sd->fd, "   -- the management");
-
-	clif_displaymessage(fd, "It is done");
-
-	return 0;
-}
-/*==========================================
- * @skillid by [MouseJstr]
- *
- * lookup a skill by name
- *------------------------------------------
- */
-int
-atcommand_skillid(const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-        int skillen = 0, idx = 0;
-	if (!message || !*message)
-		return -1;
-        skillen = strlen(message);
-        while (skill_names[idx].id != 0) {
-            if ((strnicmp(skill_names[idx].name, message, skillen) == 0) ||
-            (strnicmp(skill_names[idx].desc, message, skillen) == 0)) {
-               char output[255];
-               sprintf(output, "skill %d: %s", skill_names[idx].id, skill_names[idx].desc);
-	       clif_displaymessage(fd, output);
-            }
-            idx++;
-        }
-        return 0;
-}
-/*==========================================
- * @useskill by [MouseJstr]
- *
- * A way of using skills without having to find them in the skills menu
- *------------------------------------------
- */
-int
-atcommand_useskill(const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd = NULL;
-	int skillnum;
-	int skilllv;
-	int inf;
-	char target[255];
-
-	if (!message || !*message)
-		return -1;
-	if(sscanf(message, "%d %d %s", &skillnum, &skilllv, target) != 3) {
-		clif_displaymessage(fd, "Usage: @useskill <skillnum> <skillv> <target>");
-		return -1;
-	}
-	if((pl_sd=map_nick2sd(target)) == NULL) {
-		return -1;
-	}
-
-	inf = skill_get_inf(skillnum);
-
-	if ((inf == 2) || (inf == 1))
-		skill_use_pos(sd, pl_sd->bl.x, pl_sd->bl.y, skillnum, skilllv);
-	else
-		skill_use_id(sd, pl_sd->bl.id, skillnum, skilllv);
-
-	return 0;
-}
-/*==========================================
- * It is made to rain.
- *------------------------------------------
- */
-int
-atcommand_rain(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int effno = 0;
-	effno = 161;
-	nullpo_retr(-1, sd);
-	if (effno < 0 || map[sd->bl.m].flag.rain)
-		return -1;
-
-	map[sd->bl.m].flag.rain=1;
-	clif_specialeffect(&sd->bl,effno,2);
-	return 0;
-}
-/*==========================================
- * It is made to snow.
- *------------------------------------------
- */
-int
-atcommand_snow(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int effno = 0;
-	effno = 162;
-	nullpo_retr(-1, sd);
-	if (effno < 0 || map[sd->bl.m].flag.snow)
-		return -1;
-
-	map[sd->bl.m].flag.snow=1;
-	clif_specialeffect(&sd->bl,effno,2);
-	return 0;
-}
-
-/*==========================================
- * Cherry tree snowstorm is made to fall. (Sakura)
- *------------------------------------------
- */
-int
-atcommand_sakura(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int effno = 0;
-	effno = 163;
-	nullpo_retr(-1, sd);
-	if (effno < 0 || map[sd->bl.m].flag.sakura)
-		return -1;
-
-	map[sd->bl.m].flag.sakura=1;
-	clif_specialeffect(&sd->bl,effno,2);
-	return 0;
-}
-
-/*==========================================
- * Fog hangs over.
- *------------------------------------------
- */
-int
-atcommand_fog(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int effno = 0;
-	effno = 233;
-	nullpo_retr(-1, sd);
-	if (effno < 0 || map[sd->bl.m].flag.fog)
-		return -1;
-	
-	map[sd->bl.m].flag.fog=1;
-	clif_specialeffect(&sd->bl,effno,2);
-
-	return 0;
-}
-
-/*==========================================
- * Fallen leaves fall.
- *------------------------------------------
- */
-int
-atcommand_leaves(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	int effno = 0;
-	effno = 333;
-	nullpo_retr(-1, sd);
-	if (effno < 0 || map[sd->bl.m].flag.leaves)
-		return -1;
-
-	map[sd->bl.m].flag.leaves=1;
-	clif_specialeffect(&sd->bl,effno,2);
-	return 0;
-}
-/*==========================================
- * 
- *------------------------------------------
- */
-int
-atcommand_summon(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	char name[100];
-	int mob_id = 0;
-	int x = 0;
-	int y = 0;
-	int id = 0;
-	struct mob_data *md;
-	unsigned int tick=gettick();
-	
-	nullpo_retr(-1, sd);
-
-	if (!message || !*message)
-		return -1;
-	if (sscanf(message, "%99s", name) < 1)
-		return -1;
-	
-	if ((mob_id = atoi(name)) == 0)
-		mob_id = mobdb_searchname(name);
-	if(mob_id == 0)
-		return -1;
-
-	x = sd->bl.x + (rand() % 10 - 5);
-	y = sd->bl.y + (rand() % 10 - 5);
-
-	id = mob_once_spawn(sd,"this", x, y, "--ja--", mob_id, 1, "");
-	if((md=(struct mob_data *)map_id2bl(id))){
-		md->master_id=sd->bl.id;
-		md->state.special_mob_ai=1;
-		md->mode=mob_db[md->class].mode|0x04;
-		md->deletetimer=add_timer(tick+60000,mob_timer_delete,id,0);
-		clif_misceffect2(&md->bl,344);
-	}
-	clif_skill_poseffect(&sd->bl,AM_CALLHOMUN,1,x,y,tick);
-
-	return 0;
-}
-
-
-/*==========================================
- * @adjcmdlvl by [MouseJstr]
- *
- * Temp adjust the GM level required to use a GM command
- *
- * Used during beta testing to allow players to use GM commands
- * for short periods of time
- *------------------------------------------
- */
-int
-atcommand_adjcmdlvl(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-    int i, newlev;
-    char cmd[100];
-
-    if (!message || !*message || sscanf(message, "%d %s", &newlev, cmd) != 2) {
-        clif_displaymessage(fd, "usage: @adjcmdlvl <lvl> <command>.");
-        return -1;
-    }
-
-    for (i = 0; atcommand_info[i].type != AtCommand_None; i++)
-        if (strcmpi(cmd, atcommand_info[i].command+1) == 0) {
-            atcommand_info[i].level = newlev;
-            clif_displaymessage(fd, "@command level changed.");
-            return 0;
-        }
-
-    clif_displaymessage(fd, "@command not found.");
-    return -1;
-}
-
-/*==========================================
- * @adjgmlvl by [MouseJstr]
- *
- * Create a temp GM
- *
- * Used during beta testing to allow players to use GM commands
- * for short periods of time
- *------------------------------------------
- */
-int
-atcommand_adjgmlvl(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-    int newlev;
-    char user[100];
-    struct map_session_data *pl_sd;
-
-    if (!message || !*message || sscanf(message, "%d %s", &newlev, user) != 2) {
-        clif_displaymessage(fd, "usage: @adjgmlvl <lvl> <user>.");
-        return -1;
-    }
-
-    if((pl_sd=map_nick2sd((char *) user)) == NULL) 
-        return -1;
-
-    pc_set_gm_level(pl_sd->status.account_id, newlev);
-
-    return 0;
-}
-
-
-/*==========================================
- * @trade by [MouseJstr]
- *
- * Open a trade window with a remote player
- *
- * If I have to jump to a remote player one more time, I am 
- * gonna scream!
- *------------------------------------------
- */
-int
-atcommand_trade(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-    struct map_session_data *pl_sd = NULL;
-
-    if (!message || !*message)
-        return -1;
-    if((pl_sd=map_nick2sd((char *) message)) != NULL) {
-        trade_traderequest(sd, pl_sd->bl.id);
-        return 0;
-    }
-    return -1;
-}
-
-
-/*===========================
- * @unmute [Valaris]
- *===========================
-*/
-int atcommand_unmute(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	struct map_session_data *pl_sd = NULL;
-	if (!message || !*message)
-        	return -1;
-
-	if((pl_sd=map_nick2sd((char *) message)) != NULL) {
-		if(pl_sd->sc_data[SC_NOCHAT].timer!=-1) {
-			skill_status_change_end(&pl_sd->bl,SC_NOCHAT,-1); 
-			clif_displaymessage(sd->fd,"Player unmuted");
-		}
-		else
-			clif_displaymessage(sd->fd,"Player is not muted");
-	}
-
-	return 0;
-}
-
-#ifndef TXT_ONLY  /* Begin SQL-Only commands */
-
-/*==========================================
- * Mail System commands by [Valaris]
- *------------------------------------------
- */
-int atcommand_listmail(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	if(!battle_config.mail_system)
-		return 0;
-
-	nullpo_retr(-1, sd);
-
-	if(strlen(command)==12)
-		mail_check(sd,3);
-	else if(strlen(command)==9)
-		mail_check(sd,2);
-	else 
-		mail_check(sd,1);
-	return 0;
-}
-
-int atcommand_readmail(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	if(!battle_config.mail_system)
-		return 0;
-
-	nullpo_retr(-1, sd);
-
-	if (!message || !*message) {
-		clif_displaymessage(sd->fd,"You must specify a message number.");
-		return 0;
-	}
-
-	if(strlen(command)==11)
-		mail_delete(sd,atoi(message));
-	else
-		mail_read(sd,atoi(message));
-
-	return 0;
-}
-
-int atcommand_sendmail(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	if(!battle_config.mail_system)
-		return 0;
-
-	char name[24],text[80];
-
-	nullpo_retr(-1, sd);
-
-	if (!message || !*message) {
-		clif_displaymessage(sd->fd,"You must specify a recipient and a message.");
-		return 0;
-	}
-
-	if ((sscanf(message, "\"%[^\"]\" %79[^\n]", name, text) < 2) &&
-		(sscanf(message, "%23s %79[^\n]", name, text) < 2)) {
-		clif_displaymessage(sd->fd,"You must specify a recipient and a message.");
-		return 0;
-	}
-
-	if(strlen(command)==17)
-		mail_send(sd,name,text,1);
-	else 
-		mail_send(sd,name,text,0);
-
-	return 0;
-}
-
-/*==========================================
- * Refresh online command for SQL [Valaris]
- * Will refresh and check online column of
- * players and set correctly.
- *------------------------------------------
- */
-int atcommand_refreshonline(
-	const int fd, struct map_session_data* sd,
-	const char* command, const char* message)
-{
-	nullpo_retr(-1, sd);
-
-	char_online_check();
-	
-	return 0;
-}
-
-#endif /* end sql only */
diff --git a/misc/src/map/atcommand.h b/misc/src/map/atcommand.h
deleted file mode 100644
index 06029a5..0000000
--- a/misc/src/map/atcommand.h
+++ /dev/null
@@ -1,245 +0,0 @@
-// $Id: atcommand.h 148 2004-09-30 14:05:37Z MouseJstr $
-#ifndef _ATCOMMAND_H_
-#define _ATCOMMAND_H_
-
-enum AtCommandType {
-	AtCommand_None = -1,
-	AtCommand_Broadcast = 0,
-	AtCommand_LocalBroadcast,
-	AtCommand_MapMove,
-	AtCommand_ResetState,
-	AtCommand_RuraP,
-	AtCommand_Rura,
-	AtCommand_Warp,
-	AtCommand_Where,
-	AtCommand_JumpTo,
-	AtCommand_Jump,
-	AtCommand_Who,
-	AtCommand_Who2,
-	AtCommand_Who3,
-	AtCommand_WhoMap,
-	AtCommand_WhoMap2,
-	AtCommand_WhoMap3,
-	AtCommand_WhoGM,
-	AtCommand_Save,
-	AtCommand_Load,
-	AtCommand_Speed,
-	AtCommand_Storage,
-	AtCommand_GuildStorage,
-	AtCommand_Option,
-	AtCommand_Hide,
-	AtCommand_JobChange,
-	AtCommand_JobChange2,
-	AtCommand_JobChange3,
-	AtCommand_Die,
-	AtCommand_Kill,
-	AtCommand_Alive,
-	AtCommand_Kami,
-	AtCommand_KamiB,
-	AtCommand_Heal,
-	AtCommand_Item,
-	AtCommand_Item2,
-	AtCommand_ItemReset,
-	AtCommand_ItemCheck,
-	AtCommand_BaseLevelUp,
-	AtCommand_JobLevelUp,
-	AtCommand_H,
-	AtCommand_Help,
-	AtCommand_GM,
-	AtCommand_PvPOff,
-	AtCommand_PvPOn,
-	AtCommand_GvGOff,
-	AtCommand_GvGOn,
-	AtCommand_Model,
-	AtCommand_Go,
-	AtCommand_Spawn,
-	AtCommand_Monster,
-	AtCommand_KillMonster,
-	AtCommand_KillMonster2,
-	AtCommand_Refine,
-	AtCommand_Produce,
-	AtCommand_Memo,
-	AtCommand_GAT,
-	AtCommand_Packet,
-	AtCommand_StatusPoint,
-	AtCommand_SkillPoint,
-	AtCommand_Zeny,
-	AtCommand_Param,
-	AtCommand_Strength,
-	AtCommand_Agility,
-	AtCommand_Vitality,
-	AtCommand_Intelligence,
-	AtCommand_Dexterity,
-	AtCommand_Luck,
-	AtCommand_GuildLevelUp,
-	AtCommand_MakeEgg,
-	AtCommand_PetFriendly,
-	AtCommand_PetHungry,
-	AtCommand_PetRename,
-	AtCommand_CharPetRename, // by Yor
-	AtCommand_Recall,
-	AtCommand_CharacterJob,
-	AtCommand_CharacterJob2,
-	AtCommand_CharacterJob3,
-	AtCommand_Revive,
-	AtCommand_CharacterStats,
-	AtCommand_CharacterStatsAll,
-	AtCommand_CharacterOption,
-	AtCommand_CharacterSave,
-	AtCommand_CharacterLoad,
-	AtCommand_Night,
-	AtCommand_Day,
-	AtCommand_Doom,
-	AtCommand_DoomMap,
-	AtCommand_Raise,
-	AtCommand_RaiseMap,
-	AtCommand_CharacterBaseLevel,
-	AtCommand_CharacterJobLevel,
-	AtCommand_Kick,
-	AtCommand_KickAll,
-	AtCommand_AllSkill,
-	AtCommand_QuestSkill,
-	AtCommand_CharQuestSkill,
-	AtCommand_LostSkill,
-	AtCommand_CharLostSkill,
-	AtCommand_SpiritBall,
-	AtCommand_Party,
-	AtCommand_Guild,
-	AtCommand_AgitStart,
-	AtCommand_AgitEnd,
-	AtCommand_MapExit,
-	AtCommand_IDSearch,
-	AtCommand_CharSkReset,
-	AtCommand_CharStReset,
-	AtCommand_CharReset,
-	//by chbrules
-	AtCommand_CharModel, 
-	AtCommand_CharSKPoint,
-	AtCommand_CharSTPoint, 
-	AtCommand_CharZeny,
-	AtCommand_RecallAll,
-	AtCommand_ReloadItemDB,
-	AtCommand_ReloadMobDB,
-	AtCommand_ReloadSkillDB,
-#ifndef TXT_ONLY
-	AtCommand_Rehash,
-#else /* TXT_ONLY */
-	AtCommand_ReloadScript,
-#endif /* TXT_ONLY */
-	AtCommand_ReloadGMDB,
-	AtCommand_MapInfo,
-	AtCommand_Dye,
-	AtCommand_Hstyle,
-	AtCommand_Hcolor,
-	AtCommand_StatAll,
-	AtCommand_CharChangeSex, // by Yor
-	AtCommand_CharBlock, // by Yor
-	AtCommand_CharBan, // by Yor
-	AtCommand_CharUnBlock, // by Yor
-	AtCommand_CharUnBan, // by Yor
-	AtCommand_MountPeco, // by Valaris
-	AtCommand_CharMountPeco, // by Yor
-	AtCommand_GuildSpy, // [Syrus22]
-	AtCommand_PartySpy, // [Syrus22]
-	AtCommand_RepairAll, // [Valaris]
-	AtCommand_GuildRecall, // by Yor
-	AtCommand_PartyRecall, // by Yor
-//	AtCommand_Nuke,	// [Valaris]
-	AtCommand_Enablenpc,
-	AtCommand_Disablenpc,
-	AtCommand_ServerTime, // by Yor
-	AtCommand_CharDelItem, // by Yor
-	AtCommand_Jail, // by Yor
-	AtCommand_UnJail, // by Yor
-	AtCommand_Disguise, // [Valaris]
-	AtCommand_UnDisguise, // by Yor
-	AtCommand_IgnoreList, // by Yor
-	AtCommand_CharIgnoreList, // by Yor
-	AtCommand_InAll, // by Yor
-	AtCommand_ExAll, // by Yor
-	AtCommand_CharDisguise, // Kalaspuff
-	AtCommand_CharUnDisguise, // Kalaspuff
-	AtCommand_EMail, // by Yor
-	AtCommand_Hatch,
-	AtCommand_Effect, // by Apple
-	AtCommand_Char_Item_List, // by Yor
-	AtCommand_Char_Storage_List, // by Yor
-	AtCommand_Char_Cart_List, // by Yor
-	AtCommand_AddWarp, // by MouseJstr
-	AtCommand_Follow, // by MouseJstr
-	AtCommand_SkillOn, // by MouseJstr
-	AtCommand_SkillOff, // by MouseJstr
-	AtCommand_Killer, // by MouseJstr
-	AtCommand_NpcMove, // by MouseJstr
-	AtCommand_Killable, // by MouseJstr
-	AtCommand_CharKillable, // by MouseJstr
-	AtCommand_Chareffect, // by MouseJstr
-	AtCommand_Chardye, // by MouseJstr
-	AtCommand_Charhairstyle, // by MouseJstr
-	AtCommand_Charhaircolor, // by MouseJstr
-	AtCommand_Dropall, // by MouseJstr
-	AtCommand_Chardropall, // by MouseJstr
-	AtCommand_Storeall, // by MouseJstr
-	AtCommand_Charstoreall, // by MouseJstr
-	AtCommand_Skillid, // by MouseJstr
-	AtCommand_Useskill, // by MouseJstr
-	AtCommand_Summon,
-	AtCommand_Rain,
-	AtCommand_Snow,
-	AtCommand_Sakura,
-	AtCommand_Fog,
-	AtCommand_Leaves,
-	AtCommand_AdjGmLvl,
-	AtCommand_AdjCmdLvl,
-	AtCommand_Trade,
-	AtCommand_UnMute,	
-
-	// SQL-only commands start
-#ifndef TXT_ONLY 
-	AtCommand_CheckMail, // [Valaris]
-	AtCommand_ListMail, // [Valaris]
-	AtCommand_ListNewMail, // [Valaris]
-	AtCommand_ReadMail, // [Valaris]
-	AtCommand_SendMail, // [Valaris]
-	AtCommand_DeleteMail, // [Valaris]
-	AtCommand_SendPriorityMail, // [Valaris]
-	AtCommand_Sound, // [Valaris]	
-	AtCommand_RefreshOnline, // [Valaris]
-	// SQL-only commands end
-#endif
-	
-	// end
-	AtCommand_Unknown,
-	AtCommand_MAX
-};
-
-typedef enum AtCommandType AtCommandType;
-
-typedef struct AtCommandInfo {
-	AtCommandType type;
-	const char* command;
-	int level;
-	int (*proc)(const int, struct map_session_data*,
-		const char* command, const char* message);
-} AtCommandInfo;
-
-AtCommandType
-is_atcommand(const int fd, struct map_session_data* sd, const char* message, int gmlvl);
-
-AtCommandType atcommand(
-	const int level, const char* message, AtCommandInfo* info);
-int get_atcommand_level(const AtCommandType type);
-
-char * msg_txt(int msg_number); // [Yor]
-
-int atcommand_item(const int fd, struct map_session_data* sd,const char* command, const char* message); // [Valaris]
-int atcommand_rura(const int fd, struct map_session_data* sd,const char* command, const char* message); // [Yor]
-int atcommand_spawn(const int fd, struct map_session_data* sd, const char* command, const char* message); // [Valaris]
-int atcommand_jumpto(const int fd, struct map_session_data* sd, const char* command, const char* message); // [Yor]
-int atcommand_recall(const int fd, struct map_session_data* sd, const char* command, const char* message); // [Yor]
-
-int atcommand_config_read(const char *cfgName);
-int msg_config_read(const char *cfgName);
-
-#endif
-
diff --git a/misc/src/map/battle.c b/misc/src/map/battle.c
deleted file mode 100644
index 7a6dd47..0000000
--- a/misc/src/map/battle.c
+++ /dev/null
@@ -1,5374 +0,0 @@
-// $Id: battle.c,v 1.10 2004/09/29 21:08:17 Akitasha Exp $
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include "battle.h"
-
-#include "timer.h"
-#include "nullpo.h"
-#include "malloc.h"
-
-#include "map.h"
-#include "pc.h"
-#include "skill.h"
-#include "mob.h"
-#include "itemdb.h"
-#include "clif.h"
-#include "pet.h"
-#include "guild.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-int attr_fix_table[4][10][10];
-
-struct Battle_Config battle_config;
-
-/*==========================================
- * ��_�Ԃ̋�����Ԃ�
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-static int distance(int x0,int y0,int x1,int y1)
-{
-	int dx,dy;
-
-	dx=abs(x0-x1);
-	dy=abs(y0-y1);
-	return dx>dy ? dx : dy;
-}
-
-/*==========================================
- * ���������b�N���Ă���Ώۂ̐���Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_counttargeted(struct block_list *bl,struct block_list *src,int target_lv)
-{
-	nullpo_retr(0, bl);
-	if(bl->type == BL_PC)
-		return pc_counttargeted((struct map_session_data *)bl,src,target_lv);
-	else if(bl->type == BL_MOB)
-		return mob_counttargeted((struct mob_data *)bl,src,target_lv);
-	return 0;
-}
-/*==========================================
- * �Ώۂ�Class��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_class(struct block_list *bl)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		return ((struct mob_data *)bl)->class;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return ((struct map_session_data *)bl)->status.class;
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		return ((struct pet_data *)bl)->class;
-	else
-		return 0;
-}
-/*==========================================
- * �Ώۂ̕�����Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_dir(struct block_list *bl)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		return ((struct mob_data *)bl)->dir;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return ((struct map_session_data *)bl)->dir;
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		return ((struct pet_data *)bl)->dir;
-	else
-		return 0;
-}
-/*==========================================
- * �Ώۂ̃��x����Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_lv(struct block_list *bl)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		return mob_db[((struct mob_data *)bl)->class].lv;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return ((struct map_session_data *)bl)->status.base_level;
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		return ((struct pet_data *)bl)->msd->pet.level;
-	else
-		return 0;
-}
-/*==========================================
- * �Ώۂ̎˒���Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_range(struct block_list *bl)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		return mob_db[((struct mob_data *)bl)->class].range;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return ((struct map_session_data *)bl)->attackrange;
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		return mob_db[((struct pet_data *)bl)->class].range;
-	else
-		return 0;
-}
-/*==========================================
- * �Ώۂ�HP��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_hp(struct block_list *bl)
-{
-	nullpo_retr(1, bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		return ((struct mob_data *)bl)->hp;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return ((struct map_session_data *)bl)->status.hp;
-	else
-		return 1;
-}
-/*==========================================
- * �Ώۂ�MHP��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_max_hp(struct block_list *bl)
-{
-	nullpo_retr(1, bl);
-	if(bl->type==BL_PC && ((struct map_session_data *)bl))
-		return ((struct map_session_data *)bl)->status.max_hp;
-	else {
-		struct status_change *sc_data=battle_get_sc_data(bl);
-		int max_hp=1;
-		if(bl->type==BL_MOB && ((struct mob_data*)bl)) {
-			max_hp = mob_db[((struct mob_data*)bl)->class].max_hp;
-			if(mob_db[((struct mob_data*)bl)->class].mexp > 0) {
-				if(battle_config.mvp_hp_rate != 100)
-					max_hp = (max_hp * battle_config.mvp_hp_rate)/100;
-			}
-			else {
-				if(battle_config.monster_hp_rate != 100)
-					max_hp = (max_hp * battle_config.monster_hp_rate)/100;
-			}
-		}
-		else if(bl->type==BL_PET && ((struct pet_data*)bl)) {
-			max_hp = mob_db[((struct pet_data*)bl)->class].max_hp;
-			if(mob_db[((struct pet_data*)bl)->class].mexp > 0) {
-				if(battle_config.mvp_hp_rate != 100)
-					max_hp = (max_hp * battle_config.mvp_hp_rate)/100;
-			}
-			else {
-				if(battle_config.monster_hp_rate != 100)
-					max_hp = (max_hp * battle_config.monster_hp_rate)/100;
-			}
-		}
-		if(sc_data) {
-			if(sc_data[SC_APPLEIDUN].timer!=-1)
-				max_hp += ((5+sc_data[SC_APPLEIDUN].val1*2+((sc_data[SC_APPLEIDUN].val2+1)>>1)
-						+sc_data[SC_APPLEIDUN].val3/10) * max_hp)/100;
-		}
-		if(max_hp < 1) max_hp = 1;
-		return max_hp;
-	}
-	return 1;
-}
-/*==========================================
- * �Ώۂ�Str��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_str(struct block_list *bl)
-{
-	int str=0;
-	struct status_change *sc_data;
-
-	nullpo_retr(0, bl);
-	sc_data=battle_get_sc_data(bl);
-	if(bl->type==BL_MOB && ((struct mob_data *)bl))
-		str = mob_db[((struct mob_data *)bl)->class].str;
-	else if(bl->type==BL_PC && ((struct map_session_data *)bl))
-		return ((struct map_session_data *)bl)->paramc[0];
-	else if(bl->type==BL_PET && ((struct pet_data *)bl))
-		str = mob_db[((struct pet_data *)bl)->class].str;
-
-	if(sc_data) {
-		if(sc_data[SC_LOUD].timer!=-1 && sc_data[SC_QUAGMIRE].timer == -1 && bl->type != BL_PC)
-			str += 4;
-		if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){	// �u���b�V���O
-			int race=battle_get_race(bl);
-			if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 )	str >>= 1;	// �� ��/�s��
-			else str += sc_data[SC_BLESSING].val1;	// ���̑�
-		}
-		if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC)	// �g�D���[�T�C�g
-			str += 5;
-	}
-	if(str < 0) str = 0;
-	return str;
-}
-/*==========================================
- * �Ώۂ�Agi��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-
-int battle_get_agi(struct block_list *bl)
-{
-	int agi=0;
-	struct status_change *sc_data;
-
-	nullpo_retr(0, bl);
-	sc_data=battle_get_sc_data(bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		agi=mob_db[((struct mob_data *)bl)->class].agi;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		agi=((struct map_session_data *)bl)->paramc[1];
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		agi=mob_db[((struct pet_data *)bl)->class].agi;
-
-	if(sc_data) {
-		if( sc_data[SC_INCREASEAGI].timer!=-1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1 &&
-			bl->type != BL_PC)	// ���x����(PC��pc.c��)
-			agi += 2+sc_data[SC_INCREASEAGI].val1;
-
-		if(sc_data[SC_CONCENTRATE].timer!=-1 && sc_data[SC_QUAGMIRE].timer == -1 && bl->type != BL_PC)
-			agi += agi*(2+sc_data[SC_CONCENTRATE].val1)/100;
-
-		if(sc_data[SC_DECREASEAGI].timer!=-1)	// ���x����
-			agi -= 2+sc_data[SC_DECREASEAGI].val1;
-
-		if(sc_data[SC_QUAGMIRE].timer!=-1 )	// �N�@�O�}�C�A
-			agi >>= 1;
-		if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC)	// �g�D���[�T�C�g
-			agi += 5;
-	}
-	if(agi < 0) agi = 0;
-	return agi;
-}
-/*==========================================
- * �Ώۂ�Vit��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_vit(struct block_list *bl)
-{
-	int vit=0;
-	struct status_change *sc_data;
-
-	nullpo_retr(0, bl);
-	sc_data=battle_get_sc_data(bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		vit=mob_db[((struct mob_data *)bl)->class].vit;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		vit=((struct map_session_data *)bl)->paramc[2];
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		vit=mob_db[((struct pet_data *)bl)->class].vit;
-	if(sc_data) {
-		if(sc_data[SC_STRIPARMOR].timer != -1 && bl->type!=BL_PC)
-		vit = vit*60/100;
-		if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC)	// �g�D���[�T�C�g
-			vit += 5;
-	}
-
-	if(vit < 0) vit = 0;
-	return vit;
-}
-/*==========================================
- * �Ώۂ�Int��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_int(struct block_list *bl)
-{
-	int int_=0;
-	struct status_change *sc_data;
-
-	nullpo_retr(0, bl);
-	sc_data=battle_get_sc_data(bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		int_=mob_db[((struct mob_data *)bl)->class].int_;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		int_=((struct map_session_data *)bl)->paramc[3];
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		int_=mob_db[((struct pet_data *)bl)->class].int_;
-
-	if(sc_data) {
-		if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){	// �u���b�V���O
-			int race=battle_get_race(bl);
-			if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 )	int_ >>= 1;	// �� ��/�s��
-			else int_ += sc_data[SC_BLESSING].val1;	// ���̑�
-		}
-		if( sc_data[SC_STRIPHELM].timer != -1 && bl->type != BL_PC)
-			int_ = int_*60/100;
-		if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC)	// �g�D���[�T�C�g
-			int_ += 5;
-	}
-	if(int_ < 0) int_ = 0;
-	return int_;
-}
-/*==========================================
- * �Ώۂ�Dex��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_dex(struct block_list *bl)
-{
-	int dex=0;
-	struct status_change *sc_data;
-
-	nullpo_retr(0, bl);
-	sc_data=battle_get_sc_data(bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		dex=mob_db[((struct mob_data *)bl)->class].dex;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		dex=((struct map_session_data *)bl)->paramc[4];
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		dex=mob_db[((struct pet_data *)bl)->class].dex;
-
-	if(sc_data) {
-		if(sc_data[SC_CONCENTRATE].timer!=-1 && sc_data[SC_QUAGMIRE].timer == -1 && bl->type != BL_PC)
-			dex += dex*(2+sc_data[SC_CONCENTRATE].val1)/100;
-
-		if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){	// �u���b�V���O
-			int race=battle_get_race(bl);
-			if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 )	dex >>= 1;	// �� ��/�s��
-			else dex += sc_data[SC_BLESSING].val1;	// ���̑�
-		}
-
-		if(sc_data[SC_QUAGMIRE].timer!=-1 )	// �N�@�O�}�C�A
-			dex >>= 1;
-		if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC)	// �g�D���[�T�C�g
-			dex += 5;
-	}
-	if(dex < 0) dex = 0;
-	return dex;
-}
-/*==========================================
- * �Ώۂ�Luk��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_luk(struct block_list *bl)
-{
-	int luk=0;
-	struct status_change *sc_data;
-
-	nullpo_retr(0, bl);
-	sc_data=battle_get_sc_data(bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		luk=mob_db[((struct mob_data *)bl)->class].luk;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		luk=((struct map_session_data *)bl)->paramc[5];
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		luk=mob_db[((struct pet_data *)bl)->class].luk;
-
-	if(sc_data) {
-		if(sc_data[SC_GLORIA].timer!=-1 && bl->type != BL_PC)	// �O�����A(PC��pc.c��)
-			luk += 30;
-		if(sc_data[SC_CURSE].timer!=-1 )		// ��
-			luk=0;
-		if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC)	// �g�D���[�T�C�g
-			luk += 5;
-	}
-	if(luk < 0) luk = 0;
-	return luk;
-}
-
-/*==========================================
- * �Ώۂ�Flee��Ԃ�(�ėp)
- * �߂�͐�����1�ȏ�
- *------------------------------------------
- */
-int battle_get_flee(struct block_list *bl)
-{
-	int flee=1;
-	struct status_change *sc_data;
-
-	nullpo_retr(1, bl);
-	sc_data=battle_get_sc_data(bl);
-	if(bl->type==BL_PC && (struct map_session_data *)bl)
-		flee=((struct map_session_data *)bl)->flee;
-	else
-		flee=battle_get_agi(bl) + battle_get_lv(bl);
-
-	if(sc_data) {
-		if(sc_data[SC_WHISTLE].timer!=-1 && bl->type != BL_PC)
-			flee += flee*(sc_data[SC_WHISTLE].val1+sc_data[SC_WHISTLE].val2
-					+(sc_data[SC_WHISTLE].val3>>16))/100;
-		if(sc_data[SC_BLIND].timer!=-1 && bl->type != BL_PC)
-			flee -= flee*25/100;
-		if(sc_data[SC_WINDWALK].timer!=-1 && bl->type != BL_PC) // �E�B���h�E�H�[�N
-			flee += flee*(sc_data[SC_WINDWALK].val2)/100;
-		if(sc_data[SC_SPIDERWEB].timer!=-1 && bl->type != BL_PC) //�X�p�C�_�[�E�F�u
-			flee -= flee*50/100;
-	}
-	if(flee < 1) flee = 1;
-	return flee;
-}
-/*==========================================
- * �Ώۂ�Hit��Ԃ�(�ėp)
- * �߂�͐�����1�ȏ�
- *------------------------------------------
- */
-int battle_get_hit(struct block_list *bl)
-{
-	int hit=1;
-	struct status_change *sc_data;
-
-	nullpo_retr(1, bl);
-	sc_data=battle_get_sc_data(bl);
-	if(bl->type==BL_PC && (struct map_session_data *)bl)
-		hit=((struct map_session_data *)bl)->hit;
-	else
-		hit=battle_get_dex(bl) + battle_get_lv(bl);
-
-	if(sc_data) {
-		if(sc_data[SC_HUMMING].timer!=-1 && bl->type != BL_PC)	//
-			hit += hit*(sc_data[SC_HUMMING].val1*2+sc_data[SC_HUMMING].val2
-					+sc_data[SC_HUMMING].val3)/100;
-		if(sc_data[SC_BLIND].timer!=-1 && bl->type != BL_PC)		// ��
-			hit -= hit*25/100;
-		if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC)		// �g�D���[�T�C�g
-			hit += 3*(sc_data[SC_TRUESIGHT].val1);
-		if(sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) //�R���Z���g���[�V����
-			hit += (hit*(10*(sc_data[SC_CONCENTRATION].val1)))/100;
-	}
-	if(hit < 1) hit = 1;
-	return hit;
-}
-/*==========================================
- * �Ώۂ̊��S�����Ԃ�(�ėp)
- * �߂�͐�����1�ȏ�
- *------------------------------------------
- */
-int battle_get_flee2(struct block_list *bl)
-{
-	int flee2=1;
-	struct status_change *sc_data;
-
-	nullpo_retr(1, bl);
-	sc_data=battle_get_sc_data(bl);
-	if(bl->type==BL_PC && (struct map_session_data *)bl){
-		flee2 = battle_get_luk(bl) + 10;
-		flee2 += ((struct map_session_data *)bl)->flee2 - (((struct map_session_data *)bl)->paramc[5] + 10);
-	}
-	else
-		flee2=battle_get_luk(bl)+1;
-
-	if(sc_data) {
-		if(sc_data[SC_WHISTLE].timer!=-1 && bl->type != BL_PC)
-			flee2 += (sc_data[SC_WHISTLE].val1+sc_data[SC_WHISTLE].val2
-					+(sc_data[SC_WHISTLE].val3&0xffff))*10;
-	}
-	if(flee2 < 1) flee2 = 1;
-	return flee2;
-}
-/*==========================================
- * �Ώۂ̃N���e�B�J����Ԃ�(�ėp)
- * �߂�͐�����1�ȏ�
- *------------------------------------------
- */
-int battle_get_critical(struct block_list *bl)
-{
-	int critical=1;
-	struct status_change *sc_data;
-
-	nullpo_retr(1, bl);
-	sc_data=battle_get_sc_data(bl);
-	if(bl->type==BL_PC && (struct map_session_data *)bl){
-		critical = battle_get_luk(bl)*3 + 10;
-		critical += ((struct map_session_data *)bl)->critical - ((((struct map_session_data *)bl)->paramc[5]*3) + 10);
-	}
-	else
-		critical=battle_get_luk(bl)*3 + 1;
-
-	if(sc_data) {
-		if(sc_data[SC_FORTUNE].timer!=-1 && bl->type != BL_PC)
-			critical += (10+sc_data[SC_FORTUNE].val1+sc_data[SC_FORTUNE].val2
-					+sc_data[SC_FORTUNE].val3)*10;
-		if(sc_data[SC_EXPLOSIONSPIRITS].timer!=-1 && bl->type != BL_PC)
-			critical += sc_data[SC_EXPLOSIONSPIRITS].val2;
-		if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) //�g�D���[�T�C�g
-			critical += critical*sc_data[SC_TRUESIGHT].val1/100;
-	}
-	if(critical < 1) critical = 1;
-	return critical;
-}
-/*==========================================
- * base_atk�̎擾
- * �߂�͐�����1�ȏ�
- *------------------------------------------
- */
-int battle_get_baseatk(struct block_list *bl)
-{
-	struct status_change *sc_data;
-	int batk=1;
-
-	nullpo_retr(1, bl);
-	sc_data=battle_get_sc_data(bl);
-	if(bl->type==BL_PC && (struct map_session_data *)bl)
-		batk = ((struct map_session_data *)bl)->base_atk; //�ݒ肳��Ă���base_atk
-	else { //����ȊO�Ȃ�
-		int str,dstr;
-		str = battle_get_str(bl); //STR
-		dstr = str/10;
-		batk = dstr*dstr + str; //base_atk���v�Z����
-	}
-	if(sc_data) { //��Ԉُ킠��
-		if(sc_data[SC_PROVOKE].timer!=-1 && bl->type != BL_PC) //PC�Ńv���{�b�N(SM_PROVOKE)���
-			batk = batk*(100+2*sc_data[SC_PROVOKE].val1)/100; //base_atk����
-		if(sc_data[SC_CURSE].timer!=-1 ) //���������
-			batk -= batk*25/100; //base_atk��25%����
-		if(sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) //�R���Z���g���[�V����
-			batk += batk*(5*sc_data[SC_CONCENTRATION].val1)/100;
-	}
-	if(batk < 1) batk = 1; //base_atk�͍Œ�ł�1
-	return batk;
-}
-/*==========================================
- * �Ώۂ�Atk��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_atk(struct block_list *bl)
-{
-	struct status_change *sc_data;
-	int atk=0;
-
-	nullpo_retr(0, bl);
-	sc_data=battle_get_sc_data(bl);
-	if(bl->type==BL_PC && (struct map_session_data *)bl)
-		atk = ((struct map_session_data*)bl)->watk;
-	else if(bl->type==BL_MOB && (struct mob_data *)bl)
-		atk = mob_db[((struct mob_data*)bl)->class].atk1;
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		atk = mob_db[((struct pet_data*)bl)->class].atk1;
-
-	if(sc_data) {
-		if(sc_data[SC_PROVOKE].timer!=-1 && bl->type != BL_PC)
-			atk = atk*(100+2*sc_data[SC_PROVOKE].val1)/100;
-		if(sc_data[SC_CURSE].timer!=-1 )
-			atk -= atk*25/100;
-		if(sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) //�R���Z���g���[�V����
-			atk += atk*(5*sc_data[SC_CONCENTRATION].val1)/100;
-	}
-	if(atk < 0) atk = 0;
-	return atk;
-}
-/*==========================================
- * �Ώۂ̍���Atk��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_atk_(struct block_list *bl)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_PC && (struct map_session_data *)bl){
-		int atk=((struct map_session_data*)bl)->watk_;
-
-		if(((struct map_session_data *)bl)->sc_data[SC_CURSE].timer!=-1 )
-			atk -= atk*25/100;
-		return atk;
-	}
-	else
-		return 0;
-}
-/*==========================================
- * �Ώۂ�Atk2��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_atk2(struct block_list *bl)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return ((struct map_session_data*)bl)->watk2;
-	else {
-		struct status_change *sc_data=battle_get_sc_data(bl);
-		int atk2=0;
-		if(bl->type==BL_MOB && (struct mob_data *)bl)
-			atk2 = mob_db[((struct mob_data*)bl)->class].atk2;
-		else if(bl->type==BL_PET && (struct pet_data *)bl)
-			atk2 = mob_db[((struct pet_data*)bl)->class].atk2;
-		if(sc_data) {
-			if( sc_data[SC_IMPOSITIO].timer!=-1)
-				atk2 += sc_data[SC_IMPOSITIO].val1*5;
-			if( sc_data[SC_PROVOKE].timer!=-1 )
-				atk2 = atk2*(100+2*sc_data[SC_PROVOKE].val1)/100;
-			if( sc_data[SC_CURSE].timer!=-1 )
-				atk2 -= atk2*25/100;
-			if(sc_data[SC_DRUMBATTLE].timer!=-1)
-				atk2 += sc_data[SC_DRUMBATTLE].val2;
-			if(sc_data[SC_NIBELUNGEN].timer!=-1 && (battle_get_element(bl)/10) >= 8 )
-				atk2 += sc_data[SC_NIBELUNGEN].val2;
-			if(sc_data[SC_STRIPWEAPON].timer!=-1)
-				atk2 = atk2*90/100;
-			if(sc_data[SC_CONCENTRATION].timer!=-1) //�R���Z���g���[�V����
-				atk2 += atk2*(5*sc_data[SC_CONCENTRATION].val1)/100;
-		}
-		if(atk2 < 0) atk2 = 0;
-		return atk2;
-	}
-	return 0;
-}
-/*==========================================
- * �Ώۂ̍���Atk2��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_atk_2(struct block_list *bl)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return ((struct map_session_data*)bl)->watk_2;
-	else
-		return 0;
-}
-/*==========================================
- * �Ώۂ�MAtk1��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_matk1(struct block_list *bl)
-{
-	struct status_change *sc_data;
-	nullpo_retr(0, bl);
-	sc_data=battle_get_sc_data(bl);
-	if(bl->type==BL_MOB){
-		int matk,int_=battle_get_int(bl);
-		matk = int_+(int_/5)*(int_/5);
-
-		if(sc_data)
-			if(sc_data[SC_MINDBREAKER].timer!=-1 && bl->type != BL_PC)
-				matk = matk*(100+2*sc_data[SC_MINDBREAKER].val1)/100;
-			return matk;
-	}
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return ((struct map_session_data *)bl)->matk1;
-	else if(bl->type==BL_PET){
-		int matk,int_=battle_get_int(bl);
-		matk = int_+(int_/5)*(int_/5);
-
-		if(sc_data)
-			if(sc_data[SC_MINDBREAKER].timer!=-1 && bl->type != BL_PC)
-				matk = matk*(100+2*sc_data[SC_MINDBREAKER].val1)/100;
-		return matk;
-	}
-	else
-		return 0;
-}
-/*==========================================
- * �Ώۂ�MAtk2��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_matk2(struct block_list *bl)
-{
-	struct status_change *sc_data=battle_get_sc_data(bl);
-	nullpo_retr(0, bl);
-	if(bl->type==BL_MOB){
-		int matk,int_=battle_get_int(bl);
-		matk = int_+(int_/7)*(int_/7);
-
-		if(sc_data)
-			if(sc_data[SC_MINDBREAKER].timer!=-1 && bl->type != BL_PC)
-				matk = matk*(100+2*sc_data[SC_MINDBREAKER].val1)/100;
-			return matk;
-	}
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return ((struct map_session_data *)bl)->matk2;
-	else if(bl->type==BL_PET){
-		int matk,int_=battle_get_int(bl);
-		matk = int_+(int_/7)*(int_/7);
-		if(sc_data)
-			if(sc_data[SC_MINDBREAKER].timer!=-1 && bl->type != BL_PC)
-				matk = matk*(100+2*sc_data[SC_MINDBREAKER].val1)/100;
-			return matk;
-	}
-	else
-		return 0;
-}
-/*==========================================
- * �Ώۂ�Def��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_def(struct block_list *bl)
-{
-	struct status_change *sc_data;
-	int def=0,skilltimer=-1,skillid=0;
-
-	nullpo_retr(0, bl);
-	sc_data=battle_get_sc_data(bl);
-	if(bl->type==BL_PC && (struct map_session_data *)bl){
-		def = ((struct map_session_data *)bl)->def;
-		skilltimer = ((struct map_session_data *)bl)->skilltimer;
-		skillid = ((struct map_session_data *)bl)->skillid;
-	}
-	else if(bl->type==BL_MOB && (struct mob_data *)bl) {
-		def = mob_db[((struct mob_data *)bl)->class].def;
-		skilltimer = ((struct mob_data *)bl)->skilltimer;
-		skillid = ((struct mob_data *)bl)->skillid;
-	}
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		def = mob_db[((struct pet_data *)bl)->class].def;
-
-	if(def < 1000000) {
-		if(sc_data) {
-			//�L�[�s���O����DEF100
-			if( sc_data[SC_KEEPING].timer!=-1)
-				def = 100;
-			//�v���{�b�N���͌��Z
-			if( sc_data[SC_PROVOKE].timer!=-1 && bl->type != BL_PC)
-				def = (def*(100 - 6*sc_data[SC_PROVOKE].val1)+50)/100;
-			//�푾�ۂ̋������͉��Z
-			if( sc_data[SC_DRUMBATTLE].timer!=-1 && bl->type != BL_PC)
-				def += sc_data[SC_DRUMBATTLE].val3;
-			//�łɂ������Ă��鎞�͌��Z
-			if(sc_data[SC_POISON].timer!=-1 && bl->type != BL_PC)
-				def = def*75/100;
-			//�X�g���b�v�V�[���h���͌��Z
-			if(sc_data[SC_STRIPSHIELD].timer!=-1 && bl->type != BL_PC)
-				def = def*85/100;
-			//�V�O�i���N���V�X���͌��Z
-			if(sc_data[SC_SIGNUMCRUCIS].timer!=-1 && bl->type != BL_PC)
-				def = def * (100 - sc_data[SC_SIGNUMCRUCIS].val2)/100;
-			//�i���̍��׎���DEF0�ɂȂ�
-			if(sc_data[SC_ETERNALCHAOS].timer!=-1 && bl->type != BL_PC)
-				def = 0;
-			//�����A�Ή����͉E�V�t�g
-			if(sc_data[SC_FREEZE].timer != -1 || (sc_data[SC_STONE].timer != -1 && sc_data[SC_STONE].val2 == 0))
-				def >>= 1;
-			//�R���Z���g���[�V�������͌��Z
-			if( sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC)
-				def = (def*(100 - 5*sc_data[SC_CONCENTRATION].val1))/100;
-		}
-		//�r�����͉r�������Z���Ɋ�Â��Č��Z
-		if(skilltimer != -1) {
-			int def_rate = skill_get_castdef(skillid);
-			if(def_rate != 0)
-				def = (def * (100 - def_rate))/100;
-		}
-	}
-	if(def < 0) def = 0;
-	return def;
-}
-/*==========================================
- * �Ώۂ�MDef��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_mdef(struct block_list *bl)
-{
-	struct status_change *sc_data;
-	int mdef=0;
-
-	nullpo_retr(0, bl);
-	sc_data=battle_get_sc_data(bl);
-	if(bl->type==BL_PC && (struct map_session_data *)bl)
-		mdef = ((struct map_session_data *)bl)->mdef;
-	else if(bl->type==BL_MOB && (struct mob_data *)bl)
-		mdef = mob_db[((struct mob_data *)bl)->class].mdef;
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		mdef = mob_db[((struct pet_data *)bl)->class].mdef;
-
-	if(mdef < 1000000) {
-		if(sc_data) {
-			//�o���A�[��Ԏ���MDEF100
-			if(sc_data[SC_BARRIER].timer != -1)
-				mdef = 100;
-			//�����A�Ή�����1.25�{
-			if(sc_data[SC_FREEZE].timer != -1 || (sc_data[SC_STONE].timer != -1 && sc_data[SC_STONE].val2 == 0))
-				mdef = mdef*125/100;
-			if( sc_data[SC_MINDBREAKER].timer!=-1 && bl->type != BL_PC)
-				mdef -= (mdef*6*sc_data[SC_MINDBREAKER].val1)/100;
-		}
-	}
-	if(mdef < 0) mdef = 0;
-	return mdef;
-}
-/*==========================================
- * �Ώۂ�Def2��Ԃ�(�ėp)
- * �߂�͐�����1�ȏ�
- *------------------------------------------
- */
-int battle_get_def2(struct block_list *bl)
-{
-	struct status_change *sc_data;
-	int def2=1;
-
-	nullpo_retr(1, bl);
-	sc_data=battle_get_sc_data(bl);
-	if(bl->type==BL_PC)
-		def2 = ((struct map_session_data *)bl)->def2;
-	else if(bl->type==BL_MOB)
-		def2 = mob_db[((struct mob_data *)bl)->class].vit;
-	else if(bl->type==BL_PET)
-		def2 = mob_db[((struct pet_data *)bl)->class].vit;
-
-	if(sc_data) {
-		if( sc_data[SC_ANGELUS].timer!=-1 && bl->type != BL_PC)
-			def2 = def2*(110+5*sc_data[SC_ANGELUS].val1)/100;
-		if( sc_data[SC_PROVOKE].timer!=-1 && bl->type != BL_PC)
-			def2 = (def2*(100 - 6*sc_data[SC_PROVOKE].val1)+50)/100;
-		if(sc_data[SC_POISON].timer!=-1 && bl->type != BL_PC)
-			def2 = def2*75/100;
-		//�R���Z���g���[�V�������͌��Z
-		if( sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC)
-			def2 = def2*(100 - 5*sc_data[SC_CONCENTRATION].val1)/100;
-	}
-	if(def2 < 1) def2 = 1;
-	return def2;
-}
-/*==========================================
- * �Ώۂ�MDef2��Ԃ�(�ėp)
- * �߂�͐�����0�ȏ�
- *------------------------------------------
- */
-int battle_get_mdef2(struct block_list *bl)
-{
-	int mdef2=0;
-	struct status_change *sc_data=battle_get_sc_data(bl);
-
-	nullpo_retr(0, bl);
-	if(bl->type==BL_MOB)
-		mdef2 = mob_db[((struct mob_data *)bl)->class].int_ + (mob_db[((struct mob_data *)bl)->class].vit>>1);
-	else if(bl->type==BL_PC)
-		mdef2 = ((struct map_session_data *)bl)->mdef2 + (((struct map_session_data *)bl)->paramc[2]>>1);
-	else if(bl->type==BL_PET)
-		mdef2 = mob_db[((struct pet_data *)bl)->class].int_ + (mob_db[((struct pet_data *)bl)->class].vit>>1);
-	if(sc_data) {
-			if( sc_data[SC_MINDBREAKER].timer!=-1 && bl->type != BL_PC)
-				mdef2 -= (mdef2*6*sc_data[SC_MINDBREAKER].val1)/100;
-		}
-	if(mdef2 < 0) mdef2 = 0;
-		return mdef2;
-}
-/*==========================================
- * �Ώۂ�Speed(�ړ����x)��Ԃ�(�ėp)
- * �߂�͐�����1�ȏ�
- * Speed�͏������ق����ړ����x������
- *------------------------------------------
- */
-int battle_get_speed(struct block_list *bl)
-{
-	nullpo_retr(1000, bl);
-	if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return ((struct map_session_data *)bl)->speed;
-	else {
-		struct status_change *sc_data=battle_get_sc_data(bl);
-		int speed = 1000;
-		if(bl->type==BL_MOB && (struct mob_data *)bl)
-//			speed = mob_db[((struct mob_data *)bl)->class].speed;
-			speed = ((struct mob_data *)bl)->speed;
-		else if(bl->type==BL_PET && (struct pet_data *)bl)
-			speed = ((struct pet_data *)bl)->msd->petDB->speed;
-
-		if(sc_data) {
-			//���x��������25%���Z
-			if(sc_data[SC_INCREASEAGI].timer!=-1 && sc_data[SC_DONTFORGETME].timer == -1)
-				speed -= speed*25/100;
-			//���x��������25%���Z
-			if(sc_data[SC_DECREASEAGI].timer!=-1)
-				speed = speed*125/100;
-			//�N�@�O�}�C�A����50%���Z
-			if(sc_data[SC_QUAGMIRE].timer!=-1)
-				speed = speed*3/2;
-			//����Y��Ȃ��Łc���͉��Z
-			if(sc_data[SC_DONTFORGETME].timer!=-1)
-				speed = speed*(100+sc_data[SC_DONTFORGETME].val1*2 + sc_data[SC_DONTFORGETME].val2 + (sc_data[SC_DONTFORGETME].val3&0xffff))/100;
-			//��������25%���Z
-			if(sc_data[SC_STEELBODY].timer!=-1)
-				speed = speed*125/100;
-			//�f�B�t�F���_�[���͉��Z
-			if(sc_data[SC_DEFENDER].timer!=-1)
-				speed = (speed * (155 - sc_data[SC_DEFENDER].val1*5)) / 100;
-			//�x���Ԃ�4�{�x��
-			if(sc_data[SC_DANCING].timer!=-1 )
-				speed*=4;
-			//�􂢎���450���Z
-			if(sc_data[SC_CURSE].timer!=-1)
-				speed = speed + 450;
-			//�E�B���h�E�H�[�N����Lv*2%���Z
-			if(sc_data[SC_WINDWALK].timer!=-1)
-				speed -= (speed*(sc_data[SC_WINDWALK].val1*2))/100;
-		}
-		if(speed < 1) speed = 1;
-		return speed;
-	}
-
-	return 1000;
-}
-/*==========================================
- * �Ώۂ�aDelay(�U�����f�B���C)��Ԃ�(�ėp)
- * aDelay�͏������ق����U�����x������
- *------------------------------------------
- */
-int battle_get_adelay(struct block_list *bl)
-{
-	nullpo_retr(4000, bl);
-	if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return (((struct map_session_data *)bl)->aspd<<1);
-	else {
-		struct status_change *sc_data=battle_get_sc_data(bl);
-		int adelay=4000,aspd_rate = 100,i;
-		if(bl->type==BL_MOB && (struct mob_data *)bl)
-			adelay = mob_db[((struct mob_data *)bl)->class].adelay;
-		else if(bl->type==BL_PET && (struct pet_data *)bl)
-			adelay = mob_db[((struct pet_data *)bl)->class].adelay;
-
-		if(sc_data) {
-			//�c�[�n���h�N�C�b�P���g�p���ŃN�@�O�}�C�A�ł�����Y��Ȃ��Łc�ł��Ȃ�����3�����Z
-			if(sc_data[SC_TWOHANDQUICKEN].timer != -1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1)	// 2HQ
-				aspd_rate -= 30;
-			//�A�h���i�������b�V���g�p���Ńc�[�n���h�N�C�b�P���ł��N�@�O�}�C�A�ł�����Y��Ȃ��Łc�ł��Ȃ�����
-			if(sc_data[SC_ADRENALINE].timer != -1 && sc_data[SC_TWOHANDQUICKEN].timer == -1 &&
-				sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) {	// �A�h���i�������b�V��
-				//�g�p�҂ƃp�[�e�B�����o�[�Ŋi�����o��ݒ�łȂ����3�����Z
-				if(sc_data[SC_ADRENALINE].val2 || !battle_config.party_skill_penaly)
-					aspd_rate -= 30;
-				//�����łȂ����2.5�����Z
-				else
-					aspd_rate -= 25;
-			}
-			//�X�s�A�N�B�b�P�����͌��Z
-			if(sc_data[SC_SPEARSQUICKEN].timer != -1 && sc_data[SC_ADRENALINE].timer == -1 &&
-				sc_data[SC_TWOHANDQUICKEN].timer == -1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1)	// �X�s�A�N�B�b�P��
-				aspd_rate -= sc_data[SC_SPEARSQUICKEN].val2;
-			//�[���̃A�T�V���N���X���͌��Z
-			if(sc_data[SC_ASSNCROS].timer!=-1 && // �[�z�̃A�T�V���N���X
-				sc_data[SC_TWOHANDQUICKEN].timer==-1 && sc_data[SC_ADRENALINE].timer==-1 && sc_data[SC_SPEARSQUICKEN].timer==-1 &&
-				sc_data[SC_DONTFORGETME].timer == -1)
-				aspd_rate -= 5+sc_data[SC_ASSNCROS].val1+sc_data[SC_ASSNCROS].val2+sc_data[SC_ASSNCROS].val3;
-			//����Y��Ȃ��Łc���͉��Z
-			if(sc_data[SC_DONTFORGETME].timer!=-1)		// ����Y��Ȃ���
-				aspd_rate += sc_data[SC_DONTFORGETME].val1*3 + sc_data[SC_DONTFORGETME].val2 + (sc_data[SC_DONTFORGETME].val3>>16);
-			//������25%���Z
-			if(sc_data[SC_STEELBODY].timer!=-1)	// ����
-				aspd_rate += 25;
-			//�����|�[�V�����g�p���͌��Z
-			if(	sc_data[i=SC_SPEEDPOTION2].timer!=-1 || sc_data[i=SC_SPEEDPOTION1].timer!=-1 || sc_data[i=SC_SPEEDPOTION0].timer!=-1)
-				aspd_rate -= sc_data[i].val2;
-			//�f�B�t�F���_�[���͉��Z
-			if(sc_data[SC_DEFENDER].timer != -1)
-				adelay += (1100 - sc_data[SC_DEFENDER].val1*100);
-		}
-		if(aspd_rate != 100)
-			adelay = adelay*aspd_rate/100;
-		if(adelay < battle_config.monster_max_aspd<<1) adelay = battle_config.monster_max_aspd<<1;
-		return adelay;
-	}
-	return 4000;
-}
-int battle_get_amotion(struct block_list *bl)
-{
-	nullpo_retr(2000, bl);
-	if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return ((struct map_session_data *)bl)->amotion;
-	else {
-		struct status_change *sc_data=battle_get_sc_data(bl);
-		int amotion=2000,aspd_rate = 100,i;
-		if(bl->type==BL_MOB && (struct mob_data *)bl)
-			amotion = mob_db[((struct mob_data *)bl)->class].amotion;
-		else if(bl->type==BL_PET && (struct pet_data *)bl)
-			amotion = mob_db[((struct pet_data *)bl)->class].amotion;
-
-		if(sc_data) {
-			if(sc_data[SC_TWOHANDQUICKEN].timer != -1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1)	// 2HQ
-				aspd_rate -= 30;
-			if(sc_data[SC_ADRENALINE].timer != -1 && sc_data[SC_TWOHANDQUICKEN].timer == -1 &&
-				sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) {	// �A�h���i�������b�V��
-				if(sc_data[SC_ADRENALINE].val2 || !battle_config.party_skill_penaly)
-					aspd_rate -= 30;
-				else
-					aspd_rate -= 25;
-			}
-			if(sc_data[SC_SPEARSQUICKEN].timer != -1 && sc_data[SC_ADRENALINE].timer == -1 &&
-				sc_data[SC_TWOHANDQUICKEN].timer == -1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1)	// �X�s�A�N�B�b�P��
-				aspd_rate -= sc_data[SC_SPEARSQUICKEN].val2;
-			if(sc_data[SC_ASSNCROS].timer!=-1 && // �[�z�̃A�T�V���N���X
-				sc_data[SC_TWOHANDQUICKEN].timer==-1 && sc_data[SC_ADRENALINE].timer==-1 && sc_data[SC_SPEARSQUICKEN].timer==-1 &&
-				sc_data[SC_DONTFORGETME].timer == -1)
-				aspd_rate -= 5+sc_data[SC_ASSNCROS].val1+sc_data[SC_ASSNCROS].val2+sc_data[SC_ASSNCROS].val3;
-			if(sc_data[SC_DONTFORGETME].timer!=-1)		// ����Y��Ȃ���
-				aspd_rate += sc_data[SC_DONTFORGETME].val1*3 + sc_data[SC_DONTFORGETME].val2 + (sc_data[SC_DONTFORGETME].val3>>16);
-			if(sc_data[SC_STEELBODY].timer!=-1)	// ����
-				aspd_rate += 25;
-			if(	sc_data[i=SC_SPEEDPOTION2].timer!=-1 || sc_data[i=SC_SPEEDPOTION1].timer!=-1 || sc_data[i=SC_SPEEDPOTION0].timer!=-1)
-				aspd_rate -= sc_data[i].val2;
-			if(sc_data[SC_DEFENDER].timer != -1)
-				amotion += (550 - sc_data[SC_DEFENDER].val1*50);
-		}
-		if(aspd_rate != 100)
-			amotion = amotion*aspd_rate/100;
-		if(amotion < battle_config.monster_max_aspd) amotion = battle_config.monster_max_aspd;
-		return amotion;
-	}
-	return 2000;
-}
-int battle_get_dmotion(struct block_list *bl)
-{
-	int ret;
-	struct status_change *sc_data;
-
-	nullpo_retr(0, bl);
-	sc_data = battle_get_sc_data(bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl){
-		ret=mob_db[((struct mob_data *)bl)->class].dmotion;
-		if(battle_config.monster_damage_delay_rate != 100)
-			ret = ret*battle_config.monster_damage_delay_rate/400;
-	}
-	else if(bl->type==BL_PC && (struct map_session_data *)bl){
-		ret=((struct map_session_data *)bl)->dmotion;
-		if(battle_config.pc_damage_delay_rate != 100)
-			ret = ret*battle_config.pc_damage_delay_rate/400;
-	}
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		ret=mob_db[((struct pet_data *)bl)->class].dmotion;
-	else
-		return 2000;
-
-	if((sc_data && sc_data[SC_ENDURE].timer!=-1) ||
-		(bl->type == BL_PC && ((struct map_session_data *)bl)->special_state.infinite_endure))
-		ret=0;
-
-	return ret;
-}
-int battle_get_element(struct block_list *bl)
-{
-	int ret = 20;
-	struct status_change *sc_data;
-
-	nullpo_retr(ret, bl);
-	sc_data = battle_get_sc_data(bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)	// 10�̈ʁ�Lv*2�A�P�̈ʁ�����
-		ret=((struct mob_data *)bl)->def_ele;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		ret=20+((struct map_session_data *)bl)->def_ele;	// �h�䑮��Lv1
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		ret = mob_db[((struct pet_data *)bl)->class].element;
-
-	if(sc_data) {
-		if( sc_data[SC_BENEDICTIO].timer!=-1 )	// ���̍~��
-			ret=26;
-		if( sc_data[SC_FREEZE].timer!=-1 )	// ����
-			ret=21;
-		if( sc_data[SC_STONE].timer!=-1 && sc_data[SC_STONE].val2==0)
-			ret=22;
-	}
-
-	return ret;
-}
-int battle_get_attack_element(struct block_list *bl)
-{
-	int ret = 0;
-	struct status_change *sc_data=battle_get_sc_data(bl);
-
-	nullpo_retr(0, bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		ret=0;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		ret=((struct map_session_data *)bl)->atk_ele;
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		ret=0;
-
-	if(sc_data) {
-		if( sc_data[SC_FROSTWEAPON].timer!=-1)	// �t���X�g�E�F�|��
-			ret=1;
-		if( sc_data[SC_SEISMICWEAPON].timer!=-1)	// �T�C�Y�~�b�N�E�F�|��
-			ret=2;
-		if( sc_data[SC_FLAMELAUNCHER].timer!=-1)	// �t���[�������`���[
-			ret=3;
-		if( sc_data[SC_LIGHTNINGLOADER].timer!=-1)	// ���C�g�j���O���[�_�[
-			ret=4;
-		if( sc_data[SC_ENCPOISON].timer!=-1)	// �G���`�����g�|�C�Y��
-			ret=5;
-		if( sc_data[SC_ASPERSIO].timer!=-1)		// �A�X�y���V�I
-			ret=6;
-	}
-
-	return ret;
-}
-int battle_get_attack_element2(struct block_list *bl)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_PC && (struct map_session_data *)bl) {
-		int ret = ((struct map_session_data *)bl)->atk_ele_;
-		struct status_change *sc_data = ((struct map_session_data *)bl)->sc_data;
-
-		if(sc_data) {
-			if( sc_data[SC_FROSTWEAPON].timer!=-1)	// �t���X�g�E�F�|��
-				ret=1;
-			if( sc_data[SC_SEISMICWEAPON].timer!=-1)	// �T�C�Y�~�b�N�E�F�|��
-				ret=2;
-			if( sc_data[SC_FLAMELAUNCHER].timer!=-1)	// �t���[�������`���[
-				ret=3;
-			if( sc_data[SC_LIGHTNINGLOADER].timer!=-1)	// ���C�g�j���O���[�_�[
-				ret=4;
-			if( sc_data[SC_ENCPOISON].timer!=-1)	// �G���`�����g�|�C�Y��
-				ret=5;
-			if( sc_data[SC_ASPERSIO].timer!=-1)		// �A�X�y���V�I
-				ret=6;
-		}
-		return ret;
-	}
-	return 0;
-}
-int battle_get_party_id(struct block_list *bl)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return ((struct map_session_data *)bl)->status.party_id;
-	else if(bl->type==BL_MOB && (struct mob_data *)bl){
-		struct mob_data *md=(struct mob_data *)bl;
-		if( md->master_id>0 )
-			return -md->master_id;
-		return -md->bl.id;
-	}
-	else if(bl->type==BL_SKILL && (struct skill_unit *)bl)
-		return ((struct skill_unit *)bl)->group->party_id;
-	else
-		return 0;
-}
-int battle_get_guild_id(struct block_list *bl)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return ((struct map_session_data *)bl)->status.guild_id;
-	else if(bl->type==BL_MOB && (struct mob_data *)bl)
-		return ((struct mob_data *)bl)->class;
-	else if(bl->type==BL_SKILL && (struct skill_unit *)bl)
-		return ((struct skill_unit *)bl)->group->guild_id;
-	else
-		return 0;
-}
-int battle_get_race(struct block_list *bl)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		return mob_db[((struct mob_data *)bl)->class].race;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return 7;
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		return mob_db[((struct pet_data *)bl)->class].race;
-	else
-		return 0;
-}
-int battle_get_size(struct block_list *bl)
-{
-	nullpo_retr(1, bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		return mob_db[((struct mob_data *)bl)->class].size;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return 1;
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		return mob_db[((struct pet_data *)bl)->class].size;
-	else
-		return 1;
-}
-int battle_get_mode(struct block_list *bl)
-{
-	nullpo_retr(0x01, bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		return mob_db[((struct mob_data *)bl)->class].mode;
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		return mob_db[((struct pet_data *)bl)->class].mode;
-	else
-		return 0x01;	// �Ƃ肠���������Ƃ������Ƃ�1
-}
-
-int battle_get_mexp(struct block_list *bl)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		return mob_db[((struct mob_data *)bl)->class].mexp;
-	else if(bl->type==BL_PET && (struct pet_data *)bl)
-		return mob_db[((struct pet_data *)bl)->class].mexp;
-	else
-		return 0;
-}
-
-// StatusChange�n�̏���
-struct status_change *battle_get_sc_data(struct block_list *bl)
-{
-	nullpo_retr(NULL, bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		return ((struct mob_data*)bl)->sc_data;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return ((struct map_session_data*)bl)->sc_data;
-	return NULL;
-}
-short *battle_get_sc_count(struct block_list *bl)
-{
-	nullpo_retr(NULL, bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		return &((struct mob_data*)bl)->sc_count;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return &((struct map_session_data*)bl)->sc_count;
-	return NULL;
-}
-short *battle_get_opt1(struct block_list *bl)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		return &((struct mob_data*)bl)->opt1;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return &((struct map_session_data*)bl)->opt1;
-	else if(bl->type==BL_NPC && (struct npc_data *)bl)
-		return &((struct npc_data*)bl)->opt1;
-	return 0;
-}
-short *battle_get_opt2(struct block_list *bl)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		return &((struct mob_data*)bl)->opt2;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return &((struct map_session_data*)bl)->opt2;
-	else if(bl->type==BL_NPC && (struct npc_data *)bl)
-		return &((struct npc_data*)bl)->opt2;
-	return 0;
-}
-short *battle_get_opt3(struct block_list *bl)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		return &((struct mob_data*)bl)->opt3;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return &((struct map_session_data*)bl)->opt3;
-	else if(bl->type==BL_NPC && (struct npc_data *)bl)
-		return &((struct npc_data*)bl)->opt3;
-	return 0;
-}
-short *battle_get_option(struct block_list *bl)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_MOB && (struct mob_data *)bl)
-		return &((struct mob_data*)bl)->option;
-	else if(bl->type==BL_PC && (struct map_session_data *)bl)
-		return &((struct map_session_data*)bl)->status.option;
-	else if(bl->type==BL_NPC && (struct npc_data *)bl)
-		return &((struct npc_data*)bl)->option;
-	return 0;
-}
-
-//-------------------------------------------------------------------
-
-// �_���[�W�̒x��
-struct battle_delay_damage_ {
-	struct block_list *src,*target;
-	int damage;
-	int flag;
-};
-int battle_delay_damage_sub(int tid,unsigned int tick,int id,int data)
-{
-	struct battle_delay_damage_ *dat=(struct battle_delay_damage_ *)data;
-	if( dat && map_id2bl(id)==dat->src && dat->target->prev!=NULL)
-		battle_damage(dat->src,dat->target,dat->damage,dat->flag);
-	free(dat);
-	return 0;
-}
-int battle_delay_damage(unsigned int tick,struct block_list *src,struct block_list *target,int damage,int flag)
-{
-	struct battle_delay_damage_ *dat = (struct battle_delay_damage_*)aCalloc(1,sizeof(struct battle_delay_damage_));
-
-	nullpo_retr(0, src);
-	nullpo_retr(0, target);
-
-
-	dat->src=src;
-	dat->target=target;
-	dat->damage=damage;
-	dat->flag=flag;
-	add_timer(tick,battle_delay_damage_sub,src->id,(int)dat);
-	return 0;
-}
-
-// ���ۂ�HP�𑀍�
-int battle_damage(struct block_list *bl,struct block_list *target,int damage,int flag)
-{
-	struct map_session_data *sd=NULL;
-	struct status_change *sc_data=battle_get_sc_data(target);
-	short *sc_count;
-	int i;
-
-	nullpo_retr(0, target); //bl��NULL�ŌĂ΂�邱�Ƃ�����̂ő��Ń`�F�b�N
-
-	if(damage==0 || target->type == BL_PET)
-		return 0;
-
-	if(target->prev == NULL)
-		return 0;
-
-	if(bl) {
-		if(bl->prev==NULL)
-			return 0;
-
-		if(bl->type==BL_PC)
-			sd=(struct map_session_data *)bl;
-	}
-
-	if(damage<0)
-		return battle_heal(bl,target,-damage,0,flag);
-
-	if(!flag && (sc_count=battle_get_sc_count(target))!=NULL && *sc_count>0){
-		// �����A�Ή��A����������
-		if(sc_data[SC_FREEZE].timer!=-1)
-			skill_status_change_end(target,SC_FREEZE,-1);
-		if(sc_data[SC_STONE].timer!=-1 && sc_data[SC_STONE].val2==0)
-			skill_status_change_end(target,SC_STONE,-1);
-		if(sc_data[SC_SLEEP].timer!=-1)
-			skill_status_change_end(target,SC_SLEEP,-1);
-	}
-
-	if(target->type==BL_MOB){	// MOB
-		struct mob_data *md=(struct mob_data *)target;
-		if(md && md->skilltimer!=-1 && md->state.skillcastcancel)	// �r���W�Q
-			skill_castcancel(target,0);
-		return mob_damage(bl,md,damage,0);
-	}
-	else if(target->type==BL_PC){	// PC
-
-		struct map_session_data *tsd=(struct map_session_data *)target;
-
-		if(tsd && tsd->sc_data && tsd->sc_data[SC_DEVOTION].val1){	// �f�B�{�[�V����������������
-			struct map_session_data *md = map_id2sd(tsd->sc_data[SC_DEVOTION].val1);
-			if(md && skill_devotion3(&md->bl,target->id)){
-				skill_devotion(md,target->id);
-			}
-			else if(md && bl)
-				for(i=0;i<5;i++)
-					if(md->dev.val1[i] == target->id){
-						clif_damage(bl,&md->bl, gettick(), 0, 0,
-							damage, 0 , 0, 0);
-						pc_damage(&md->bl,md,damage);
-
-						return 0;
-					}
-		}
-
-		if(tsd && tsd->skilltimer!=-1){	// �r���W�Q
-				// �t�F���J�[�h��W�Q����Ȃ��X�L�����̌���
-			if( (!tsd->special_state.no_castcancel || map[bl->m].flag.gvg) && tsd->state.skillcastcancel &&
-				!tsd->special_state.no_castcancel2)
-				skill_castcancel(target,0);
-		}
-
-		return pc_damage(bl,tsd,damage);
-
-	}
-	else if(target->type==BL_SKILL)
-		return skill_unit_ondamaged((struct skill_unit *)target,bl,damage,gettick());
-	return 0;
-}
-int battle_heal(struct block_list *bl,struct block_list *target,int hp,int sp,int flag)
-{
-	nullpo_retr(0, target); //bl��NULL�ŌĂ΂�邱�Ƃ�����̂ő��Ń`�F�b�N
-
-	if(target->type == BL_PET)
-		return 0;
-	if( target->type ==BL_PC && pc_isdead((struct map_session_data *)target) )
-		return 0;
-	if(hp==0 && sp==0)
-		return 0;
-
-	if(hp<0)
-		return battle_damage(bl,target,-hp,flag);
-
-	if(target->type==BL_MOB)
-		return mob_heal((struct mob_data *)target,hp);
-	else if(target->type==BL_PC)
-		return pc_heal((struct map_session_data *)target,hp,sp);
-	return 0;
-}
-
-// �U����~
-int battle_stopattack(struct block_list *bl)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_MOB)
-		return mob_stopattack((struct mob_data*)bl);
-	else if(bl->type==BL_PC)
-		return pc_stopattack((struct map_session_data*)bl);
-	else if(bl->type==BL_PET)
-		return pet_stopattack((struct pet_data*)bl);
-	return 0;
-}
-// �ړ���~
-int battle_stopwalking(struct block_list *bl,int type)
-{
-	nullpo_retr(0, bl);
-	if(bl->type==BL_MOB)
-		return mob_stop_walking((struct mob_data*)bl,type);
-	else if(bl->type==BL_PC)
-		return pc_stop_walking((struct map_session_data*)bl,type);
-	else if(bl->type==BL_PET)
-		return pet_stop_walking((struct pet_data*)bl,type);
-	return 0;
-}
-
-
-/*==========================================
- * �_���[�W�̑����C��
- *------------------------------------------
- */
-int battle_attr_fix(int damage,int atk_elem,int def_elem)
-{
-	int def_type= def_elem%10, def_lv=def_elem/10/2;
-
-	if(	atk_elem<0 || atk_elem>9 || def_type<0 || def_type>9 ||
-		def_lv<1 || def_lv>4){	// �� ���l�����������̂łƂ肠�������̂܂ܕԂ�
-		if(battle_config.error_log)
-			printf("battle_attr_fix: unknown attr type: atk=%d def_type=%d def_lv=%d\n",atk_elem,def_type,def_lv);
-		return damage;
-	}
-
-	return damage*attr_fix_table[def_lv-1][atk_elem][def_type]/100;
-}
-
-
-/*==========================================
- * �_���[�W�ŏI�v�Z
- *------------------------------------------
- */
-int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,int div_,int skill_num,int skill_lv,int flag)
-{
-	struct map_session_data *sd=NULL;
-	struct mob_data *md=NULL;
-	struct status_change *sc_data,*sc;
-	short *sc_count;
-	int class;
-
-	nullpo_retr(0, bl);
-
-	class = battle_get_class(bl);
-	if(bl->type==BL_MOB) md=(struct mob_data *)bl;
-	else sd=(struct map_session_data *)bl;
-
-	sc_data=battle_get_sc_data(bl);
-	sc_count=battle_get_sc_count(bl);
-
-	if(sc_count!=NULL && *sc_count>0){
-
-		if(sc_data[SC_SAFETYWALL].timer!=-1 && damage>0 && flag&BF_WEAPON && flag&BF_SHORT && skill_num != NPC_GUIDEDATTACK){
-			// �Z�[�t�e�B�E�H�[��
-			struct skill_unit *unit=(struct skill_unit*)sc_data[SC_SAFETYWALL].val2;
-			if( unit && unit->alive && (--unit->group->val2)<=0 )
-				skill_delunit(unit);
-			skill_unit_move(bl,gettick(),1);	// �d�ˊ|���`�F�b�N
-			damage=0;
-		}
-		if(sc_data[SC_PNEUMA].timer!=-1 && damage>0 && flag&BF_WEAPON && flag&BF_LONG && skill_num != NPC_GUIDEDATTACK){
-			// �j���[�}
-			damage=0;
-		}
-
-		if(sc_data[SC_ROKISWEIL].timer!=-1 && damage>0 &&
-			flag&BF_MAGIC ){
-			// �j���[�}
-			damage=0;
-		}
-
-		if(sc_data[SC_AETERNA].timer!=-1 && damage>0){	// ���b�N�X�G�[�e���i
-			damage<<=1;
-			skill_status_change_end( bl,SC_AETERNA,-1 );
-		}
-
-		//������̃_���[�W����
-		if(sc_data[SC_VOLCANO].timer!=-1){	// �{���P�[�m
-			if(flag&BF_SKILL && skill_get_pl(skill_num)==3)
-				damage += damage*sc_data[SC_VOLCANO].val4/100;
-			else if(!flag&BF_SKILL && battle_get_attack_element(bl)==3)
-				damage += damage*sc_data[SC_VOLCANO].val4/100;
-		}
-
-		if(sc_data[SC_VIOLENTGALE].timer!=-1){	// �o�C�I�����g�Q�C��
-			if(flag&BF_SKILL && skill_get_pl(skill_num)==4)
-				damage += damage*sc_data[SC_VIOLENTGALE].val4/100;
-			else if(!flag&BF_SKILL && battle_get_attack_element(bl)==4)
-				damage += damage*sc_data[SC_VIOLENTGALE].val4/100;
-		}
-
-		if(sc_data[SC_DELUGE].timer!=-1){	// �f�����[�W
-			if(flag&BF_SKILL && skill_get_pl(skill_num)==1)
-				damage += damage*sc_data[SC_DELUGE].val4/100;
-			else if(!flag&BF_SKILL && battle_get_attack_element(bl)==1)
-				damage += damage*sc_data[SC_DELUGE].val4/100;
-		}
-
-		if(sc_data[SC_ENERGYCOAT].timer!=-1 && damage>0  && flag&BF_WEAPON){	// �G�i�W�[�R�[�g
-			if(sd){
-				if(sd->status.sp>0){
-					int per = sd->status.sp * 5 / (sd->status.max_sp + 1);
-					sd->status.sp -= sd->status.sp * (per * 5 + 10) / 1000;
-					if( sd->status.sp < 0 ) sd->status.sp = 0;
-					damage -= damage * ((per+1) * 6) / 100;
-					clif_updatestatus(sd,SP_SP);
-				}
-				if(sd->status.sp<=0)
-					skill_status_change_end( bl,SC_ENERGYCOAT,-1 );
-			}
-			else
-				damage -= damage * (sc_data[SC_ENERGYCOAT].val1 * 6) / 100;
-		}
-
-		if(sc_data[SC_KYRIE].timer!=-1 && damage > 0){	// �L���G�G���C�\��
-			sc=&sc_data[SC_KYRIE];
-			sc->val2-=damage;
-			if(flag&BF_WEAPON){
-				if(sc->val2>=0)	damage=0;
-				else damage=-sc->val2;
-			}
-			if((--sc->val3)<=0 || (sc->val2<=0) || skill_num == AL_HOLYLIGHT)
-				skill_status_change_end(bl, SC_KYRIE, -1);
-		}
-
-		if(sc_data[SC_BASILICA].timer!=-1 && damage > 0){
-			// �j���[�}
-			damage=0;
-		}
-		if(sc_data[SC_LANDPROTECTOR].timer!=-1 && damage>0 && flag&BF_MAGIC){
-			// �j���[�}
-			damage=0;
-		}
-
-		if(sc_data[SC_AUTOGUARD].timer != -1 && damage > 0 && flag&BF_WEAPON) {
-			if(rand()%100 < sc_data[SC_AUTOGUARD].val2) {
-				damage = 0;
-				clif_skill_nodamage(bl,bl,CR_AUTOGUARD,sc_data[SC_AUTOGUARD].val1,1);
-				if(sd)
-					sd->canmove_tick = gettick() + 300;
-				else if(md)
-					md->canmove_tick = gettick() + 300;
-			}
-		}
-// -- moonsoul (chance to block attacks with new Lord Knight skill parrying)
-//
-		if(sc_data[SC_PARRYING].timer != -1 && damage > 0 && flag&BF_WEAPON) {
-			if(rand()%100 < sc_data[SC_PARRYING].val2) {
-				damage = 0;
-				clif_skill_nodamage(bl,bl,LK_PARRYING,sc_data[SC_PARRYING].val1,1);
-			}
-		}
-		// ���W�F�N�g�\�[�h
-		if(sc_data[SC_REJECTSWORD].timer!=-1 && damage > 0 && flag&BF_WEAPON &&
-		  ((src->type==BL_PC && ((struct map_session_data *)src)->status.weapon == (1 || 2 || 3)) || src->type==BL_MOB )){
-			if(rand()%100 < (10+5*sc_data[SC_REJECTSWORD].val1)){ //���ˊm����10+5*Lv
-				damage = damage*50/100;
-				battle_damage(bl,src,damage,0);
-				//�_���[�W��^�����̂͗ǂ��񂾂��A��������ǂ����ĕ\������񂾂��킩��˂�
-				//�G�t�F�N�g������ł����̂��킩��˂�
-				clif_skill_nodamage(bl,bl,ST_REJECTSWORD,sc_data[SC_REJECTSWORD].val1,1);
-				if((--sc_data[SC_REJECTSWORD].val2)<=0)
-					skill_status_change_end(bl, SC_REJECTSWORD, -1);
-			}
-		}
-	}
-
-	if(class == 1288 || class == 1287 || class == 1286 || class == 1285) {
-//	if(class == 1288) {
-		if(class == 1288 && flag&BF_SKILL)
-			damage=0;
-		if(src->type == BL_PC) {
-			struct guild *g=guild_search(((struct map_session_data *)src)->status.guild_id);
-			struct guild_castle *gc=guild_mapname2gc(map[bl->m].name);
-			if(!((struct map_session_data *)src)->status.guild_id)
-				damage=0;
-			if(gc && agit_flag==0 && class != 1288)	// guardians cannot be damaged during non-woe [Valaris]
-				damage=0;  // end woe check [Valaris]
-			if(g == NULL)
-				damage=0;//�M���h�������Ȃ�_���[�W����
-			else if((gc != NULL) && guild_isallied(g, gc))
-				damage=0;//����̃M���h�̃G���y�Ȃ�_���[�W����
-			else if(g && guild_checkskill(g,GD_APPROVAL) <= 0)
-				damage=0;//���K�M���h���F���Ȃ��ƃ_���[�W����
-			else if (battle_config.guild_max_castles != 0 && guild_checkcastles(g)>=battle_config.guild_max_castles)
-                                damage = 0; // [MouseJstr]
-		}
-		else damage = 0;
-	}
-
-	if(map[bl->m].flag.gvg && damage > 0) { //GvG
-		if(flag&BF_WEAPON) {
-			if(flag&BF_SHORT)
-				damage=damage*battle_config.gvg_short_damage_rate/100;
-			if(flag&BF_LONG)
-				damage=damage*battle_config.gvg_long_damage_rate/100;
-		}
-		if(flag&BF_MAGIC)
-			damage = damage*battle_config.gvg_magic_damage_rate/100;
-		if(flag&BF_MISC)
-			damage=damage*battle_config.gvg_misc_damage_rate/100;
-		if(damage < 1) damage  = 1;
-	}
-
-	if(battle_config.skill_min_damage || flag&BF_MISC) {
-		if(div_ < 255) {
-			if(damage > 0 && damage < div_)
-				damage = div_;
-		}
-		else if(damage > 0 && damage < 3)
-			damage = 3;
-	}
-
-	if( md!=NULL && md->hp>0 && damage > 0 )	// �����Ȃǂ�MOB�X�L������
-		mobskill_event(md,flag);
-
-	return damage;
-}
-
-/*==========================================
- * �C���_���[�W
- *------------------------------------------
- */
-int battle_addmastery(struct map_session_data *sd,struct block_list *target,int dmg,int type)
-{
-	int damage,skill;
-	int race=battle_get_race(target);
-	int weapon;
-	damage = 0;
-
-	nullpo_retr(0, sd);
-
-	// �f�[�����x�C��(+3 �` +30) vs �s�� or ���� (���l�͊܂߂Ȃ��H)
-	if((skill = pc_checkskill(sd,AL_DEMONBANE)) > 0 && (battle_check_undead(race,battle_get_elem_type(target)) || race==6) )
-		damage += (skill * 3);
-
-	// �r�[�X�g�x�C��(+4 �` +40) vs ���� or ����
-	if((skill = pc_checkskill(sd,HT_BEASTBANE)) > 0 && (race==2 || race==4) )
-		damage += (skill * 4);
-
-	if(type == 0)
-		weapon = sd->weapontype1;
-	else
-		weapon = sd->weapontype2;
-	switch(weapon)
-	{
-		case 0x01:	// �Z�� (Updated By AppleGirl)
-		case 0x02:	// 1HS
-		{
-			// ���C��(+4 �` +40) �Ў茕 �Z���܂�
-			if((skill = pc_checkskill(sd,SM_SWORD)) > 0) {
-				damage += (skill * 4);
-			}
-			break;
-		}
-		case 0x03:	// 2HS
-		{
-			// ���茕�C��(+4 �` +40) ���茕
-			if((skill = pc_checkskill(sd,SM_TWOHAND)) > 0) {
-				damage += (skill * 4);
-			}
-			break;
-		}
-		case 0x04:	// 1HL
-		{
-			// ���C��(+4 �` +40,+5 �` +50) ��
-			if((skill = pc_checkskill(sd,KN_SPEARMASTERY)) > 0) {
-				if(!pc_isriding(sd))
-					damage += (skill * 4);	// �y�R�ɏ���ĂȂ�
-				else
-					damage += (skill * 5);	// �y�R�ɏ���Ă�
-			}
-			break;
-		}
-		case 0x05:	// 2HL
-		{
-			// ���C��(+4 �` +40,+5 �` +50) ��
-			if((skill = pc_checkskill(sd,KN_SPEARMASTERY)) > 0) {
-				if(!pc_isriding(sd))
-					damage += (skill * 4);	// �y�R�ɏ���ĂȂ�
-				else
-					damage += (skill * 5);	// �y�R�ɏ���Ă�
-			}
-			break;
-		}
-		case 0x06:	// �Ў蕀
-		{
-			if((skill = pc_checkskill(sd,AM_AXEMASTERY)) > 0) {
-				damage += (skill * 3);
-			}
-			break;
-		}
-		case 0x07: // Axe by Tato
-		{
-			if((skill = pc_checkskill(sd,AM_AXEMASTERY)) > 0) {
-				damage += (skill * 3);
-			}
-			break;
-		}
-		case 0x08:	// ���C�X
-		{
-			// ���C�X�C��(+3 �` +30) ���C�X
-			if((skill = pc_checkskill(sd,PR_MACEMASTERY)) > 0) {
-				damage += (skill * 3);
-			}
-			break;
-		}
-		case 0x09:	// �Ȃ�?
-			break;
-		case 0x0a:	// ��
-			break;
-		case 0x0b:	// �|
-			break;
-		case 0x00:	// �f��
-		case 0x0c:	// Knuckles
-		{
-			// �S��(+3 �` +30) �f��,�i�b�N��
-			if((skill = pc_checkskill(sd,MO_IRONHAND)) > 0) {
-				damage += (skill * 3);
-			}
-			break;
-		}
-		case 0x0d:	// Musical Instrument
-		{
-			// �y��̗��K(+3 �` +30) �y��
-			if((skill = pc_checkskill(sd,BA_MUSICALLESSON)) > 0) {
-				damage += (skill * 3);
-			}
-			break;
-		}
-		case 0x0e:	// Dance Mastery
-		{
-			// Dance Lesson Skill Effect(+3 damage for every lvl = +30) ��
-			if((skill = pc_checkskill(sd,DC_DANCINGLESSON)) > 0) {
-				damage += (skill * 3);
-			}
-			break;
-		}
-		case 0x0f:	// Book
-		{
-			// Advance Book Skill Effect(+3 damage for every lvl = +30) {
-			if((skill = pc_checkskill(sd,SA_ADVANCEDBOOK)) > 0) {
-				damage += (skill * 3);
-			}
-			break;
-		}
-		case 0x10:	// Katars
-		{
-			// �J�^�[���C��(+3 �` +30) �J�^�[��
-			if((skill = pc_checkskill(sd,AS_KATAR)) > 0) {
-				//�\�j�b�N�u���[���͕ʏ����i1���ɕt��1/8�K��)
-				damage += (skill * 3);
-			}
-			break;
-		}
-	}
-	damage = dmg + damage;
-	return (damage);
-}
-
-static struct Damage battle_calc_pet_weapon_attack(
-	struct block_list *src,struct block_list *target,int skill_num,int skill_lv,int wflag)
-{
-	struct pet_data *pd = (struct pet_data *)src;
-	struct mob_data *tmd=NULL;
-	int hitrate,flee,cri = 0,atkmin,atkmax;
-	int luk,target_count = 1;
-	int def1 = battle_get_def(target);
-	int def2 = battle_get_def2(target);
-	int t_vit = battle_get_vit(target);
-	struct Damage wd;
-	int damage,damage2=0,type,div_,blewcount=skill_get_blewcount(skill_num,skill_lv);
-	int flag,dmg_lv=0;
-	int t_mode=0,t_race=0,t_size=1,s_race=0,s_ele=0;
-	struct status_change *t_sc_data;
-
-	//return�O�̏���������̂ŏ��o�͕��̂ݕύX
-	if( target == NULL || pd == NULL ){ //src�͓��e�ɒ��ڐG��Ă��Ȃ��̂ŃX���[���Ă݂�
-		nullpo_info(NLP_MARK);
-		memset(&wd,0,sizeof(wd));
-		return wd;
-	}
-
-	s_race=battle_get_race(src);
-	s_ele=battle_get_attack_element(src);
-
-	// �^�[�Q�b�g
-	if(target->type == BL_MOB)
-		tmd=(struct mob_data *)target;
-	else {
-		memset(&wd,0,sizeof(wd));
-		return wd;
-	}
-	t_race=battle_get_race( target );
-	t_size=battle_get_size( target );
-	t_mode=battle_get_mode( target );
-	t_sc_data=battle_get_sc_data( target );
-
-	flag=BF_SHORT|BF_WEAPON|BF_NORMAL;	// �U���̎�ނ̐ݒ�
-
-	// ��𗦌v�Z�A��𔻒�͌��
-	flee = battle_get_flee(target);
-	if(battle_config.agi_penaly_type > 0 || battle_config.vit_penaly_type > 0)
-		target_count += battle_counttargeted(target,src,battle_config.agi_penaly_count_lv);
-	if(battle_config.agi_penaly_type > 0) {
-		if(target_count >= battle_config.agi_penaly_count) {
-			if(battle_config.agi_penaly_type == 1)
-				flee = (flee * (100 - (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num))/100;
-			else if(battle_config.agi_penaly_type == 2)
-				flee -= (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num;
-			if(flee < 1) flee = 1;
-		}
-	}
-	hitrate=battle_get_hit(src) - flee + 80;
-
-	type=0;	// normal
-	div_ = 1; // single attack
-
-	luk=battle_get_luk(src);
-
-	if(battle_config.pet_str)
-		damage = battle_get_baseatk(src);
-	else
-		damage = 0;
-
-	if(skill_num==HW_MAGICCRASHER){			/* �}�W�b�N�N���b�V���[��MATK�ʼn��� */
-		atkmin = battle_get_matk1(src);
-		atkmax = battle_get_matk2(src);
-	}else{
-	atkmin = battle_get_atk(src);
-	atkmax = battle_get_atk2(src);
-	}
-	if(mob_db[pd->class].range>3 )
-		flag=(flag&~BF_RANGEMASK)|BF_LONG;
-
-	if(atkmin > atkmax) atkmin = atkmax;
-
-	cri = battle_get_critical(src);
-	cri -= battle_get_luk(target) * 2; // luk/5*10 => target_luk*2 not target_luk*3
-	if(battle_config.enemy_critical_rate != 100) {
-		cri = cri*battle_config.enemy_critical_rate/100;
-		if(cri < 1)
-			cri = 1;
-	}
-	if(t_sc_data != NULL && t_sc_data[SC_SLEEP].timer!=-1 )
-		cri <<=1;
-
-	if(skill_num == 0 && skill_lv >= 0 && battle_config.enemy_critical && (rand() % 1000) < cri)
-	{
-		damage += atkmax;
-		type = 0x0a;
-	}
-	else {
-		int vitbonusmax;
-
-		if(atkmax > atkmin)
-			damage += atkmin + rand() % (atkmax-atkmin + 1);
-		else
-			damage += atkmin ;
-		// �X�L���C���P�i�U���͔{���n�j
-		// �I�[�o�[�g���X�g(+5% �` +25%),���U���n�X�L���̏ꍇ�����ŕ␳
-		// �o�b�V��,�}�O�i���u���C�N,
-		// �{�[�����O�o�b�V��,�X�s�A�u�[������,�u�����f�B�b�V���X�s�A,�X�s�A�X�^�b�u,
-		// ���}�[�i�C�g,�J�[�g���{�����[�V����
-		// �_�u���X�g���C�t�B���O,�A���[�V�����[,�`���[�W�A���[,
-		// �\�j�b�N�u���[
-		if(skill_num>0){
-			int i;
-			if( (i=skill_get_pl(skill_num))>0 )
-				s_ele=i;
-
-			flag=(flag&~BF_SKILLMASK)|BF_SKILL;
-			switch( skill_num ){
-			case SM_BASH:		// �o�b�V��
-				damage = damage*(100+ 30*skill_lv)/100;
-				hitrate = (hitrate*(100+5*skill_lv))/100;
-				break;
-			case SM_MAGNUM:		// �}�O�i���u���C�N
-				damage = damage*(5*skill_lv +(wflag)?65:115 )/100;
-				break;
-			case MC_MAMMONITE:	// ���}�[�i�C�g
-				damage = damage*(100+ 50*skill_lv)/100;
-				break;
-			case AC_DOUBLE:	// �_�u���X�g���C�t�B���O
-				damage = damage*(180+ 20*skill_lv)/100;
-				div_=2;
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				break;
-			case AC_SHOWER:	// �A���[�V�����[
-				damage = damage*(75 + 5*skill_lv)/100;
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				break;
-			case AC_CHARGEARROW:	// �`���[�W�A���[
-				damage = damage*150/100;
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				break;
-			case KN_PIERCE:	// �s�A�[�X
-				damage = damage*(100+ 10*skill_lv)/100;
-				hitrate = hitrate*(100+5*skill_lv)/100;
-				div_=t_size+1;
-				damage*=div_;
-				break;
-			case KN_SPEARSTAB:	// �X�s�A�X�^�u
-				damage = damage*(100+ 15*skill_lv)/100;
-				break;
-			case KN_SPEARBOOMERANG:	// �X�s�A�u�[������
-				damage = damage*(100+ 50*skill_lv)/100;
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				break;
-			case KN_BRANDISHSPEAR: // �u�����f�B�b�V���X�s�A
-				damage = damage*(100+ 20*skill_lv)/100;
-				if(skill_lv>3 && wflag==1) damage2+=damage/2;
-				if(skill_lv>6 && wflag==1) damage2+=damage/4;
-				if(skill_lv>9 && wflag==1) damage2+=damage/8;
-				if(skill_lv>6 && wflag==2) damage2+=damage/2;
-				if(skill_lv>9 && wflag==2) damage2+=damage/4;
-				if(skill_lv>9 && wflag==3) damage2+=damage/2;
-				damage +=damage2;
-				blewcount=0;
-				break;
-			case KN_BOWLINGBASH:	// �{�E�����O�o�b�V��
-				damage = damage*(100+ 50*skill_lv)/100;
-				blewcount=0;
-				break;
-			case AS_SONICBLOW:	// �\�j�b�N�u���E
-				damage = damage*(300+ 50*skill_lv)/100;
-				div_=8;
-				break;
-			case TF_SPRINKLESAND:	// ���܂�
-				damage = damage*125/100;
-				break;
-			case MC_CARTREVOLUTION:	// �J�[�g���{�����[�V����
-				damage = (damage*150)/100;
-				break;
-			// �ȉ�MOB
-			case NPC_COMBOATTACK:	// ���i�U��
-				div_=skill_get_num(skill_num,skill_lv);
-				damage *= div_;
-				break;
-			case NPC_RANDOMATTACK:	// �����_��ATK�U��
-				damage = damage*(50+rand()%150)/100;
-				break;
-			// �����U���i�K���j
-			case NPC_WATERATTACK:
-			case NPC_GROUNDATTACK:
-			case NPC_FIREATTACK:
-			case NPC_WINDATTACK:
-			case NPC_POISONATTACK:
-			case NPC_HOLYATTACK:
-			case NPC_DARKNESSATTACK:
-			case NPC_TELEKINESISATTACK:
-				div_= pd->skillduration; // [Valaris]
-				break;
-			case NPC_GUIDEDATTACK:
-				hitrate = 1000000;
-				break;
-			case NPC_RANGEATTACK:
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				break;
-			case NPC_PIERCINGATT:
-				flag=(flag&~BF_RANGEMASK)|BF_SHORT;
-				break;
-			case RG_BACKSTAP:	// �o�b�N�X�^�u
-				damage = damage*(300+ 40*skill_lv)/100;
-				hitrate = 1000000;
-				break;
-			case RG_RAID:	// �T�v���C�Y�A�^�b�N
-				damage = damage*(100+ 40*skill_lv)/100;
-				break;
-			case RG_INTIMIDATE:	// �C���e�B�~�f�C�g
-				damage = damage*(100+ 30*skill_lv)/100;
-				break;
-			case CR_SHIELDCHARGE:	// �V�[���h�`���[�W
-				damage = damage*(100+ 20*skill_lv)/100;
-				flag=(flag&~BF_RANGEMASK)|BF_SHORT;
-				s_ele = 0;
-				break;
-			case CR_SHIELDBOOMERANG:	// �V�[���h�u�[������
-				damage = damage*(100+ 30*skill_lv)/100;
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				s_ele = 0;
-				break;
-			case CR_HOLYCROSS:	// �z�[���[�N���X
-				damage = damage*(100+ 35*skill_lv)/100;
-				div_=2;
-				break;
-			case CR_GRANDCROSS:
-				hitrate= 1000000;
-				break;
-			case AM_DEMONSTRATION:	// �f�����X�g���[�V����
-				damage = damage*(100+ 20*skill_lv)/100;
-				damage2 = damage2*(100+ 20*skill_lv)/100;
-				break;
-			case AM_ACIDTERROR:	// �A�V�b�h�e���[
-				damage = damage*(100+ 40*skill_lv)/100;
-				damage2 = damage2*(100+ 40*skill_lv)/100;
-				break;
-			case MO_FINGEROFFENSIVE:	//�w�e
-				damage = damage * (100 + 50 * skill_lv) / 100;
-				div_ = 1;
-				break;
-			case MO_INVESTIGATE:	// �� ��
-				if(def1 < 1000000)
-					damage = damage*(100+ 75*skill_lv)/100 * (def1 + def2)/100;
-				hitrate = 1000000;
-				s_ele = 0;
-				break;
-			case MO_EXTREMITYFIST:	// ���C���e�P��
-				damage = damage * 8 + 250 + (skill_lv * 150);
-				hitrate = 1000000;
-				s_ele = 0;
-				break;
-			case MO_CHAINCOMBO:	// �A�ŏ�
-				damage = damage*(150+ 50*skill_lv)/100;
-				div_=4;
-				break;
-			case MO_COMBOFINISH:	// �җ���
-				damage = damage*(240+ 60*skill_lv)/100;
-				break;
-			case DC_THROWARROW:	// ���
-				damage = damage*(100+ 50 * skill_lv)/100;
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				break;
-			case BA_MUSICALSTRIKE:	// �~���[�W�J���X�g���C�N
-				damage = damage*(100+ 50 * skill_lv)/100;
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				break;
-			case CH_TIGERFIST:	// ���Ռ�
-				damage = damage*(100+ 20*skill_lv)/100;
-				break;
-			case CH_CHAINCRUSH:	// �A������
-				damage = damage*(100+ 20*skill_lv)/100;
-				div_=skill_get_num(skill_num,skill_lv);
-				break;
-			case CH_PALMSTRIKE:	// �ҌՍd�h�R
-				damage = damage*(50+ 100*skill_lv)/100;
-				break;
-			case LK_SPIRALPIERCE:			/* �X�p�C�����s�A�[�X */
-				damage = damage*(100+ 50*skill_lv)/100; //�����ʂ�������Ȃ��̂œK����
-				div_=5;
-				if(target->type == BL_PC)
-					((struct map_session_data *)target)->canmove_tick = gettick() + 1000;
-				else if(target->type == BL_MOB)
-					((struct mob_data *)target)->canmove_tick = gettick() + 1000;
-				break;
-			case LK_HEADCRUSH:				/* �w�b�h�N���b�V�� */
-				damage = damage*(100+ 20*skill_lv)/100;
-				break;
-			case LK_JOINTBEAT:				/* �W���C���g�r�[�g */
-				damage = damage*(50+ 10*skill_lv)/100;
-				break;
-			case ASC_METEORASSAULT:			/* ���e�I�A�T���g */
-				damage = damage*(40+ 40*skill_lv)/100;
-				break;
-			case SN_SHARPSHOOTING:			/* �V���[�v�V���[�e�B���O */
-				damage += damage*(30*skill_lv)/100;
-				break;
-			case CG_ARROWVULCAN:			/* �A���[�o���J�� */
-				damage = damage*(160+40*skill_lv)/100;
-				div_=9;
-				break;
-			case AS_SPLASHER:		/* �x�i���X�v���b�V���[ */
-				damage = damage*(200+20*skill_lv)/100;
-				break;
-			}
-		}
-
-		if( skill_num!=NPC_CRITICALSLASH ){
-			// �� �ۂ̖h��͂ɂ��_���[�W�̌���
-			// �f�B�o�C���v���e�N�V�����i�����ł����̂��ȁH�j
-			if ( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != KN_AUTOCOUNTER && def1 < 1000000 ) {	//DEF, VIT����
-				int t_def;
-				target_count = 1 + battle_counttargeted(target,src,battle_config.vit_penaly_count_lv);
-				if(battle_config.vit_penaly_type > 0) {
-					if(target_count >= battle_config.vit_penaly_count) {
-						if(battle_config.vit_penaly_type == 1) {
-							def1 = (def1 * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
-							def2 = (def2 * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
-							t_vit = (t_vit * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
-						}
-						else if(battle_config.vit_penaly_type == 2) {
-							def1 -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
-							def2 -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
-							t_vit -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
-						}
-						if(def1 < 0) def1 = 0;
-						if(def2 < 1) def2 = 1;
-						if(t_vit < 1) t_vit = 1;
-					}
-				}
-				t_def = def2*8/10;
-				vitbonusmax = (t_vit/20)*(t_vit/20)-1;
-				if(battle_config.pet_defense_type) {
-					damage = damage - (def1 * battle_config.pet_defense_type) - t_def - ((vitbonusmax < 1)?0: rand()%(vitbonusmax+1) );
-				}
-				else{
-					damage = damage * (100 - def1) /100 - t_def - ((vitbonusmax < 1)?0: rand()%(vitbonusmax+1) );
-				}
-			}
-		}
-	}
-
-	// 0�����������ꍇ1�ɕ␳
-	if(damage<1) damage=1;
-
-	// ����C��
-	if(hitrate < 1000000)
-		hitrate = ( (hitrate>95)?95: ((hitrate<5)?5:hitrate) );
-	if(	hitrate < 1000000 &&			// �K���U��
-		(t_sc_data != NULL && (t_sc_data[SC_SLEEP].timer!=-1 ||	// �����͕K��
-		t_sc_data[SC_STAN].timer!=-1 ||		// �X�^���͕K��
-		t_sc_data[SC_FREEZE].timer!=-1 || (t_sc_data[SC_STONE].timer!=-1 && t_sc_data[SC_STONE].val2==0) ) ) )	// �����͕K��
-		hitrate = 1000000;
-	if(type == 0 && rand()%100 >= hitrate) {
-		damage = damage2 = 0;
-		dmg_lv = ATK_FLEE;
-	} else {
-		dmg_lv = ATK_DEF;
-	}
-
-	
-	if(t_sc_data) {
-		int cardfix=100;
-		if(t_sc_data[SC_DEFENDER].timer != -1 && flag&BF_LONG)
-			cardfix=cardfix*(100-t_sc_data[SC_DEFENDER].val2)/100;
-		if(cardfix != 100)
-			damage=damage*cardfix/100;
-	}
-	if(damage < 0) damage = 0;
-
-	// �� ���̓K�p
-	if(skill_num != 0 || s_ele != 0 || !battle_config.pet_attack_attr_none)
-	damage=battle_attr_fix(damage, s_ele, battle_get_element(target) );
-
-	if(skill_num==PA_PRESSURE) /* �v���b�V���[ �K��? */
-		damage = 700+100*skill_lv;
-
-	// �C���x�i���C��
-	if(skill_num==TF_POISON){
-		damage = battle_attr_fix(damage + 15*skill_lv, s_ele, battle_get_element(target) );
-	}
-	if(skill_num==MC_CARTREVOLUTION){
-		damage = battle_attr_fix(damage, 0, battle_get_element(target) );
-	}
-
-	// ���S����̔���
-	if(battle_config.enemy_perfect_flee) {
-		if(skill_num == 0 && skill_lv >= 0 && tmd!=NULL && rand()%1000 < battle_get_flee2(target) ){
-			damage=0;
-			type=0x0b;
-			dmg_lv = ATK_LUCKY;
-		}
-	}
-
-//	if(def1 >= 1000000 && damage > 0)
-	if(t_mode&0x40 && damage > 0)
-		damage = 1;
-
-	if(skill_num != CR_GRANDCROSS)
-		damage=battle_calc_damage(src,target,damage,div_,skill_num,skill_lv,flag);
-
-	wd.damage=damage;
-	wd.damage2=0;
-	wd.type=type;
-	wd.div_=div_;
-	wd.amotion=battle_get_amotion(src);
-	if(skill_num == KN_AUTOCOUNTER)
-		wd.amotion >>= 1;
-	wd.dmotion=battle_get_dmotion(target);
-	wd.blewcount=blewcount;
-	wd.flag=flag;
-	wd.dmg_lv=dmg_lv;
-
-	return wd;
-}
-
-static struct Damage battle_calc_mob_weapon_attack(
-	struct block_list *src,struct block_list *target,int skill_num,int skill_lv,int wflag)
-{
-	struct map_session_data *tsd=NULL;
-	struct mob_data* md=(struct mob_data *)src,*tmd=NULL;
-	int hitrate,flee,cri = 0,atkmin,atkmax;
-	int luk,target_count = 1;
-	int def1 = battle_get_def(target);
-	int def2 = battle_get_def2(target);
-	int t_vit = battle_get_vit(target);
-	struct Damage wd;
-	int damage,damage2=0,type,div_,blewcount=skill_get_blewcount(skill_num,skill_lv);
-	int flag,skill,ac_flag = 0,dmg_lv = 0;
-	int t_mode=0,t_race=0,t_size=1,s_race=0,s_ele=0;
-	struct status_change *sc_data,*t_sc_data;
-	short *sc_count;
-	short *option, *opt1, *opt2;
-
-	//return�O�̏���������̂ŏ��o�͕��̂ݕύX
-	if( src == NULL || target == NULL || md == NULL ){
-		nullpo_info(NLP_MARK);
-		memset(&wd,0,sizeof(wd));
-		return wd;
-	}
-
-	s_race=battle_get_race(src);
-	s_ele=battle_get_attack_element(src);
-	sc_data=battle_get_sc_data(src);
-	sc_count=battle_get_sc_count(src);
-	option=battle_get_option(src);
-	opt1=battle_get_opt1(src);
-	opt2=battle_get_opt2(src);
-
-	// �^�[�Q�b�g
-	if(target->type==BL_PC)
-		tsd=(struct map_session_data *)target;
-	else if(target->type==BL_MOB)
-		tmd=(struct mob_data *)target;
-	t_race=battle_get_race( target );
-	t_size=battle_get_size( target );
-	t_mode=battle_get_mode( target );
-	t_sc_data=battle_get_sc_data( target );
-
-	if((skill_num == 0 || (target->type == BL_PC && battle_config.pc_auto_counter_type&2) ||
-		(target->type == BL_MOB && battle_config.monster_auto_counter_type&2)) && skill_lv >= 0) {
-		if(skill_num != CR_GRANDCROSS && t_sc_data && t_sc_data[SC_AUTOCOUNTER].timer != -1) {
-			int dir = map_calc_dir(src,target->x,target->y),t_dir = battle_get_dir(target);
-			int dist = distance(src->x,src->y,target->x,target->y);
-			if(dist <= 0 || map_check_dir(dir,t_dir) ) {
-				memset(&wd,0,sizeof(wd));
-				t_sc_data[SC_AUTOCOUNTER].val3 = 0;
-				t_sc_data[SC_AUTOCOUNTER].val4 = 1;
-				if(sc_data && sc_data[SC_AUTOCOUNTER].timer == -1) {
-					int range = battle_get_range(target);
-					if((target->type == BL_PC && ((struct map_session_data *)target)->status.weapon != 11 && dist <= range+1) ||
-						(target->type == BL_MOB && range <= 3 && dist <= range+1) )
-						t_sc_data[SC_AUTOCOUNTER].val3 = src->id;
-				}
-				return wd;
-			}
-			else ac_flag = 1;
-		}
-	}
-	flag=BF_SHORT|BF_WEAPON|BF_NORMAL;	// �U���̎�ނ̐ݒ�
-
-	// ��𗦌v�Z�A��𔻒�͌��
-	flee = battle_get_flee(target);
-	if(battle_config.agi_penaly_type > 0 || battle_config.vit_penaly_type > 0)
-		target_count += battle_counttargeted(target,src,battle_config.agi_penaly_count_lv);
-	if(battle_config.agi_penaly_type > 0) {
-		if(target_count >= battle_config.agi_penaly_count) {
-			if(battle_config.agi_penaly_type == 1)
-				flee = (flee * (100 - (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num))/100;
-			else if(battle_config.agi_penaly_type == 2)
-				flee -= (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num;
-			if(flee < 1) flee = 1;
-		}
-	}
-	hitrate=battle_get_hit(src) - flee + 80;
-
-	type=0;	// normal
-	div_ = 1; // single attack
-
-	luk=battle_get_luk(src);
-
-	if(battle_config.enemy_str)
-		damage = battle_get_baseatk(src);
-	else
-		damage = 0;
-	if(skill_num==HW_MAGICCRASHER){			/* �}�W�b�N�N���b�V���[��MATK�ʼn��� */
-		atkmin = battle_get_matk1(src);
-		atkmax = battle_get_matk2(src);
-	}else{
-	atkmin = battle_get_atk(src);
-	atkmax = battle_get_atk2(src);
-	}
-	if(mob_db[md->class].range>3 )
-		flag=(flag&~BF_RANGEMASK)|BF_LONG;
-
-	if(atkmin > atkmax) atkmin = atkmax;
-
-	if(sc_data != NULL && sc_data[SC_MAXIMIZEPOWER].timer!=-1 ){	// �}�L�V�}�C�Y�p���[
-		atkmin=atkmax;
-	}
-
-	cri = battle_get_critical(src);
-	cri -= battle_get_luk(target) * 3;
-	if(battle_config.enemy_critical_rate != 100) {
-		cri = cri*battle_config.enemy_critical_rate/100;
-		if(cri < 1)
-			cri = 1;
-	}
-	if(t_sc_data != NULL && t_sc_data[SC_SLEEP].timer!=-1 )	// �������̓N���e�B�J�����{��
-		cri <<=1;
-
-	if(ac_flag) cri = 1000;
-
-	if(skill_num == KN_AUTOCOUNTER) {
-		if(!(battle_config.monster_auto_counter_type&1))
-			cri = 1000;
-		else
-			cri <<= 1;
-	}
-
-	if(tsd && tsd->critical_def)
-		cri = cri * (100 - tsd->critical_def) / 100;
-
-	if((skill_num == 0 || skill_num == KN_AUTOCOUNTER) && skill_lv >= 0 && battle_config.enemy_critical && (rand() % 1000) < cri)	// ����i�X�L���̏ꍇ�͖����j
-			// �G�̔���
-	{
-		damage += atkmax;
-		type = 0x0a;
-	}
-	else {
-		int vitbonusmax;
-
-		if(atkmax > atkmin)
-			damage += atkmin + rand() % (atkmax-atkmin + 1);
-		else
-			damage += atkmin ;
-		// �X�L���C���P�i�U���͔{���n�j
-		// �I�[�o�[�g���X�g(+5% �` +25%),���U���n�X�L���̏ꍇ�����ŕ␳
-		// �o�b�V��,�}�O�i���u���C�N,
-		// �{�[�����O�o�b�V��,�X�s�A�u�[������,�u�����f�B�b�V���X�s�A,�X�s�A�X�^�b�u,
-		// ���}�[�i�C�g,�J�[�g���{�����[�V����
-		// �_�u���X�g���C�t�B���O,�A���[�V�����[,�`���[�W�A���[,
-		// �\�j�b�N�u���[
-		if(sc_data){ //��Ԉُ풆�̃_���[�W�lj�
-			if(sc_data[SC_OVERTHRUST].timer!=-1)	// �I�[�o�[�g���X�g
-			damage += damage*(5*sc_data[SC_OVERTHRUST].val1)/100;
-			if(sc_data[SC_TRUESIGHT].timer!=-1)	// �g�D���[�T�C�g
-			damage += damage*(2*sc_data[SC_TRUESIGHT].val1)/100;
-			if(sc_data[SC_BERSERK].timer!=-1)	// �o�[�T�[�N
-				damage += damage*50/100;
-		}
-
-		if(skill_num>0){
-			int i;
-			if( (i=skill_get_pl(skill_num))>0 )
-				s_ele=i;
-
-			flag=(flag&~BF_SKILLMASK)|BF_SKILL;
-			switch( skill_num ){
-			case SM_BASH:		// �o�b�V��
-				damage = damage*(100+ 30*skill_lv)/100;
-				hitrate = (hitrate*(100+5*skill_lv))/100;
-				break;
-			case SM_MAGNUM:		// �}�O�i���u���C�N
-				damage = damage*(5*skill_lv +(wflag)?65:115 )/100;
-				break;
-			case MC_MAMMONITE:	// ���}�[�i�C�g
-				damage = damage*(100+ 50*skill_lv)/100;
-				break;
-			case AC_DOUBLE:	// �_�u���X�g���C�t�B���O
-				damage = damage*(180+ 20*skill_lv)/100;
-				div_=2;
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				break;
-			case AC_SHOWER:	// �A���[�V�����[
-				damage = damage*(75 + 5*skill_lv)/100;
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				break;
-			case AC_CHARGEARROW:	// �`���[�W�A���[
-				damage = damage*150/100;
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				break;
-			case KN_PIERCE:	// �s�A�[�X
-				damage = damage*(100+ 10*skill_lv)/100;
-				hitrate=hitrate*(100+5*skill_lv)/100;
-				div_=t_size+1;
-				damage*=div_;
-				break;
-			case KN_SPEARSTAB:	// �X�s�A�X�^�u
-				damage = damage*(100+ 15*skill_lv)/100;
-				break;
-			case KN_SPEARBOOMERANG:	// �X�s�A�u�[������
-				damage = damage*(100+ 50*skill_lv)/100;
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				break;
-			case KN_BRANDISHSPEAR: // �u�����f�B�b�V���X�s�A
-				damage = damage*(100+ 20*skill_lv)/100;
-				if(skill_lv>3 && wflag==1) damage2+=damage/2;
-				if(skill_lv>6 && wflag==1) damage2+=damage/4;
-				if(skill_lv>9 && wflag==1) damage2+=damage/8;
-				if(skill_lv>6 && wflag==2) damage2+=damage/2;
-				if(skill_lv>9 && wflag==2) damage2+=damage/4;
-				if(skill_lv>9 && wflag==3) damage2+=damage/2;
-				damage +=damage2;
-				blewcount=0;
-				break;
-			case KN_BOWLINGBASH:	// �{�E�����O�o�b�V��
-				damage = damage*(100+ 50*skill_lv)/100;
-				blewcount=0;
-				break;
-			case KN_AUTOCOUNTER:
-				if(battle_config.monster_auto_counter_type&1)
-					hitrate += 20;
-				else
-					hitrate = 1000000;
-				flag=(flag&~BF_SKILLMASK)|BF_NORMAL;
-				break;
-			case AS_SONICBLOW:	// �\�j�b�N�u���E
-				damage = damage*(300+ 50*skill_lv)/100;
-				div_=8;
-				break;
-			case TF_SPRINKLESAND:	// ���܂�
-				damage = damage*125/100;
-				break;
-			case MC_CARTREVOLUTION:	// �J�[�g���{�����[�V����
-				damage = (damage*150)/100;
-				break;
-			// �ȉ�MOB
-			case NPC_COMBOATTACK:	// ���i�U��
-				div_=skill_get_num(skill_num,skill_lv);
-				damage *= div_;
-				break;
-			case NPC_RANDOMATTACK:	// �����_��ATK�U��
-				damage = damage*(50+rand()%150)/100;
-				break;
-			// �����U���i�K���j
-			case NPC_WATERATTACK:
-			case NPC_GROUNDATTACK:
-			case NPC_FIREATTACK:
-			case NPC_WINDATTACK:
-			case NPC_POISONATTACK:
-			case NPC_HOLYATTACK:
-			case NPC_DARKNESSATTACK:
-			case NPC_TELEKINESISATTACK:
-				damage = damage*(100+25*(skill_lv-1))/100;
-				break;
-			case NPC_GUIDEDATTACK:
-				hitrate = 1000000;
-				break;
-			case NPC_RANGEATTACK:
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				break;
-			case NPC_PIERCINGATT:
-				flag=(flag&~BF_RANGEMASK)|BF_SHORT;
-				break;
-			case RG_BACKSTAP:	// �o�b�N�X�^�u
-				damage = damage*(300+ 40*skill_lv)/100;
-				hitrate = 1000000;
-				break;
-			case RG_RAID:	// �T�v���C�Y�A�^�b�N
-				damage = damage*(100+ 40*skill_lv)/100;
-				break;
-			case RG_INTIMIDATE:	// �C���e�B�~�f�C�g
-				damage = damage*(100+ 30*skill_lv)/100;
-				break;
-			case CR_SHIELDCHARGE:	// �V�[���h�`���[�W
-				damage = damage*(100+ 20*skill_lv)/100;
-				flag=(flag&~BF_RANGEMASK)|BF_SHORT;
-				s_ele = 0;
-				break;
-			case CR_SHIELDBOOMERANG:	// �V�[���h�u�[������
-				damage = damage*(100+ 30*skill_lv)/100;
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				s_ele = 0;
-				break;
-			case CR_HOLYCROSS:	// �z�[���[�N���X
-				damage = damage*(100+ 35*skill_lv)/100;
-				div_=2;
-				break;
-			case CR_GRANDCROSS:
-				hitrate= 1000000;
-				break;
-			case AM_DEMONSTRATION:	// �f�����X�g���[�V����
-				damage = damage*(100+ 20*skill_lv)/100;
-				damage2 = damage2*(100+ 20*skill_lv)/100;
-				break;
-			case AM_ACIDTERROR:	// �A�V�b�h�e���[
-				damage = damage*(100+ 40*skill_lv)/100;
-				damage2 = damage2*(100+ 40*skill_lv)/100;
-				break;
-			case MO_FINGEROFFENSIVE:	//�w�e
-				damage = damage * (100 + 50 * skill_lv) / 100;
-				div_ = 1;
-				break;
-			case MO_INVESTIGATE:	// �� ��
-				if(def1 < 1000000)
-					damage = damage*(100+ 75*skill_lv)/100 * (def1 + def2)/100;
-				hitrate = 1000000;
-				s_ele = 0;
-				break;
-			case MO_EXTREMITYFIST:	// ���C���e�P��
-				damage = damage * 8 + 250 + (skill_lv * 150);
-				hitrate = 1000000;
-				s_ele = 0;
-				break;
-			case MO_CHAINCOMBO:	// �A�ŏ�
-				damage = damage*(150+ 50*skill_lv)/100;
-				div_=4;
-				break;
-			case BA_MUSICALSTRIKE:	// �~���[�W�J���X�g���C�N
-				damage = damage*(100+ 50 * skill_lv)/100;
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				break;
-			case DC_THROWARROW:	// ���
-				damage = damage*(100+ 50 * skill_lv)/100;
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				break;
-			case MO_COMBOFINISH:	// �җ���
-				damage = damage*(240+ 60*skill_lv)/100;
-				break;
-			case CH_TIGERFIST:	// ���Ռ�
-				damage = damage*(100+ 20*skill_lv)/100;
-				break;
-			case CH_CHAINCRUSH:	// �A������
-				damage = damage*(100+ 20*skill_lv)/100;
-				div_=skill_get_num(skill_num,skill_lv);
-				break;
-			case CH_PALMSTRIKE:	// �ҌՍd�h�R
-				damage = damage*(50+ 100*skill_lv)/100;
-				break;
-			case LK_SPIRALPIERCE:			/* �X�p�C�����s�A�[�X */
-				damage = damage*(100+ 50*skill_lv)/100; //�����ʂ�������Ȃ��̂œK����
-				div_=5;
-				if(tsd)
-					tsd->canmove_tick = gettick() + 1000;
-				else if(tmd)
-					tmd->canmove_tick = gettick() + 1000;
-				break;
-			case LK_HEADCRUSH:				/* �w�b�h�N���b�V�� */
-				damage = damage*(100+ 20*skill_lv)/100;
-				break;
-			case LK_JOINTBEAT:				/* �W���C���g�r�[�g */
-				damage = damage*(50+ 10*skill_lv)/100;
-				break;
-			case ASC_METEORASSAULT:			/* ���e�I�A�T���g */
-				damage = damage*(40+ 40*skill_lv)/100;
-				break;
-			case SN_SHARPSHOOTING:			/* �V���[�v�V���[�e�B���O */
-				damage += damage*(30*skill_lv)/100;
-				break;
-			case CG_ARROWVULCAN:			/* �A���[�o���J�� */
-				damage = damage*(160+40*skill_lv)/100;
-				div_=9;
-				break;
-			case AS_SPLASHER:		/* �x�i���X�v���b�V���[ */
-				damage = damage*(200+20*skill_lv)/100;
-				break;
-			}
-		}
-
-		if( skill_num!=NPC_CRITICALSLASH ){
-			// �� �ۂ̖h��͂ɂ��_���[�W�̌���
-			// �f�B�o�C���v���e�N�V�����i�����ł����̂��ȁH�j
-			if ( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != KN_AUTOCOUNTER && def1 < 1000000) {	//DEF, VIT����
-				int t_def;
-				target_count = 1 + battle_counttargeted(target,src,battle_config.vit_penaly_count_lv);
-				if(battle_config.vit_penaly_type > 0) {
-					if(target_count >= battle_config.vit_penaly_count) {
-						if(battle_config.vit_penaly_type == 1) {
-							def1 = (def1 * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
-							def2 = (def2 * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
-							t_vit = (t_vit * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
-						}
-						else if(battle_config.vit_penaly_type == 2) {
-							def1 -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
-							def2 -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
-							t_vit -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
-						}
-						if(def1 < 0) def1 = 0;
-						if(def2 < 1) def2 = 1;
-						if(t_vit < 1) t_vit = 1;
-					}
-				}
-				t_def = def2*8/10;
-				if(battle_check_undead(s_race,battle_get_elem_type(src)) || s_race==6)
-					if(tsd && (skill=pc_checkskill(tsd,AL_DP)) > 0 )
-						t_def += skill*3;
-
-				vitbonusmax = (t_vit/20)*(t_vit/20)-1;
-				if(battle_config.monster_defense_type) {
-					damage = damage - (def1 * battle_config.monster_defense_type) - t_def - ((vitbonusmax < 1)?0: rand()%(vitbonusmax+1) );
-				}
-				else{
-					damage = damage * (100 - def1) /100 - t_def - ((vitbonusmax < 1)?0: rand()%(vitbonusmax+1) );
-				}
-			}
-		}
-	}
-
-	// 0�����������ꍇ1�ɕ␳
-	if(damage<1) damage=1;
-
-	// ����C��
-	if(hitrate < 1000000)
-		hitrate = ( (hitrate>95)?95: ((hitrate<5)?5:hitrate) );
-	if(	hitrate < 1000000 &&			// �K���U��
-		(t_sc_data != NULL && (t_sc_data[SC_SLEEP].timer!=-1 ||	// �����͕K��
-		t_sc_data[SC_STAN].timer!=-1 ||		// �X�^���͕K��
-		t_sc_data[SC_FREEZE].timer!=-1 || (t_sc_data[SC_STONE].timer!=-1 && t_sc_data[SC_STONE].val2==0) ) ) )	// �����͕K��
-		hitrate = 1000000;
-	if(type == 0 && rand()%100 >= hitrate) {
-		damage = damage2 = 0;
-		dmg_lv = ATK_FLEE;
-	} else {
-		dmg_lv = ATK_DEF;
-	}
-
-	if(tsd){
-		int cardfix=100,i;
-		cardfix=cardfix*(100-tsd->subele[s_ele])/100;	// �� ���ɂ��_���[�W�ϐ�
-		cardfix=cardfix*(100-tsd->subrace[s_race])/100;	// �푰�ɂ��_���[�W�ϐ�
-		if(mob_db[md->class].mode & 0x20)
-			cardfix=cardfix*(100-tsd->subrace[10])/100;
-		else
-			cardfix=cardfix*(100-tsd->subrace[11])/100;
-		for(i=0;i<tsd->add_def_class_count;i++) {
-			if(tsd->add_def_classid[i] == md->class) {
-				cardfix=cardfix*(100-tsd->add_def_classrate[i])/100;
-				break;
-			}
-		}
-		if(flag&BF_LONG)
-			cardfix=cardfix*(100-tsd->long_attack_def_rate)/100;
-		if(flag&BF_SHORT)
-			cardfix=cardfix*(100-tsd->near_attack_def_rate)/100;
-		damage=damage*cardfix/100;
-	}
-	if(t_sc_data) {
-		int cardfix=100;
-		if(t_sc_data[SC_DEFENDER].timer != -1 && flag&BF_LONG)
-			cardfix=cardfix*(100-t_sc_data[SC_DEFENDER].val2)/100;
-		if(cardfix != 100)
-			damage=damage*cardfix/100;
-	}
-	if(t_sc_data && t_sc_data[SC_ASSUMPTIO].timer != -1){ //�A�V�����v�e�B�I
-		if(!map[target->m].flag.pvp)
-			damage=damage/3;
-		else
-			damage=damage/2;
-	}
-
-	if(damage < 0) damage = 0;
-
-	// �� ���̓K�p
-        if (!((battle_config.mob_ghostring_fix == 1) && 
-              (battle_get_element(target) == 8) && 
-              (target->type==BL_PC))) // [MouseJstr]
-	if(skill_num != 0 || s_ele != 0 || !battle_config.mob_attack_attr_none)
-	damage=battle_attr_fix(damage, s_ele, battle_get_element(target) );
-
-	if(sc_data && sc_data[SC_AURABLADE].timer!=-1)	/* �I�[���u���[�h �K�� */
-		damage += sc_data[SC_AURABLADE].val1 * 10;
-	if(skill_num==PA_PRESSURE) /* �v���b�V���[ �K��? */
-		damage = 700+100*skill_lv;
-
-	// �C���x�i���C��
-	if(skill_num==TF_POISON){
-		damage = battle_attr_fix(damage + 15*skill_lv, s_ele, battle_get_element(target) );
-	}
-	if(skill_num==MC_CARTREVOLUTION){
-		damage = battle_attr_fix(damage, 0, battle_get_element(target) );
-	}
-
-	// ���S����̔���
-	if(skill_num == 0 && skill_lv >= 0 && tsd!=NULL && rand()%1000 < battle_get_flee2(target) ){
-		damage=0;
-		type=0x0b;
-		dmg_lv = ATK_LUCKY;
-	}
-
-	if(battle_config.enemy_perfect_flee) {
-		if(skill_num == 0 && skill_lv >= 0 && tmd!=NULL && rand()%1000 < battle_get_flee2(target) ){
-			damage=0;
-			type=0x0b;
-			dmg_lv = ATK_LUCKY;
-		}
-	}
-
-//	if(def1 >= 1000000 && damage > 0)
-	if(t_mode&0x40 && damage > 0)
-		damage = 1;
-
-	if( tsd && tsd->special_state.no_weapon_damage)
-		damage = 0;
-
-	if(skill_num != CR_GRANDCROSS)
-		damage=battle_calc_damage(src,target,damage,div_,skill_num,skill_lv,flag);
-
-	wd.damage=damage;
-	wd.damage2=0;
-	wd.type=type;
-	wd.div_=div_;
-	wd.amotion=battle_get_amotion(src);
-	if(skill_num == KN_AUTOCOUNTER)
-		wd.amotion >>= 1;
-	wd.dmotion=battle_get_dmotion(target);
-	wd.blewcount=blewcount;
-	wd.flag=flag;
-	wd.dmg_lv=dmg_lv;
-	return wd;
-}
-/*
- * =========================================================================
- * PC�̕���ɂ��U��
- *-------------------------------------------------------------------------
- */
-static struct Damage battle_calc_pc_weapon_attack(
-	struct block_list *src,struct block_list *target,int skill_num,int skill_lv,int wflag)
-{
-	struct map_session_data *sd=(struct map_session_data *)src,*tsd=NULL;
-	struct mob_data *tmd=NULL;
-	int hitrate,flee,cri = 0,atkmin,atkmax;
-	int dex,luk,target_count = 1;
-	int def1 = battle_get_def(target);
-	int def2 = battle_get_def2(target);
-	int t_vit = battle_get_vit(target);
-	struct Damage wd;
-	int damage,damage2,damage3=0,damage4=0,type,div_,blewcount=skill_get_blewcount(skill_num,skill_lv);
-	int flag,skill,dmg_lv = 0;
-	int t_mode=0,t_race=0,t_size=1,s_race=7,s_ele=0;
-	struct status_change *sc_data,*t_sc_data;
-	short *sc_count;
-	short *option, *opt1, *opt2;
-	int atkmax_=0, atkmin_=0, s_ele_;	//�񓁗��p
-	int watk,watk_,cardfix,t_ele;
-	int da=0,i,t_class,ac_flag = 0;
-	int idef_flag=0,idef_flag_=0;
-
-	//return�O�̏���������̂ŏ��o�͕��̂ݕύX
-	if( src == NULL || target == NULL || sd == NULL ){
-		nullpo_info(NLP_MARK);
-		memset(&wd,0,sizeof(wd));
-		return wd;
-	}
-
-
-	// �A�^�b�J�[
-	s_race=battle_get_race(src); //�푰
-	s_ele=battle_get_attack_element(src); //����
-	s_ele_=battle_get_attack_element2(src); //���葮��
-	sc_data=battle_get_sc_data(src); //�X�e�[�^�X�ُ�
-	sc_count=battle_get_sc_count(src); //�X�e�[�^�X�ُ�̐�
-	option=battle_get_option(src); //��Ƃ��y�R�Ƃ��J�[�g�Ƃ�
-	opt1=battle_get_opt1(src); //�Ή��A�����A�X�^���A�����A�È�
-	opt2=battle_get_opt2(src); //�ŁA�􂢁A���فA�ÈŁH
-
-	if(skill_num != CR_GRANDCROSS) //�O�����h�N���X�łȂ��Ȃ�
-		sd->state.attack_type = BF_WEAPON; //�U���^�C�v�͕���U��
-
-	// �^�[�Q�b�g
-	if(target->type==BL_PC) //�Ώۂ�PC�Ȃ�
-		tsd=(struct map_session_data *)target; //tsd�ɑ��(tmd��NULL)
-	else if(target->type==BL_MOB) //�Ώۂ�Mob�Ȃ�
-		tmd=(struct mob_data *)target; //tmd�ɑ��(tsd��NULL)
-	t_race=battle_get_race( target ); //�Ώۂ̎푰
-	t_ele=battle_get_elem_type(target); //�Ώۂ̑���
-	t_size=battle_get_size( target ); //�Ώۂ̃T�C�Y
-	t_mode=battle_get_mode( target ); //�Ώۂ�Mode
-	t_sc_data=battle_get_sc_data( target ); //�Ώۂ̃X�e�[�^�X�ُ�
-
-//�I�[�g�J�E���^�[������������
-	if((skill_num == 0 || (target->type == BL_PC && battle_config.pc_auto_counter_type&2) ||
-		(target->type == BL_MOB && battle_config.monster_auto_counter_type&2)) && skill_lv >= 0) {
-		if(skill_num != CR_GRANDCROSS && t_sc_data && t_sc_data[SC_AUTOCOUNTER].timer != -1) { //�O�����h�N���X�łȂ��A�Ώۂ��I�[�g�J�E���^�[��Ԃ̏ꍇ
-			int dir = map_calc_dir(src,target->x,target->y),t_dir = battle_get_dir(target);
-			int dist = distance(src->x,src->y,target->x,target->y);
-			if(dist <= 0 || map_check_dir(dir,t_dir) ) { //�ΏۂƂ̋�����0�ȉ��A�܂��͑Ώۂ̐��ʁH
-				memset(&wd,0,sizeof(wd));
-				t_sc_data[SC_AUTOCOUNTER].val3 = 0;
-				t_sc_data[SC_AUTOCOUNTER].val4 = 1;
-				if(sc_data && sc_data[SC_AUTOCOUNTER].timer == -1) { //�������I�[�g�J�E���^�[���
-					int range = battle_get_range(target);
-					if((target->type == BL_PC && ((struct map_session_data *)target)->status.weapon != 11 && dist <= range+1) || //�Ώۂ�PC�ŕ��킪�|��łȂ��˒���
-						(target->type == BL_MOB && range <= 3 && dist <= range+1) ) //�܂��͑Ώۂ�Mob�Ŏ˒���3�ȉ��Ŏ˒���
-						t_sc_data[SC_AUTOCOUNTER].val3 = src->id;
-				}
-				return wd; //�_���[�W�\���̂�Ԃ��ďI��
-			}
-			else ac_flag = 1;
-		}
-	}
-//�I�[�g�J�E���^�[���������܂�
-
-	flag=BF_SHORT|BF_WEAPON|BF_NORMAL;	// �U���̎�ނ̐ݒ�
-
-	// ��𗦌v�Z�A��𔻒�͌��
-	flee = battle_get_flee(target);
-	if(battle_config.agi_penaly_type > 0 || battle_config.vit_penaly_type > 0) //AGI�AVIT�y�i���e�B�ݒ肪�L��
-		target_count += battle_counttargeted(target,src,battle_config.agi_penaly_count_lv);	//�Ώۂ̐����Z�o
-	if(battle_config.agi_penaly_type > 0) {
-		if(target_count >= battle_config.agi_penaly_count) { //�y�i���e�B�ݒ���Ώۂ�����
-			if(battle_config.agi_penaly_type == 1) //��𗦂�agi_penaly_num%���Œ���
-				flee = (flee * (100 - (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num))/100;
-			else if(battle_config.agi_penaly_type == 2) //��𗦂�agi_penaly_num������
-				flee -= (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num;
-			if(flee < 1) flee = 1; //��𗦂͍Œ�ł�1
-		}
-	}
-	hitrate=battle_get_hit(src) - flee + 80; //�������v�Z
-
-	type=0;	// normal
-	div_ = 1; // single attack
-
-	dex=battle_get_dex(src); //DEX
-	luk=battle_get_luk(src); //LUK
-	watk = battle_get_atk(src); //ATK
-	watk_ = battle_get_atk_(src); //ATK����
-
-	if(skill_num==HW_MAGICCRASHER){			/* �}�W�b�N�N���b�V���[��MATK�ʼn��� */
-		damage = damage2 = battle_get_matk1(src); //damega,damega2���o��Abase_atk�̎擾
-	}else{
-	damage = damage2 = battle_get_baseatk(&sd->bl); //damega,damega2���o��Abase_atk�̎擾
-	}
-	atkmin = atkmin_ = dex; //�Œ�ATK��DEX�ŏ������H
-	sd->state.arrow_atk = 0; //arrow_atk������
-	if(sd->equip_index[9] >= 0 && sd->inventory_data[sd->equip_index[9]])
-		atkmin = atkmin*(80 + sd->inventory_data[sd->equip_index[9]]->wlv*20)/100;
-	if(sd->equip_index[8] >= 0 && sd->inventory_data[sd->equip_index[8]])
-		atkmin_ = atkmin_*(80 + sd->inventory_data[sd->equip_index[8]]->wlv*20)/100;
-	if(sd->status.weapon == 11) { //���킪�|��̏ꍇ
-		atkmin = watk * ((atkmin<watk)? atkmin:watk)/100; //�|�p�Œ�ATK�v�Z
-		flag=(flag&~BF_RANGEMASK)|BF_LONG; //�������U���t���O��L��
-		if(sd->arrow_ele > 0) //������Ȃ瑮�����̑����ɕύX
-			s_ele = sd->arrow_ele;
-		sd->state.arrow_atk = 1; //arrow_atk�L����
-	}
-
-	// �T�C�Y�C��
-	// �y�R�R�悵�Ă��āA���ōU�������ꍇ�͒��^�̃T�C�Y�C����100�ɂ���
-	// �E�F�|���p�[�t�F�N�V����,�h���C�NC
-	if(((sd->special_state.no_sizefix) || (pc_isriding(sd) && (sd->status.weapon==4 || sd->status.weapon==5) && t_size==1) || skill_num == MO_EXTREMITYFIST)){	//�y�R�R�悵�Ă��āA���Œ��^���U��
-		atkmax = watk;
-		atkmax_ = watk_;
-	} else {
-		atkmax = (watk * sd->atkmods[ t_size ]) / 100;
-		atkmin = (atkmin * sd->atkmods[ t_size ]) / 100;
-			atkmax_ = (watk_ * sd->atkmods_[ t_size ]) / 100;
-		atkmin_ = (atkmin_ * sd->atkmods[ t_size ]) / 100;
-	}
-	if( (sc_data != NULL && sc_data[SC_WEAPONPERFECTION].timer!=-1) || (sd->special_state.no_sizefix)) {	// �E�F�|���p�[�t�F�N�V���� || �h���C�N�J�[�h
-		atkmax = watk;
-		atkmax_ = watk_;
-	}
-
-	if(atkmin > atkmax && !(sd->state.arrow_atk)) atkmin = atkmax;	//�|�͍ŒႪ����ꍇ����
-	if(atkmin_ > atkmax_) atkmin_ = atkmax_;
-
-	if(sc_data != NULL && sc_data[SC_MAXIMIZEPOWER].timer!=-1 ){	// �}�L�V�}�C�Y�p���[
-		atkmin=atkmax;
-		atkmin_=atkmax_;
-	}
-
-	//�_�u���A�^�b�N����
-	if(sd->weapontype1 == 0x01) {
-		if(skill_num == 0 && skill_lv >= 0 && (skill = pc_checkskill(sd,TF_DOUBLE)) > 0)
-			da = (rand()%100 < (skill*5)) ? 1:0;
-	}
-
-	//�O�i��
-	if(skill_num == 0 && skill_lv >= 0 && (skill = pc_checkskill(sd,MO_TRIPLEATTACK)) > 0 && sd->status.weapon <= 16 && !sd->state.arrow_atk) {
-			da = (rand()%100 < (30 - skill)) ? 2:0;
-	}
-
-	if(sd->double_rate > 0 && da == 0 && skill_num == 0 && skill_lv >= 0)
-		da = (rand()%100 < sd->double_rate) ? 1:0;
-
-	// �ߏ萸�B�{�[�i�X
-	if(sd->overrefine>0 )
-		damage+=(rand()%sd->overrefine)+1;
-	if(sd->overrefine_>0 )
-		damage2+=(rand()%sd->overrefine_)+1;
-
-	if(da == 0){ //�_�u���A�^�b�N���������Ă��Ȃ�
-		// �N���e�B�J���v�Z
-		cri = battle_get_critical(src);
-
-		if(sd->state.arrow_atk)
-			cri += sd->arrow_cri;
-		if(sd->status.weapon == 16)
-				// �J�^�[���̏ꍇ�A�N���e�B�J����{��
-			cri <<=1;
-		cri -= battle_get_luk(target) * 3;
-		if(t_sc_data != NULL && t_sc_data[SC_SLEEP].timer!=-1 )	// �������̓N���e�B�J�����{��
-			cri <<=1;
-		if(ac_flag) cri = 1000;
-
-		if(skill_num == KN_AUTOCOUNTER) {
-			if(!(battle_config.pc_auto_counter_type&1))
-				cri = 1000;
-			else
-				cri <<= 1;
-		}
-
-		if(skill_num == SN_SHARPSHOOTING && rand()%100 < 50)
-			cri = 1000;
-	}
-
-	if(tsd && tsd->critical_def)
-		cri = cri * (100-tsd->critical_def) / 100;
-
-	if(da == 0 && (skill_num==0 || skill_num == KN_AUTOCOUNTER || skill_num == SN_SHARPSHOOTING) && skill_lv >= 0 && //�_�u���A�^�b�N���������Ă��Ȃ�
-		(rand() % 1000) < cri)	// ����i�X�L���̏ꍇ�͖����j
-	{
-		damage += atkmax;
-		damage2 += atkmax_;
-		if(sd->atk_rate != 100) {
-			damage = (damage * sd->atk_rate)/100;
-			damage2 = (damage2 * sd->atk_rate)/100;
-		}
-		if(sd->state.arrow_atk)
-			damage += sd->arrow_atk;
-		type = 0x0a;
-
-/*		if(def1 < 1000000) {
-			if(sd->def_ratio_atk_ele & (1<<t_ele) || sd->def_ratio_atk_race & (1<<t_race)) {
-				damage = (damage * (def1 + def2))/100;
-				idef_flag = 1;
-			}
-			if(sd->def_ratio_atk_ele_ & (1<<t_ele) || sd->def_ratio_atk_race_ & (1<<t_race)) {
-				damage2 = (damage2 * (def1 + def2))/100;
-				idef_flag_ = 1;
-			}
-			if(t_mode & 0x20) {
-				if(!idef_flag && sd->def_ratio_atk_race & (1<<10)) {
-					damage = (damage * (def1 + def2))/100;
-					idef_flag = 1;
-				}
-				if(!idef_flag_ && sd->def_ratio_atk_race_ & (1<<10)) {
-					damage2 = (damage2 * (def1 + def2))/100;
-					idef_flag_ = 1;
-				}
-			}
-			else {
-				if(!idef_flag && sd->def_ratio_atk_race & (1<<11)) {
-					damage = (damage * (def1 + def2))/100;
-					idef_flag = 1;
-				}
-				if(!idef_flag_ && sd->def_ratio_atk_race_ & (1<<11)) {
-					damage2 = (damage2 * (def1 + def2))/100;
-					idef_flag_ = 1;
-				}
-			}
-		}*/
-	}
-	else {
-		int vitbonusmax;
-
-		if(atkmax > atkmin)
-			damage += atkmin + rand() % (atkmax-atkmin + 1);
-		else
-			damage += atkmin ;
-		if(atkmax_ > atkmin_)
-			damage2 += atkmin_ + rand() % (atkmax_-atkmin_ + 1);
-		else
-			damage2 += atkmin_ ;
-		if(sd->atk_rate != 100) {
-			damage = (damage * sd->atk_rate)/100;
-			damage2 = (damage2 * sd->atk_rate)/100;
-		}
-
-		if(sd->state.arrow_atk) {
-			if(sd->arrow_atk > 0)
-				damage += rand()%(sd->arrow_atk+1);
-			hitrate += sd->arrow_hit;
-		}
-
-		if(skill_num != MO_INVESTIGATE && def1 < 1000000) {
-			if(sd->def_ratio_atk_ele & (1<<t_ele) || sd->def_ratio_atk_race & (1<<t_race)) {
-				damage = (damage * (def1 + def2))/100;
-				idef_flag = 1;
-			}
-			if(sd->def_ratio_atk_ele_ & (1<<t_ele) || sd->def_ratio_atk_race_ & (1<<t_race)) {
-				damage2 = (damage2 * (def1 + def2))/100;
-				idef_flag_ = 1;
-			}
-			if(t_mode & 0x20) {
-				if(!idef_flag && sd->def_ratio_atk_race & (1<<10)) {
-					damage = (damage * (def1 + def2))/100;
-					idef_flag = 1;
-				}
-				if(!idef_flag_ && sd->def_ratio_atk_race_ & (1<<10)) {
-					damage2 = (damage2 * (def1 + def2))/100;
-					idef_flag_ = 1;
-				}
-			}
-			else {
-				if(!idef_flag && sd->def_ratio_atk_race & (1<<11)) {
-					damage = (damage * (def1 + def2))/100;
-					idef_flag = 1;
-				}
-				if(!idef_flag_ && sd->def_ratio_atk_race_ & (1<<11)) {
-					damage2 = (damage2 * (def1 + def2))/100;
-					idef_flag_ = 1;
-				}
-			}
-		}
-
-		// �X�L���C���P�i�U���͔{���n�j
-		// �I�[�o�[�g���X�g(+5% �` +25%),���U���n�X�L���̏ꍇ�����ŕ␳
-		// �o�b�V��,�}�O�i���u���C�N,
-		// �{�[�����O�o�b�V��,�X�s�A�u�[������,�u�����f�B�b�V���X�s�A,�X�s�A�X�^�b�u,
-		// ���}�[�i�C�g,�J�[�g���{�����[�V����
-		// �_�u���X�g���C�t�B���O,�A���[�V�����[,�`���[�W�A���[,
-		// �\�j�b�N�u���[
-		if(sc_data){ //��Ԉُ풆�̃_���[�W�lj�
-			if(sc_data[SC_OVERTHRUST].timer!=-1){	// �I�[�o�[�g���X�g
-			damage += damage*(5*sc_data[SC_OVERTHRUST].val1)/100;
-			damage2 += damage2*(5*sc_data[SC_OVERTHRUST].val1)/100;
-		}
-			if(sc_data[SC_TRUESIGHT].timer!=-1){	// �g�D���[�T�C�g
-			damage += damage*(2*sc_data[SC_TRUESIGHT].val1)/100;
-			damage2 += damage2*(2*sc_data[SC_TRUESIGHT].val1)/100;
-		}
-			if(sc_data[SC_BERSERK].timer!=-1){	// �o�[�T�[�N
-				damage += damage*50/100;
-				damage2 += damage2*50/100;
-			}
-		}
-
-		if(skill_num>0){
-			int i;
-			if( (i=skill_get_pl(skill_num))>0 )
-				s_ele=s_ele_=i;
-
-			flag=(flag&~BF_SKILLMASK)|BF_SKILL;
-			switch( skill_num ){
-			case SM_BASH:		// �o�b�V��
-				damage = damage*(100+ 30*skill_lv)/100;
-				damage2 = damage2*(100+ 30*skill_lv)/100;
-				hitrate = (hitrate*(100+5*skill_lv))/100;
-				break;
-			case SM_MAGNUM:		// �}�O�i���u���C�N
-				damage = damage*(5*skill_lv +(wflag)?65:115 )/100;
-				damage2 = damage2*(5*skill_lv +(wflag)?65:115 )/100;
-				break;
-			case MC_MAMMONITE:	// ���}�[�i�C�g
-				damage = damage*(100+ 50*skill_lv)/100;
-				damage2 = damage2*(100+ 50*skill_lv)/100;
-				break;
-			case AC_DOUBLE:	// �_�u���X�g���C�t�B���O
-				if(!sd->state.arrow_atk && sd->arrow_atk > 0) {
-					int arr = rand()%(sd->arrow_atk+1);
-					damage += arr;
-					damage2 += arr;
-				}
-				damage = damage*(180+ 20*skill_lv)/100;
-				damage2 = damage2*(180+ 20*skill_lv)/100;
-				div_=2;
-				if(sd->arrow_ele > 0) {
-					s_ele = sd->arrow_ele;
-					s_ele_ = sd->arrow_ele;
-				}
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				sd->state.arrow_atk = 1;
-				break;
-			case AC_SHOWER:	// �A���[�V�����[
-				if(!sd->state.arrow_atk && sd->arrow_atk > 0) {
-					int arr = rand()%(sd->arrow_atk+1);
-					damage += arr;
-					damage2 += arr;
-				}
-				damage = damage*(75 + 5*skill_lv)/100;
-				damage2 = damage2*(75 + 5*skill_lv)/100;
-				if(sd->arrow_ele > 0) {
-					s_ele = sd->arrow_ele;
-					s_ele_ = sd->arrow_ele;
-				}
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				sd->state.arrow_atk = 1;
-				break;
-			case AC_CHARGEARROW:	// �`���[�W�A���[
-				if(!sd->state.arrow_atk && sd->arrow_atk > 0) {
-					int arr = rand()%(sd->arrow_atk+1);
-					damage += arr;
-					damage2 += arr;
-				}
-				damage = damage*150/100;
-				damage2 = damage2*150/100;
-				if(sd->arrow_ele > 0) {
-					s_ele = sd->arrow_ele;
-					s_ele_ = sd->arrow_ele;
-				}
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				sd->state.arrow_atk = 1;
-				break;
-			case KN_PIERCE:	// �s�A�[�X
-				damage = damage*(100+ 10*skill_lv)/100;
-				damage2 = damage2*(100+ 10*skill_lv)/100;
-				hitrate=hitrate*(100+5*skill_lv)/100;
-				div_=t_size+1;
-				damage*=div_;
-				damage2*=div_;
-				break;
-			case KN_SPEARSTAB:	// �X�s�A�X�^�u
-				damage = damage*(100+ 15*skill_lv)/100;
-				damage2 = damage2*(100+ 15*skill_lv)/100;
-				break;
-			case KN_SPEARBOOMERANG:	// �X�s�A�u�[������
-				damage = damage*(100+ 50*skill_lv)/100;
-				damage2 = damage2*(100+ 50*skill_lv)/100;
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				break;
-			case KN_BRANDISHSPEAR: // �u�����f�B�b�V���X�s�A
-				damage = damage*(100+ 20*skill_lv)/100;
-				damage2 = damage2*(100+ 20*skill_lv)/100;
-				if(skill_lv>3 && wflag==1) damage3+=damage/2;
-				if(skill_lv>6 && wflag==1) damage3+=damage/4;
-				if(skill_lv>9 && wflag==1) damage3+=damage/8;
-				if(skill_lv>6 && wflag==2) damage3+=damage/2;
-				if(skill_lv>9 && wflag==2) damage3+=damage/4;
-				if(skill_lv>9 && wflag==3) damage3+=damage/2;
-				damage +=damage3;
-				if(skill_lv>3 && wflag==1) damage4+=damage2/2;
-				if(skill_lv>6 && wflag==1) damage4+=damage2/4;
-				if(skill_lv>9 && wflag==1) damage4+=damage2/8;
-				if(skill_lv>6 && wflag==2) damage4+=damage2/2;
-				if(skill_lv>9 && wflag==2) damage4+=damage2/4;
-				if(skill_lv>9 && wflag==3) damage4+=damage2/2;
-				damage2 +=damage4;
-				blewcount=0;
-				break;
-			case KN_BOWLINGBASH:	// �{�E�����O�o�b�V��
-				damage = damage*(100+ 50*skill_lv)/100;
-				damage2 = damage2*(100+ 50*skill_lv)/100;
-				blewcount=0;
-				break;
-			case KN_AUTOCOUNTER:
-				if(battle_config.pc_auto_counter_type&1)
-					hitrate += 20;
-				else
-					hitrate = 1000000;
-				flag=(flag&~BF_SKILLMASK)|BF_NORMAL;
-				break;
-			case AS_SONICBLOW:	// �\�j�b�N�u���E
-				hitrate+=30; // hitrate +30, thanks to midas
-				damage = damage*(300+ 50*skill_lv)/100;
-				damage2 = damage2*(300+ 50*skill_lv)/100;
-				div_=8;
-				break;
-			case TF_SPRINKLESAND:	// ���܂�
-				damage = damage*125/100;
-				damage2 = damage2*125/100;
-				break;
-			case MC_CARTREVOLUTION:	// �J�[�g���{�����[�V����
-				if(sd->cart_max_weight > 0 && sd->cart_weight > 0) {
-					damage = (damage*(150 + pc_checkskill(sd,BS_WEAPONRESEARCH) + (sd->cart_weight*100/sd->cart_max_weight) ) )/100;
-					damage2 = (damage2*(150 + pc_checkskill(sd,BS_WEAPONRESEARCH) + (sd->cart_weight*100/sd->cart_max_weight) ) )/100;
-				}
-				else {
-					damage = (damage*150)/100;
-					damage2 = (damage2*150)/100;
-				}
-				break;
-			// �ȉ�MOB
-			case NPC_COMBOATTACK:	// ���i�U��
-				div_=skill_get_num(skill_num,skill_lv);
-				damage *= div_;
-				damage2 *= div_;
-				break;
-			case NPC_RANDOMATTACK:	// �����_��ATK�U��
-				damage = damage*(50+rand()%150)/100;
-				damage2 = damage2*(50+rand()%150)/100;
-				break;
-			// �����U���i�K���j
-			case NPC_WATERATTACK:
-			case NPC_GROUNDATTACK:
-			case NPC_FIREATTACK:
-			case NPC_WINDATTACK:
-			case NPC_POISONATTACK:
-			case NPC_HOLYATTACK:
-			case NPC_DARKNESSATTACK:
-			case NPC_TELEKINESISATTACK:
-				damage = damage*(100+25*skill_lv)/100;
-				damage2 = damage2*(100+25*skill_lv)/100;
-				break;
-			case NPC_GUIDEDATTACK:
-				hitrate = 1000000;
-				break;
-			case NPC_RANGEATTACK:
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				break;
-			case NPC_PIERCINGATT:
-				flag=(flag&~BF_RANGEMASK)|BF_SHORT;
-				break;
-			case RG_BACKSTAP:	// �o�b�N�X�^�u
-				if(battle_config.backstab_bow_penalty == 1 && sd->status.weapon == 11){
-					damage = (damage*(300+ 40*skill_lv)/100)/2;
-					damage2 = (damage2*(300+ 40*skill_lv)/100)/2;
-				}else{
-					damage = damage*(300+ 40*skill_lv)/100;
-					damage2 = damage2*(300+ 40*skill_lv)/100;
-				}
-				hitrate = 1000000;
-				break;
-			case RG_RAID:	// �T�v���C�Y�A�^�b�N
-				damage = damage*(100+ 40*skill_lv)/100;
-				damage2 = damage2*(100+ 40*skill_lv)/100;
-				break;
-			case RG_INTIMIDATE:	// �C���e�B�~�f�C�g
-				damage = damage*(100+ 30*skill_lv)/100;
-				damage2 = damage2*(100+ 30*skill_lv)/100;
-				break;
-			case CR_SHIELDCHARGE:	// �V�[���h�`���[�W
-				damage = damage*(100+ 20*skill_lv)/100;
-				damage2 = damage2*(100+ 20*skill_lv)/100;
-				flag=(flag&~BF_RANGEMASK)|BF_SHORT;
-				s_ele = 0;
-				break;
-			case CR_SHIELDBOOMERANG:	// �V�[���h�u�[������
-				damage = damage*(100+ 30*skill_lv)/100;
-				damage2 = damage2*(100+ 30*skill_lv)/100;
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				s_ele = 0;
-				break;
-			case CR_HOLYCROSS:	// �z�[���[�N���X
-				damage = damage*(100+ 35*skill_lv)/100;
-				damage2 = damage2*(100+ 35*skill_lv)/100;
-				div_=2;
-				break;
-			case CR_GRANDCROSS:
-				hitrate= 1000000;
-				break;
-			case AM_DEMONSTRATION:	// �f�����X�g���[�V����
-				damage = damage*(100+ 20*skill_lv)/100;
-				damage2 = damage2*(100+ 20*skill_lv)/100;
-				break;
-			case AM_ACIDTERROR:	// �A�V�b�h�e���[
-				damage = damage*(100+ 40*skill_lv)/100;
-				damage2 = damage2*(100+ 40*skill_lv)/100;
-				break;
-			case MO_FINGEROFFENSIVE:	//�w�e
-				if(battle_config.finger_offensive_type == 0) {
-					damage = damage * (100 + 50 * skill_lv) / 100 * sd->spiritball_old;
-					damage2 = damage2 * (100 + 50 * skill_lv) / 100 * sd->spiritball_old;
-					div_ = sd->spiritball_old;
-				}
-				else {
-					damage = damage * (100 + 50 * skill_lv) / 100;
-					damage2 = damage2 * (100 + 50 * skill_lv) / 100;
-					div_ = 1;
-				}
-				break;
-			case MO_INVESTIGATE:	// �� ��
-				if(def1 < 1000000) {
-					damage = damage*(100+ 75*skill_lv)/100 * (def1 + def2)/100;
-					damage2 = damage2*(100+ 75*skill_lv)/100 * (def1 + def2)/100;
-				}
-				hitrate = 1000000;
-				s_ele = 0;
-				s_ele_ = 0;
-				break;
-			case MO_EXTREMITYFIST:	// ���C���e�P��
-				damage = damage * (8 + ((sd->status.sp)/10)) + 250 + (skill_lv * 150);
-				damage2 = damage2 * (8 + ((sd->status.sp)/10)) + 250 + (skill_lv * 150);
-				sd->status.sp = 0;
-				clif_updatestatus(sd,SP_SP);
-				hitrate = 1000000;
-				s_ele = 0;
-				s_ele_ = 0;
-				break;
-			case MO_CHAINCOMBO:	// �A�ŏ�
-				damage = damage*(150+ 50*skill_lv)/100;
-				damage2 = damage2*(150+ 50*skill_lv)/100;
-				div_=4;
-				break;
-			case MO_COMBOFINISH:	// �җ���
-				damage = damage*(240+ 60*skill_lv)/100;
-				damage2 = damage2*(240+ 60*skill_lv)/100;
-				break;
-			case BA_MUSICALSTRIKE:	// �~���[�W�J���X�g���C�N
-				if(!sd->state.arrow_atk && sd->arrow_atk > 0) {
-					int arr = rand()%(sd->arrow_atk+1);
-					damage += arr;
-					damage2 += arr;
-				}
-				damage = damage*(100+ 50 * skill_lv)/100;
-				damage2 = damage2*(100+ 50 * skill_lv)/100;
-				if(sd->arrow_ele > 0) {
-					s_ele = sd->arrow_ele;
-					s_ele_ = sd->arrow_ele;
-				}
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				sd->state.arrow_atk = 1;
-				break;
-			case DC_THROWARROW:	// ���
-				if(!sd->state.arrow_atk && sd->arrow_atk > 0) {
-					int arr = rand()%(sd->arrow_atk+1);
-					damage += arr;
-					damage2 += arr;
-				}
-				damage = damage*(100+ 50 * skill_lv)/100;
-				damage2 = damage2*(100+ 50 * skill_lv)/100;
-				if(sd->arrow_ele > 0) {
-					s_ele = sd->arrow_ele;
-					s_ele_ = sd->arrow_ele;
-				}
-				flag=(flag&~BF_RANGEMASK)|BF_LONG;
-				sd->state.arrow_atk = 1;
-				break;
-			case CH_TIGERFIST:	// ���Ռ�
-				damage = damage*(100+ 20*skill_lv)/100;
-				damage2 = damage2*(100+ 20*skill_lv)/100;
-				break;
-			case CH_CHAINCRUSH:	// �A������
-				damage = damage*(100+ 20*skill_lv)/100;
-				damage2 = damage2*(100+ 20*skill_lv)/100;
-				div_=skill_get_num(skill_num,skill_lv);
-				break;
-			case CH_PALMSTRIKE:	// �ҌՍd�h�R
-				damage = damage*(50+ 100*skill_lv)/100;
-				damage2 = damage2*(50+ 100*skill_lv)/100;
-				break;
-			case LK_SPIRALPIERCE:			/* �X�p�C�����s�A�[�X */
-				damage = damage*(100+ 50*skill_lv)/100; //�����ʂ�������Ȃ��̂œK����
-				damage2 = damage2*(100+ 50*skill_lv)/100; //�����ʂ�������Ȃ��̂œK����
-				div_=5;
-				if(tsd)
-					tsd->canmove_tick = gettick() + 1000;
-				else if(tmd)
-					tmd->canmove_tick = gettick() + 1000;
-				break;
-			case LK_HEADCRUSH:				/* �w�b�h�N���b�V�� */
-				damage = damage*(100+ 20*skill_lv)/100;
-				damage2 = damage2*(100+ 20*skill_lv)/100;
-				break;
-			case LK_JOINTBEAT:				/* �W���C���g�r�[�g */
-				damage = damage*(50+ 10*skill_lv)/100;
-				damage2 = damage2*(50+ 10*skill_lv)/100;
-				break;
-			case ASC_METEORASSAULT:			/* ���e�I�A�T���g */
-				damage = damage*(40+ 40*skill_lv)/100;
-				damage2 = damage2*(40+ 40*skill_lv)/100;
-				break;
-			case SN_SHARPSHOOTING:			/* �V���[�v�V���[�e�B���O */
-				damage += damage*(30*skill_lv)/100;
-				damage2 += damage2*(30*skill_lv)/100;
-				break;
-			case CG_ARROWVULCAN:			/* �A���[�o���J�� */
-				damage = damage*(160+40*skill_lv)/100;
-				damage2 = damage2*(160+40*skill_lv)/100;
-				div_=9;
-				break;
-			case AS_SPLASHER:		/* �x�i���X�v���b�V���[ */
-				damage = damage*(200+20*skill_lv+20*pc_checkskill(sd,AS_POISONREACT))/100;
-				damage2 = damage2*(200+20*skill_lv+20*pc_checkskill(sd,AS_POISONREACT))/100;
-				break;
-			case PA_SACRIFICE:
-				if(sd){
-					int hp, mhp, damage3;
-					hp = battle_get_hp(src);
-					mhp = battle_get_max_hp(src);
-					damage3 = mhp*((skill_lv/2)+(50/100))/100;
-					damage = (((skill_lv*15)+90)/100)*damage3/100;
-					damage2 = (((skill_lv*15)+90)/100)*damage3/100;
-				}
-				break;
-			case ASC_BREAKER:		// -- moonsoul (special damage for ASC_BREAKER skill)
-				if(sd){
-					int damage3;
-					int mdef1=battle_get_mdef(target);
-					int mdef2=battle_get_mdef2(target);
-					int imdef_flag=0;
-	
-					damage = ((damage * 5) + (skill_lv * battle_get_int(src) * 5) + rand()%500 + 500) /2;
-					damage2 = ((damage2 * 5) + (skill_lv * battle_get_int(src) * 5) + rand()%500 + 500) /2;
-					damage3 = damage;
-					hitrate = 1000000;
-	
-					if(sd->ignore_mdef_ele & (1<<t_ele) || sd->ignore_mdef_race & (1<<t_race))
-						imdef_flag = 1;
-					if(t_mode & 0x20) {
-						if(sd->ignore_mdef_race & (1<<10))
-							imdef_flag = 1;
-					}
-					else {
-						if(sd->ignore_mdef_race & (1<<11))
-							imdef_flag = 1;
-					}
-					if(!imdef_flag){
-						if(battle_config.magic_defense_type) {
-							damage3 = damage3 - (mdef1 * battle_config.magic_defense_type) - mdef2;
-						}
-						else{
-							damage3 = (damage3*(100-mdef1))/100 - mdef2;
-						}
-					}
-	
-					if(damage3<1)
-						damage3=1;
-
-					damage3=battle_attr_fix(damage2,s_ele_, battle_get_element(target) );
-				}
-				break;
-			}
-		}
-		if(da == 2) { //�O�i�����������Ă��邩
-			type = 0x08;
-			div_ = 255;	//�O�i���p�Ɂc
-			damage = damage * (100 + 20 * pc_checkskill(sd, MO_TRIPLEATTACK)) / 100;
-		}
-
-		if( skill_num!=NPC_CRITICALSLASH ){
-			// �� �ۂ̖h��͂ɂ��_���[�W�̌���
-			// �f�B�o�C���v���e�N�V�����i�����ł����̂��ȁH�j
-			if ( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != KN_AUTOCOUNTER && def1 < 1000000) {	//DEF, VIT����
-				int t_def;
-				target_count = 1 + battle_counttargeted(target,src,battle_config.vit_penaly_count_lv);
-				if(battle_config.vit_penaly_type > 0) {
-					if(target_count >= battle_config.vit_penaly_count) {
-						if(battle_config.vit_penaly_type == 1) {
-							def1 = (def1 * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
-							def2 = (def2 * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
-							t_vit = (t_vit * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
-						}
-						else if(battle_config.vit_penaly_type == 2) {
-							def1 -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
-							def2 -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
-							t_vit -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
-						}
-						if(def1 < 0) def1 = 0;
-						if(def2 < 1) def2 = 1;
-						if(t_vit < 1) t_vit = 1;
-					}
-				}
-				t_def = def2*8/10;
-				vitbonusmax = (t_vit/20)*(t_vit/20)-1;
-				if(sd->ignore_def_ele & (1<<t_ele) || sd->ignore_def_race & (1<<t_race))
-					idef_flag = 1;
-				if(sd->ignore_def_ele_ & (1<<t_ele) || sd->ignore_def_race_ & (1<<t_race))
-					idef_flag_ = 1;
-				if(t_mode & 0x20) {
-					if(sd->ignore_def_race & (1<<10))
-						idef_flag = 1;
-					if(sd->ignore_def_race_ & (1<<10))
-						idef_flag_ = 1;
-				}
-				else {
-					if(sd->ignore_def_race & (1<<11))
-						idef_flag = 1;
-					if(sd->ignore_def_race_ & (1<<11))
-						idef_flag_ = 1;
-				}
-
-				if(!idef_flag){
-					if(battle_config.player_defense_type) {
-						damage = damage - (def1 * battle_config.player_defense_type) - t_def - ((vitbonusmax < 1)?0: rand()%(vitbonusmax+1) );
-					}
-					else{
-						damage = damage * (100 - def1) /100 - t_def - ((vitbonusmax < 1)?0: rand()%(vitbonusmax+1) );
-					}
-				}
-				if(!idef_flag_){
-					if(battle_config.player_defense_type) {
-						damage2 = damage2 - (def1 * battle_config.player_defense_type) - t_def - ((vitbonusmax < 1)?0: rand()%(vitbonusmax+1) );
-					}
-					else{
-						damage2 = damage2 * (100 - def1) /100 - t_def - ((vitbonusmax < 1)?0: rand()%(vitbonusmax+1) );
-					}
-				}
-			}
-		}
-	}
-	// ���B�_���[�W�̒lj�
-	if( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST) {			//DEF, VIT����
-		damage += battle_get_atk2(src);
-		damage2 += battle_get_atk_2(src);
-	}
-	if(skill_num == CR_SHIELDBOOMERANG) {
-		if(sd->equip_index[8] >= 0) {
-			int index = sd->equip_index[8];
-			if(sd->inventory_data[index] && sd->inventory_data[index]->type == 5) {
-				damage += sd->inventory_data[index]->weight/10;
-				damage += sd->status.inventory[index].refine * pc_getrefinebonus(0,1);
-			}
-		}
-	}
-	if(skill_num == LK_SPIRALPIERCE) {			/* �X�p�C�����s�A�[�X */
-		if(sd->equip_index[9] >= 0) {	//�d�ʂŒlj��_���[�W�炵���̂ŃV�[���h�u�[���������Q�l�ɒlj�
-			int index = sd->equip_index[9];
-			if(sd->inventory_data[index] && sd->inventory_data[index]->type == 4) {
-				damage += (int)(double)(sd->inventory_data[index]->weight*(0.8*skill_lv*4/10));
-				damage += sd->status.inventory[index].refine * pc_getrefinebonus(0,1);
-			}
-		}
-	}
-
-	// 0�����������ꍇ1�ɕ␳
-	if(damage<1) damage=1;
-	if(damage2<1) damage2=1;
-
-	// �X�L���C���Q�i�C���n�j
-	// �C���_���[�W(�E��̂�) �\�j�b�N�u���[���͕ʏ����i1���ɕt��1/8�K��)
-	if( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != CR_GRANDCROSS) {			//�C���_���[�W����
-		damage = battle_addmastery(sd,target,damage,0);
-		damage2 = battle_addmastery(sd,target,damage2,1);
-	}
-
-	if(sd->perfect_hit > 0) {
-		if(rand()%100 < sd->perfect_hit)
-			hitrate = 1000000;
-	}
-
-	// ����C��
-	hitrate = (hitrate<5)?5:hitrate;
-	if(	hitrate < 1000000 && // �K���U��
-		(t_sc_data != NULL && (t_sc_data[SC_SLEEP].timer!=-1 ||	// �����͕K��
-		t_sc_data[SC_STAN].timer!=-1 ||		// �X�^���͕K��
-		t_sc_data[SC_FREEZE].timer!=-1 || (t_sc_data[SC_STONE].timer!=-1 && t_sc_data[SC_STONE].val2==0) ) ) )	// �����͕K��
-		hitrate = 1000000;
-	if(type == 0 && rand()%100 >= hitrate) {
-		damage = damage2 = 0;
-		dmg_lv = ATK_FLEE;
-	} else {
-		dmg_lv = ATK_DEF;
-	}
-	// �X�L���C���R�i���팤���j
-	if( (skill=pc_checkskill(sd,BS_WEAPONRESEARCH)) > 0) {
-		damage+= skill*2;
-		damage2+= skill*2;
-	}
-	//Advanced Katar Research by zanetheinsane
-	if(sd->weapontype1 == 0x10 || sd->weapontype2 == 0x10){
-		if((skill = pc_checkskill(sd,ASC_KATAR)) > 0) {
-			damage += (damage*((skill*2)+10)) / 100 ;
-		}
-	}
-
-//�X�L���ɂ��_���[�W�␳�����܂�
-
-//�J�[�h�ɂ��_���[�W�lj�������������
-	cardfix=100;
-	if(!sd->state.arrow_atk) { //�|��ȊO
-		if(!battle_config.left_cardfix_to_right) { //����J�[�h�␳�ݒ薳��
-			cardfix=cardfix*(100+sd->addrace[t_race])/100;	// �푰�ɂ��_���[�W�C��
-			cardfix=cardfix*(100+sd->addele[t_ele])/100;	// �����ɂ��_���[�W�C��
-			cardfix=cardfix*(100+sd->addsize[t_size])/100;	// �T�C�Y�ɂ��_���[�W�C��
-		}
-		else {
-			cardfix=cardfix*(100+sd->addrace[t_race]+sd->addrace_[t_race])/100;	// �푰�ɂ��_���[�W�C��(����ɂ��lj�����)
-			cardfix=cardfix*(100+sd->addele[t_ele]+sd->addele_[t_ele])/100;	// �����ɂ��_���[�W�C��(����ɂ��lj�����)
-			cardfix=cardfix*(100+sd->addsize[t_size]+sd->addsize_[t_size])/100;	// �T�C�Y�ɂ��_���[�W�C��(����ɂ��lj�����)
-		}
-	}
-	else { //�|��
-		cardfix=cardfix*(100+sd->addrace[t_race]+sd->arrow_addrace[t_race])/100;	// �푰�ɂ��_���[�W�C��(�|��ɂ��lj�����)
-		cardfix=cardfix*(100+sd->addele[t_ele]+sd->arrow_addele[t_ele])/100;	// �����ɂ��_���[�W�C��(�|��ɂ��lj�����)
-		cardfix=cardfix*(100+sd->addsize[t_size]+sd->arrow_addsize[t_size])/100;	// �T�C�Y�ɂ��_���[�W�C��(�|��ɂ��lj�����)
-	}
-	if(t_mode & 0x20) { //�{�X
-		if(!sd->state.arrow_atk) { //�|��U���ȊO�Ȃ�
-			if(!battle_config.left_cardfix_to_right) //����J�[�h�␳�ݒ薳��
-				cardfix=cardfix*(100+sd->addrace[10])/100; //�{�X�����X�^�[�ɒlj��_���[�W
-			else //����J�[�h�␳�ݒ肠��
-				cardfix=cardfix*(100+sd->addrace[10]+sd->addrace_[10])/100; //�{�X�����X�^�[�ɒlj��_���[�W(����ɂ��lj�����)
-		}
-		else //�|��U��
-			cardfix=cardfix*(100+sd->addrace[10]+sd->arrow_addrace[10])/100; //�{�X�����X�^�[�ɒlj��_���[�W(�|��ɂ��lj�����)
-	}
-	else { //�{�X����Ȃ�
-		if(!sd->state.arrow_atk) { //�|��U���ȊO
-			if(!battle_config.left_cardfix_to_right) //����J�[�h�␳�ݒ薳��
-				cardfix=cardfix*(100+sd->addrace[11])/100; //�{�X�ȊO�����X�^�[�ɒlj��_���[�W
-			else //����J�[�h�␳�ݒ肠��
-				cardfix=cardfix*(100+sd->addrace[11]+sd->addrace_[11])/100; //�{�X�ȊO�����X�^�[�ɒlj��_���[�W(����ɂ��lj�����)
-		}
-		else
-			cardfix=cardfix*(100+sd->addrace[11]+sd->arrow_addrace[11])/100; //�{�X�ȊO�����X�^�[�ɒlj��_���[�W(�|��ɂ��lj�����)
-	}
-	//����Class�p�␳����(�����̓��L���{���S���p�H)
-	t_class = battle_get_class(target);
-	for(i=0;i<sd->add_damage_class_count;i++) {
-		if(sd->add_damage_classid[i] == t_class) {
-			cardfix=cardfix*(100+sd->add_damage_classrate[i])/100;
-			break;
-		}
-	}
-	if(skill_num != CR_GRANDCROSS || !battle_config.gx_cardfix)
-	damage=damage*cardfix/100; //�J�[�h�␳�ɂ��_���[�W����
-//�J�[�h�ɂ��_���[�W�������������܂�
-
-//�J�[�h�ɂ��_���[�W�lj�����(����)��������
-	cardfix=100;
-	if(!battle_config.left_cardfix_to_right) {  //����J�[�h�␳�ݒ薳��
-		cardfix=cardfix*(100+sd->addrace_[t_race])/100;	// �푰�ɂ��_���[�W�C������
-		cardfix=cardfix*(100+sd->addele_[t_ele])/100;	// �� ���ɂ��_���[�W�C������
-		cardfix=cardfix*(100+sd->addsize_[t_size])/100;	// �T�C�Y�ɂ��_���[�W�C������
-		if(t_mode & 0x20) //�{�X
-			cardfix=cardfix*(100+sd->addrace_[10])/100; //�{�X�����X�^�[�ɒlj��_���[�W����
-		else
-			cardfix=cardfix*(100+sd->addrace_[11])/100; //�{�X�ȊO�����X�^�[�ɒlj��_���[�W����
-	}
-	//����Class�p�␳��������(�����̓��L���{���S���p�H)
-	for(i=0;i<sd->add_damage_class_count_;i++) {
-		if(sd->add_damage_classid_[i] == t_class) {
-			cardfix=cardfix*(100+sd->add_damage_classrate_[i])/100;
-			break;
-		}
-	}
-	if(skill_num != CR_GRANDCROSS) damage2=damage2*cardfix/100; //�J�[�h�␳�ɂ�鍶��_���[�W����
-//�J�[�h�ɂ��_���[�W��������(����)�����܂�
-
-// -- moonsoul (cardfix for magic damage portion of ASC_BREAKER)
-	if(skill_num == ASC_BREAKER)
-		damage3 = damage3 * cardfix / 100;
-
-//�J�[�h�ɂ��_���[�W����������������
-	if(tsd){ //�Ώۂ�PC�̏ꍇ
-		cardfix=100;
-		cardfix=cardfix*(100-tsd->subrace[s_race])/100;	// �푰�ɂ��_���[�W�ϐ�
-		cardfix=cardfix*(100-tsd->subele[s_ele])/100;	// �����ɂ��_���[�W�ϐ�
-		if(battle_get_mode(src) & 0x20)
-			cardfix=cardfix*(100-tsd->subrace[10])/100; //�{�X����̍U���̓_���[�W����
-		else
-			cardfix=cardfix*(100-tsd->subrace[11])/100; //�{�X�ȊO����̍U���̓_���[�W����
-		//����Class�p�␳��������(�����̓��L���{���S���p�H)
-		for(i=0;i<tsd->add_def_class_count;i++) {
-			if(tsd->add_def_classid[i] == sd->status.class) {
-				cardfix=cardfix*(100-tsd->add_def_classrate[i])/100;
-				break;
-			}
-		}
-		if(flag&BF_LONG)
-			cardfix=cardfix*(100-tsd->long_attack_def_rate)/100; //�������U���̓_���[�W����(�z����C�Ƃ�)
-		if(flag&BF_SHORT)
-			cardfix=cardfix*(100-tsd->near_attack_def_rate)/100; //�ߋ����U���̓_���[�W����(�Y�������H)
-		damage=damage*cardfix/100; //�J�[�h�␳�ɂ��_���[�W����
-		damage2=damage2*cardfix/100; //�J�[�h�␳�ɂ�鍶��_���[�W����
-	}
-//�J�[�h�ɂ��_���[�W�������������܂�
-
-//�ΏۂɃX�e�[�^�X�ُ킪����ꍇ�̃_���[�W���Z������������
-	if(t_sc_data) {
-		cardfix=100;
-		if(t_sc_data[SC_DEFENDER].timer != -1 && flag&BF_LONG) //�f�B�t�F���_�[��Ԃʼn������U��
-			cardfix=cardfix*(100-t_sc_data[SC_DEFENDER].val2)/100; //�f�B�t�F���_�[�ɂ�錸��
-		if(cardfix != 100) {
-			damage=damage*cardfix/100; //�f�B�t�F���_�[�␳�ɂ��_���[�W����
-			damage2=damage2*cardfix/100; //�f�B�t�F���_�[�␳�ɂ�鍶��_���[�W����
-		}
-		if(t_sc_data[SC_ASSUMPTIO].timer != -1){ //�A�X���v�e�B�I
-			if(!map[target->m].flag.pvp){
-			damage=damage/3;
-			damage2=damage2/3;
-		}else{
-			damage=damage/2;
-			damage2=damage2/2;
-		}
-	}
-	}
-//�ΏۂɃX�e�[�^�X�ُ킪����ꍇ�̃_���[�W���Z���������܂�
-
-	if(damage < 0) damage = 0;
-	if(damage2 < 0) damage2 = 0;
-
-	// �� ���̓K�p
-	damage=battle_attr_fix(damage,s_ele, battle_get_element(target) );
-	damage2=battle_attr_fix(damage2,s_ele_, battle_get_element(target) );
-
-	// ���̂�����A�C���̓K�p
-	damage += sd->star;
-	damage2 += sd->star_;
-	damage += sd->spiritball*3;
-	damage2 += sd->spiritball*3;
-
-	if(sc_data && sc_data[SC_AURABLADE].timer!=-1){	/* �I�[���u���[�h �K�� */
-		damage += sc_data[SC_AURABLADE].val1 * 10;
-		damage2 += sc_data[SC_AURABLADE].val1 * 10;
-	}
-	if(skill_num==PA_PRESSURE){ /* �v���b�V���[ �K��? */
-		damage = 700+100*skill_lv;
-		damage2 = 700+100*skill_lv;
-	}
-
-	// >�񓁗��̍��E�_���[�W�v�Z�N������Ă��ꂥ�������������I
-	// >map_session_data �ɍ���_���[�W(atk,atk2)�lj�����
-	// >pc_calcstatus()�ł��ׂ����ȁH
-	// map_session_data �ɍ��蕐��(atk,atk2,ele,star,atkmods)�lj�����
-	// pc_calcstatus()�Ńf�[�^����͂��Ă��܂�
-
-	//����̂ݕ��푕��
-	if(sd->weapontype1 == 0 && sd->weapontype2 > 0) {
-		damage = damage2;
-		damage2 = 0;
-	}
-	// �E��A����C���̓K�p
-	if(sd->status.weapon > 16) {// �񓁗���?
-		int dmg = damage, dmg2 = damage2;
-		// �E��C��(60% �` 100%) �E��S��
-		skill = pc_checkskill(sd,AS_RIGHT);
-		damage = damage * (50 + (skill * 10))/100;
-		if(dmg > 0 && damage < 1) damage = 1;
-		// ����C��(40% �` 80%) ����S��
-		skill = pc_checkskill(sd,AS_LEFT);
-		damage2 = damage2 * (30 + (skill * 10))/100;
-		if(dmg2 > 0 && damage2 < 1) damage2 = 1;
-	}
-	else //�񓁗��łȂ���΍���_���[�W��0
-		damage2 = 0;
-
-		// �E��,�Z���̂�
-	if(da == 1) { //�_�u���A�^�b�N���������Ă��邩
-		div_ = 2;
-		damage += damage;
-		type = 0x08;
-	}
-
-	if(sd->status.weapon == 16) {
-		// �J�^�[���nj��_���[�W
-		skill = pc_checkskill(sd,TF_DOUBLE);
-		damage2 = damage * (1 + (skill * 2))/100;
-		if(damage > 0 && damage2 < 1) damage2 = 1;
-	}
-
-	// �C���x�i���C��
-	if(skill_num==TF_POISON){
-		damage = battle_attr_fix(damage + 15*skill_lv, s_ele, battle_get_element(target) );
-	}
-	if(skill_num==MC_CARTREVOLUTION){
-		damage = battle_attr_fix(damage, 0, battle_get_element(target) );
-	}
-
-	// ���S����̔���
-	if(skill_num == 0 && skill_lv >= 0 && tsd!=NULL && div_ < 255 && rand()%1000 < battle_get_flee2(target) ){
-		damage=damage2=0;
-		type=0x0b;
-		dmg_lv = ATK_LUCKY;
-	}
-
-	// �Ώۂ����S���������ݒ肪ON�Ȃ�
-	if(battle_config.enemy_perfect_flee) {
-		if(skill_num == 0 && skill_lv >= 0 && tmd!=NULL && div_ < 255 && rand()%1000 < battle_get_flee2(target) ) {
-			damage=damage2=0;
-			type=0x0b;
-			dmg_lv = ATK_LUCKY;
-		}
-	}
-
-	//Mob��Mode�Ɋ拭�t���O�������Ă���Ƃ��̏���
-	if(t_mode&0x40){
-		if(damage > 0)
-			damage = 1;
-		if(damage2 > 0)
-			damage2 = 1;
-	}
-
-	//bNoWeaponDamage(�ݒ�A�C�e�������H)�ŃO�����h�N���X����Ȃ��ꍇ�̓_���[�W��0
-	if( tsd && tsd->special_state.no_weapon_damage && skill_num != CR_GRANDCROSS)
-		damage = damage2 = 0;
-
-	if(skill_num != CR_GRANDCROSS && (damage > 0 || damage2 > 0) ) {
-		if(damage2<1)		// �_���[�W�ŏI�C��
-			damage=battle_calc_damage(src,target,damage,div_,skill_num,skill_lv,flag);
-		else if(damage<1)	// �E�肪�~�X�H
-			damage2=battle_calc_damage(src,target,damage2,div_,skill_num,skill_lv,flag);
-		else {	// �� ��/�J�^�[���̏ꍇ�͂�����ƌv�Z��₱����
-			int d1=damage+damage2,d2=damage2;
-			damage=battle_calc_damage(src,target,damage+damage2,div_,skill_num,skill_lv,flag);
-			damage2=(d2*100/d1)*damage/100;
-			if(damage > 1 && damage2 < 1) damage2=1;
-			damage-=damage2;
-		}
-	}
-
-	/*				For executioner card [Valaris]				*/
-		if(src->type == BL_PC && sd->random_attack_increase_add > 0 && sd->random_attack_increase_per > 0 && skill_num == 0 ){
-			if(rand()%100 < sd->random_attack_increase_per){
-				if(damage >0) damage*=sd->random_attack_increase_add/100;
-				if(damage2 >0) damage2*=sd->random_attack_increase_add/100;
-				}
-		}
-	/*					End addition					*/
-
-// -- moonsoul (final combination of phys, mag damage for ASC_BREAKER)
-	if(skill_num == ASC_BREAKER) {
-		damage += damage3;
-		damage2 += damage3;
-	}
-
-	wd.damage=damage;
-	wd.damage2=damage2;
-	wd.type=type;
-	wd.div_=div_;
-	wd.amotion=battle_get_amotion(src);
-	if(skill_num == KN_AUTOCOUNTER)
-		wd.amotion >>= 1;
-	wd.dmotion=battle_get_dmotion(target);
-	wd.blewcount=blewcount;
-	wd.flag=flag;
-	wd.dmg_lv=dmg_lv;
-
-	return wd;
-}
-
-/*==========================================
- * ����_���[�W�v�Z
- *------------------------------------------
- */
-struct Damage battle_calc_weapon_attack(
-	struct block_list *src,struct block_list *target,int skill_num,int skill_lv,int wflag)
-{
-	struct Damage wd;
-
-	//return�O�̏���������̂ŏ��o�͕��̂ݕύX
-	if (src == NULL || target == NULL) {
-		nullpo_info(NLP_MARK);
-		memset(&wd,0,sizeof(wd));
-		return wd;
-	}
-
-	if(target->type == BL_PET)
-		memset(&wd,0,sizeof(wd));
-
-	else if(src->type == BL_PC)
-		wd = battle_calc_pc_weapon_attack(src,target,skill_num,skill_lv,wflag); // weapon breaking [Valaris]
-	else if(src->type == BL_MOB)
-		wd = battle_calc_mob_weapon_attack(src,target,skill_num,skill_lv,wflag);
-	else if(src->type == BL_PET)
-		wd = battle_calc_pet_weapon_attack(src,target,skill_num,skill_lv,wflag);
-	else
-		memset(&wd,0,sizeof(wd));
-
-	if(battle_config.equipment_breaking && src->type==BL_PC && (wd.damage > 0 || wd.damage2 > 0)) {
-		struct map_session_data *sd=(struct map_session_data *)src;
-		if(sd->status.weapon && sd->status.weapon!=11) {
-			int breakrate=1;
-			if(target->type == BL_PC && sd->sc_data[SC_MELTDOWN].timer!=-1){ 
-				breakrate+=100*sd->sc_data[SC_MELTDOWN].val1;
-				if(rand()%10000 < breakrate*battle_config.equipment_break_rate/100 || breakrate >= 10000)
-					pc_breakweapon((struct map_session_data *)target);
-			}
-			if(sd->sc_data[SC_OVERTHRUST].timer!=-1)
-				breakrate+=20*sd->sc_data[SC_OVERTHRUST].val1;
-			if(wd.type==0x0a)
-				breakrate*=2;
-			if(rand()%10000 < breakrate*battle_config.equipment_break_rate/100 || breakrate >= 10000) {
-				pc_breakweapon(sd);
-				memset(&wd,0,sizeof(wd));
-			}
-		}
-	}
-		
-	if (battle_config.equipment_breaking && target->type == BL_PC && (wd.damage > 0 || wd.damage2 > 0)) {
-		int breakrate=1;
-		if(src->type==BL_PC && ((struct map_session_data *)src)->sc_data[SC_MELTDOWN].timer!=-1) breakrate+=70*((struct map_session_data *)src)->sc_data[SC_MELTDOWN].val1;
-		if (wd.type==0x0a)
-			breakrate*=2;
-		if (rand()%10000 < breakrate*battle_config.equipment_break_rate/100 || breakrate >= 10000) {
-			pc_breakarmor((struct map_session_data *)target);
-		}
-	}
-
-	return wd;
-}
-
-/*==========================================
- * ���@�_���[�W�v�Z
- *------------------------------------------
- */
-struct Damage battle_calc_magic_attack(
-	struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int flag)
-	{
-	int mdef1=battle_get_mdef(target);
-	int mdef2=battle_get_mdef2(target);
-	int matk1,matk2,damage=0,div_=1,blewcount=skill_get_blewcount(skill_num,skill_lv),rdamage = 0;
-	struct Damage md;
-	int aflag;
-	int normalmagic_flag=1;
-	int ele=0,race=7,t_ele=0,t_race=7,t_mode = 0,cardfix,t_class,i;
-	struct map_session_data *sd=NULL,*tsd=NULL;
-	struct mob_data *tmd = NULL;
-
-
-	//return�O�̏���������̂ŏ��o�͕��̂ݕύX
-	if( bl == NULL || target == NULL ){
-		nullpo_info(NLP_MARK);
-		memset(&md,0,sizeof(md));
-		return md;
-	}
-
-	if(target->type == BL_PET) {
-		memset(&md,0,sizeof(md));
-		return md;
-	}
-
-	matk1=battle_get_matk1(bl);
-	matk2=battle_get_matk2(bl);
-	ele = skill_get_pl(skill_num);
-	race = battle_get_race(bl);
-	t_ele = battle_get_elem_type(target);
-	t_race = battle_get_race(target);
-	t_mode = battle_get_mode(target);
-
-#define MATK_FIX( a,b ) { matk1=matk1*(a)/(b); matk2=matk2*(a)/(b); }
-
-	if( bl->type==BL_PC && (sd=(struct map_session_data *)bl) ){
-		sd->state.attack_type = BF_MAGIC;
-		if(sd->matk_rate != 100)
-			MATK_FIX(sd->matk_rate,100);
-		sd->state.arrow_atk = 0;
-	}
-	if( target->type==BL_PC )
-		tsd=(struct map_session_data *)target;
-	else if( target->type==BL_MOB )
-		tmd=(struct mob_data *)target;
-
-	aflag=BF_MAGIC|BF_LONG|BF_SKILL;
-
-	if(skill_num > 0){
-		switch(skill_num){	// ��{�_���[�W�v�Z(�X�L�����Ƃɏ���)
-					// �q�[��or����
-		case AL_HEAL:
-		case PR_BENEDICTIO:
-			damage = skill_calc_heal(bl,skill_lv)/2;
-			normalmagic_flag=0;
-			break;
-		case PR_ASPERSIO:		/* �A�X�y���V�I */
-			damage = 40; //�Œ�_���[�W
-			normalmagic_flag=0;
-			break;
-		case PR_SANCTUARY:	// �T���N�`���A��
-			damage = (skill_lv>6)?388:skill_lv*50;
-			normalmagic_flag=0;
-			blewcount|=0x10000;
-			break;
-		case ALL_RESURRECTION:
-		case PR_TURNUNDEAD:	// �U�����U���N�V�����ƃ^�[���A���f�b�h
-			if(target->type != BL_PC && battle_check_undead(t_race,t_ele)){
-				int hp, mhp, thres;
-				hp = battle_get_hp(target);
-				mhp = battle_get_max_hp(target);
-				thres = (skill_lv * 20) + battle_get_luk(bl)+
-						battle_get_int(bl) + battle_get_lv(bl)+
-						((200 - hp * 200 / mhp));
-				if(thres > 700) thres = 700;
-//				if(battle_config.battle_log)
-//					printf("�^�[���A���f�b�h�I �m��%d ��(�番��)\n", thres);
-				if(rand()%1000 < thres && !(t_mode&0x20))	// ����
-					damage = hp;
-				else					// ���s
-					damage = battle_get_lv(bl) + battle_get_int(bl) + skill_lv * 10;
-			}
-			normalmagic_flag=0;
-			break;
-
-		case MG_NAPALMBEAT:	// �i�p�[���r�[�g�i���U�v�Z���݁j
-			MATK_FIX(70+ skill_lv*10,100);
-			if(flag>0){
-				MATK_FIX(1,flag);
-			}else {
-				if(battle_config.error_log)
-					printf("battle_calc_magic_attack(): napam enemy count=0 !\n");
-			}
-			break;
-		case MG_FIREBALL:	// �t�@�C���[�{�[��
-			{
-				const int drate[]={100,90,70};
-				if(flag>2)
-					matk1=matk2=0;
-				else
-					MATK_FIX( (95+skill_lv*5)*drate[flag] ,10000 );
-			}
-			break;
-		case MG_FIREWALL:	// �t�@�C���[�E�H�[��
-/*
-			if( (t_ele!=3 && !battle_check_undead(t_race,t_ele)) || target->type==BL_PC ) //PC�͉Α����ł���ԁH���������_���[�W�󂯂�H
-				blewcount |= 0x10000;
-			else
-				blewcount = 0;
-*/
-			if((t_ele==3 || battle_check_undead(t_race,t_ele)) && target->type!=BL_PC)
-				blewcount = 0;
-			else
-				blewcount |= 0x10000;
-			MATK_FIX( 1,2 );
-			break;
-		case MG_THUNDERSTORM:	// �T���_�[�X�g�[��
-			MATK_FIX( 80,100 );
-			break;
-		case MG_FROSTDIVER:	// �t���X�g�_�C�o
-			MATK_FIX( 100+skill_lv*10, 100);
-			break;
-		case WZ_FROSTNOVA:	// �t���X�g�_�C�o
-			MATK_FIX( ((100+skill_lv*10)*(2/3)), 100);
-			break;
-		case WZ_FIREPILLAR:	// �t�@�C���[�s���[
-			if(mdef1 < 1000000)
-				mdef1=mdef2=0;	// MDEF����
-			MATK_FIX( 1,5 );
-			matk1+=50;
-			matk2+=50;
-			break;
-		case WZ_SIGHTRASHER:
-			MATK_FIX( 100+skill_lv*20, 100);
-			break;
-		case WZ_METEOR:
-		case WZ_JUPITEL:	// ���s�e���T���_�[
-			break;
-		case WZ_VERMILION:	// ���[�h�I�u�o�[�~���I��
-			MATK_FIX( skill_lv*20+80, 100 );
-			break;
-		case WZ_WATERBALL:	// �E�H�[�^�[�{�[��
-			matk1+= skill_lv*30;
-			matk2+= skill_lv*30;
-			break;
-		case WZ_STORMGUST:	// �X�g�[���K�X�g
-			MATK_FIX( skill_lv*40+100 ,100 );
-			blewcount|=0x10000;
-			break;
-		case AL_HOLYLIGHT:	// �z�[���[���C�g
-			MATK_FIX( 125,100 );
-			break;
-		case AL_RUWACH:
-			MATK_FIX( 145,100 );
-			break;
-		case HW_NAPALMVULCAN:	// �i�p�[���r�[�g�i���U�v�Z���݁j
-			MATK_FIX(70+ skill_lv*10,100);
-			if(flag>0){
-				MATK_FIX(1,flag);
-			}else {
-				if(battle_config.error_log)
-					printf("battle_calc_magic_attack(): napalmvulcan enemy count=0 !\n");
-			}
-			break;
-		}
-	}
-
-	if(normalmagic_flag){	// ��ʖ��@�_���[�W�v�Z
-		int imdef_flag=0;
-		if(matk1>matk2)
-			damage= matk2+rand()%(matk1-matk2+1);
-		else
-			damage= matk2;
-		if(sd) {
-			if(sd->ignore_mdef_ele & (1<<t_ele) || sd->ignore_mdef_race & (1<<t_race))
-				imdef_flag = 1;
-			if(t_mode & 0x20) {
-				if(sd->ignore_mdef_race & (1<<10))
-					imdef_flag = 1;
-			}
-			else {
-				if(sd->ignore_mdef_race & (1<<11))
-					imdef_flag = 1;
-			}
-		}
-		if(!imdef_flag){
-			if(battle_config.magic_defense_type) {
-				damage = damage - (mdef1 * battle_config.magic_defense_type) - mdef2;
-			}
-			else{
-			damage = (damage*(100-mdef1))/100 - mdef2;
-			}
-		}
-
-		if(damage<1)
-			damage=1;
-	}
-
-	if(sd) {
-		cardfix=100;
-		cardfix=cardfix*(100+sd->magic_addrace[t_race])/100;
-		cardfix=cardfix*(100+sd->magic_addele[t_ele])/100;
-		if(t_mode & 0x20)
-			cardfix=cardfix*(100+sd->magic_addrace[10])/100;
-		else
-			cardfix=cardfix*(100+sd->magic_addrace[11])/100;
-		t_class = battle_get_class(target);
-		for(i=0;i<sd->add_magic_damage_class_count;i++) {
-			if(sd->add_magic_damage_classid[i] == t_class) {
-				cardfix=cardfix*(100+sd->add_magic_damage_classrate[i])/100;
-				break;
-			}
-		}
-		damage=damage*cardfix/100;
-	}
-
-	if( tsd ){
-		int s_class = battle_get_class(bl);
-		cardfix=100;
-		cardfix=cardfix*(100-tsd->subele[ele])/100;	// �� ���ɂ��_���[�W�ϐ�
-		cardfix=cardfix*(100-tsd->subrace[race])/100;	// �푰�ɂ��_���[�W�ϐ�
-		cardfix=cardfix*(100-tsd->magic_subrace[race])/100;
-		if(battle_get_mode(bl) & 0x20)
-			cardfix=cardfix*(100-tsd->magic_subrace[10])/100;
-		else
-			cardfix=cardfix*(100-tsd->magic_subrace[11])/100;
-		for(i=0;i<tsd->add_mdef_class_count;i++) {
-			if(tsd->add_mdef_classid[i] == s_class) {
-				cardfix=cardfix*(100-tsd->add_mdef_classrate[i])/100;
-				break;
-			}
-		}
-		cardfix=cardfix*(100-tsd->magic_def_rate)/100;
-		damage=damage*cardfix/100;
-	}
-	if(damage < 0) damage = 0;
-
-	damage=battle_attr_fix(damage, ele, battle_get_element(target) );		// �� ���C��
-
-	if(skill_num == CR_GRANDCROSS) {	// �O�����h�N���X
-		struct Damage wd;
-		wd=battle_calc_weapon_attack(bl,target,skill_num,skill_lv,flag);
-		damage = (damage + wd.damage) * (100 + 40*skill_lv)/100;
-		if(battle_config.gx_dupele) damage=battle_attr_fix(damage, ele, battle_get_element(target) );	//����2�񂩂���
-		if(bl==target) damage=damage/2;	//�����͔���
-	}
-
-	div_=skill_get_num( skill_num,skill_lv );
-
-	if(div_>1 && skill_num != WZ_VERMILION)
-		damage*=div_;
-
-//	if(mdef1 >= 1000000 && damage > 0)
-	if(t_mode&0x40 && damage > 0)
-		damage = 1;
-
-	if( tsd && tsd->special_state.no_magic_damage) {
-                if (battle_config.gtb_pvp_only != 0)  { // [MouseJstr]
-                    if ((map[target->m].flag.pvp || map[target->m].flag.gvg) && target->type==BL_PC)
-                      damage = (damage * (100 - battle_config.gtb_pvp_only)) / 100;
-                } else
-		    damage=0;	// �� ��峃J�[�h�i���@�_���[�W�O�j
-        }
-
-	damage=battle_calc_damage(bl,target,damage,div_,skill_num,skill_lv,aflag);	// �ŏI�C��
-
-	/* magic_damage_return by [AppleGirl] and [Valaris]		*/
-	if( target->type==BL_PC && tsd && tsd->magic_damage_return > 0 ){
-		rdamage += damage * tsd->magic_damage_return / 100;
-			if(rdamage < 1) rdamage = 1;
-			clif_damage(target,bl,gettick(),0,0,rdamage,0,0,0);
-			battle_damage(target,bl,rdamage,0);
-	}
-	/*			end magic_damage_return			*/
-
-	md.damage=damage;
-	md.div_=div_;
-	md.amotion=battle_get_amotion(bl);
-	md.dmotion=battle_get_dmotion(target);
-	md.damage2=0;
-	md.type=0;
-	md.blewcount=blewcount;
-	md.flag=aflag;
-
-	return md;
-}
-
-/*==========================================
- * ���̑��_���[�W�v�Z
- *------------------------------------------
- */
-struct Damage  battle_calc_misc_attack(
-	struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int flag)
-{
-	int int_=battle_get_int(bl);
-//	int luk=battle_get_luk(bl);
-	int dex=battle_get_dex(bl);
-	int skill,ele,race,cardfix;
-	struct map_session_data *sd=NULL,*tsd=NULL;
-	int damage=0,div_=1,blewcount=skill_get_blewcount(skill_num,skill_lv);
-	struct Damage md;
-	int damagefix=1;
-
-	int aflag=BF_MISC|BF_LONG|BF_SKILL;
-
-	//return�O�̏���������̂ŏ��o�͕��̂ݕύX
-	if( bl == NULL || target == NULL ){
-		nullpo_info(NLP_MARK);
-		memset(&md,0,sizeof(md));
-		return md;
-	}
-
-	if(target->type == BL_PET) {
-		memset(&md,0,sizeof(md));
-		return md;
-	}
-
-	if( bl->type == BL_PC && (sd=(struct map_session_data *)bl) ) {
-		sd->state.attack_type = BF_MISC;
-		sd->state.arrow_atk = 0;
-	}
-
-	if( target->type==BL_PC )
-		tsd=(struct map_session_data *)target;
-
-	switch(skill_num){
-
-	case HT_LANDMINE:	// �����h�}�C��
-		damage=skill_lv*(dex+75)*(100+int_)/100;
-		break;
-
-	case HT_BLASTMINE:	// �u���X�g�}�C��
-		damage=skill_lv*(dex/2+50)*(100+int_)/100;
-		break;
-
-	case HT_CLAYMORETRAP:	// �N���C���A�[�g���b�v
-		damage=skill_lv*(dex/2+75)*(100+int_)/100;
-		break;
-
-	case HT_BLITZBEAT:	// �u���b�c�r�[�g
-		if( sd==NULL || (skill = pc_checkskill(sd,HT_STEELCROW)) <= 0)
-			skill=0;
-		damage=(dex/10+int_/2+skill*3+40)*2;
-		if(flag > 1)
-			damage /= flag;
-		break;
-
-	case TF_THROWSTONE:	// ����
-		damage=30;
-		damagefix=0;
-		break;
-
-	case BA_DISSONANCE:	// �s���a��
-		damage=(skill_lv)*20+pc_checkskill(sd,BA_MUSICALLESSON)*3;
-		break;
-
-	case NPC_SELFDESTRUCTION:	// ����
-		damage=battle_get_hp(bl)-(bl==target?1:0);
-		damagefix=0;
-		break;
-
-	case NPC_SMOKING:	// �^�o�R���z��
-		damage=3;
-		damagefix=0;
-		break;
-
-	case NPC_DARKBREATH:
-		{
-			struct status_change *sc_data = battle_get_sc_data(target);
-			int hitrate=battle_get_hit(bl) - battle_get_flee(target) + 80;
-			hitrate = ( (hitrate>95)?95: ((hitrate<5)?5:hitrate) );
-			if(sc_data && (sc_data[SC_SLEEP].timer!=-1 || sc_data[SC_STAN].timer!=-1 ||
-				sc_data[SC_FREEZE].timer!=-1 || (sc_data[SC_STONE].timer!=-1 && sc_data[SC_STONE].val2==0) ) )
-				hitrate = 1000000;
-			if(rand()%100 < hitrate) {
-				damage = 500 + (skill_lv-1)*1000 + rand()%1000;
-				if(damage > 9999) damage = 9999;
-			}
-		}
-		break;
-	case SN_FALCONASSAULT:			/* �t�@���R���A�T���g */
-		skill = pc_checkskill(sd,HT_BLITZBEAT);
-		damage=(100+50*skill_lv+(dex/10+int_/2+skill*3+40)*2);
-		break;
-	}
-
-	ele = skill_get_pl(skill_num);
-	race = battle_get_race(bl);
-
-	if(damagefix){
-		if(damage<1 && skill_num != NPC_DARKBREATH)
-			damage=1;
-
-		if( tsd ){
-			cardfix=100;
-			cardfix=cardfix*(100-tsd->subele[ele])/100;	// �����ɂ��_���[�W�ϐ�
-			cardfix=cardfix*(100-tsd->subrace[race])/100;	// �푰�ɂ��_���[�W�ϐ�
-			cardfix=cardfix*(100-tsd->misc_def_rate)/100;
-			damage=damage*cardfix/100;
-		}
-		if(damage < 0) damage = 0;
-		damage=battle_attr_fix(damage, ele, battle_get_element(target) );		// �����C��
-	}
-
-	div_=skill_get_num( skill_num,skill_lv );
-	if(div_>1)
-		damage*=div_;
-
-	if(damage > 0 && (damage < div_ || (battle_get_def(target) >= 1000000 && battle_get_mdef(target) >= 1000000) ) ) {
-		damage = div_;
-	}
-
-	damage=battle_calc_damage(bl,target,damage,div_,skill_num,skill_lv,aflag);	// �ŏI�C��
-
-	md.damage=damage;
-	md.div_=div_;
-	md.amotion=battle_get_amotion(bl);
-	md.dmotion=battle_get_dmotion(target);
-	md.damage2=0;
-	md.type=0;
-	md.blewcount=blewcount;
-	md.flag=aflag;
-	return md;
-
-}
-/*==========================================
- * �_���[�W�v�Z�ꊇ�����p
- *------------------------------------------
- */
-struct Damage battle_calc_attack(	int attack_type,
-	struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int flag)
-{
-	struct Damage d;
-	switch(attack_type){
-	case BF_WEAPON:
-		return battle_calc_weapon_attack(bl,target,skill_num,skill_lv,flag);
-	case BF_MAGIC:
-		return battle_calc_magic_attack(bl,target,skill_num,skill_lv,flag);
-	case BF_MISC:
-		return battle_calc_misc_attack(bl,target,skill_num,skill_lv,flag);
-	default:
-		if(battle_config.error_log)
-			printf("battle_calc_attack: unknwon attack type ! %d\n",attack_type);
-		break;
-	}
-	return d;
-}
-/*==========================================
- * �ʏ�U�������܂Ƃ�
- *------------------------------------------
- */
-int battle_weapon_attack( struct block_list *src,struct block_list *target,
-	 unsigned int tick,int flag)
-{
-	struct map_session_data *sd=NULL;
-	struct status_change *sc_data = battle_get_sc_data(src),*t_sc_data=battle_get_sc_data(target);
-	short *opt1;
-	int race = 7, ele = 0;
-	int damage,rdamage = 0;
-	struct Damage wd;
-
-	nullpo_retr(0, src);
-	nullpo_retr(0, target);
-
-	if(src->type == BL_PC)
-		sd = (struct map_session_data *)src;
-
-	if(src->prev == NULL || target->prev == NULL)
-		return 0;
-	if(src->type == BL_PC && pc_isdead(sd))
-		return 0;
-	if(target->type == BL_PC && pc_isdead((struct map_session_data *)target))
-		return 0;
-
-	opt1=battle_get_opt1(src);
-	if(opt1 && *opt1 > 0) {
-		battle_stopattack(src);
-		return 0;
-	}
-	if(sc_data && sc_data[SC_BLADESTOP].timer!=-1){
-		battle_stopattack(src);
-		return 0;
-	}
-
-	race = battle_get_race(target);
-	ele = battle_get_elem_type(target);
-	if(battle_check_target(src,target,BCT_ENEMY) > 0 &&
-		battle_check_range(src,target,0)){
-		// �U���ΏۂƂȂ肤��̂ōU��
-		if(sd && sd->status.weapon == 11) {
-			if(sd->equip_index[10] >= 0) {
-				if(battle_config.arrow_decrement)
-					pc_delitem(sd,sd->equip_index[10],1,0);
-			}
-			else {
-				clif_arrow_fail(sd,0);
-				return 0;
-			}
-		}
-		if(flag&0x8000) {
-			if(sd && battle_config.pc_attack_direction_change)
-				sd->dir = sd->head_dir = map_calc_dir(src, target->x,target->y );
-			else if(src->type == BL_MOB && battle_config.monster_attack_direction_change)
-				((struct mob_data *)src)->dir = map_calc_dir(src, target->x,target->y );
-			wd=battle_calc_weapon_attack(src,target,KN_AUTOCOUNTER,flag&0xff,0);
-		}
-		else
-			wd=battle_calc_weapon_attack(src,target,0,0,0);
-		if((damage = wd.damage + wd.damage2) > 0 && src != target) {
-			if(wd.flag&BF_SHORT) {
-				if(target->type == BL_PC) {
-					struct map_session_data *tsd = (struct map_session_data *)target;
-					if(tsd && tsd->short_weapon_damage_return > 0) {
-						rdamage += damage * tsd->short_weapon_damage_return / 100;
-						if(rdamage < 1) rdamage = 1;
-					}
-				}
-				if(t_sc_data && t_sc_data[SC_REFLECTSHIELD].timer != -1) {
-					rdamage += damage * t_sc_data[SC_REFLECTSHIELD].val2 / 100;
-					if(rdamage < 1) rdamage = 1;
-				}
-			}
-			else if(wd.flag&BF_LONG) {
-				if(target->type == BL_PC) {
-					struct map_session_data *tsd = (struct map_session_data *)target;
-					if(tsd && tsd->long_weapon_damage_return > 0) {
-						rdamage += damage * tsd->long_weapon_damage_return / 100;
-						if(rdamage < 1) rdamage = 1;
-					}
-				}
-			}
-			if(rdamage > 0)
-				clif_damage(src,src,tick, wd.amotion,0,rdamage,1,4,0);
-		}
-
-		if (wd.div_ == 255 && sd)	{ //�O�i��
-			int delay = 1000 - 4 * battle_get_agi(src) - 2 *  battle_get_dex(src);
-			int skilllv;
-			if(wd.damage+wd.damage2 < battle_get_hp(target)) {
-				if((skilllv = pc_checkskill(sd, MO_CHAINCOMBO)) > 0)
-					delay += 300 * battle_config.combo_delay_rate /100; //�lj��f�B���C��conf�ɂ�蒲��
-
-				skill_status_change_start(src,SC_COMBO,MO_TRIPLEATTACK,skilllv,0,0,delay,0);
-			}
-			sd->attackabletime = sd->canmove_tick = tick + delay;
-			clif_combo_delay(src,delay);
-			clif_skill_damage(src , target , tick , wd.amotion , wd.dmotion ,
-				wd.damage , 3 , MO_TRIPLEATTACK, pc_checkskill(sd,MO_TRIPLEATTACK) , -1 );
-		}
-		else {
-			clif_damage(src,target,tick, wd.amotion, wd.dmotion,
-				wd.damage, wd.div_ , wd.type, wd.damage2);
-		//�񓁗�����ƃJ�^�[���nj��̃~�X�\��(�������`)
-			if(sd && sd->status.weapon >= 16 && wd.damage2 == 0)
-				clif_damage(src,target,tick+10, wd.amotion, wd.dmotion,0, 1, 0, 0);
-		}
-		if(sd && sd->splash_range > 0 && (wd.damage > 0 || wd.damage2 > 0) )
-			skill_castend_damage_id(src,target,0,-1,tick,0);
-		map_freeblock_lock();
-		battle_damage(src,target,(wd.damage+wd.damage2),0);
-		if(target->prev != NULL &&
-			(target->type != BL_PC || (target->type == BL_PC && !pc_isdead((struct map_session_data *)target) ) ) ) {
-			if(wd.damage > 0 || wd.damage2 > 0) {
-				skill_additional_effect(src,target,0,0,BF_WEAPON,tick);
-				if(sd) {
-					if(sd->weapon_coma_ele[ele] > 0 && rand()%10000 < sd->weapon_coma_ele[ele])
-						battle_damage(src,target,battle_get_max_hp(target),1);
-					if(sd->weapon_coma_race[race] > 0 && rand()%10000 < sd->weapon_coma_race[race])
-						battle_damage(src,target,battle_get_max_hp(target),1);
-					if(battle_get_mode(target) & 0x20) {
-						if(sd->weapon_coma_race[10] > 0 && rand()%10000 < sd->weapon_coma_race[10])
-							battle_damage(src,target,battle_get_max_hp(target),1);
-					}
-					else {
-						if(sd->weapon_coma_race[11] > 0 && rand()%10000 < sd->weapon_coma_race[11])
-							battle_damage(src,target,battle_get_max_hp(target),1);
-					}
-				}
-			}
-		}
-		if(sc_data && sc_data[SC_AUTOSPELL].timer != -1 && rand()%100 < sc_data[SC_AUTOSPELL].val4) {
-			int skilllv=sc_data[SC_AUTOSPELL].val3,i,f=0;
-			i = rand()%100;
-			if(i >= 50) skilllv -= 2;
-			else if(i >= 15) skilllv--;
-			if(skilllv < 1) skilllv = 1;
-			if(sd) {
-				int sp = skill_get_sp(sc_data[SC_AUTOSPELL].val2,skilllv)*2/3;
-				if(sd->status.sp >= sp) {
-					if((i=skill_get_inf(sc_data[SC_AUTOSPELL].val2) == 2) || i == 32)
-						f = skill_castend_pos2(src,target->x,target->y,sc_data[SC_AUTOSPELL].val2,skilllv,tick,flag);
-					else {
-						switch( skill_get_nk(sc_data[SC_AUTOSPELL].val2) ) {
-							case 0:	case 2:
-								f = skill_castend_damage_id(src,target,sc_data[SC_AUTOSPELL].val2,skilllv,tick,flag);
-								break;
-							case 1:/* �x���n */
-								if((sc_data[SC_AUTOSPELL].val2==AL_HEAL || (sc_data[SC_AUTOSPELL].val2==ALL_RESURRECTION && target->type != BL_PC)) && battle_check_undead(race,ele))
-									f = skill_castend_damage_id(src,target,sc_data[SC_AUTOSPELL].val2,skilllv,tick,flag);
-								else
-									f = skill_castend_nodamage_id(src,target,sc_data[SC_AUTOSPELL].val2,skilllv,tick,flag);
-								break;
-						}
-					}
-					if(!f) pc_heal(sd,0,-sp);
-				}
-			}
-			else {
-				if((i=skill_get_inf(sc_data[SC_AUTOSPELL].val2) == 2) || i == 32)
-					skill_castend_pos2(src,target->x,target->y,sc_data[SC_AUTOSPELL].val2,skilllv,tick,flag);
-				else {
-					switch( skill_get_nk(sc_data[SC_AUTOSPELL].val2) ) {
-						case 0:	case 2:
-							skill_castend_damage_id(src,target,sc_data[SC_AUTOSPELL].val2,skilllv,tick,flag);
-							break;
-						case 1:/* �x���n */
-							if((sc_data[SC_AUTOSPELL].val2==AL_HEAL || (sc_data[SC_AUTOSPELL].val2==ALL_RESURRECTION && target->type != BL_PC)) && battle_check_undead(race,ele))
-								skill_castend_damage_id(src,target,sc_data[SC_AUTOSPELL].val2,skilllv,tick,flag);
-							else
-								skill_castend_nodamage_id(src,target,sc_data[SC_AUTOSPELL].val2,skilllv,tick,flag);
-							break;
-					}
-				}
-			}
-		}
-		if(sd) {
-			if(sd->autospell_id > 0 && sd->autospell_lv > 0 && rand()%100 < sd->autospell_rate) {
-				int skilllv=sd->autospell_lv,i,f=0,sp;
-				i = rand()%100;
-				if(i >= 50) skilllv -= 2;
-				else if(i >= 15) skilllv--;
-				if(skilllv < 1) skilllv = 1;
-				sp = skill_get_sp(sd->autospell_id,skilllv)*2/3;
-				if(sd->status.sp >= sp) {
-					if((i=skill_get_inf(sd->autospell_id) == 2) || i == 32)
-						f = skill_castend_pos2(src,target->x,target->y,sd->autospell_id,skilllv,tick,flag);
-					else {
-						switch( skill_get_nk(sd->autospell_id) ) {
-							case 0:	case 2:
-								f = skill_castend_damage_id(src,target,sd->autospell_id,skilllv,tick,flag);
-								break;
-							case 1:/* �x���n */
-								if((sd->autospell_id==AL_HEAL || (sd->autospell_id==ALL_RESURRECTION && target->type != BL_PC)) && battle_check_undead(race,ele))
-									f = skill_castend_damage_id(src,target,sd->autospell_id,skilllv,tick,flag);
-								else
-									f = skill_castend_nodamage_id(src,target,sd->autospell_id,skilllv,tick,flag);
-								break;
-						}
-					}
-					if(!f) pc_heal(sd,0,-sp);
-				}
-			}
-			if(wd.flag&BF_WEAPON && src != target && (wd.damage > 0 || wd.damage2 > 0)) {
-				int hp = 0,sp = 0;
-				if(sd->hp_drain_rate && sd->hp_drain_per > 0 && wd.damage > 0 && rand()%100 < sd->hp_drain_rate) {
-					hp += (wd.damage * sd->hp_drain_per)/100;
-					if(sd->hp_drain_rate > 0 && hp < 1) hp = 1;
-					else if(sd->hp_drain_rate < 0 && hp > -1) hp = -1;
-				}
-				if(sd->hp_drain_rate_ && sd->hp_drain_per_ > 0 && wd.damage2 > 0 && rand()%100 < sd->hp_drain_rate_) {
-					hp += (wd.damage2 * sd->hp_drain_per_)/100;
-					if(sd->hp_drain_rate_ > 0 && hp < 1) hp = 1;
-					else if(sd->hp_drain_rate_ < 0 && hp > -1) hp = -1;
-				}
-				if(sd->sp_drain_rate && sd->sp_drain_per > 0 && wd.damage > 0 && rand()%100 < sd->sp_drain_rate) {
-					sp += (wd.damage * sd->sp_drain_per)/100;
-					if(sd->sp_drain_rate > 0 && sp < 1) sp = 1;
-					else if(sd->sp_drain_rate < 0 && sp > -1) sp = -1;
-				}
-				if(sd->sp_drain_rate_ && sd->sp_drain_per_ > 0 && wd.damage2 > 0 && rand()%100 < sd->sp_drain_rate_) {
-					sp += (wd.damage2 * sd->sp_drain_per_)/100;
-					if(sd->sp_drain_rate_ > 0 && sp < 1) sp = 1;
-					else if(sd->sp_drain_rate_ < 0 && sp > -1) sp = -1;
-				}
-				if(hp || sp) pc_heal(sd,hp,sp);
-			}
-		}
-
-		if(rdamage > 0)
-			battle_damage(target,src,rdamage,0);
-		if(t_sc_data && t_sc_data[SC_AUTOCOUNTER].timer != -1 && t_sc_data[SC_AUTOCOUNTER].val4 > 0) {
-			if(t_sc_data[SC_AUTOCOUNTER].val3 == src->id)
-				battle_weapon_attack(target,src,tick,0x8000|t_sc_data[SC_AUTOCOUNTER].val1);
-			skill_status_change_end(target,SC_AUTOCOUNTER,-1);
-		}
-		if(t_sc_data && t_sc_data[SC_BLADESTOP_WAIT].timer != -1){
-			int lv = t_sc_data[SC_BLADESTOP_WAIT].val1;
-			skill_status_change_end(target,SC_BLADESTOP_WAIT,-1);
-			skill_status_change_start(src,SC_BLADESTOP,lv,1,(int)src,(int)target,skill_get_time2(MO_BLADESTOP,lv),0);
-			skill_status_change_start(target,SC_BLADESTOP,lv,2,(int)target,(int)src,skill_get_time2(MO_BLADESTOP,lv),0);
-		}
-		if(t_sc_data && t_sc_data[SC_SPLASHER].timer!=-1)	//�������̂őΏۂ̃x�i���X�v���b�V���[��Ԃ�����
-			skill_status_change_end(target,SC_SPLASHER,-1);
-
-		map_freeblock_unlock();
-	}
-	return wd.dmg_lv;
-}
-
-int battle_check_undead(int race,int element)
-{
-	if(battle_config.undead_detect_type == 0) {
-		if(element == 9)
-			return 1;
-	}
-	else if(battle_config.undead_detect_type == 1) {
-		if(race == 1)
-			return 1;
-	}
-	else {
-		if(element == 9 || race == 1)
-			return 1;
-	}
-	return 0;
-}
-
-/*==========================================
- * �G��������(1=�m��,0=�ے�,-1=�G���[)
- * flag&0xf0000 = 0x00000:�G����Ȃ�������iret:1���G�ł͂Ȃ��j
- *				= 0x10000:�p�[�e�B�[����iret:1=�p�[�e�B�[�����o)
- *				= 0x20000:�S��(ret:1=�G��������)
- *				= 0x40000:�G������(ret:1=�G)
- *				= 0x50000:�p�[�e�B�[����Ȃ�������(ret:1=�p�[�e�B�łȂ�)
- *------------------------------------------
- */
-int battle_check_target( struct block_list *src, struct block_list *target,int flag)
-{
-	int s_p,s_g,t_p,t_g;
-	struct block_list *ss=src;
-
-	nullpo_retr(0, src);
-	nullpo_retr(0, target);
-
-	if( flag&0x40000 ){	// ���]�t���O
-		int ret=battle_check_target(src,target,flag&0x30000);
-		if(ret!=-1)
-			return !ret;
-		return -1;
-	}
-
-	if( flag&0x20000 ){
-		if( target->type==BL_MOB || target->type==BL_PC )
-			return 1;
-		else
-			return -1;
-	}
-
-	if(src->type == BL_SKILL && target->type == BL_SKILL)	// �Ώۂ��X�L�����j�b�g�Ȃ疳�����m��
-		return -1;
-
-	if(target->type == BL_PC && ((struct map_session_data *)target)->invincible_timer != -1)
-		return -1;
-
-	if(target->type == BL_SKILL) {
-		switch(((struct skill_unit *)target)->group->unit_id){
-		case 0x8d:
-		case 0x8f:
-		case 0x98:
-			return 0;
-			break;
-		}
-	}
-
-	if(target->type == BL_PET)
-		return -1;
-
-				// �X�L�����j�b�g�̏ꍇ�A�e�����߂�
-	if( src->type==BL_SKILL) {
-		int inf2 = skill_get_inf2(((struct skill_unit *)src)->group->skill_id);
-		if( (ss=map_id2bl( ((struct skill_unit *)src)->group->src_id))==NULL )
-			return -1;
-		if(ss->prev == NULL)
-			return -1;
-		if(inf2&0x80 && 
-                   (map[src->m].flag.pvp || pc_iskiller((struct map_session_data *)src, (struct map_session_data *)target)) &&  // [MouseJstr]
-                   !(target->type == BL_PC && pc_isinvisible((struct map_session_data *)target)))
-			return 0;
-		if(ss == target) {
-			if(inf2&0x100)
-				return 0;
-			if(inf2&0x200)
-				return -1;
-		}
-	}
-	// Mob��master_id��������special_mob_ai�Ȃ�A����������߂�
-	if( src->type==BL_MOB ){
-		struct mob_data *md=(struct mob_data *)src;
-		if(md && md->master_id>0){
-			if(md->master_id==target->id)	// ��Ȃ�m��
-				return 1;
-			if(md->state.special_mob_ai){
-				if(target->type==BL_MOB){	//special_mob_ai�őΏۂ�Mob
-					struct mob_data *tmd=(struct mob_data *)target;
-					if(tmd){
-						if(tmd->master_id != md->master_id)	//�����傪�ꏏ�łȂ���Δے�
-							return 0;
-						else{	//�����傪�ꏏ�Ȃ̂ōm�肵�������ǎ����͔ے�
-							if(md->state.special_mob_ai>2)
-								return 0;
-							else
-								return 1;
-						}
-					}
-				}
-			}
-			if((ss=map_id2bl(md->master_id))==NULL)
-				return -1;
-		}
-	}
-
-	if( src==target || ss==target )	// �����Ȃ�m��
-		return 1;
-
-	if(target->type == BL_PC && pc_isinvisible((struct map_session_data *)target))
-		return -1;
-
-	if( src->prev==NULL ||	// ����ł�Ȃ�G���[
-		(src->type==BL_PC && pc_isdead((struct map_session_data *)src) ) )
-		return -1;
-
-	if( (ss->type == BL_PC && target->type==BL_MOB) ||
-		(ss->type == BL_MOB && target->type==BL_PC) )
-		return 0;	// PCvsMOB�Ȃ�ے�
-
-	if(ss->type == BL_PET && target->type==BL_MOB)
-		return 0;
-
-	s_p=battle_get_party_id(ss);
-	s_g=battle_get_guild_id(ss);
-
-	t_p=battle_get_party_id(target);
-	t_g=battle_get_guild_id(target);
-
-	if(flag&0x10000) {
-		if(s_p && t_p && s_p == t_p)	// �����p�[�e�B�Ȃ�m��i�����j
-			return 1;
-		else		// �p�[�e�B�����Ȃ瓯���p�[�e�B����Ȃ����_�Ŕے�
-			return 0;
-	}
-
-	if(ss->type == BL_MOB && s_g > 0 && t_g > 0 && s_g == t_g )	// �����M���h/mob�N���X�Ȃ�m��i�����j
-		return 1;
-
-//printf("ss:%d src:%d target:%d flag:0x%x %d %d ",ss->id,src->id,target->id,flag,src->type,target->type);
-//printf("p:%d %d g:%d %d\n",s_p,t_p,s_g,t_g);
-
-	if( ss->type==BL_PC && target->type==BL_PC) { // ����PVP���[�h�Ȃ�ے�i�G�j
-		struct skill_unit *su=NULL;
-		if(src->type==BL_SKILL)
-			su=(struct skill_unit *)src;
-		if(map[ss->m].flag.pvp || pc_iskiller((struct map_session_data *)ss, (struct map_session_data*)target)) { // [MouseJstr]
-			if(su && su->group->target_flag==BCT_NOENEMY)
-				return 1;
-			else if(battle_config.pk_mode && (((struct map_session_data*)ss)->status.class==0 || ((struct map_session_data*)target)->status.class==0))
-				return 1; // prevent novice engagement in pk_mode [Valaris]
-			else if(map[ss->m].flag.pvp_noparty && s_p > 0 && t_p > 0 && s_p == t_p)
-				return 1;
-			else if(map[ss->m].flag.pvp_noguild && s_g > 0 && t_g > 0 && s_g == t_g)
-				return 1;
-			return 0;
-		}
-		if(map[src->m].flag.gvg) {
-			struct guild *g=NULL;
-			if(su && su->group->target_flag==BCT_NOENEMY)
-				return 1;
-			if( s_g > 0 && s_g == t_g)
-				return 1;
-			if(map[src->m].flag.gvg_noparty && s_p > 0 && t_p > 0 && s_p == t_p)
-				return 1;
-			if((g = guild_search(s_g))) {
-				int i;
-				for(i=0;i<MAX_GUILDALLIANCE;i++){
-					if(g->alliance[i].guild_id > 0 && g->alliance[i].guild_id == t_g) {
-						if(g->alliance[i].opposition)
-							return 0;//�G�΃M���h�Ȃ疳�����ɓG
-						else
-							return 1;//�����M���h�Ȃ疳�����ɖ���
-					}
-				}
-			}
-			return 0;
-		}
-	}
-
-	return 1;	// �Y�����Ȃ��̂Ŗ��֌W�l���i�܂��G����Ȃ��̂Ŗ����j
-}
-/*==========================================
- * �˒�����
- *------------------------------------------
- */
-int battle_check_range(struct block_list *src,struct block_list *bl,int range)
-{
-
-	int dx,dy;
-	struct walkpath_data wpd;
-	int arange;
-
-	nullpo_retr(0, src);
-	nullpo_retr(0, bl);
-
-	dx=abs(bl->x-src->x);
-	dy=abs(bl->y-src->y);
-	arange=((dx>dy)?dx:dy);
-
-	if(src->m != bl->m)	// �Ⴄ�}�b�v
-		return 0;
-
-	if( range>0 && range < arange )	// ��������
-		return 0;
-
-	if( arange<2 )	// �����}�X���א�
-		return 1;
-
-//	if(bl->type == BL_SKILL && ((struct skill_unit *)bl)->group->unit_id == 0x8d)
-//		return 1;
-
-	// ��Q������
-	wpd.path_len=0;
-	wpd.path_pos=0;
-	wpd.path_half=0;
-	if(path_search(&wpd,src->m,src->x,src->y,bl->x,bl->y,0x10001)!=-1)
-		return 1;
-
-	dx=(dx>0)?1:((dx<0)?-1:0);
-	dy=(dy>0)?1:((dy<0)?-1:0);
-	return (path_search(&wpd,src->m,src->x+dx,src->y+dy,
-		bl->x-dx,bl->y-dy,0x10001)!=-1)?1:0;
-}
-
-/*==========================================
- * Return numerical value of a switch configuration (modified by [Yor])
- * on/off, english, fran�ais, deutsch, espa�ol
- *------------------------------------------
- */
-int battle_config_switch(const char *str) {
-	if (strcmpi(str, "on") == 0 || strcmpi(str, "yes") == 0 || strcmpi(str, "oui") == 0 || strcmpi(str, "ja") == 0 || strcmpi(str, "si") == 0)
-		return 1;
-	if (strcmpi(str, "off") == 0 || strcmpi(str, "no") == 0 || strcmpi(str, "non") == 0 || strcmpi(str, "nein") == 0)
-		return 0;
-	return atoi(str);
-}
-/*==========================================
- * �ݒ�t�@�C����ǂݍ���
- *------------------------------------------
- */
-int battle_config_read(const char *cfgName) 
-{
-	int i;
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp;
-	static int count = 0;
-
-	if ((count++) == 0) {
-		battle_config.warp_point_debug=0;
-		battle_config.enemy_critical=0;
-		battle_config.enemy_critical_rate=100;
-		battle_config.enemy_str=1;
-		battle_config.enemy_perfect_flee=0;
-		battle_config.cast_rate=100;
-		battle_config.delay_rate=100;
-		battle_config.delay_dependon_dex=0;
-		battle_config.sdelay_attack_enable=0;
-		battle_config.left_cardfix_to_right=0;
-		battle_config.pc_skill_add_range=0;
-		battle_config.skill_out_range_consume=1;
-		battle_config.mob_skill_add_range=0;
-		battle_config.pc_damage_delay=1;
-		battle_config.pc_damage_delay_rate=100;
-		battle_config.defnotenemy=1;
-		battle_config.random_monster_checklv=1;
-		battle_config.attr_recover=1;
-		battle_config.flooritem_lifetime=LIFETIME_FLOORITEM*1000;
-		battle_config.item_auto_get=0;
-		battle_config.item_first_get_time=3000;
-		battle_config.item_second_get_time=1000;
-		battle_config.item_third_get_time=1000;
-		battle_config.mvp_item_first_get_time=10000;
-		battle_config.mvp_item_second_get_time=10000;
-		battle_config.mvp_item_third_get_time=2000;
-
-		battle_config.drop_rate0item=0;
-		battle_config.base_exp_rate=100;
-		battle_config.job_exp_rate=100;
-		battle_config.pvp_exp=1;
-		battle_config.gtb_pvp_only=0;
-		battle_config.death_penalty_type=0;
-		battle_config.death_penalty_base=0;
-		battle_config.death_penalty_job=0;
-		battle_config.zeny_penalty=0;
-		battle_config.restart_hp_rate=0;
-		battle_config.restart_sp_rate=0;
-		battle_config.mvp_item_rate=100;
-		battle_config.mvp_exp_rate=100;
-		battle_config.mvp_hp_rate=100;
-		battle_config.monster_hp_rate=100;
-		battle_config.monster_max_aspd=199;
-		battle_config.atc_gmonly=0;
-		battle_config.gm_allskill=0;
-		battle_config.gm_allequip=0;
-		battle_config.gm_skilluncond=0;
-		battle_config.guild_max_castles=0;
-		battle_config.skillfree = 0;
-		battle_config.skillup_limit = 0;
-		battle_config.wp_rate=100;
-		battle_config.pp_rate=100;
-		battle_config.monster_active_enable=1;
-		battle_config.monster_damage_delay_rate=100;
-		battle_config.monster_loot_type=0;
-		battle_config.mob_skill_use=1;
-		battle_config.mob_count_rate=100;
-		battle_config.quest_skill_learn=0;
-		battle_config.quest_skill_reset=1;
-		battle_config.basic_skill_check=1;
-		battle_config.guild_emperium_check=1;
-		battle_config.guild_exp_limit=50;
-		battle_config.pc_invincible_time = 5000;
-		battle_config.pet_catch_rate=100;
-		battle_config.pet_rename=0;
-		battle_config.pet_friendly_rate=100;
-		battle_config.pet_hungry_delay_rate=100;
-		battle_config.pet_hungry_friendly_decrease=5;
-		battle_config.pet_str=1;
-		battle_config.pet_status_support=0;
-		battle_config.pet_attack_support=0;
-		battle_config.pet_damage_support=0;
-		battle_config.pet_support_rate=100;
-		battle_config.pet_attack_exp_to_master=0;
-		battle_config.pet_attack_exp_rate=100;
-		battle_config.skill_min_damage=0;
-		battle_config.finger_offensive_type=0;
-		battle_config.heal_exp=0;
-		battle_config.resurrection_exp=0;
-		battle_config.shop_exp=0;
-		battle_config.combo_delay_rate=100;
-		battle_config.item_check=1;
-		battle_config.wedding_modifydisplay=0;
-		battle_config.natural_healhp_interval=6000;
-		battle_config.natural_healsp_interval=8000;
-		battle_config.natural_heal_skill_interval=10000;
-		battle_config.natural_heal_weight_rate=50;
-		battle_config.item_name_override_grffile=1;
-		battle_config.arrow_decrement=1;
-		battle_config.max_aspd = 199;
-		battle_config.max_hp = 32500;
-		battle_config.max_sp = 32500;
-		battle_config.max_lv = 99; // [MouseJstr]
-		battle_config.max_parameter = 99;
-		battle_config.max_cart_weight = 8000;
-		battle_config.pc_skill_log = 0;
-		battle_config.mob_skill_log = 0;
-		battle_config.battle_log = 0;
-		battle_config.save_log = 0;
-		battle_config.error_log = 1;
-		battle_config.etc_log = 1;
-		battle_config.save_clothcolor = 0;
-		battle_config.undead_detect_type = 0;
-		battle_config.pc_auto_counter_type = 1;
-		battle_config.monster_auto_counter_type = 1;
-		battle_config.agi_penaly_type = 0;
-		battle_config.agi_penaly_count = 3;
-		battle_config.agi_penaly_num = 0;
-		battle_config.agi_penaly_count_lv = ATK_FLEE;
-		battle_config.vit_penaly_type = 0;
-		battle_config.vit_penaly_count = 3;
-		battle_config.vit_penaly_num = 0;
-		battle_config.vit_penaly_count_lv = ATK_DEF;
-		battle_config.player_defense_type = 0;
-		battle_config.monster_defense_type = 0;
-		battle_config.pet_defense_type = 0;
-		battle_config.magic_defense_type = 0;
-		battle_config.pc_skill_reiteration = 0;
-		battle_config.monster_skill_reiteration = 0;
-		battle_config.pc_skill_nofootset = 0;
-		battle_config.monster_skill_nofootset = 0;
-		battle_config.pc_cloak_check_type = 0;
-		battle_config.monster_cloak_check_type = 0;
-		battle_config.gvg_short_damage_rate = 100;
-		battle_config.gvg_long_damage_rate = 100;
-		battle_config.gvg_magic_damage_rate = 100;
-		battle_config.gvg_misc_damage_rate = 100;
-		battle_config.gvg_eliminate_time = 7000;
-		battle_config.mob_changetarget_byskill = 0;
-		battle_config.pc_attack_direction_change = 1;
-		battle_config.monster_attack_direction_change = 1;
-		battle_config.pc_undead_nofreeze = 0;
-		battle_config.pc_land_skill_limit = 1;
-		battle_config.monster_land_skill_limit = 1;
-		battle_config.party_skill_penaly = 1;
-		battle_config.monster_class_change_full_recover = 0;
-		battle_config.produce_item_name_input = 1;
-		battle_config.produce_potion_name_input = 1;
-		battle_config.making_arrow_name_input = 1;
-		battle_config.holywater_name_input = 1;
-		battle_config.display_delay_skill_fail = 1;
-		battle_config.chat_warpportal = 0;
-		battle_config.mob_warpportal = 0;
-		battle_config.dead_branch_active = 0;
-		battle_config.vending_max_value = 10000000;
-		battle_config.show_steal_in_same_party = 0;
-		battle_config.enable_upper_class = 0;
-		battle_config.pet_attack_attr_none = 0;
-		battle_config.pc_attack_attr_none = 0;
-		battle_config.mob_attack_attr_none = 1;
-		battle_config.mob_ghostring_fix = 0;
-		battle_config.gx_allhit = 0;
-		battle_config.gx_cardfix = 0;
-		battle_config.gx_dupele = 1;
-		battle_config.gx_disptype = 1;
-		battle_config.player_skill_partner_check = 1;
-		battle_config.hide_GM_session = 0;
-		battle_config.unit_movement_type = 0;
-		battle_config.invite_request_check = 1;
-		battle_config.skill_removetrap_type = 0;
-		battle_config.disp_experience = 0;
-		battle_config.item_rate_common = 100;
-		battle_config.item_rate_equip = 100;
-		battle_config.item_rate_card = 100;
-		battle_config.item_rate_heal = 100;		// Added by Valaris
-		battle_config.item_rate_use = 100;		// End
-		battle_config.item_drop_common_min=1;	// Added by TyrNemesis^
-		battle_config.item_drop_common_max=10000;
-		battle_config.item_drop_equip_min=1;
-		battle_config.item_drop_equip_max=10000;
-		battle_config.item_drop_card_min=1;
-		battle_config.item_drop_card_max=10000;
-		battle_config.item_drop_mvp_min=1;
-		battle_config.item_drop_mvp_max=10000;	// End Addition
-		battle_config.item_drop_heal_min=1;		// Added by Valaris
-		battle_config.item_drop_heal_max=10000;
-		battle_config.item_drop_use_min=1;
-		battle_config.item_drop_use_max=10000;	// End
-		battle_config.prevent_logout = 1;	// Added by RoVeRT
-		battle_config.maximum_level = 255;	// Added by Valaris
-		battle_config.drops_by_luk = 0;	// [Valaris]
-		battle_config.equipment_breaking = 0; // [Valaris]
-		battle_config.equipment_break_rate = 100; // [Valaris]
-		battle_config.pk_mode = 0; // [Valaris]
-		battle_config.pet_equip_required = 0; // [Valaris]
-		battle_config.multi_level_up = 0; // [Valaris]
-		battle_config.backstab_bow_penalty = 0; // Akaru
-		battle_config.night_at_start = 0; // added by [Yor]
-		battle_config.day_duration = 2*60*60*1000; // added by [Yor] (2 hours)
-		battle_config.night_duration = 30*60*1000; // added by [Yor] (30 minutes)
-		battle_config.show_mob_hp = 0; // [Valaris]
-		battle_config.ban_spoof_namer = 5; // added by [Yor] (default: 5 minutes)
-		battle_config.hack_info_GM_level = 60; // added by [Yor] (default: 60, GM level)
-		battle_config.any_warp_GM_min_level = 20; // added by [Yor]
-		battle_config.packet_ver_flag = 63; // added by [Yor]
-		battle_config.min_hair_style = 0;
-		battle_config.max_hair_style = 20;
-		battle_config.min_hair_color = 0;
-		battle_config.max_hair_color = 9;
-		battle_config.min_cloth_color = 0;
-		battle_config.max_cloth_color = 4;
-
-		battle_config.castrate_dex_scale = 150;
-
-		battle_config.area_size = 14;
-
-//SQL-only options start
-#ifndef TXT_ONLY 
-		battle_config.mail_system = 0;
-//SQL-only options end
-#endif
-
-}
-
-	fp = fopen(cfgName,"r");
-	if (fp == NULL) {
-		printf("file not found: %s\n", cfgName);
-		return 1;
-	}
-	while(fgets(line,1020,fp)){
-		const struct {
-			char str[128];
-			int *val;
-		} data[] = {
-			{ "warp_point_debug",                  &battle_config.warp_point_debug			},
-			{ "enemy_critical",                    &battle_config.enemy_critical			},
-			{ "enemy_critical_rate",               &battle_config.enemy_critical_rate		},
-			{ "enemy_str",                         &battle_config.enemy_str				},
-			{ "enemy_perfect_flee",                &battle_config.enemy_perfect_flee		},
-			{ "casting_rate",                      &battle_config.cast_rate				},
-			{ "delay_rate",                        &battle_config.delay_rate				},
-			{ "delay_dependon_dex",                &battle_config.delay_dependon_dex		},
-			{ "skill_delay_attack_enable",         &battle_config.sdelay_attack_enable		},
-			{ "left_cardfix_to_right",             &battle_config.left_cardfix_to_right	},
-			{ "player_skill_add_range",            &battle_config.pc_skill_add_range		},
-			{ "skill_out_range_consume",           &battle_config.skill_out_range_consume	},
-			{ "monster_skill_add_range",           &battle_config.mob_skill_add_range		},
-			{ "player_damage_delay",               &battle_config.pc_damage_delay			},
-			{ "player_damage_delay_rate",          &battle_config.pc_damage_delay_rate		},
-			{ "defunit_not_enemy",                 &battle_config.defnotenemy				},
-			{ "random_monster_checklv",            &battle_config.random_monster_checklv	},
-			{ "attribute_recover",                 &battle_config.attr_recover				},
-			{ "flooritem_lifetime",                &battle_config.flooritem_lifetime		},
-			{ "item_auto_get",                     &battle_config.item_auto_get			},
-			{ "item_first_get_time",               &battle_config.item_first_get_time		},
-			{ "item_second_get_time",              &battle_config.item_second_get_time		},
-			{ "item_third_get_time",               &battle_config.item_third_get_time		},
-			{ "mvp_item_first_get_time",           &battle_config.mvp_item_first_get_time	},
-			{ "mvp_item_second_get_time",          &battle_config.mvp_item_second_get_time	},
-			{ "mvp_item_third_get_time",           &battle_config.mvp_item_third_get_time	},
-			{ "item_rate",					&battle_config.item_rate				},
-			{ "drop_rate0item",                    &battle_config.drop_rate0item			},
-			{ "base_exp_rate",                     &battle_config.base_exp_rate			},
-			{ "job_exp_rate",                      &battle_config.job_exp_rate				},
-			{ "pvp_exp",                           &battle_config.pvp_exp		},
-			{ "gtb_pvp_only",                      &battle_config.gtb_pvp_only		},
-			{ "guild_max_castles",                 &battle_config.guild_max_castles		},
-			{ "death_penalty_type",                &battle_config.death_penalty_type		},
-			{ "death_penalty_base",                &battle_config.death_penalty_base		},
-			{ "death_penalty_job",                 &battle_config.death_penalty_job		},
-			{ "zeny_penalty",                      &battle_config.zeny_penalty				},
-			{ "restart_hp_rate",                   &battle_config.restart_hp_rate			},
-			{ "restart_sp_rate",                   &battle_config.restart_sp_rate			},
-			{ "mvp_hp_rate",                       &battle_config.mvp_hp_rate				},
-			{ "mvp_item_rate",                     &battle_config.mvp_item_rate			},
-			{ "mvp_exp_rate",                      &battle_config.mvp_exp_rate				},
-			{ "monster_hp_rate",                   &battle_config.monster_hp_rate			},
-			{ "monster_max_aspd",                  &battle_config.monster_max_aspd			},
-			{ "atcommand_gm_only",                 &battle_config.atc_gmonly				},
-			{ "atcommand_spawn_quantity_limit",    &battle_config.atc_spawn_quantity_limit	},
-			{ "gm_all_skill",                      &battle_config.gm_allskill				},
-			{ "gm_all_skill_add_abra",		&battle_config.gm_allskill_addabra		},
-			{ "gm_all_equipment",                  &battle_config.gm_allequip				},
-			{ "gm_skill_unconditional",            &battle_config.gm_skilluncond			},
-			{ "player_skillfree",                  &battle_config.skillfree				},
-			{ "player_skillup_limit",              &battle_config.skillup_limit			},
-			{ "weapon_produce_rate",               &battle_config.wp_rate					},
-			{ "potion_produce_rate",               &battle_config.pp_rate					},
-			{ "monster_active_enable",             &battle_config.monster_active_enable	},
-			{ "monster_damage_delay_rate",         &battle_config.monster_damage_delay_rate},
-			{ "monster_loot_type",                 &battle_config.monster_loot_type		},
-			{ "mob_skill_use",                     &battle_config.mob_skill_use			},
-			{ "mob_count_rate",                    &battle_config.mob_count_rate			},
-			{ "quest_skill_learn",                 &battle_config.quest_skill_learn		},
-			{ "quest_skill_reset",                 &battle_config.quest_skill_reset		},
-			{ "basic_skill_check",                 &battle_config.basic_skill_check		},
-			{ "guild_emperium_check",              &battle_config.guild_emperium_check		},
-			{ "guild_exp_limit",                   &battle_config.guild_exp_limit			},
-			{ "player_invincible_time",            &battle_config.pc_invincible_time		},
-			{ "pet_catch_rate",                    &battle_config.pet_catch_rate			},
-			{ "pet_rename",                        &battle_config.pet_rename				},
-			{ "pet_friendly_rate",                 &battle_config.pet_friendly_rate		},
-			{ "pet_hungry_delay_rate",             &battle_config.pet_hungry_delay_rate	},
-			{ "pet_hungry_friendly_decrease",      &battle_config.pet_hungry_friendly_decrease},
-			{ "pet_str",                           &battle_config.pet_str					},
-			{ "pet_status_support",                &battle_config.pet_status_support		},
-			{ "pet_attack_support",                &battle_config.pet_attack_support		},
-			{ "pet_damage_support",                &battle_config.pet_damage_support		},
-			{ "pet_support_rate",                  &battle_config.pet_support_rate			},
-			{ "pet_attack_exp_to_master",          &battle_config.pet_attack_exp_to_master	},
-			{ "pet_attack_exp_rate",               &battle_config.pet_attack_exp_rate	 },
-			{ "skill_min_damage",                  &battle_config.skill_min_damage			},
-			{ "finger_offensive_type",             &battle_config.finger_offensive_type	},
-			{ "heal_exp",                          &battle_config.heal_exp					},
-			{ "resurrection_exp",                  &battle_config.resurrection_exp			},
-			{ "shop_exp",                          &battle_config.shop_exp					},
-			{ "combo_delay_rate",                  &battle_config.combo_delay_rate			},
-			{ "item_check",                        &battle_config.item_check				},
-			{ "wedding_modifydisplay",             &battle_config.wedding_modifydisplay	},
-			{ "natural_healhp_interval",           &battle_config.natural_healhp_interval	},
-			{ "natural_healsp_interval",           &battle_config.natural_healsp_interval	},
-			{ "natural_heal_skill_interval",       &battle_config.natural_heal_skill_interval},
-			{ "natural_heal_weight_rate",          &battle_config.natural_heal_weight_rate	},
-			{ "item_name_override_grffile",        &battle_config.item_name_override_grffile},
-			{ "arrow_decrement",                   &battle_config.arrow_decrement			},
-			{ "max_aspd",                          &battle_config.max_aspd					},
-			{ "max_hp",                            &battle_config.max_hp					},
-			{ "max_sp",                            &battle_config.max_sp					},
-			{ "max_lv",                            &battle_config.max_lv					},
-			{ "max_parameter",                     &battle_config.max_parameter			},
-			{ "max_cart_weight",                   &battle_config.max_cart_weight			},
-			{ "player_skill_log",                  &battle_config.pc_skill_log				},
-			{ "monster_skill_log",                 &battle_config.mob_skill_log			},
-			{ "battle_log",                        &battle_config.battle_log				},
-			{ "save_log",                          &battle_config.save_log					},
-			{ "error_log",                         &battle_config.error_log				},
-			{ "etc_log",                           &battle_config.etc_log					},
-			{ "save_clothcolor",                   &battle_config.save_clothcolor			},
-			{ "undead_detect_type",                &battle_config.undead_detect_type		},
-			{ "player_auto_counter_type",          &battle_config.pc_auto_counter_type		},
-			{ "monster_auto_counter_type",         &battle_config.monster_auto_counter_type},
-			{ "agi_penaly_type",                   &battle_config.agi_penaly_type			},
-			{ "agi_penaly_count",                  &battle_config.agi_penaly_count			},
-			{ "agi_penaly_num",                    &battle_config.agi_penaly_num			},
-			{ "agi_penaly_count_lv",               &battle_config.agi_penaly_count_lv		},
-			{ "vit_penaly_type",                   &battle_config.vit_penaly_type			},
-			{ "vit_penaly_count",                  &battle_config.vit_penaly_count			},
-			{ "vit_penaly_num",                    &battle_config.vit_penaly_num			},
-			{ "vit_penaly_count_lv",               &battle_config.vit_penaly_count_lv		},
-			{ "player_defense_type",               &battle_config.player_defense_type		},
-			{ "monster_defense_type",              &battle_config.monster_defense_type		},
-			{ "pet_defense_type",                  &battle_config.pet_defense_type			},
-			{ "magic_defense_type",                &battle_config.magic_defense_type		},
-			{ "player_skill_reiteration",          &battle_config.pc_skill_reiteration		},
-			{ "monster_skill_reiteration",         &battle_config.monster_skill_reiteration},
-			{ "player_skill_nofootset",            &battle_config.pc_skill_nofootset		},
-			{ "monster_skill_nofootset",           &battle_config.monster_skill_nofootset	},
-			{ "player_cloak_check_type",           &battle_config.pc_cloak_check_type		},
-			{ "monster_cloak_check_type",          &battle_config.monster_cloak_check_type	},
-			{ "gvg_short_attack_damage_rate",      &battle_config.gvg_short_damage_rate	},
-			{ "gvg_long_attack_damage_rate",       &battle_config.gvg_long_damage_rate		},
-			{ "gvg_magic_attack_damage_rate",      &battle_config.gvg_magic_damage_rate	},
-			{ "gvg_misc_attack_damage_rate",       &battle_config.gvg_misc_damage_rate		},
-			{ "gvg_eliminate_time",                &battle_config.gvg_eliminate_time		},
-			{ "mob_changetarget_byskill",          &battle_config.mob_changetarget_byskill},
-			{ "player_attack_direction_change",    &battle_config.pc_attack_direction_change },
-			{ "monster_attack_direction_change",   &battle_config.monster_attack_direction_change },
-			{ "player_land_skill_limit",           &battle_config.pc_land_skill_limit		},
-			{ "monster_land_skill_limit",          &battle_config.monster_land_skill_limit},
-			{ "party_skill_penaly",                &battle_config.party_skill_penaly		},
-			{ "monster_class_change_full_recover", &battle_config.monster_class_change_full_recover },
-			{ "produce_item_name_input",           &battle_config.produce_item_name_input	},
-			{ "produce_potion_name_input",         &battle_config.produce_potion_name_input},
-			{ "making_arrow_name_input",           &battle_config.making_arrow_name_input	},
-			{ "holywater_name_input",              &battle_config.holywater_name_input		},
-			{ "display_delay_skill_fail",          &battle_config.display_delay_skill_fail	},
-			{ "chat_warpportal",                   &battle_config.chat_warpportal			},
-			{ "mob_warpportal",                    &battle_config.mob_warpportal			},
-			{ "dead_branch_active",                &battle_config.dead_branch_active			},
-			{ "vending_max_value",                 &battle_config.vending_max_value		},
-			{ "show_steal_in_same_party",          &battle_config.show_steal_in_same_party		},
-			{ "enable_upper_class",                &battle_config.enable_upper_class		},
-			{ "pet_attack_attr_none",              &battle_config.pet_attack_attr_none		},
-			{ "mob_attack_attr_none",              &battle_config.mob_attack_attr_none		},
-			{ "mob_ghostring_fix",                 &battle_config.mob_ghostring_fix		},
-			{ "pc_attack_attr_none",               &battle_config.pc_attack_attr_none		},
-			{ "gx_allhit",                         &battle_config.gx_allhit				},
-			{ "gx_cardfix",                        &battle_config.gx_cardfix				},
-			{ "gx_dupele",                         &battle_config.gx_dupele				},
-			{ "gx_disptype",                       &battle_config.gx_disptype				},
-			{ "player_skill_partner_check",        &battle_config.player_skill_partner_check},
-			{ "hide_GM_session",                   &battle_config.hide_GM_session			},
-			{ "unit_movement_type",                &battle_config.unit_movement_type		},
-			{ "invite_request_check",              &battle_config.invite_request_check		},
-			{ "skill_removetrap_type",             &battle_config.skill_removetrap_type	},
-			{ "disp_experience",                   &battle_config.disp_experience			},
-			{ "castle_defense_rate",		&battle_config.castle_defense_rate		},
-			{ "riding_weight",		&battle_config.riding_weight		},
-			{ "item_rate_common",                  &battle_config.item_rate_common	},	// Added by RoVeRT
-			{ "item_rate_equip",                   &battle_config.item_rate_equip	},
-			{ "item_rate_card",                    &battle_config.item_rate_card	},	// End Addition
-			{ "item_rate_heal",                    &battle_config.item_rate_heal	},	// Added by Valaris
-			{ "item_rate_use",                     &battle_config.item_rate_use	},	// End
-			{ "item_drop_common_min",              &battle_config.item_drop_common_min	},	// Added by TyrNemesis^
-			{ "item_drop_common_max",              &battle_config.item_drop_common_max	},
-			{ "item_drop_equip_min",               &battle_config.item_drop_equip_min	},
-			{ "item_drop_equip_max",               &battle_config.item_drop_equip_max	},
-			{ "item_drop_card_min",                &battle_config.item_drop_card_min	},
-			{ "item_drop_card_max",                &battle_config.item_drop_card_max	},
-			{ "item_drop_mvp_min",                 &battle_config.item_drop_mvp_min	},
-			{ "item_drop_mvp_max",                 &battle_config.item_drop_mvp_max	},	// End Addition
-			{ "prevent_logout",                    &battle_config.prevent_logout		},	// Added by RoVeRT
-			{ "alchemist_summon_reward",           &battle_config.alchemist_summon_reward	},	// [Valaris]
-			{ "maximum_level",                     &battle_config.maximum_level	},	// [Valaris]
-			{ "drops_by_luk",                      &battle_config.drops_by_luk	},	// [Valaris]
-			{ "monsters_ignore_gm",                &battle_config.monsters_ignore_gm	},	// [Valaris]
-			{ "equipment_breaking",                &battle_config.equipment_breaking	},	// [Valaris]
-			{ "equipment_break_rate",              &battle_config.equipment_break_rate	}, 	// [Valaris]
-			{ "pk_mode",                           &battle_config.pk_mode			},  	// [Valaris]
-			{ "pet_equip_required",                &battle_config.pet_equip_required	},	// [Valaris]
-			{ "multi_level_up",                    &battle_config.multi_level_up		}, // [Valaris]
-			{ "backstab_bow_penalty",              &battle_config.backstab_bow_penalty	},
-			{ "night_at_start",                    &battle_config.night_at_start	}, // added by [Yor]
-			{ "day_duration",                      &battle_config.day_duration	}, // added by [Yor]
-			{ "night_duration",                    &battle_config.night_duration	}, // added by [Yor]
-			{ "show_mob_hp",                       &battle_config.show_mob_hp	}, // [Valaris]
-			{ "ban_spoof_namer",                   &battle_config.ban_spoof_namer	}, // added by [Yor]
-			{ "hack_info_GM_level",                &battle_config.hack_info_GM_level	}, // added by [Yor]
-			{ "any_warp_GM_min_level",             &battle_config.any_warp_GM_min_level	}, // added by [Yor]
-			{ "packet_ver_flag",                   &battle_config.packet_ver_flag	}, // added by [Yor]
-			{ "min_hair_style",                    &battle_config.min_hair_style	}, // added by [MouseJstr]
-			{ "max_hair_style",                    &battle_config.max_hair_style	}, // added by [MouseJstr]
-			{ "min_hair_color",                    &battle_config.min_hair_color	}, // added by [MouseJstr]
-			{ "max_hair_color",                    &battle_config.max_hair_color	}, // added by [MouseJstr]
-			{ "min_cloth_color",                   &battle_config.min_cloth_color	}, // added by [MouseJstr]
-			{ "max_cloth_color",                   &battle_config.max_cloth_color	}, // added by [MouseJstr]
-			{ "castrate_dex_scale",                &battle_config.castrate_dex_scale	}, // added by [MouseJstr]
-			{ "area_size",                         &battle_config.area_size	}, // added by [MouseJstr]
-			{ "muting_players",                   &battle_config.muting_players}, // added by [Apple]
-//SQL-only options start
-#ifndef TXT_ONLY 
-			{ "mail_system",		&battle_config.mail_system	}, // added by [Valaris]
-//SQL-only options end
-#endif
-		};
-
-		if (line[0] == '/' && line[1] == '/')
-			continue;
-		if (sscanf(line, "%[^:]:%s", w1, w2) != 2)
-			continue;
-		for(i = 0; i < sizeof(data) / (sizeof(data[0])); i++)
-			if (strcmpi(w1, data[i].str) == 0)
-				*data[i].val = battle_config_switch(w2);
-
-		if (strcmpi(w1, "import") == 0)
-			battle_config_read(w2);
-	}
-	fclose(fp);
-
-	if (--count == 0) {
-		if(battle_config.flooritem_lifetime < 1000)
-			battle_config.flooritem_lifetime = LIFETIME_FLOORITEM*1000;
-		if(battle_config.restart_hp_rate < 0)
-			battle_config.restart_hp_rate = 0;
-		else if(battle_config.restart_hp_rate > 100)
-			battle_config.restart_hp_rate = 100;
-		if(battle_config.restart_sp_rate < 0)
-			battle_config.restart_sp_rate = 0;
-		else if(battle_config.restart_sp_rate > 100)
-			battle_config.restart_sp_rate = 100;
-		if(battle_config.natural_healhp_interval < NATURAL_HEAL_INTERVAL)
-			battle_config.natural_healhp_interval=NATURAL_HEAL_INTERVAL;
-		if(battle_config.natural_healsp_interval < NATURAL_HEAL_INTERVAL)
-			battle_config.natural_healsp_interval=NATURAL_HEAL_INTERVAL;
-		if(battle_config.natural_heal_skill_interval < NATURAL_HEAL_INTERVAL)
-			battle_config.natural_heal_skill_interval=NATURAL_HEAL_INTERVAL;
-		if(battle_config.natural_heal_weight_rate < 50)
-			battle_config.natural_heal_weight_rate = 50;
-		if(battle_config.natural_heal_weight_rate > 101)
-			battle_config.natural_heal_weight_rate = 101;
-		battle_config.monster_max_aspd = 2000 - battle_config.monster_max_aspd*10;
-		if(battle_config.monster_max_aspd < 10)
-			battle_config.monster_max_aspd = 10;
-		if(battle_config.monster_max_aspd > 1000)
-			battle_config.monster_max_aspd = 1000;
-		battle_config.max_aspd = 2000 - battle_config.max_aspd*10;
-		if(battle_config.max_aspd < 10)
-			battle_config.max_aspd = 10;
-		if(battle_config.max_aspd > 1000)
-			battle_config.max_aspd = 1000;
-		if(battle_config.max_hp > 1000000)
-			battle_config.max_hp = 1000000;
-		if(battle_config.max_hp < 100)
-			battle_config.max_hp = 100;
-		if(battle_config.max_sp > 1000000)
-			battle_config.max_sp = 1000000;
-		if(battle_config.max_sp < 100)
-			battle_config.max_sp = 100;
-		if(battle_config.max_parameter < 10)
-			battle_config.max_parameter = 10;
-		if(battle_config.max_parameter > 10000)
-			battle_config.max_parameter = 10000;
-		if(battle_config.max_cart_weight > 1000000)
-			battle_config.max_cart_weight = 1000000;
-		if(battle_config.max_cart_weight < 100)
-			battle_config.max_cart_weight = 100;
-		battle_config.max_cart_weight *= 10;
-
-		if(battle_config.agi_penaly_count < 2)
-			battle_config.agi_penaly_count = 2;
-		if(battle_config.vit_penaly_count < 2)
-			battle_config.vit_penaly_count = 2;
-
-		if(battle_config.guild_exp_limit > 99)
-			battle_config.guild_exp_limit = 99;
-		if(battle_config.guild_exp_limit < 0)
-			battle_config.guild_exp_limit = 0;
-
-		if(battle_config.castle_defense_rate < 0)
-			battle_config.castle_defense_rate = 0;
-		if(battle_config.castle_defense_rate > 100)
-			battle_config.castle_defense_rate = 100;
-		if(battle_config.item_drop_common_min < 1)		// Added by TyrNemesis^
-			battle_config.item_drop_common_min = 1;
-		if(battle_config.item_drop_common_max > 10000)
-			battle_config.item_drop_common_max = 10000;
-		if(battle_config.item_drop_equip_min < 1)
-			battle_config.item_drop_equip_min = 1;
-		if(battle_config.item_drop_equip_max > 10000)
-			battle_config.item_drop_equip_max = 10000;
-		if(battle_config.item_drop_card_min < 1)
-			battle_config.item_drop_card_min = 1;
-		if(battle_config.item_drop_card_max > 10000)
-			battle_config.item_drop_card_max = 10000;
-		if(battle_config.item_drop_mvp_min < 1)
-			battle_config.item_drop_mvp_min = 1;
-		if(battle_config.item_drop_mvp_max > 10000)
-			battle_config.item_drop_mvp_max = 10000;	// End Addition
-
-		if (battle_config.night_at_start < 0) // added by [Yor]
-			battle_config.night_at_start = 0;
-		else if (battle_config.night_at_start > 1) // added by [Yor]
-			battle_config.night_at_start = 1;
-		if (battle_config.day_duration < 0) // added by [Yor]
-			battle_config.day_duration = 0;
-		if (battle_config.night_duration < 0) // added by [Yor]
-			battle_config.night_duration = 0;
-
-		if (battle_config.ban_spoof_namer < 0) // added by [Yor]
-			battle_config.ban_spoof_namer = 0;
-		else if (battle_config.ban_spoof_namer > 32767)
-			battle_config.ban_spoof_namer = 32767;
-
-		if (battle_config.hack_info_GM_level < 0) // added by [Yor]
-			battle_config.hack_info_GM_level = 0;
-		else if (battle_config.hack_info_GM_level > 100)
-			battle_config.hack_info_GM_level = 100;
-
-		if (battle_config.any_warp_GM_min_level < 0) // added by [Yor]
-			battle_config.any_warp_GM_min_level = 0;
-		else if (battle_config.any_warp_GM_min_level > 100)
-			battle_config.any_warp_GM_min_level = 100;
-
-		// at least 1 client must be accepted
-		if ((battle_config.packet_ver_flag & 63) == 0) // added by [Yor]
-			battle_config.packet_ver_flag = 63; // accept all clients
-
-		add_timer_func_list(battle_delay_damage_sub, "battle_delay_damage_sub");
-	}
-
-	return 0;
-}
diff --git a/misc/src/map/battle.h b/misc/src/map/battle.h
deleted file mode 100644
index 8f09d22..0000000
--- a/misc/src/map/battle.h
+++ /dev/null
@@ -1,342 +0,0 @@
-// $Id: battle.h,v 1.6 2004/09/29 21:08:17 Akitasha Exp $
-#ifndef _BATTLE_H_
-#define _BATTLE_H_
-
-// �_���[�W
-struct Damage {
-	int damage,damage2;
-	int type,div_;
-	int amotion,dmotion;
-	int blewcount;
-	int flag;
-	int dmg_lv;	//�͂܂ꌸ�Z�v�Z�p�@0:�X�L���U�� ATK_LUCKY,ATK_FLEE,ATK_DEF
-};
-
-// �����\�i�ǂݍ��݂�pc.c�Abattle_attr_fix�Ŏg�p�j
-extern int attr_fix_table[4][10][10];
-
-struct map_session_data;
-struct mob_data;
-struct block_list;
-
-// �_���[�W�v�Z
-
-struct Damage battle_calc_attack(	int attack_type,
-	struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int flag);
-struct Damage battle_calc_weapon_attack(
-	struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int flag);
-struct Damage battle_calc_magic_attack(
-	struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int flag);
-struct Damage  battle_calc_misc_attack(
-	struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int flag);
-
-// �����C���v�Z
-int battle_attr_fix(int damage,int atk_elem,int def_elem);
-
-// �_���[�W�ŏI�v�Z
-int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,int div_,int skill_num,int skill_lv,int flag);
-enum {	// �ŏI�v�Z�̃t���O
-	BF_WEAPON	= 0x0001,
-	BF_MAGIC	= 0x0002,
-	BF_MISC		= 0x0004,
-	BF_SHORT	= 0x0010,
-	BF_LONG		= 0x0040,
-	BF_SKILL	= 0x0100,
-	BF_NORMAL	= 0x0200,
-	BF_WEAPONMASK=0x000f,
-	BF_RANGEMASK= 0x00f0,
-	BF_SKILLMASK= 0x0f00,
-};
-
-// ���ۂ�HP�𑝌�
-int battle_delay_damage(unsigned int tick,struct block_list *src,struct block_list *target,int damage,int flag);
-int battle_damage(struct block_list *bl,struct block_list *target,int damage,int flag);
-int battle_heal(struct block_list *bl,struct block_list *target,int hp,int sp,int flag);
-
-// �U����ړ����~�߂�
-int battle_stopattack(struct block_list *bl);
-int battle_stopwalking(struct block_list *bl,int type);
-
-// �ʏ�U�������܂Ƃ�
-int battle_weapon_attack( struct block_list *bl,struct block_list *target,
-	 unsigned int tick,int flag);
-
-// �e��p�����[�^�𓾂�
-int battle_counttargeted(struct block_list *bl,struct block_list *src,int target_lv);
-int battle_get_class(struct block_list *bl);
-int battle_get_dir(struct block_list *bl);
-int battle_get_lv(struct block_list *bl);
-int battle_get_range(struct block_list *bl);
-int battle_get_hp(struct block_list *bl);
-int battle_get_max_hp(struct block_list *bl);
-int battle_get_str(struct block_list *bl);
-int battle_get_agi(struct block_list *bl);
-int battle_get_vit(struct block_list *bl);
-int battle_get_int(struct block_list *bl);
-int battle_get_dex(struct block_list *bl);
-int battle_get_luk(struct block_list *bl);
-int battle_get_hit(struct block_list *bl);
-int battle_get_flee(struct block_list *bl);
-int battle_get_def(struct block_list *bl);
-int battle_get_mdef(struct block_list *bl);
-int battle_get_flee2(struct block_list *bl);
-int battle_get_def2(struct block_list *bl);
-int battle_get_mdef2(struct block_list *bl);
-int battle_get_baseatk(struct block_list *bl);
-int battle_get_atk(struct block_list *bl);
-int battle_get_atk2(struct block_list *bl);
-int battle_get_speed(struct block_list *bl);
-int battle_get_adelay(struct block_list *bl);
-int battle_get_amotion(struct block_list *bl);
-int battle_get_dmotion(struct block_list *bl);
-int battle_get_element(struct block_list *bl);
-int battle_get_attack_element(struct block_list *bl);
-int battle_get_attack_element2(struct block_list *bl);  //���蕐�푮���擾
-#define battle_get_elem_type(bl)	(battle_get_element(bl)%10)
-#define battle_get_elem_level(bl)	(battle_get_element(bl)/10/2)
-int battle_get_party_id(struct block_list *bl);
-int battle_get_guild_id(struct block_list *bl);
-int battle_get_race(struct block_list *bl);
-int battle_get_size(struct block_list *bl);
-int battle_get_mode(struct block_list *bl);
-int battle_get_mexp(struct block_list *bl);
-
-struct status_change *battle_get_sc_data(struct block_list *bl);
-short *battle_get_sc_count(struct block_list *bl);
-short *battle_get_opt1(struct block_list *bl);
-short *battle_get_opt2(struct block_list *bl);
-short *battle_get_opt3(struct block_list *bl);
-short *battle_get_option(struct block_list *bl);
-
-enum {
-	BCT_NOENEMY	=0x00000,
-	BCT_PARTY	=0x10000,
-	BCT_ENEMY	=0x40000,
-	BCT_NOPARTY	=0x50000,
-	BCT_ALL		=0x20000,
-	BCT_NOONE	=0x60000,
-};
-
-int battle_check_undead(int race,int element);
-int battle_check_target( struct block_list *src, struct block_list *target,int flag);
-int battle_check_range(struct block_list *src,struct block_list *bl,int range);
-
-
-// �ݒ�
-
-int battle_config_switch(const char *str); // [Valaris]
-
-extern struct Battle_Config {
-	int warp_point_debug;
-	int enemy_critical;
-	int enemy_critical_rate;
-	int enemy_str;
-	int enemy_perfect_flee;
-	int cast_rate,delay_rate,delay_dependon_dex;
-	int sdelay_attack_enable;
-	int left_cardfix_to_right;
-	int pc_skill_add_range;
-	int skill_out_range_consume;
-	int mob_skill_add_range;
-	int pc_damage_delay;
-	int pc_damage_delay_rate;
-	int defnotenemy;
-	int random_monster_checklv;
-	int attr_recover;
-	int flooritem_lifetime;
-	int item_auto_get;
-	int item_first_get_time;
-	int item_second_get_time;
-	int item_third_get_time;
-	int mvp_item_first_get_time;
-	int mvp_item_second_get_time;
-	int mvp_item_third_get_time;
-	int item_rate,base_exp_rate,job_exp_rate; // removed item rate, depreciated
-	int drop_rate0item;
-	int death_penalty_type;
-	int death_penalty_base,death_penalty_job;
-        int pvp_exp;  // [MouseJstr]
-        int gtb_pvp_only;  // [MouseJstr]
-	int zeny_penalty;
-	int restart_hp_rate;
-	int restart_sp_rate;
-	int mvp_item_rate,mvp_exp_rate;
-	int mvp_hp_rate;
-	int monster_hp_rate;
-	int monster_max_aspd;
-	int atc_gmonly;
-	int atc_spawn_quantity_limit;
-	int gm_allskill;
-	int gm_allskill_addabra;
-	int gm_allequip;
-	int gm_skilluncond;
-	int skillfree;
-	int skillup_limit;
-	int wp_rate;
-	int pp_rate;
-	int monster_active_enable;
-	int monster_damage_delay_rate;
-	int monster_loot_type;
-	int mob_skill_use;
-	int mob_count_rate;
-	int quest_skill_learn;
-	int quest_skill_reset;
-	int basic_skill_check;
-	int guild_emperium_check;
-	int guild_exp_limit;
-	int guild_max_castles;
-	int pc_invincible_time;
-	int pet_catch_rate;
-	int pet_rename;
-	int pet_friendly_rate;
-	int pet_hungry_delay_rate;
-	int pet_hungry_friendly_decrease;
-	int pet_str;
-	int pet_status_support;
-	int pet_attack_support;
-	int pet_damage_support;
-	int pet_support_rate;
-	int pet_attack_exp_to_master;
-	int pet_attack_exp_rate;
-	int skill_min_damage;
-	int finger_offensive_type;
-	int heal_exp;
-	int resurrection_exp;
-	int shop_exp;
-	int combo_delay_rate;
-	int item_check;
-	int wedding_modifydisplay;
-	int natural_healhp_interval;
-	int natural_healsp_interval;
-	int natural_heal_skill_interval;
-	int natural_heal_weight_rate;
-	int item_name_override_grffile;
-	int arrow_decrement;
-	int max_aspd;
-	int max_hp;
-	int max_sp;
-	int max_lv;
-	int max_parameter;
-	int max_cart_weight;
-	int pc_skill_log;
-	int mob_skill_log;
-	int battle_log;
-	int save_log;
-	int error_log;
-	int etc_log;
-	int save_clothcolor;
-	int undead_detect_type;
-	int pc_auto_counter_type;
-	int monster_auto_counter_type;
-	int agi_penaly_type;
-	int agi_penaly_count;
-	int agi_penaly_num;
-	int vit_penaly_type;
-	int vit_penaly_count;
-	int vit_penaly_num;
-	int player_defense_type;
-	int monster_defense_type;
-	int pet_defense_type;
-	int magic_defense_type;
-	int pc_skill_reiteration;
-	int monster_skill_reiteration;
-	int pc_skill_nofootset;
-	int monster_skill_nofootset;
-	int pc_cloak_check_type;
-	int monster_cloak_check_type;
-	int gvg_short_damage_rate;
-	int gvg_long_damage_rate;
-	int gvg_magic_damage_rate;
-	int gvg_misc_damage_rate;
-	int gvg_eliminate_time;
-	int mob_changetarget_byskill;
-	int pc_attack_direction_change;
-	int monster_attack_direction_change;
-	int pc_undead_nofreeze;
-	int pc_land_skill_limit;
-	int monster_land_skill_limit;
-	int party_skill_penaly;
-	int monster_class_change_full_recover;
-	int produce_item_name_input;
-	int produce_potion_name_input;
-	int making_arrow_name_input;
-	int holywater_name_input;
-	int display_delay_skill_fail;
-	int chat_warpportal;
-	int mob_warpportal;
-	int dead_branch_active;
-	int vending_max_value;
-//	int pet_lootitem; // removed [Valaris]
-//	int pet_weight; // removed [Valaris]
-	int show_steal_in_same_party;
-	int enable_upper_class;
-	int pet_attack_attr_none;
-	int mob_attack_attr_none;
-	int mob_ghostring_fix;
-	int pc_attack_attr_none;
-	int item_rate_common,item_rate_card,item_rate_equip,item_rate_heal,item_rate_use;	// Added by RoVeRT, Additional Heal and Usable item rate by Val
-	int item_drop_common_min,item_drop_common_max;	// Added by TyrNemesis^
-	int item_drop_card_min,item_drop_card_max;
-	int item_drop_equip_min,item_drop_equip_max;
-	int item_drop_mvp_min,item_drop_mvp_max;	// End Addition
-	int item_drop_heal_min,item_drop_heal_max;	// Added by Valatris
-	int item_drop_use_min,item_drop_use_max;	//End
-
-	int prevent_logout;	// Added by RoVeRT
-
-	int alchemist_summon_reward;	// [Valaris]
-	int maximum_level;
-	int drops_by_luk;
-	int monsters_ignore_gm;
-	int equipment_breaking;
-	int equipment_break_rate;
-	int pet_equip_required;
-	int multi_level_up;
-	int pk_mode;
-	int show_mob_hp;  // end additions [Valaris]
-
-	int agi_penaly_count_lv;
-	int vit_penaly_count_lv;
-
-	int gx_allhit;
-	int gx_cardfix;
-	int gx_dupele;
-	int gx_disptype;
-	int player_skill_partner_check;
-	int hide_GM_session;
-	int unit_movement_type;
-	int invite_request_check;
-	int skill_removetrap_type;
-	int disp_experience;
-	int castle_defense_rate;
-	int riding_weight;
-	int backstab_bow_penalty;
-
-	int night_at_start; // added by [Yor]
-	int day_duration; // added by [Yor]
-	int night_duration; // added by [Yor]
-	int ban_spoof_namer; // added by [Yor]
-	int hack_info_GM_level; // added by [Yor]
-	int any_warp_GM_min_level; // added by [Yor]
-	int packet_ver_flag; // added by [Yor]
-	int muting_players; // added by [Apple]
-
-	int min_hair_style; // added by [MouseJstr]
-	int max_hair_style; // added by [MouseJstr]
-	int min_hair_color; // added by [MouseJstr]
-	int max_hair_color; // added by [MouseJstr]
-	int min_cloth_color; // added by [MouseJstr]
-	int max_cloth_color; // added by [MouseJstr]
-
-	int castrate_dex_scale; // added by [MouseJstr]
-	int area_size; // added by [MouseJstr]
-
-#ifndef TXT_ONLY /* SQL-only options */
-	int mail_system; // [Valaris]
-#endif
-
-} battle_config;
-
-int battle_config_read(const char *cfgName);
-
-#endif
diff --git a/misc/src/map/chat.c b/misc/src/map/chat.c
deleted file mode 100644
index ade4dcb..0000000
--- a/misc/src/map/chat.c
+++ /dev/null
@@ -1,373 +0,0 @@
-// $Id: chat.c,v 1.2 2004/09/22 02:59:47 Akitasha Exp $
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "db.h"
-#include "nullpo.h"
-#include "malloc.h"
-#include "map.h"
-#include "clif.h"
-#include "pc.h"
-#include "chat.h"
-#include "npc.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-int chat_triggerevent(struct chat_data *cd);
-
-
-/*==========================================
- * �`���b�g���[���쐬
- *------------------------------------------
- */
-int chat_createchat(struct map_session_data *sd,int limit,int pub,char* pass,char* title,int titlelen)
-{
-	struct chat_data *cd;
-
-	nullpo_retr(0, sd);
-
-	cd = aCalloc(1,sizeof(struct chat_data));
-
-	cd->limit = limit;
-	cd->pub = pub;
-	cd->users = 1;
-	memcpy(cd->pass,pass,8);
-	if(titlelen>=sizeof(cd->title)-1) titlelen=sizeof(cd->title)-1;
-	memcpy(cd->title,title,titlelen);
-	cd->title[titlelen]=0;
-
-	cd->owner = (struct block_list **)(&cd->usersd[0]);
-	cd->usersd[0] = sd;
-	cd->bl.m = sd->bl.m;
-	cd->bl.x = sd->bl.x;
-	cd->bl.y = sd->bl.y;
-	cd->bl.type = BL_CHAT;
-
-	cd->bl.id = map_addobject(&cd->bl);	
-	if(cd->bl.id==0){
-		clif_createchat(sd,1);
-		free(cd);
-		return 0;
-	}
-	pc_setchatid(sd,cd->bl.id);
-
-	clif_createchat(sd,0);
-	clif_dispchat(cd,0);
-
-	return 0;
-}
-
-/*==========================================
- * �����`���b�g���[���ɎQ��
- *------------------------------------------
- */
-int chat_joinchat(struct map_session_data *sd,int chatid,char* pass)
-{
-	struct chat_data *cd;
-
-	nullpo_retr(0, sd);
-
-	cd=(struct chat_data*)map_id2bl(chatid);
-	if(cd==NULL)
-		return 1;
-
-	if(cd->bl.m != sd->bl.m || cd->limit <= cd->users){
-		clif_joinchatfail(sd,0);
-		return 0;
-	}
-	if(cd->pub==0 && strncmp(pass,cd->pass,8)){
-		clif_joinchatfail(sd,1);
-		return 0;
-	}
-
-	cd->usersd[cd->users] = sd;
-	cd->users++;
-
-	pc_setchatid(sd,cd->bl.id);
-
-	
-	clif_joinchatok(sd,cd);	// �V���ɎQ�������l�ɂ͑S���̃��X�g
-	clif_addchat(cd,sd);	// ���ɒ��ɋ����l�ɂ͒lj������l�̕�
-	clif_dispchat(cd,0);	// ���͂̐l�ɂ͐l���ω���
-
-	chat_triggerevent(cd); // �C�x���g
-	
-	return 0;
-}
-
-/*==========================================
- * �`���b�g���[�����甲����
- *------------------------------------------
- */
-int chat_leavechat(struct map_session_data *sd)
-{
-	struct chat_data *cd;
-	int i,leavechar;
-
-	nullpo_retr(1, sd);
-
-	cd=(struct chat_data*)map_id2bl(sd->chatID);
-	if(cd==NULL)
-		return 1;
-
-	for(i = 0,leavechar=-1;i < cd->users;i++){
-		if(cd->usersd[i] == sd){
-			leavechar=i;
-			break;
-		}
-	}
-	if(leavechar<0)	// ����chat�ɏ������Ă��Ȃ��炵�� (�o�O���̂�)
-		return -1;
-
-	if(leavechar==0 && cd->users>1 && (*cd->owner)->type==BL_PC){
-		// ���L�҂�����&���ɐl������&PC�̃`���b�g
-		clif_changechatowner(cd,cd->usersd[1]);
-		clif_clearchat(cd,0);
-	}
-
-	// ������PC�ɂ�����̂�users�����炷�O�Ɏ��s
-	clif_leavechat(cd,sd);
-
-	cd->users--;
-	pc_setchatid(sd,0);
-
-	if(cd->users == 0 && (*cd->owner)->type==BL_PC){
-			// �S�����Ȃ��Ȃ���&PC�̃`���b�g�Ȃ̂ŏ���
-		clif_clearchat(cd,0);
-		map_delobject(cd->bl.id);	// free�܂ł��Ă����
-	} else {
-		for(i=leavechar;i < cd->users;i++)
-			cd->usersd[i] = cd->usersd[i+1];
-		if(leavechar==0 && (*cd->owner)->type==BL_PC){
-			// PC�̃`���b�g�Ȃ̂ŏ��L�҂��������̂ňʒu�ύX
-			cd->bl.x=cd->usersd[0]->bl.x;
-			cd->bl.y=cd->usersd[0]->bl.y;
-		}
-		clif_dispchat(cd,0);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �`���b�g���[���̎����������
- *------------------------------------------
- */
-int chat_changechatowner(struct map_session_data *sd,char *nextownername)
-{
-	struct chat_data *cd;
-	struct map_session_data *tmp_sd;
-	int i,nextowner;
-
-	nullpo_retr(1, sd);
-
-	cd=(struct chat_data*)map_id2bl(sd->chatID);
-	if(cd==NULL || (struct block_list *)sd!=(*cd->owner))
-		return 1;
-
-	for(i = 1,nextowner=-1;i < cd->users;i++){
-		if(strcmp(cd->usersd[i]->status.name,nextownername)==0){
-			nextowner=i;
-			break;
-		}
-	}
-	if(nextowner<0) // ����Ȑl�͋��Ȃ�
-		return -1;
-
-	clif_changechatowner(cd,cd->usersd[nextowner]);
-	// ��U����
-	clif_clearchat(cd,0);
-
-	// userlist�̏��ԕύX (0�����L�҂Ȃ̂�)
-	if( (tmp_sd = cd->usersd[0]) == NULL )
-		return 1; //���肦��̂��ȁH
-	cd->usersd[0] = cd->usersd[nextowner];
-	cd->usersd[nextowner] = tmp_sd;
-
-	// �V�������L�҂̈ʒu�֕ύX
-	cd->bl.x=cd->usersd[0]->bl.x;
-	cd->bl.y=cd->usersd[0]->bl.y;
-
-	// �ēx�\��
-	clif_dispchat(cd,0);
-
-	return 0;
-}
-
-/*==========================================
- * �`���b�g�̏��(�^�C�g����)��ύX
- *------------------------------------------
- */
-int chat_changechatstatus(struct map_session_data *sd,int limit,int pub,char* pass,char* title,int titlelen)
-{
-	struct chat_data *cd;
-
-	nullpo_retr(1, sd);
-
-	cd=(struct chat_data*)map_id2bl(sd->chatID);
-	if(cd==NULL || (struct block_list *)sd!=(*cd->owner))
-		return 1;
-
-	cd->limit = limit;
-	cd->pub = pub;
-	memcpy(cd->pass,pass,8);
-	if(titlelen>=sizeof(cd->title)-1) titlelen=sizeof(cd->title)-1;
-	memcpy(cd->title,title,titlelen);
-	cd->title[titlelen]=0;
-
-	clif_changechatstatus(cd);
-	clif_dispchat(cd,0);
-
-	return 0;
-}
-
-/*==========================================
- * �`���b�g���[������R��o��
- *------------------------------------------
- */
-int chat_kickchat(struct map_session_data *sd,char *kickusername)
-{
-	struct chat_data *cd;
-	int i,kickuser;
-
-	nullpo_retr(1, sd);
-
-	cd=(struct chat_data*)map_id2bl(sd->chatID);
-	if(cd==NULL || (struct block_list *)sd!=(*cd->owner))
-		return 1;
-
-	for(i = 0,kickuser=-1;i < cd->users;i++){
-		if(strcmp(cd->usersd[i]->status.name,kickusername)==0){
-			kickuser=i;
-			break;
-		}
-	}
-	if(kickuser<0) // ����Ȑl�͋��Ȃ�
-		return -1;
-
-	chat_leavechat(cd->usersd[kickuser]);
-
-	return 0;
-}
-
-/*==========================================
- * npc�`���b�g���[���쐬
- *------------------------------------------
- */
-int chat_createnpcchat(struct npc_data *nd,int limit,int pub,int trigger,char* title,int titlelen,const char *ev)
-{
-	struct chat_data *cd;
-
-	nullpo_retr(1, nd);
-
-	cd = aCalloc(1,sizeof(struct chat_data));
-
-	cd->limit = cd->trigger = limit;
-	if(trigger>0)
-		cd->trigger = trigger;
-	cd->pub = pub;
-	cd->users = 0;
-	memcpy(cd->pass,"",8);
-	if(titlelen>=sizeof(cd->title)-1) titlelen=sizeof(cd->title)-1;
-	memcpy(cd->title,title,titlelen);
-	cd->title[titlelen]=0;
-
-	cd->bl.m = nd->bl.m;
-	cd->bl.x = nd->bl.x;
-	cd->bl.y = nd->bl.y;
-	cd->bl.type = BL_CHAT;
-	cd->owner_ = (struct block_list *)nd;
-	cd->owner = &cd->owner_;
-	memcpy(cd->npc_event,ev,sizeof(cd->npc_event));
-
-	cd->bl.id = map_addobject(&cd->bl);	
-	if(cd->bl.id==0){
-		free(cd);
-		return 0;
-	}
-	nd->chat_id=cd->bl.id;
-
-	clif_dispchat(cd,0);
-
-	return 0;
-}
-/*==========================================
- * npc�`���b�g���[���폜
- *------------------------------------------
- */
-int chat_deletenpcchat(struct npc_data *nd)
-{
-	struct chat_data *cd;
-
-	nullpo_retr(0, nd);
-	nullpo_retr(0, cd=(struct chat_data*)map_id2bl(nd->chat_id));
-	
-	chat_npckickall(cd);
-	clif_clearchat(cd,0);
-	map_delobject(cd->bl.id);	// free�܂ł��Ă����
-	nd->chat_id=0;
-	
-	return 0;
-}
-
-/*==========================================
- * �K��l���ȏ�ŃC�x���g����`����Ă�Ȃ���s
- *------------------------------------------
- */
-int chat_triggerevent(struct chat_data *cd)
-{
-	nullpo_retr(0, cd);
-
-	if(cd->users>=cd->trigger && cd->npc_event[0])
-		npc_event_do(cd->npc_event);
-	return 0;
-}
-
-/*==========================================
- * �C�x���g�̗L����
- *------------------------------------------
- */
-int chat_enableevent(struct chat_data *cd)
-{
-	nullpo_retr(0, cd);
-
-	cd->trigger&=0x7f;
-	chat_triggerevent(cd);
-	return 0;
-}
-/*==========================================
- * �C�x���g�̖�����
- *------------------------------------------
- */
-int chat_disableevent(struct chat_data *cd)
-{
-	nullpo_retr(0, cd);
-
-	cd->trigger|=0x80;
-	return 0;
-}
-/*==========================================
- * �`���b�g���[������S���R��o��
- *------------------------------------------
- */
-int chat_npckickall(struct chat_data *cd)
-{
-	nullpo_retr(0, cd);
-
-	while(cd->users>0){
-		chat_leavechat(cd->usersd[cd->users-1]);
-	}
-	return 0;
-}
-
-/*==========================================
- * �I��
- *------------------------------------------
- */
-int do_final_chat(void)
-{
-	return 0;
-}
diff --git a/misc/src/map/chat.h b/misc/src/map/chat.h
deleted file mode 100644
index 2761602..0000000
--- a/misc/src/map/chat.h
+++ /dev/null
@@ -1,22 +0,0 @@
-// $Id: chat.h,v 1.3 2004/09/25 05:32:18 MouseJstr Exp $
-#ifndef _CHAT_H_
-#define _CHAT_H_
-
-#include "map.h"
-
-int chat_createchat(struct map_session_data *,int,int,char*,char*,int);
-int chat_joinchat(struct map_session_data *,int,char*);
-int chat_leavechat(struct map_session_data* );
-int chat_changechatowner(struct map_session_data *,char *);
-int chat_changechatstatus(struct map_session_data *,int,int,char*,char*,int);
-int chat_kickchat(struct map_session_data *,char *);
-
-int chat_createnpcchat(struct npc_data *nd,int limit,int pub,int trigger,char* title,int titlelen,const char *ev);
-int chat_deletenpcchat(struct npc_data *nd);
-int chat_enableevent(struct chat_data *cd);
-int chat_disableevent(struct chat_data *cd);
-int chat_npckickall(struct chat_data *cd);
-
-int do_final_chat(void);
-
-#endif
diff --git a/misc/src/map/chrif.c b/misc/src/map/chrif.c
deleted file mode 100644
index dc401b6..0000000
--- a/misc/src/map/chrif.c
+++ /dev/null
@@ -1,1016 +0,0 @@
-// $Id: chrif.c,v 1.6 2004/09/25 11:39:17 MouseJstr Exp $
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#ifdef LCCWIN32
-#include <winsock.h>
-#else
-#include <unistd.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#endif
-#include <sys/types.h>
-#include <time.h>
-
-#include "socket.h"
-#include "timer.h"
-#include "map.h"
-#include "battle.h"
-#include "chrif.h"
-#include "clif.h"
-#include "intif.h"
-#include "npc.h"
-#include "pc.h"
-#include "nullpo.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-static const int packet_len_table[0x20] = {
-	60, 3,-1,27,22,-1, 6,-1,	// 2af8-2aff
-	 6,-1,18, 7,-1,49,44, 0,	// 2b00-2b07
-	 6,30,-1,10,86, 7,44,34,	// 2b08-2b0f
-	-1,-1,10, 6,11,-1, 0, 0,	// 2b10-2b17
-};
-
-int char_fd;
-int srvinfo;
-static char char_ip_str[16];
-static int char_ip;
-static int char_port = 6121;
-static char userid[24], passwd[24];
-static int chrif_state;
-
-// �ݒ�t�@�C���ǂݍ��݊֌W
-/*==========================================
- *
- *------------------------------------------
- */
-void chrif_setuserid(char *id) 
-{
-	strncpy(userid, id, 24);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void chrif_setpasswd(char *pwd) 
-{
-	strncpy(passwd, pwd, 24);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void chrif_setip(char *ip) 
-{
-	strncpy(char_ip_str, ip, 16);
-	char_ip = inet_addr(char_ip_str);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void chrif_setport(int port) 
-{
-	char_port = port;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int chrif_isconnect(void) 
-{
-	return chrif_state == 2;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int chrif_save(struct map_session_data *sd) 
-{
-	nullpo_retr(-1, sd);
-
-	if (char_fd < 0)
-		return -1;
-
-	pc_makesavestatus(sd);
-
-	WFIFOW(char_fd,0) = 0x2b01;
-	WFIFOW(char_fd,2) = sizeof(sd->status) + 12;
-	WFIFOL(char_fd,4) = sd->bl.id;
-	WFIFOL(char_fd,8) = sd->char_id;
-	memcpy(WFIFOP(char_fd,12), &sd->status, sizeof(sd->status));
-	WFIFOSET(char_fd, WFIFOW(char_fd,2));
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int chrif_connect(int fd) 
-{
-	WFIFOW(fd,0) = 0x2af8;
-	memcpy(WFIFOP(fd,2), userid, 24);
-	memcpy(WFIFOP(fd,26), passwd, 24);
-	WFIFOL(fd,50) = 0;
-	WFIFOL(fd,54) = clif_getip();
-	WFIFOW(fd,58) = clif_getport();	// [Valaris] thanks to fov
-	WFIFOSET(fd,60);
-
-	return 0;
-}
-
-/*==========================================
- * �}�b�v���M
- *------------------------------------------
- */
-int chrif_sendmap(int fd) 
-{
-	int i;
-
-	WFIFOW(fd,0) = 0x2afa;
-	for(i = 0; i < map_num; i++)
-                if (map[i].alias[0] != '\0') // [MouseJstr] map aliasing
-		    memcpy(WFIFOP(fd,4+i*16), map[i].alias, 16);
-		else
-		    memcpy(WFIFOP(fd,4+i*16), map[i].name, 16);
-	WFIFOW(fd,2) = 4 + i * 16;
-	WFIFOSET(fd,WFIFOW(fd,2));
-
-	return 0;
-}
-
-/*==========================================
- * �}�b�v��M
- *------------------------------------------
- */
-int chrif_recvmap(int fd)
-{
-	int i, j, ip, port;
-	unsigned char *p = (unsigned char *)&ip;
-
-	if (chrif_state < 2)	// �܂�������
-		return -1;
-
-	ip = RFIFOL(fd,4);
-	port = RFIFOW(fd,8);
-	for(i = 10, j = 0; i < RFIFOW(fd,2); i += 16, j++) {
-		map_setipport(RFIFOP(fd,i), ip, port);
-//		if (battle_config.etc_log)
-//			printf("recv map %d %s\n", j, RFIFOP(fd,i));
-	}
-	if (battle_config.etc_log)
-		printf("recv map on %d.%d.%d.%d:%d (%d maps)\n", p[0], p[1], p[2], p[3], port, j);
-
-	return 0;
-}
-
-/*==========================================
- * �}�b�v�I�Ԉړ��̂��߂̃f�[�^�����v��
- *------------------------------------------
- */
-int chrif_changemapserver(struct map_session_data *sd, char *name, int x, int y, int ip, short port) 
-{
-	int i, s_ip;
-
-	nullpo_retr(-1, sd);
-
-	s_ip = 0;
-	for(i = 0; i < fd_max; i++)
-		if (session[i] && session[i]->session_data == sd) {
-			s_ip = session[i]->client_addr.sin_addr.s_addr;
-			break;
-		}
-
-	WFIFOW(char_fd, 0) = 0x2b05;
-	WFIFOL(char_fd, 2) = sd->bl.id;
-	WFIFOL(char_fd, 6) = sd->login_id1;
-	WFIFOL(char_fd,10) = sd->login_id2;
-	WFIFOL(char_fd,14) = sd->status.char_id;
-	memcpy(WFIFOP(char_fd,18), name, 16);
-	WFIFOW(char_fd,34) = x;
-	WFIFOW(char_fd,36) = y;
-	WFIFOL(char_fd,38) = ip;
-	WFIFOL(char_fd,42) = port;
-	WFIFOB(char_fd,44) = sd->status.sex;
-	WFIFOL(char_fd,45) = s_ip;
-	WFIFOSET(char_fd,49);
-
-	return 0;
-}
-
-/*==========================================
- * �}�b�v�I�Ԉړ�ack
- *------------------------------------------
- */
-int chrif_changemapserverack(int fd) 
-{
-	struct map_session_data *sd = map_id2sd(RFIFOL(fd,2));
-
-	if (sd == NULL || sd->status.char_id != RFIFOL(fd,14))
-		return -1;
-
-	if (RFIFOL(fd,6) == 1) {
-		if (battle_config.error_log)
-			printf("map server change failed.\n");
-		pc_authfail(sd->fd);
-		return 0;
-	}
-	clif_changemapserver(sd, RFIFOP(fd,18), RFIFOW(fd,34), RFIFOW(fd,36), RFIFOL(fd,38), RFIFOW(fd,42));
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int chrif_connectack(int fd) 
-{
-	if (RFIFOB(fd,2)) {
-		printf("Connected to char-server failed %d.\n", RFIFOB(fd,2));
-		exit(1);
-	}
-	printf("Connected to char-server (connection #%d).\n", fd);
-	chrif_state = 1;
-
-	chrif_sendmap(fd);
-
-	printf("chrif: OnCharIfInit event done. (%d events)\n", npc_event_doall("OnCharIfInit"));
-	printf("chrif: OnInterIfInit event done. (%d events)\n", npc_event_doall("OnInterIfInit"));
-
-	// <Agit> Run Event [AgitInit]
-//	printf("NPC_Event:[OnAgitInit] do (%d) events (Agit Initialize).\n", npc_event_doall("OnAgitInit"));
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int chrif_sendmapack(int fd) 
-{
-	if (RFIFOB(fd,2)) {
-		printf("chrif : send map list to char server failed %d\n", RFIFOB(fd,2));
-		exit(1);
-	}
-
-	memcpy(wisp_server_name, RFIFOP(fd,3), 24);
-
-	chrif_state = 2;
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int chrif_authreq(struct map_session_data *sd) 
-{
-	int i;
-
-	nullpo_retr(-1, sd);
-
-	if (!sd || !char_fd || !sd->bl.id || !sd->login_id1)
-		return -1;
-
-	for(i = 0; i < fd_max; i++)
-		if (session[i] && session[i]->session_data == sd) {
-			WFIFOW(char_fd, 0) = 0x2afc;
-			WFIFOL(char_fd, 2) = sd->bl.id;
-			WFIFOL(char_fd, 6) = sd->char_id;
-			WFIFOL(char_fd,10) = sd->login_id1;
-			WFIFOL(char_fd,14) = sd->login_id2;
-			WFIFOL(char_fd,18) = session[i]->client_addr.sin_addr.s_addr;
-			WFIFOSET(char_fd,22);
-			break;
-		}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int chrif_charselectreq(struct map_session_data *sd) 
-{
-	int i, s_ip;
-
-	nullpo_retr(-1, sd);
-
-	if(!sd || !char_fd || !sd->bl.id || !sd->login_id1)
-		return -1;
-
-	s_ip = 0;
-	for(i = 0; i < fd_max; i++)
-		if (session[i] && session[i]->session_data == sd) {
-			s_ip = session[i]->client_addr.sin_addr.s_addr;
-			break;
-		}
-
-	WFIFOW(char_fd, 0) = 0x2b02;
-	WFIFOL(char_fd, 2) = sd->bl.id;
-	WFIFOL(char_fd, 6) = sd->login_id1;
-	WFIFOL(char_fd,10) = sd->login_id2;
-	WFIFOL(char_fd,14) = s_ip;
-	WFIFOSET(char_fd,18);
-
-	return 0;
-}
-
-/*==========================================
- * �L�������₢���킹
- *------------------------------------------
- */
-int chrif_searchcharid(int char_id) 
-{
-	if (!char_id)
-		return -1;
-
-	WFIFOW(char_fd,0) = 0x2b08;
-	WFIFOL(char_fd,2) = char_id;
-	WFIFOSET(char_fd,6);
-
-	return 0;
-}
-
-/*==========================================
- * GM�ɕω��v��
- *------------------------------------------
- */
-int chrif_changegm(int id, const char *pass, int len) 
-{
-	if (battle_config.etc_log)
-		printf("chrif_changegm: account: %d, password: '%s'.\n", id, pass);
-
-	WFIFOW(char_fd,0) = 0x2b0a;
-	WFIFOW(char_fd,2) = len + 8;
-	WFIFOL(char_fd,4) = id;
-	memcpy(WFIFOP(char_fd,8), pass, len);
-	WFIFOSET(char_fd, len + 8);
-
-	return 0;
-}
-
-/*==========================================
- * Change Email
- *------------------------------------------
- */
-int chrif_changeemail(int id, const char *actual_email, const char *new_email) 
-{
-	if (battle_config.etc_log)
-		printf("chrif_changeemail: account: %d, actual_email: '%s', new_email: '%s'.\n", id, actual_email, new_email);
-
-	WFIFOW(char_fd,0) = 0x2b0c;
-	WFIFOL(char_fd,2) = id;
-	memcpy(WFIFOP(char_fd,6), actual_email, 40);
-	memcpy(WFIFOP(char_fd,46), new_email, 40);
-	WFIFOSET(char_fd,86);
-
-	return 0;
-}
-
-/*==========================================
- * Send message to char-server with a character name to do some operations (by Yor)
- * Used to ask Char-server about a character name to have the account number to modify account file in login-server.
- * type of operation:
- *   1: block
- *   2: ban
- *   3: unblock
- *   4: unban
- *   5: changesex
- *------------------------------------------
- */
-int chrif_char_ask_name(int id, char * character_name, short operation_type, int year, int month, int day, int hour, int minute, int second) 
-{
-	WFIFOW(char_fd, 0) = 0x2b0e;
-	WFIFOL(char_fd, 2) = id; // account_id of who ask (for answer) -1 if nobody
-	memcpy(WFIFOP(char_fd,6), character_name, 24);
-	WFIFOW(char_fd, 30) = operation_type; // type of operation
-	if (operation_type == 2) {
-		WFIFOW(char_fd, 32) = year;
-		WFIFOW(char_fd, 34) = month;
-		WFIFOW(char_fd, 36) = day;
-		WFIFOW(char_fd, 38) = hour;
-		WFIFOW(char_fd, 40) = minute;
-		WFIFOW(char_fd, 42) = second;
-	}
-	printf("chrif : sended 0x2b0e\n");
-	WFIFOSET(char_fd,44);
-
-	return 0;
-}
-
-/*==========================================
- * Answer after a request about a character name to do some operations (by Yor)
- * Used to answer of chrif_char_ask_name.
- * type of operation:
- *   1: block
- *   2: ban
- *   3: unblock
- *   4: unban
- *   5: changesex
- * type of answer:
- *   0: login-server resquest done
- *   1: player not found
- *   2: gm level too low
- *   3: login-server offline
- *------------------------------------------
- */
-int chrif_char_ask_name_answer(int fd) 
-{
-	int acc;
-	struct map_session_data *sd;
-	char output[256];
-	char player_name[24];
-
-	acc = RFIFOL(fd,2); // account_id of who has asked (-1 if nobody)
-	memcpy(player_name, RFIFOP(fd,6), sizeof(player_name));
-	player_name[sizeof(player_name)-1] = '\0';
-
-	sd = map_id2sd(acc);
-	if (acc >= 0 && sd != NULL) {
-		if (RFIFOW(fd, 32) == 1) // player not found
-			sprintf(output, "The player '%s' doesn't exist.", player_name);
-		else {
-			switch(RFIFOW(fd, 30)) {
-			case 1: // block
-				switch(RFIFOW(fd, 32)) {
-				case 0: // login-server resquest done
-					sprintf(output, "Login-server has been asked to block the player '%s'.", player_name);
-					break;
-				//case 1: // player not found
-				case 2: // gm level too low
-					sprintf(output, "Your GM level don't authorise you to block the player '%s'.", player_name);
-					break;
-				case 3: // login-server offline
-					sprintf(output, "Login-server is offline. Impossible to block the the player '%s'.", player_name);
-					break;
-				}
-				break;
-			case 2: // ban
-				switch(RFIFOW(fd, 32)) {
-				case 0: // login-server resquest done
-					sprintf(output, "Login-server has been asked to ban the player '%s'.", player_name);
-					break;
-				//case 1: // player not found
-				case 2: // gm level too low
-					sprintf(output, "Your GM level don't authorise you to ban the player '%s'.", player_name);
-					break;
-				case 3: // login-server offline
-					sprintf(output, "Login-server is offline. Impossible to ban the the player '%s'.", player_name);
-					break;
-				}
-				break;
-			case 3: // unblock
-				switch(RFIFOW(fd, 32)) {
-				case 0: // login-server resquest done
-					sprintf(output, "Login-server has been asked to unblock the player '%s'.", player_name);
-					break;
-				//case 1: // player not found
-				case 2: // gm level too low
-					sprintf(output, "Your GM level don't authorise you to unblock the player '%s'.", player_name);
-					break;
-				case 3: // login-server offline
-					sprintf(output, "Login-server is offline. Impossible to unblock the the player '%s'.", player_name);
-					break;
-				}
-				break;
-			case 4: // unban
-				switch(RFIFOW(fd, 32)) {
-				case 0: // login-server resquest done
-					sprintf(output, "Login-server has been asked to unban the player '%s'.", player_name);
-					break;
-				//case 1: // player not found
-				case 2: // gm level too low
-					sprintf(output, "Your GM level don't authorise you to unban the player '%s'.", player_name);
-					break;
-				case 3: // login-server offline
-					sprintf(output, "Login-server is offline. Impossible to unban the the player '%s'.", player_name);
-					break;
-				}
-				break;
-			case 5: // changesex
-				switch(RFIFOW(fd, 32)) {
-				case 0: // login-server resquest done
-					sprintf(output, "Login-server has been asked to change the sex of the player '%s'.", player_name);
-					break;
-				//case 1: // player not found
-				case 2: // gm level too low
-					sprintf(output, "Your GM level don't authorise you to change the sex of the player '%s'.", player_name);
-					break;
-				case 3: // login-server offline
-					sprintf(output, "Login-server is offline. Impossible to change the sex of the the player '%s'.", player_name);
-					break;
-				}
-				break;
-			}
-		}
-		if (output[0] != '\0') {
-			output[sizeof(output)-1] = '\0';
-			clif_displaymessage(sd->fd, output);
-		}
-	} else
-		printf("chrif_char_ask_name_answer failed - player not online.\n");
-
-	return 0;
-}
-
-/*==========================================
- * End of GM change (@GM) (modified by Yor)
- *------------------------------------------
- */
-int chrif_changedgm(int fd) 
-{
-	int acc, level;
-	struct map_session_data *sd = NULL;
-
-	acc = RFIFOL(fd,2);
-	level = RFIFOL(fd,6);
-
-	sd = map_id2sd(acc);
-
-	if (battle_config.etc_log)
-		printf("chrif_changedgm: account: %d, GM level 0 -> %d.\n", acc, level);
-	if (sd != NULL) {
-		if (level > 0)
-			clif_displaymessage(sd->fd, "GM modification success.");
-		else
-			clif_displaymessage(sd->fd, "Failure of GM modification.");
-	}
-
-	return 0;
-}
-
-/*==========================================
- * ���ʕω��I�� (modified by Yor)
- *------------------------------------------
- */
-int chrif_changedsex(int fd) 
-{
-	int acc, sex, i;
-	struct map_session_data *sd;
-	struct pc_base_job s_class;
-
-	acc = RFIFOL(fd,2);
-	sex = RFIFOL(fd,6);
-	if (battle_config.etc_log)
-		printf("chrif_changedsex %d.\n", acc);
-	sd = map_id2sd(acc);
-	if (acc > 0) {
-		if (sd != NULL && sd->status.sex != sex) {
-			s_class = pc_calc_base_job(sd->status.class);
-			if (sd->status.sex == 0) {
-				sd->status.sex = 1;
-				sd->sex = 1;
-			} else if (sd->status.sex == 1) {
-				sd->status.sex = 0;
-				sd->sex = 0;
-			}
-			// to avoid any problem with equipment and invalid sex, equipment is unequiped.
-			for (i = 0; i < MAX_INVENTORY; i++) {
-				if (sd->status.inventory[i].nameid && sd->status.inventory[i].equip)
-					pc_unequipitem((struct map_session_data*)sd, i, 0);
-			}
-			// reset skill of some job
-			if (s_class.job == 19 || s_class.job == 4020 || s_class.job == 4042 ||
-			    s_class.job == 20 || s_class.job == 4021 || s_class.job == 4043) {
-				// remove specifical skills of classes 19, 4020 and 4042
-				for(i = 315; i <= 322; i++) {
-					if (sd->status.skill[i].id > 0 && !sd->status.skill[i].flag) {
-						sd->status.skill_point += sd->status.skill[i].lv;
-						sd->status.skill[i].id = 0;
-						sd->status.skill[i].lv = 0;
-					}
-				}
-				// remove specifical skills of classes 20, 4021 and 4043
-				for(i = 323; i <= 330; i++) {
-					if (sd->status.skill[i].id > 0 && !sd->status.skill[i].flag) {
-						sd->status.skill_point += sd->status.skill[i].lv;
-						sd->status.skill[i].id = 0;
-						sd->status.skill[i].lv = 0;
-					}
-				}
-				clif_updatestatus(sd, SP_SKILLPOINT);
-				// change job if necessary
-				if (s_class.job == 20 || s_class.job == 4021 || s_class.job == 4043)
-					sd->status.class -= 1;
-				else if (s_class.job == 19 || s_class.job == 4020 || s_class.job == 4042)
-					sd->status.class += 1;
-			}
-			// save character
-			chrif_save(sd);
-			sd->login_id1++; // change identify, because if player come back in char within the 5 seconds, he can change its characters
-			                 // do same modify in login-server for the account, but no in char-server (it ask again login_id1 to login, and don't remember it)
-			clif_displaymessage(sd->fd, "Your sex has been changed (need disconexion by the server)...");
-			clif_setwaitclose(sd->fd); // forced to disconnect for the change
-		}
-	} else {
-		if (sd != NULL) {
-			printf("chrif_changedsex failed.\n");
-		}
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �A�J�E���g�ϐ��ۑ��v��
- *------------------------------------------
- */
-int chrif_saveaccountreg2(struct map_session_data *sd) 
-{
-	int p, j;
-	nullpo_retr(-1, sd);
-
-	p = 8;
-	for(j = 0; j < sd->status.account_reg2_num; j++) {
-		struct global_reg *reg = &sd->status.account_reg2[j];
-		if (reg->str[0] && reg->value != 0) {
-			memcpy(WFIFOP(char_fd,p), reg->str, 32);
-			WFIFOL(char_fd,p+32) = reg->value;
-			p += 36;
-		}
-	}
-	WFIFOW(char_fd,0) = 0x2b10;
-	WFIFOW(char_fd,2) = p;
-	WFIFOL(char_fd,4) = sd->bl.id;
-	WFIFOSET(char_fd,p);
-
-	return 0;
-}
-
-/*==========================================
- * �A�J�E���g�ϐ��ʒm
- *------------------------------------------
- */
-int chrif_accountreg2(int fd) 
-{
-	int j, p;
-	struct map_session_data *sd;
-
-	if ((sd = map_id2sd(RFIFOL(fd,4))) == NULL)
-		return 1;
-
-	for(p = 8, j = 0; p < RFIFOW(fd,2) && j < ACCOUNT_REG2_NUM; p += 36, j++) {
-		memcpy(sd->status.account_reg2[j].str, RFIFOP(fd,p), 32);
-		sd->status.account_reg2[j].value = RFIFOL(fd, p + 32);
-	}
-	sd->status.account_reg2_num = j;
-//	printf("chrif: accountreg2\n");
-
-	return 0;
-}
-
-/*==========================================
- * ������񓯊��v��
- *------------------------------------------
- */
-int chrif_divorce(int char_id, int partner_id) 
-{
-	struct map_session_data *sd = NULL;
-
-	if (!char_id || !partner_id)
-		return 0;
-
-	nullpo_retr(0, sd = map_nick2sd(map_charid2nick(partner_id)));
-	if (sd->status.partner_id == char_id) {
-		int i;
-		//����(�����͊��ɃL�����������Ă��锤�Ȃ̂�)
-		sd->status.partner_id = 0;
-
-		//�����̌����w�ւ𔍒D
-		for(i = 0; i < MAX_INVENTORY; i++)
-			if (sd->status.inventory[i].nameid == WEDDING_RING_M || sd->status.inventory[i].nameid == WEDDING_RING_F)
-				pc_delitem(sd, i, 1, 0);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * Disconnection of a player (account has been deleted in login-server) by [Yor]
- *------------------------------------------
- */
-int chrif_accountdeletion(int fd) 
-{
-	int acc;
-	struct map_session_data *sd;
-
-	acc = RFIFOL(fd,2);
-	if (battle_config.etc_log)
-		printf("chrif_accountdeletion %d.\n", acc);
-	sd = map_id2sd(acc);
-	if (acc > 0) {
-		if (sd != NULL) {
-			sd->login_id1++; // change identify, because if player come back in char within the 5 seconds, he can change its characters
-			clif_displaymessage(sd->fd, "Your account has been deleted (disconnexion)...");
-			clif_setwaitclose(sd->fd); // forced to disconnect for the change
-		}
-	} else {
-		if (sd != NULL)
-			printf("chrif_accountdeletion failed - player not online.\n");
-	}
-
-	return 0;
-}
-
-/*==========================================
- * Disconnection of a player (account has been banned of has a status, from login-server) by [Yor]
- *------------------------------------------
- */
-int chrif_accountban(int fd) 
-{
-	int acc;
-	struct map_session_data *sd;
-
-	acc = RFIFOL(fd,2);
-	if (battle_config.etc_log)
-		printf("chrif_accountban %d.\n", acc);
-	sd = map_id2sd(acc);
-	if (acc > 0) {
-		if (sd != NULL) {
-			sd->login_id1++; // change identify, because if player come back in char within the 5 seconds, he can change its characters
-			if (RFIFOB(fd,6) == 0) { // 0: change of statut, 1: ban
-				switch (RFIFOL(fd,7)) { // status or final date of a banishment
-				case 1:   // 0 = Unregistered ID
-					clif_displaymessage(sd->fd, "Your account has 'Unregistered'.");
-					break;
-				case 2:   // 1 = Incorrect Password
-					clif_displaymessage(sd->fd, "Your account has an 'Incorrect Password'...");
-					break;
-				case 3:   // 2 = This ID is expired
-					clif_displaymessage(sd->fd, "Your account has expired.");
-					break;
-				case 4:   // 3 = Rejected from Server
-					clif_displaymessage(sd->fd, "Your account has been rejected from server.");
-					break;
-				case 5:   // 4 = You have been blocked by the GM Team
-					clif_displaymessage(sd->fd, "Your account has been blocked by the GM Team.");
-					break;
-				case 6:   // 5 = Your Game's EXE file is not the latest version
-					clif_displaymessage(sd->fd, "Your Game's EXE file is not the latest version.");
-					break;
-				case 7:   // 6 = Your are Prohibited to log in until %s
-					clif_displaymessage(sd->fd, "Your account has been prohibited to log in.");
-					break;
-				case 8:   // 7 = Server is jammed due to over populated
-					clif_displaymessage(sd->fd, "Server is jammed due to over populated.");
-					break;
-				case 9:   // 8 = No MSG (actually, all states after 9 except 99 are No MSG, use only this)
-					clif_displaymessage(sd->fd, "Your account has not more authorised.");
-					break;
-				case 100: // 99 = This ID has been totally erased
-					clif_displaymessage(sd->fd, "Your account has been totally erased.");
-					break;
-				default:
-					clif_displaymessage(sd->fd, "Your account has not more authorised.");
-					break;
-				}
-			} else if (RFIFOB(fd,6) == 1) { // 0: change of statut, 1: ban
-				time_t timestamp;
-				char tmpstr[2048];
-				timestamp = (time_t)RFIFOL(fd,7); // status or final date of a banishment
-				strcpy(tmpstr, "Your account has been banished until ");
-				strftime(tmpstr + strlen(tmpstr), 24, "%d-%m-%Y %H:%M:%S", localtime(&timestamp));
-				clif_displaymessage(sd->fd, tmpstr);
-			}
-			clif_setwaitclose(sd->fd); // forced to disconnect for the change
-		}
-	} else {
-		if (sd != NULL)
-			printf("chrif_accountban failed - player not online.\n");
-	}
-
-	return 0;
-}
-
-/*==========================================
- * Receiving GM accounts and their levels from char-server by [Yor]
- *------------------------------------------
- */
-int chrif_recvgmaccounts(int fd) 
-{
-	printf("From login-server: receiving of %d GM accounts information.\n", pc_read_gm_account(fd));
-
-	return 0;
-}
-
-/*==========================================
- * Request to reload GM accounts and their levels: send to char-server by [Yor]
- *------------------------------------------
- */
-int chrif_reloadGMdb(void) 
-{
-
-	WFIFOW(char_fd,0) = 0x2af7;
-	WFIFOSET(char_fd, 2);
-
-	return 0;
-}
-
-/*==========================================
- * Send rates and motd to char server [Wizputer]
- *------------------------------------------
- */
- int chrif_ragsrvinfo(int base_rate, int job_rate, int drop_rate) 
-{
-	char buf[256];
-	FILE *fp;
-	int i;
-
-	WFIFOW(char_fd,0) = 0x2b16;
-	WFIFOW(char_fd,2) = base_rate;
-	WFIFOW(char_fd,4) = job_rate;
-	WFIFOW(char_fd,6) = drop_rate;
-
-	if ((fp = fopen(motd_txt, "r")) != NULL) {
-		if (fgets(buf, 250, fp) != NULL) {
-			for(i = 0; buf[i]; i++) {
-				if (buf[i] == '\r' || buf[i] == '\n') {
-					buf[i] = 0;
-					break;
-				}
-			}
-			WFIFOW(char_fd,8) = sizeof(buf) + 10;
-			memcpy(WFIFOP(char_fd,10), buf, sizeof(buf));
-		}
-		fclose(fp);
-	} else {
-		WFIFOW(char_fd,8) = sizeof(buf) + 10;
-		memcpy(WFIFOP(char_fd,10), buf, sizeof(buf));
-	}
-	WFIFOSET(char_fd,WFIFOW(char_fd,8));
-
-	return 0;
-}
-
-/*=========================================
- * Tell char-server charcter disconnected [Wizputer]
- *-----------------------------------------
- */
-
-int chrif_char_offline(struct map_session_data *sd) 
-{
-	if (char_fd < 0)
-		return -1;
-
-	WFIFOW(char_fd,0) = 0x2b17;
-	WFIFOL(char_fd,2) = sd->status.char_id;
-	WFIFOSET(char_fd,6);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int chrif_parse(int fd) 
-{
-	int packet_len, cmd;
-
-	// only char-server can have an access to here.
-	// so, if it isn't the char-server, we disconnect the session (fd != char_fd).
-	if (fd != char_fd || session[fd]->eof) {
-		if (fd == char_fd) {
-			printf("Map-server can't connect to char-server (connection #%d).\n", fd);
-			char_fd = -1;
-		}
-		close(fd);
-		delete_session(fd);
-		return 0;
-	}
-
-	while (RFIFOREST(fd) >= 2) {
-		cmd = RFIFOW(fd,0);
-		if (cmd < 0x2af8 || cmd >= 0x2af8 + (sizeof(packet_len_table) / sizeof(packet_len_table[0])) ||
-		    packet_len_table[cmd-0x2af8] == 0) {
-
-			int r = intif_parse(fd); // intif�ɓn��
-
-			if (r == 1) continue;	// intif�ŏ�������
-			if (r == 2) return 0;	// intif�ŏ����������A�f�[�^������Ȃ�
-
-			session[fd]->eof = 1;
-			return 0;
-		}
-		packet_len = packet_len_table[cmd-0x2af8];
-		if (packet_len == -1) {
-			if (RFIFOREST(fd) < 4)
-				return 0;
-			packet_len = RFIFOW(fd,2);
-		}
-		if (RFIFOREST(fd) < packet_len)
-			return 0;
-
-		switch(cmd) {
-		case 0x2af9: chrif_connectack(fd); break;
-		case 0x2afb: chrif_sendmapack(fd); break;
-		case 0x2afd: pc_authok(RFIFOL(fd,4), RFIFOL(fd,8), (time_t)RFIFOL(fd,12), (struct mmo_charstatus*)RFIFOP(fd,16)); break;
-		case 0x2afe: pc_authfail(RFIFOL(fd,2)); break;
-		case 0x2b00: map_setusers(RFIFOL(fd,2)); break;
-		case 0x2b03: clif_charselectok(RFIFOL(fd,2)); break;
-		case 0x2b04: chrif_recvmap(fd); break;
-		case 0x2b06: chrif_changemapserverack(fd); break;
-		case 0x2b09: map_addchariddb(RFIFOL(fd,2), RFIFOP(fd,6)); break;
-		case 0x2b0b: chrif_changedgm(fd); break;
-		case 0x2b0d: chrif_changedsex(fd); break;
-		case 0x2b0f: chrif_char_ask_name_answer(fd); break;
-		case 0x2b11: chrif_accountreg2(fd); break;
-		case 0x2b12: chrif_divorce(RFIFOL(fd,2), RFIFOL(fd,6)); break;
-		case 0x2b13: chrif_accountdeletion(fd); break;
-		case 0x2b14: chrif_accountban(fd); break;
-		case 0x2b15: chrif_recvgmaccounts(fd); break;
-
-		default:
-			if (battle_config.error_log)
-				printf("chrif_parse : unknown packet %d %d\n", fd, RFIFOW(fd,0));
-			session[fd]->eof = 1;
-			return 0;
-		}
-		RFIFOSKIP(fd, packet_len);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * timer�֐�
- * ������map�I�Ɍq�����Ă���N���C�A���g�l����char�I�֑���
- *------------------------------------------
- */
-int send_users_tochar(int tid, unsigned int tick, int id, int data) {
-	int users = 0, i;
-	struct map_session_data *sd;
-
-	if (char_fd <= 0 || session[char_fd] == NULL)
-		return 0;
-
-	WFIFOW(char_fd,0) = 0x2aff;
-	for (i = 0; i < fd_max; i++) {
-		if (session[i] && (sd = session[i]->session_data) && sd->state.auth &&
-		    !((battle_config.hide_GM_session || (sd->status.option & OPTION_HIDE)) && pc_isGM(sd))) {
-			WFIFOL(char_fd,6+4*users) = sd->status.char_id;
-			users++;
-		}
-	}
-	WFIFOW(char_fd,2) = 6 + 4 * users;
-	WFIFOW(char_fd,4) = users;
-	WFIFOSET(char_fd,6+4*users);
-
-	return 0;
-}
-
-/*==========================================
- * timer�֐�
- * char�I�Ƃ̐ڑ����m�F���A�����؂�Ă�����ēx�ڑ�����
- *------------------------------------------
- */
-int check_connect_char_server(int tid, unsigned int tick, int id, int data) {
-	if (char_fd <= 0 || session[char_fd] == NULL) {
-		printf("Attempt to connect to char-server...\n");
-		chrif_state = 0;
-		char_fd = make_connection(char_ip, char_port);
-		session[char_fd]->func_parse = chrif_parse;
-		realloc_fifo(char_fd, FIFOSIZE_SERVERLINK, FIFOSIZE_SERVERLINK);
-
-		chrif_connect(char_fd);
-#ifndef TXT_ONLY
-		srvinfo = 0;
-	} else {
-		if (srvinfo == 0) {
-			chrif_ragsrvinfo(battle_config.base_exp_rate, battle_config.job_exp_rate, battle_config.item_rate_common);
-			srvinfo = 1;
-		}
-#endif /* not TXT_ONLY */
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int do_init_chrif(void) {
-	add_timer_func_list(check_connect_char_server, "check_connect_char_server");
-	add_timer_func_list(send_users_tochar, "send_users_tochar");
-	add_timer_interval(gettick() + 1000, check_connect_char_server, 0, 0, 10 * 1000);
-	add_timer_interval(gettick() + 1000, send_users_tochar, 0, 0, 5 * 1000);
-
-	return 0;
-}
diff --git a/misc/src/map/chrif.h b/misc/src/map/chrif.h
deleted file mode 100644
index 19d725d..0000000
--- a/misc/src/map/chrif.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// $Id: chrif.h,v 1.3 2004/09/25 11:39:17 MouseJstr Exp $
-#ifndef _CHRIF_H_
-#define _CHRIF_H_
-
-void chrif_setuserid(char*);
-void chrif_setpasswd(char*);
-void chrif_setip(char*);
-void chrif_setport(int);
-
-int chrif_isconnect(void);
-
-int chrif_authreq(struct map_session_data *);
-int chrif_save(struct map_session_data*);
-int chrif_charselectreq(struct map_session_data *);
-
-int chrif_changemapserver(struct map_session_data *sd,char *name,int x,int y,int ip,short port);
-
-int chrif_searchcharid(int char_id);
-int chrif_changegm(int id,const char *pass,int len);
-int chrif_changeemail(int id, const char *actual_email, const char *new_email);
-int chrif_char_ask_name(int id, char * character_name, short operation_type, int year, int month, int day, int hour, int minute, int second);
-int chrif_saveaccountreg2(struct map_session_data *sd);
-int chrif_reloadGMdb(void);
-int chrif_ragsrvinfo(int base_rate,int job_rate, int drop_rate);
-int chrif_char_offline(struct map_session_data *sd);
-
-int do_init_chrif(void);
-
-#endif
diff --git a/misc/src/map/clif.c b/misc/src/map/clif.c
deleted file mode 100644
index 1f320b2..0000000
--- a/misc/src/map/clif.c
+++ /dev/null
@@ -1,9826 +0,0 @@
-// $Id: clif.c 164 2004-10-01 16:46:58Z $
-
-#define DUMP_UNKNOWN_PACKET	1
-
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <sys/types.h>
-#ifdef LCCWIN32
-#include <winsock.h>
-#else
-#include <unistd.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#endif
-#include <time.h>
-
-#include "socket.h"
-#include "timer.h"
-#include "malloc.h"
-#include "version.h"
-#include "nullpo.h"
-
-#include "map.h"
-#include "chrif.h"
-#include "clif.h"
-#include "pc.h"
-#include "npc.h"
-#include "itemdb.h"
-#include "chat.h"
-#include "trade.h"
-#include "storage.h"
-#include "script.h"
-#include "skill.h"
-#include "atcommand.h"
-#include "intif.h"
-#include "battle.h"
-#include "mob.h"
-#include "party.h"
-#include "guild.h"
-#include "vending.h"
-#include "pet.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-#define STATE_BLIND 0x10
-
-static const int packet_len_table[0x220] = {
-   10,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
-//#0x0040
-    0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0, 55, 17,  3, 37,  46, -1, 23, -1,  3,108,  3,  2,
-#if PACKETVER < 2
-    3, 28, 19, 11,  3, -1,  9,  5,  52, 51, 56, 58, 41,  2,  6,  6,
-#else	// 78-7b �T���ȍ~ lv99�G�t�F�N�g�p
-    3, 28, 19, 11,  3, -1,  9,  5,  54, 53, 58, 60, 41,  2,  6,  6,
-#endif
-//#0x0080
-    7,  3,  2,  2,  2,  5, 16, 12,  10,  7, 29, 23, -1, -1, -1,  0, // 0x8b unknown... size 2 or 23?
-    7, 22, 28,  2,  6, 30, -1, -1,   3, -1, -1,  5,  9, 17, 17,  6,
-   23,  6,  6, -1, -1, -1, -1,  8,   7,  6,  7,  4,  7,  0, -1,  6,
-    8,  8,  3,  3, -1,  6,  6, -1,   7,  6,  2,  5,  6, 44,  5,  3,
-//#0x00C0
-    7,  2,  6,  8,  6,  7, -1, -1,  -1, -1,  3,  3,  6,  6,  2, 27,
-    3,  4,  4,  2, -1, -1,  3, -1,   6, 14,  3, -1, 28, 29, -1, -1,
-   30, 30, 26,  2,  6, 26,  3,  3,   8, 19,  5,  2,  3,  2,  2,  2,
-    3,  2,  6,  8, 21,  8,  8,  2,   2, 26,  3, -1,  6, 27, 30, 10,
-
-//#0x0100
-    2,  6,  6, 30, 79, 31, 10, 10,  -1, -1,  4,  6,  6,  2, 11, -1,
-   10, 39,  4, 10, 31, 35, 10, 18,   2, 13, 15, 20, 68,  2,  3, 16,
-    6, 14, -1, -1, 21,  8,  8,  8,   8,  8,  2,  2,  3,  4,  2, -1,
-    6, 86,  6, -1, -1,  7, -1,  6,   3, 16,  4,  4,  4,  6, 24, 26,
-//#0x0140
-   22, 14,  6, 10, 23, 19,  6, 39,   8,  9,  6, 27, -1,  2,  6,  6,
-  110,  6, -1, -1, -1, -1, -1,  6,  -1, 54, 66, 54, 90, 42,  6, 42,
-   -1, -1, -1, -1, -1, 30, -1,  3,  14,  3, 30, 10, 43, 14,186,182,
-   14, 30, 10,  3, -1,  6,106, -1,   4,  5,  4, -1,  6,  7, -1, -1,
-//#0x0180
-    6,  3,106, 10, 10, 34,  0,  6,   8,  4,  4,  4, 29, -1, 10,  6,
-#if PACKETVER < 1
-   90, 86, 24,  6, 30,102,  8,  4,   8,  4, 14, 10, -1,  6,  2,  6,
-#else	// 196 comodo�ȍ~ ��ԕ\���A�C�R���p
-   90, 86, 24,  6, 30,102,  9,  4,   8,  4, 14, 10, -1,  6,  2,  6,
-#endif
-    3,  3, 35,  5, 11, 26, -1,  4,   4,  6, 10, 12,  6, -1,  4,  4,
-   11,  7, -1, 67, 12, 18,114,  6,   3,  6, 26, 26, 26, 26,  2,  3,
-//#0x01C0,   Set 0x1d5=-1
-    2, 14, 10, -1, 22, 22,  4,  2,  13, 97,  0,  9,  9, 30,  6, 28,
-    8, 14, 10, 35,  6, -1,  4, 11,  54, 53, 60,  2, -1, 47, 33,  6,
-   30,  8, 34, 14,  2,  6, 26,  2,  28, 81,  6, 10, 26,  2, -1, -1,
-   -1, -1, 20, 10, 32,  9, 34, 14,   2,  6, 48, 56, -1,  4,  5, 10,
-//#0x200
-   26, -1,  26, 10, 18, 26, 11, 34,  14, 36, 10, 19,  0, -1, 24,  0,
-    0,  0,   0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
-};
-
-// size list for each packet version after packet version 4.
-static int packet_size_table[6][0x220];
-
-// local define
-enum {
-	ALL_CLIENT,
-	ALL_SAMEMAP,
-	AREA,
-	AREA_WOS,
-	AREA_WOC,
-	AREA_WOSC,
-	AREA_CHAT_WOC,
-	CHAT,
-	CHAT_WOS,
-	PARTY,
-	PARTY_WOS,
-	PARTY_SAMEMAP,
-	PARTY_SAMEMAP_WOS,
-	PARTY_AREA,
-	PARTY_AREA_WOS,
-	GUILD,
-	GUILD_WOS,
-	GUILD_SAMEMAP,	// [Valaris]
-	GUILD_SAMEMAP_WOS,
-	GUILD_AREA,
-	GUILD_AREA_WOS,	// end additions [Valaris]
-	SELF
-};
-
-#define WBUFPOS(p,pos,x,y) { unsigned char *__p = (p); __p+=(pos); __p[0] = (x)>>2; __p[1] = ((x)<<6) | (((y)>>4)&0x3f); __p[2] = (y)<<4; }
-#define WBUFPOS2(p,pos,x0,y0,x1,y1) { unsigned char *__p = (p); __p+=(pos); __p[0] = (x0)>>2; __p[1] = ((x0)<<6) | (((y0)>>4)&0x3f); __p[2] = ((y0)<<4) | (((x1)>>6)&0x0f); __p[3]=((x1)<<2) | (((y1)>>8)&0x03); __p[4]=(y1); }
-
-#define WFIFOPOS(fd,pos,x,y) { WBUFPOS (WFIFOP(fd,pos),0,x,y); }
-#define WFIFOPOS2(fd,pos,x0,y0,x1,y1) { WBUFPOS2(WFIFOP(fd,pos),0,x0,y0,x1,y1); }
-
-static char map_ip_str[16];
-static in_addr_t map_ip;
-static int map_port = 5121;
-int map_fd;
-char talkie_mes[80];
-
-/*==========================================
- * map�I��ip�ݒ�
- *------------------------------------------
- */
-void clif_setip(char *ip) 
-{
-	memcpy(map_ip_str, ip, 16);
-	map_ip = inet_addr(map_ip_str);
-}
-
-/*==========================================
- * map�I��port�ݒ�
- *------------------------------------------
- */
-void clif_setport(int port) 
-{
-	map_port = port;
-}
-
-/*==========================================
- * map�I��ip�ǂݏo��
- *------------------------------------------
- */
-in_addr_t clif_getip(void) 
-{
-	return map_ip;
-}
-
-/*==========================================
- * map�I��port�ǂݏo��
- *------------------------------------------
- */
-int clif_getport(void) 
-{
-	return map_port;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_countusers(void) 
-{
-	int users = 0, i;
-	struct map_session_data *sd;
-
-	for(i = 0; i < fd_max; i++) {
-		if (session[i] && (sd = session[i]->session_data) && sd && sd->state.auth &&
-		    !(battle_config.hide_GM_session && pc_isGM(sd)))
-			users++;
-	}
-	return users;
-}
-
-/*==========================================
- * �S�Ă�client�ɑ΂���func()���s
- *------------------------------------------
- */
-int clif_foreachclient(int (*func)(struct map_session_data*, va_list),...) 
-{
-	int i;
-	va_list ap;
-	struct map_session_data *sd;
-
-	va_start(ap,func);
-	for(i = 0; i < fd_max; i++) {
-		if (session[i] && (sd = session[i]->session_data) && sd && sd->state.auth)
-			func(sd, ap);
-	}
-	va_end(ap);
-	return 0;
-}
-
-/*==========================================
- * clif_send��AREA*�w�莞�p
- *------------------------------------------
- */
-int clif_send_sub(struct block_list *bl, va_list ap) 
-{
-	unsigned char *buf;
-	int len;
-	struct block_list *src_bl;
-	int type;
-	struct map_session_data *sd;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, sd = (struct map_session_data *)bl);
-
-	buf = va_arg(ap,unsigned char*);
-	len = va_arg(ap,int);
-	nullpo_retr(0, src_bl = va_arg(ap,struct block_list*));
-	type = va_arg(ap,int);
-
-	switch(type) {
-	case AREA_WOS:
-		if (bl && bl == src_bl)
-			return 0;
-		break;
-	case AREA_WOC:
-		if ((sd && sd->chatID) || (bl && bl == src_bl))
-			return 0;
-		break;
-	case AREA_WOSC:
-		if ((sd) && sd->chatID && sd->chatID == ((struct map_session_data*)src_bl)->chatID)
-			return 0;
-		break;
-	}
-
-	if (sd) {
-		if (WFIFOP(sd->fd,0) == buf) {
-			printf("WARNING: Invalid use of clif_send function\n");
-			printf("         Packet x%4x use a WFIFO of a player instead of to use a buffer.\n", WBUFW(buf,0));
-			printf("         Please correct your code.\n");
-			// don't send to not move the pointer of the packet for next sessions in the loop
-		} else {
-			if (packet_size_table[sd->packet_ver-5][RBUFW(buf,0)]) { // packet must exist for the client version
-				memcpy(WFIFOP(sd->fd,0), buf, len);
-				WFIFOSET(sd->fd,len);
-			}
-		}
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_send(unsigned char *buf, int len, struct block_list *bl, int type) {
-	int i;
-	struct map_session_data *sd;
-	struct chat_data *cd;
-	struct party *p = NULL;
-	struct guild *g = NULL;
-	int x0 = 0, x1 = 0, y0 = 0, y1 = 0;
-
-	if (type != ALL_CLIENT) {
-		nullpo_retr(0, bl);
-	}
-
-	switch(type) {
-	case ALL_CLIENT: // �S�N���C�A���g�ɑ��M
-		for(i = 0; i < fd_max; i++) {
-			if (session[i] && (sd = session[i]->session_data) != NULL && sd->state.auth) {
-				if (packet_size_table[sd->packet_ver-5][RBUFW(buf,0)]) { // packet must exist for the client version
-					memcpy(WFIFOP(i,0), buf, len);
-					WFIFOSET(i,len);
-				}
-			}
-		}
-		break;
-	case ALL_SAMEMAP: // �����}�b�v�̑S�N���C�A���g�ɑ��M
-		for(i = 0; i < fd_max; i++) {
-			if (session[i] && (sd = session[i]->session_data) != NULL && sd->state.auth && sd->bl.m == bl->m) {
-				if (packet_size_table[sd->packet_ver-5][RBUFW(buf,0)]) { // packet must exist for the client version
-					memcpy(WFIFOP(i,0), buf, len);
-					WFIFOSET(i,len);
-				}
-			}
-		}
-		break;
-	case AREA:
-	case AREA_WOS:
-	case AREA_WOC:
-	case AREA_WOSC:
-		map_foreachinarea(clif_send_sub, bl->m, bl->x-AREA_SIZE, bl->y-AREA_SIZE, bl->x+AREA_SIZE, bl->y+AREA_SIZE, BL_PC, buf, len, bl, type);
-		break;
-	case AREA_CHAT_WOC:
-		map_foreachinarea(clif_send_sub, bl->m, bl->x-(AREA_SIZE-5), bl->y-(AREA_SIZE-5), bl->x+(AREA_SIZE-5), bl->y+(AREA_SIZE-5), BL_PC, buf, len, bl, AREA_WOC);
-		break;
-	case CHAT:
-	case CHAT_WOS:
-		cd = (struct chat_data*)bl;
-		if (bl->type == BL_PC) {
-			sd = (struct map_session_data*)bl;
-			cd = (struct chat_data*)map_id2bl(sd->chatID);
-		} else if (bl->type != BL_CHAT)
-			break;
-		if (cd == NULL)
-			break;
-		for(i = 0; i < cd->users; i++) {
-			if (type == CHAT_WOS && cd->usersd[i] == (struct map_session_data*)bl)
-				continue;
-			if (packet_size_table[cd->usersd[i]->packet_ver-5][RBUFW(buf,0)]) { // packet must exist for the client version
-				memcpy(WFIFOP(cd->usersd[i]->fd,0), buf, len);
-				WFIFOSET(cd->usersd[i]->fd,len);
-			}
-		}
-		break;
-
-	case PARTY_AREA:		// ������ʓ��̑S�p�[�e�B�[�����o�ɑ��M
-	case PARTY_AREA_WOS:	// �����ȊO�̓�����ʓ��̑S�p�[�e�B�[�����o�ɑ��M
-		x0 = bl->x - AREA_SIZE;
-		y0 = bl->y - AREA_SIZE;
-		x1 = bl->x + AREA_SIZE;
-		y1 = bl->y + AREA_SIZE;
-	case PARTY:				// �S�p�[�e�B�[�����o�ɑ��M
-	case PARTY_WOS:			// �����ȊO�̑S�p�[�e�B�[�����o�ɑ��M
-	case PARTY_SAMEMAP:		// �����}�b�v�̑S�p�[�e�B�[�����o�ɑ��M
-	case PARTY_SAMEMAP_WOS:	// �����ȊO�̓����}�b�v�̑S�p�[�e�B�[�����o�ɑ��M
-		if (bl->type == BL_PC) {
-			sd = (struct map_session_data *)bl;
-			if (sd->partyspy > 0) {
-				p = party_search(sd->partyspy);
-			} else {
-				if (sd->status.party_id > 0)
-					p = party_search(sd->status.party_id);
-			}
-		}
-		if (p) {
-			for(i=0;i<MAX_PARTY;i++){
-				if ((sd = p->member[i].sd) != NULL) {
-					if (sd->bl.id == bl->id && (type == PARTY_WOS ||
-					    type == PARTY_SAMEMAP_WOS || type == PARTY_AREA_WOS))
-						continue;
-					if (type != PARTY && type != PARTY_WOS && bl->m != sd->bl.m) // �}�b�v�`�F�b�N
-						continue;
-					if ((type == PARTY_AREA || type == PARTY_AREA_WOS) &&
-					    (sd->bl.x < x0 || sd->bl.y < y0 ||
-					     sd->bl.x > x1 || sd->bl.y > y1))
-						continue;
-					if (packet_size_table[sd->packet_ver-5][RBUFW(buf,0)]) { // packet must exist for the client version
-						memcpy(WFIFOP(sd->fd,0), buf, len);
-						WFIFOSET(sd->fd,len);
-					}
-//					if(battle_config.etc_log)
-//						printf("send party %d %d %d\n",p->party_id,i,flag)
-
-				}
-			}
-			for (i = 0; i < fd_max; i++){
-				if (session[i] && (sd = session[i]->session_data) != NULL && sd->state.auth) {
-					if (sd->partyspy == p->party_id) {
-						if (packet_size_table[sd->packet_ver-5][RBUFW(buf,0)]) { // packet must exist for the client version
-							memcpy(WFIFOP(sd->fd,0), buf, len);
-							WFIFOSET(sd->fd,len);
-						}
-					}
-				}
-			}
-		}
-		break;
-	case SELF:
-		sd = (struct map_session_data *)bl;
-		if (packet_size_table[sd->packet_ver-5][RBUFW(buf,0)]) { // packet must exist for the client version
-			memcpy(WFIFOP(sd->fd,0), buf, len);
-			WFIFOSET(sd->fd,len);
-		}
-		break;
-
-/* New definitions for guilds [Valaris]	*/
-
-	case GUILD_AREA:
-	case GUILD_AREA_WOS:
-		x0 = bl->x - AREA_SIZE;
-		y0 = bl->y - AREA_SIZE;
-		x1 = bl->x + AREA_SIZE;
-		y1 = bl->y + AREA_SIZE;
-	case GUILD:
-	case GUILD_WOS:
-		if (bl && bl->type == BL_PC) { // guildspy [Syrus22]
-			sd = (struct map_session_data *)bl;
-			if (sd->guildspy > 0) {
-				g = guild_search(sd->guildspy);
-			} else {
-				if (sd->status.guild_id > 0)
-					g = guild_search(sd->status.guild_id);
-			}
-		}
-		if (g) {
-			for(i = 0; i < g->max_member; i++) {
-				if ((sd = g->member[i].sd) != NULL) {
-					if (type == GUILD_WOS && sd->bl.id == bl->id)
-						continue;
-					if (packet_size_table[sd->packet_ver-5][RBUFW(buf,0)]) { // packet must exist for the client version
-						memcpy(WFIFOP(sd->fd,0), buf, len);
-						WFIFOSET(sd->fd,len);
-					}
-				}
-			}
-			for (i = 0; i < fd_max; i++){
-				if (session[i] && (sd = session[i]->session_data) != NULL && sd->state.auth) {
-					if (sd->guildspy == g->guild_id) {
-						if (packet_size_table[sd->packet_ver-5][RBUFW(buf,0)]) { // packet must exist for the client version
-							memcpy(WFIFOP(sd->fd,0), buf, len);
-							WFIFOSET(sd->fd,len);
-						}
-					}
-				}
-			}
-		}
-		break;
-	case GUILD_SAMEMAP:
-	case GUILD_SAMEMAP_WOS:
-		if (bl->type == BL_PC) {
-			sd = (struct map_session_data *)bl;
-			if (sd->status.guild_id > 0)
-				g = guild_search(sd->status.guild_id);
-		}
-		if (g) {
-			for(i = 0; i < g->max_member; i++) {
-				if ((sd = g->member[i].sd) != NULL) {
-					if (sd->bl.id == bl->id && (type == GUILD_WOS ||
-					    type == GUILD_SAMEMAP_WOS || type == GUILD_AREA_WOS))
-						continue;
-					if (type != GUILD && type != GUILD_WOS && bl->m != sd->bl.m) // �}�b�v�`�F�b�N
-						continue;
-					if ((type == GUILD_AREA || type == GUILD_AREA_WOS) &&
-					    (sd->bl.x < x0 || sd->bl.y < y0 ||
-					     sd->bl.x > x1 || sd->bl.y > y1))
-						continue;
-					if (packet_size_table[sd->packet_ver-5][RBUFW(buf,0)]) { // packet must exist for the client version
-						memcpy(WFIFOP(sd->fd,0), buf, len);
-						WFIFOSET(sd->fd,len);
-					}
-				}
-			}
-		}
-		break;
-/*				End [Valaris]			*/
-
-	default:
-		if (battle_config.error_log)
-			printf("clif_send �܂�����ĂȂ���[\n");
-		return -1;
-	}
-
-	return 0;
-}
-
-//
-// �p�P�b�g����đ��M
-//
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_authok(struct map_session_data *sd) {
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	if (!sd)
-		return 0;
-
-	if (!sd->fd)
-		return 0;
-
-	fd = sd->fd;
-
-	WFIFOW(fd, 0) = 0x73;
-	WFIFOL(fd, 2) = gettick();
-	WFIFOPOS(fd, 6, sd->bl.x, sd->bl.y);
-	WFIFOB(fd, 9) = 5;
-	WFIFOB(fd,10) = 5;
-	WFIFOSET(fd,packet_len_table[0x73]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_authfail_fd(int fd, int type) {
-	if (!fd || !session[fd])
-		return 0;
-
-	WFIFOW(fd,0) = 0x81;
-	WFIFOL(fd,2) = type;
-	WFIFOSET(fd,packet_len_table[0x81]);
-
-	clif_setwaitclose(fd);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_charselectok(int id) {
-	struct map_session_data *sd;
-	int fd;
-
-	if ((sd = map_id2sd(id)) == NULL)
-		return 1;
-
-	if (!sd->fd)
-		return 1;
-
-	fd = sd->fd;
-	WFIFOW(fd,0) = 0xb3;
-	WFIFOB(fd,2) = 1;
-	WFIFOSET(fd,packet_len_table[0xb3]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-static int clif_set009e(struct flooritem_data *fitem,unsigned char *buf) {
-	int view;
-
-	nullpo_retr(0, fitem);
-
-	//009e <ID>.l <name ID>.w <identify flag>.B <X>.w <Y>.w <subX>.B <subY>.B <amount>.w
-	WBUFW(buf, 0) = 0x9e;
-	WBUFL(buf, 2) = fitem->bl.id;
-	if ((view = itemdb_viewid(fitem->item_data.nameid)) > 0)
-		WBUFW(buf, 6) = view;
-	else
-		WBUFW(buf, 6) = fitem->item_data.nameid;
-	WBUFB(buf, 8) = fitem->item_data.identify;
-	WBUFW(buf, 9) = fitem->bl.x;
-	WBUFW(buf,11) = fitem->bl.y;
-	WBUFB(buf,13) = fitem->subx;
-	WBUFB(buf,14) = fitem->suby;
-	WBUFW(buf,15) = fitem->item_data.amount;
-
-	return packet_len_table[0x9e];
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_dropflooritem(struct flooritem_data *fitem) {
-	char buf[64];
-
-	nullpo_retr(0, fitem);
-
-	if (fitem->item_data.nameid <= 0)
-		return 0;
-	clif_set009e(fitem, buf);
-	clif_send(buf, packet_len_table[0x9e], &fitem->bl, AREA);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_clearflooritem(struct flooritem_data *fitem, int fd) {
-	unsigned char buf[16];
-
-	nullpo_retr(0, fitem);
-
-	WBUFW(buf,0) = 0xa1;
-	WBUFL(buf,2) = fitem->bl.id;
-
-	if (fd == 0) {
-		clif_send(buf, packet_len_table[0xa1], &fitem->bl, AREA);
-	} else {
-		memcpy(WFIFOP(fd,0), buf, 6);
-		WFIFOSET(fd,packet_len_table[0xa1]);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_clearchar(struct block_list *bl, int type) {
-	unsigned char buf[16];
-
-	nullpo_retr(0, bl);
-
-	WBUFW(buf,0) = 0x80;
-	WBUFL(buf,2) = bl->id;
-	if (type == 9) {
-		WBUFB(buf,6) = 0;
-		clif_send(buf, packet_len_table[0x80], bl, AREA);
-	} else {
-		WBUFB(buf,6) = type;
-		clif_send(buf, packet_len_table[0x80], bl, type == 1 ? AREA : AREA_WOS);
-	}
-
-	return 0;
-}
-
-static int clif_clearchar_delay_sub(int tid, unsigned int tick, int id, int data) {
-	struct block_list *bl = (struct block_list *)id;
-
-	clif_clearchar(bl,data);
-	map_freeblock(bl);
-
-	return 0;
-}
-
-int clif_clearchar_delay(unsigned int tick, struct block_list *bl, int type) {
-	struct block_list *tmpbl = calloc(sizeof(struct block_list), 1);
-	if (tmpbl == NULL) {
-		printf("clif_clearchar_delay: out of memory !\n");
-		exit(1);
-	}
-	memcpy(tmpbl, bl, sizeof(struct block_list));
-	add_timer(tick, clif_clearchar_delay_sub, (int)tmpbl, type);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_clearchar_id(int id, int type, int fd) {
-	unsigned char buf[16];
-
-	WBUFW(buf,0) = 0x80;
-	WBUFL(buf,2) = id;
-	WBUFB(buf,6) = type;
-	memcpy(WFIFOP(fd,0), buf, 7);
-	WFIFOSET(fd, packet_len_table[0x80]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-static int clif_set0078(struct map_session_data *sd, unsigned char *buf) {
-	int level=0;
-
-	nullpo_retr(0, sd);
-
-	if (sd->disguise > 23 && sd->disguise < 4001) { // mob disguises [Valaris]
-		WBUFW(buf,0) = 0x78;
-		WBUFL(buf,2) = sd->bl.id;
-		WBUFW(buf,6) = battle_get_speed(&sd->bl);
-		WBUFW(buf,8) = sd->opt1;
-		WBUFW(buf,10) = sd->opt2;
-		WBUFW(buf,12) = sd->status.option;
-		WBUFW(buf,14) = sd->disguise;
-		WBUFW(buf,42) = 0;
-		WBUFB(buf,44) = 0;
-		WBUFPOS(buf, 46, sd->bl.x, sd->bl.y);
-		WBUFB(buf,48) |= sd->dir & 0x0f;
-		WBUFB(buf,49) = 5;
-		WBUFB(buf,50) = 5;
-		WBUFB(buf,51) = 0;
-		WBUFW(buf,52) = ((level = battle_get_lv(&sd->bl)) > battle_config.max_lv) ? battle_config.max_lv : level;
-
-		return packet_len_table[0x78];
-	}
-
-#if PACKETVER < 4
-	WBUFW(buf,0)= 0x78;
-	WBUFL(buf,2)= sd->bl.id;
-	WBUFW(buf,6)= sd->speed;
-	WBUFW(buf,8)= sd->opt1;
-	WBUFW(buf,10)= sd->opt2;
-	WBUFW(buf,12)= sd->status.option;
-	WBUFW(buf,14)= sd->view_class;
-	WBUFW(buf,16)= sd->status.hair;
-	if (sd->view_class != 22)
-		WBUFW(buf,18) = sd->status.weapon;
-	else
-		WBUFW(buf,18)=0;
-	WBUFW(buf,20)=sd->status.head_bottom;
-	WBUFW(buf,22)=sd->status.shield;
-	WBUFW(buf,24)=sd->status.head_top;
-	WBUFW(buf,26)=sd->status.head_mid;
-	WBUFW(buf,28)=sd->status.hair_color;
-	WBUFW(buf,30)=sd->status.clothes_color;
-	WBUFW(buf,32)=sd->head_dir;
-	WBUFL(buf,34)=sd->status.guild_id;
-	WBUFL(buf,38)=sd->guild_emblem_id;
-	WBUFW(buf,42)=sd->status.manner;
-	WBUFB(buf,44)=sd->status.karma;
-	WBUFB(buf,45)=sd->sex;
-	WBUFPOS(buf,46,sd->bl.x,sd->bl.y);
-	WBUFB(buf,48)|=sd->dir&0x0f;
-	WBUFB(buf,49)=5;
-	WBUFB(buf,50)=5;
-	WBUFB(buf,51)=sd->state.dead_sit;
-	WBUFW(buf,52)=(sd->status.base_level>battle_config.max_lv)?battle_config.max_lv:sd->status.base_level;
-
-	return packet_len_table[0x78];
-#else
-	WBUFW(buf,0) = 0x1d8;
-	WBUFL(buf,2) = sd->bl.id;
-	WBUFW(buf,6) = sd->speed;
-	WBUFW(buf,8) = sd->opt1;
-	WBUFW(buf,10) = sd->opt2;
-	WBUFW(buf,12) = sd->status.option;
-	WBUFW(buf,14) = sd->view_class;
-	WBUFW(buf,16) = sd->status.hair;
-	if (sd->equip_index[9] >= 0 && sd->inventory_data[sd->equip_index[9]] && sd->view_class != 22) {
-		if (sd->inventory_data[sd->equip_index[9]]->view_id > 0)
-			WBUFW(buf,18) = sd->inventory_data[sd->equip_index[9]]->view_id;
-		else
-			WBUFW(buf,18) = sd->status.inventory[sd->equip_index[9]].nameid;
-	} else
-		WBUFW(buf,18) = 0;
-	if (sd->equip_index[8] >= 0 && sd->equip_index[8] != sd->equip_index[9] && sd->inventory_data[sd->equip_index[8]] && sd->view_class != 22) {
-		if (sd->inventory_data[sd->equip_index[8]]->view_id > 0)
-			WBUFW(buf,20) = sd->inventory_data[sd->equip_index[8]]->view_id;
-		else
-			WBUFW(buf,20) = sd->status.inventory[sd->equip_index[8]].nameid;
-	} else
-		WBUFW(buf,20) = 0;
-	WBUFW(buf,22)=sd->status.head_bottom;
-	WBUFW(buf,24)=sd->status.head_top;
-	WBUFW(buf,26)=sd->status.head_mid;
-	WBUFW(buf,28)=sd->status.hair_color;
-	WBUFW(buf,30)=sd->status.clothes_color;
-	WBUFW(buf,32)=sd->head_dir;
-	WBUFL(buf,34)=sd->status.guild_id;
-	WBUFW(buf,38)=sd->guild_emblem_id;
-	WBUFW(buf,40)=sd->status.manner;
-	WBUFW(buf,42)=sd->opt3;
-	WBUFB(buf,44)=sd->status.karma;
-	WBUFB(buf,45)=sd->sex;
-	WBUFPOS(buf,46,sd->bl.x,sd->bl.y);
-	WBUFB(buf,48)|=sd->dir&0x0f;
-	WBUFB(buf,49)=5;
-	WBUFB(buf,50)=5;
-	WBUFB(buf,51)=sd->state.dead_sit;
-	WBUFW(buf,52)=((level = battle_get_lv(&sd->bl)) > battle_config.max_lv) ? battle_config.max_lv : level;
-
-	return packet_len_table[0x1d8];
-#endif
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-static int clif_set007b(struct map_session_data *sd,unsigned char *buf) {
-	int level=0;
-
-	nullpo_retr(0, sd);
-
-	if (sd->disguise > 23 && sd->disguise < 4001) { // mob disguises [Valaris]
-		WBUFW(buf,0)=0x7b;
-		WBUFL(buf,2)=sd->bl.id;
-		WBUFW(buf,6)=battle_get_speed(&sd->bl);
-		WBUFW(buf,8)=sd->opt1;
-		WBUFW(buf,10)=sd->opt2;
-		WBUFW(buf,12)=sd->status.option;
-		WBUFW(buf,14)=sd->disguise;
-		WBUFL(buf,22)=gettick();
-		WBUFW(buf,46)=0;
-		WBUFB(buf,48)=0;
-		WBUFPOS2(buf,50,sd->bl.x,sd->bl.y,sd->to_x,sd->to_y);
-		WBUFB(buf,55)=0;
-		WBUFB(buf,56)=5;
-		WBUFB(buf,57)=5;
-		WBUFW(buf,58)=((level = battle_get_lv(&sd->bl))>battle_config.max_lv)? battle_config.max_lv:level;
-
-		return packet_len_table[0x7b];
-	}
-
-#if PACKETVER < 4
-	WBUFW(buf,0)=0x7b;
-	WBUFL(buf,2)=sd->bl.id;
-	WBUFW(buf,6)=sd->speed;
-	WBUFW(buf,8)=sd->opt1;
-	WBUFW(buf,10)=sd->opt2;
-	WBUFW(buf,12)=sd->status.option;
-	WBUFW(buf,14)=sd->view_class;
-	WBUFW(buf,16)=sd->status.hair;
-	if(sd->view_class != 22)
-		WBUFW(buf,18)=sd->status.weapon;
-	else
-		WBUFW(buf,18)=0;
-	WBUFW(buf,20)=sd->status.head_bottom;
-	WBUFL(buf,22)=gettick();
-	WBUFW(buf,26)=sd->status.shield;
-	WBUFW(buf,28)=sd->status.head_top;
-	WBUFW(buf,30)=sd->status.head_mid;
-	WBUFW(buf,32)=sd->status.hair_color;
-	WBUFW(buf,34)=sd->status.clothes_color;
-	WBUFW(buf,36)=sd->head_dir;
-	WBUFL(buf,38)=sd->status.guild_id;
-	WBUFL(buf,42)=sd->guild_emblem_id;
-	WBUFW(buf,46)=sd->status.manner;
-	WBUFB(buf,48)=sd->status.karma;
-	WBUFB(buf,49)=sd->sex;
-	WBUFPOS2(buf,50,sd->bl.x,sd->bl.y,sd->to_x,sd->to_y);
-	WBUFB(buf,55)=0;
-	WBUFB(buf,56)=5;
-	WBUFB(buf,57)=5;
-	WBUFW(buf,58)=(sd->status.base_level>battle_config.max_lv)?battle_config.max_lv:sd->status.base_level;
-
-	return packet_len_table[0x7b];
-#else
-	WBUFW(buf,0)=0x1da;
-	WBUFL(buf,2)=sd->bl.id;
-	WBUFW(buf,6)=sd->speed;
-	WBUFW(buf,8)=sd->opt1;
-	WBUFW(buf,10)=sd->opt2;
-	WBUFW(buf,12)=sd->status.option;
-	WBUFW(buf,14)=sd->view_class;
-	WBUFW(buf,16)=sd->status.hair;
-	if(sd->equip_index[9] >= 0 && sd->inventory_data[sd->equip_index[9]] && sd->view_class != 22) {
-		if(sd->inventory_data[sd->equip_index[9]]->view_id > 0)
-			WBUFW(buf,18)=sd->inventory_data[sd->equip_index[9]]->view_id;
-		else
-			WBUFW(buf,18)=sd->status.inventory[sd->equip_index[9]].nameid;
-	}
-	else
-		WBUFW(buf,18)=0;
-	if(sd->equip_index[8] >= 0 && sd->equip_index[8] != sd->equip_index[9] && sd->inventory_data[sd->equip_index[8]] && sd->view_class != 22) {
-		if(sd->inventory_data[sd->equip_index[8]]->view_id > 0)
-			WBUFW(buf,20)=sd->inventory_data[sd->equip_index[8]]->view_id;
-		else
-			WBUFW(buf,20)=sd->status.inventory[sd->equip_index[8]].nameid;
-	}
-	else
-		WBUFW(buf,20)=0;
-	WBUFW(buf,22)=sd->status.head_bottom;
-	WBUFL(buf,24)=gettick();
-	WBUFW(buf,28)=sd->status.head_top;
-	WBUFW(buf,30)=sd->status.head_mid;
-	WBUFW(buf,32)=sd->status.hair_color;
-	WBUFW(buf,34)=sd->status.clothes_color;
-	WBUFW(buf,36)=sd->head_dir;
-	WBUFL(buf,38)=sd->status.guild_id;
-	WBUFW(buf,42)=sd->guild_emblem_id;
-	WBUFW(buf,44)=sd->status.manner;
-	WBUFW(buf,46)=sd->opt3;
-	WBUFB(buf,48)=sd->status.karma;
-	WBUFB(buf,49)=sd->sex;
-	WBUFPOS2(buf,50,sd->bl.x,sd->bl.y,sd->to_x,sd->to_y);
-	WBUFB(buf,55)=0;
-	WBUFB(buf,56)=5;
-	WBUFB(buf,57)=5;
-	WBUFW(buf,58)=(sd->status.base_level>battle_config.max_lv)?battle_config.max_lv:sd->status.base_level;
-
-	return packet_len_table[0x1da];
-#endif
-}
-
-/*==========================================
- * �N���X�`�F���W type��Mob�̏ꍇ��1�ő���0�H
- *------------------------------------------
- */
-int clif_class_change(struct block_list *bl,int class,int type)
-{
-	char buf[16];
-
-	nullpo_retr(0, bl);
-
-	if(class >= MAX_PC_CLASS) {
-		WBUFW(buf,0)=0x1b0;
-		WBUFL(buf,2)=bl->id;
-		WBUFB(buf,6)=type;
-		WBUFL(buf,7)=class;
-
-		clif_send(buf,packet_len_table[0x1b0],bl,AREA);
-	}
-	return 0;
-}
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_mob_class_change(struct mob_data *md, int class) {
-	char buf[16];
-	int view = mob_get_viewclass(class);
-
-	nullpo_retr(0, md);
-
-	if(view >= MAX_PC_CLASS) {
-		WBUFW(buf,0)=0x1b0;
-		WBUFL(buf,2)=md->bl.id;
-		WBUFB(buf,6)=1;
-		WBUFL(buf,7)=view;
-
-		clif_send(buf,packet_len_table[0x1b0],&md->bl,AREA);
-	}
-	return 0;
-}
-// mob equipment [Valaris]
-
-int clif_mob_equip(struct mob_data *md, int nameid) {
-	unsigned char buf[16];
-
-	nullpo_retr(0, md);
-
-	memset(buf,0,packet_len_table[0x1a4]);
-
-	WBUFW(buf,0)=0x1a4;
-	WBUFB(buf,2)=3;
-	WBUFL(buf,3)=md->bl.id;
-	WBUFL(buf,7)=nameid;
-
-	clif_send(buf,packet_len_table[0x1a4],&md->bl,AREA);
-
-	return 0;
-}
-
-/*==========================================
- * MOB�\��1
- *------------------------------------------
- */
-static int clif_mob0078(struct mob_data *md, unsigned char *buf) 
-{
-	int level;
-
-	memset(buf,0,packet_len_table[0x78]);
-
-	nullpo_retr(0, md);
-
-	WBUFW(buf,0)=0x78;
-	WBUFL(buf,2)=md->bl.id;
-	WBUFW(buf,6)=battle_get_speed(&md->bl);
-	WBUFW(buf,8)=md->opt1;
-	WBUFW(buf,10)=md->opt2;
-	WBUFW(buf,12)=md->option;
-	WBUFW(buf,14)=mob_get_viewclass(md->class);
-	if((mob_get_viewclass(md->class) <= 23) || (mob_get_viewclass(md->class) == 812) || (mob_get_viewclass(md->class) >= 4001)) {
-		WBUFW(buf,12)|=mob_db[md->class].option;
-		WBUFW(buf,16)=mob_get_hair(md->class);
-		WBUFW(buf,18)=mob_get_weapon(md->class);
-		WBUFW(buf,20)=mob_get_head_buttom(md->class);
-		WBUFW(buf,22)=mob_get_shield(md->class);
-		WBUFW(buf,24)=mob_get_head_top(md->class);
-		WBUFW(buf,26)=mob_get_head_mid(md->class);
-		WBUFW(buf,28)=mob_get_hair_color(md->class);
-		WBUFW(buf,30)=mob_get_clothes_color(md->class);	//Add for player monster dye - Valaris
-		WBUFB(buf,45)=mob_get_sex(md->class);
-	}
-
-	if (md->class >= 1285 && md->class <= 1287) {	// Added guardian emblems [Valaris]
-		struct guild *g;
-		struct guild_castle *gc=guild_mapname2gc(map[md->bl.m].name);
-		if (gc && gc->guild_id > 0) {
-			g=guild_search(gc->guild_id);
-			if (g) {
-				WBUFL(buf,26)=gc->guild_id;
-				WBUFL(buf,22)=g->emblem_id;
-			}
-		}
-	}	// End addition
-
-	WBUFPOS(buf,46,md->bl.x,md->bl.y);
-	WBUFB(buf,48)|=md->dir&0x0f;
-	WBUFB(buf,49)=5;
-	WBUFB(buf,50)=5;
-	WBUFW(buf,52)=((level = battle_get_lv(&md->bl))>battle_config.max_lv)? battle_config.max_lv:level;
-
-	return packet_len_table[0x78];
-}
-
-/*==========================================
- * MOB�\��2
- *------------------------------------------
- */
-static int clif_mob007b(struct mob_data *md, unsigned char *buf) {
-	int level;
-
-	memset(buf,0,packet_len_table[0x7b]);
-
-	nullpo_retr(0, md);
-
-	WBUFW(buf,0)=0x7b;
-	WBUFL(buf,2)=md->bl.id;
-	WBUFW(buf,6)=battle_get_speed(&md->bl);
-	WBUFW(buf,8)=md->opt1;
-	WBUFW(buf,10)=md->opt2;
-	WBUFW(buf,12)=md->option;
-	WBUFW(buf,14)=mob_get_viewclass(md->class);
-	if ((mob_get_viewclass(md->class) < 24) || (mob_get_viewclass(md->class) > 4000)) {
-		WBUFW(buf,12)|=mob_db[md->class].option;
-		WBUFW(buf,16)=mob_get_hair(md->class);
-		WBUFW(buf,18)=mob_get_weapon(md->class);
-		WBUFW(buf,20)=mob_get_head_buttom(md->class);
-		WBUFL(buf,22)=gettick();
-		WBUFW(buf,26)=mob_get_shield(md->class);
-		WBUFW(buf,28)=mob_get_head_top(md->class);
-		WBUFW(buf,30)=mob_get_head_mid(md->class);
-		WBUFW(buf,32)=mob_get_hair_color(md->class);
-		WBUFW(buf,34)=mob_get_clothes_color(md->class);	//Add for player monster dye - Valaris
-		WBUFB(buf,49)=mob_get_sex(md->class);
-	} else
-		WBUFL(buf,22)=gettick();
-
-		if(md->class >= 1285 && md->class <= 1287)	{	// Added guardian emblems [Valaris]
-			struct guild *g;
-			struct guild_castle *gc=guild_mapname2gc(map[md->bl.m].name);
-			if(gc && gc->guild_id > 0){
-				g=guild_search(gc->guild_id);
-					if(g) {
-					WBUFL(buf,28)=gc->guild_id;
-					WBUFL(buf,24)=g->emblem_id;
-					}
-			}
-		}									// End addition
-
-	WBUFPOS2(buf,50,md->bl.x,md->bl.y,md->to_x,md->to_y);
-	WBUFB(buf,56)=5;
-	WBUFB(buf,57)=5;
-	WBUFW(buf,58)=((level = battle_get_lv(&md->bl))>battle_config.max_lv)? battle_config.max_lv:level;
-
-	return packet_len_table[0x7b];
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-static int clif_npc0078(struct npc_data *nd, unsigned char *buf) {
-	struct guild *g;
-
-	nullpo_retr(0, nd);
-
-	memset(buf,0,packet_len_table[0x78]);
-
-	WBUFW(buf,0)=0x78;
-	WBUFL(buf,2)=nd->bl.id;
-	WBUFW(buf,6)=nd->speed;
-	WBUFW(buf,14)=nd->class;
-	if ((nd->class == 722) && (nd->u.scr.guild_id > 0) && ((g=guild_search(nd->u.scr.guild_id)) != NULL)) {
-		WBUFL(buf,22)=g->emblem_id;
-		WBUFL(buf,26)=g->guild_id;
-	}
-	WBUFPOS(buf,46,nd->bl.x,nd->bl.y);
-	WBUFB(buf,48)|=nd->dir&0x0f;
-	WBUFB(buf,49)=5;
-	WBUFB(buf,50)=5;
-
-	return packet_len_table[0x78];
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-static int clif_pet0078(struct pet_data *pd, unsigned char *buf) {
-	int view,level;
-
-	nullpo_retr(0, pd);
-
-	memset(buf,0,packet_len_table[0x78]);
-
-	WBUFW(buf,0)=0x78;
-	WBUFL(buf,2)=pd->bl.id;
-	WBUFW(buf,6)=pd->speed;
-	WBUFW(buf,14)=mob_get_viewclass(pd->class);
-	if((mob_get_viewclass(pd->class) < 24) || (mob_get_viewclass(pd->class) > 4000)) {
-		WBUFW(buf,12)=mob_db[pd->class].option;
-		WBUFW(buf,16)=mob_get_hair(pd->class);
-		WBUFW(buf,18)=mob_get_weapon(pd->class);
-		WBUFW(buf,20)=mob_get_head_buttom(pd->class);
-		WBUFW(buf,22)=mob_get_shield(pd->class);
-		WBUFW(buf,24)=mob_get_head_top(pd->class);
-		WBUFW(buf,26)=mob_get_head_mid(pd->class);
-		WBUFW(buf,28)=mob_get_hair_color(pd->class);
-		WBUFW(buf,30)=mob_get_clothes_color(pd->class);	//Add for player pet dye - Valaris
-		WBUFB(buf,45)=mob_get_sex(pd->class);
-	} else {
-		WBUFW(buf,16)=0x14;
-		if((view = itemdb_viewid(pd->equip)) > 0)
-			WBUFW(buf,20)=view;
-		else
-			WBUFW(buf,20)=pd->equip;
-	}
-	WBUFPOS(buf,46,pd->bl.x,pd->bl.y);
-	WBUFB(buf,48)|=pd->dir&0x0f;
-	WBUFB(buf,49)=0;
-	WBUFB(buf,50)=0;
-	WBUFW(buf,52)=((level = battle_get_lv(&pd->bl))>battle_config.max_lv)? battle_config.max_lv:level;
-
-	return packet_len_table[0x78];
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-static int clif_pet007b(struct pet_data *pd, unsigned char *buf) {
-	int view,level;
-
-	nullpo_retr(0, pd);
-
-	memset(buf,0,packet_len_table[0x7b]);
-
-	WBUFW(buf,0)=0x7b;
-	WBUFL(buf,2)=pd->bl.id;
-	WBUFW(buf,6)=pd->speed;
-	WBUFW(buf,14)=mob_get_viewclass(pd->class);
-	if((mob_get_viewclass(pd->class) < 24) || (mob_get_viewclass(pd->class) > 4000)) {
-		WBUFW(buf,12)=mob_db[pd->class].option;
-		WBUFW(buf,16)=mob_get_hair(pd->class);
-		WBUFW(buf,18)=mob_get_weapon(pd->class);
-		WBUFW(buf,20)=mob_get_head_buttom(pd->class);
-		WBUFL(buf,22)=gettick();
-		WBUFW(buf,26)=mob_get_shield(pd->class);
-		WBUFW(buf,28)=mob_get_head_top(pd->class);
-		WBUFW(buf,30)=mob_get_head_mid(pd->class);
-		WBUFW(buf,32)=mob_get_hair_color(pd->class);
-		WBUFW(buf,34)=mob_get_clothes_color(pd->class);	//Add for player pet dye - Valaris
-		WBUFB(buf,49)=mob_get_sex(pd->class);
-	} else {
-		WBUFW(buf,16)=0x14;
-		if ((view = itemdb_viewid(pd->equip)) > 0)
-			WBUFW(buf,20)=view;
-		else
-			WBUFW(buf,20)=pd->equip;
-		WBUFL(buf,22)=gettick();
-	}
-	WBUFPOS2(buf,50,pd->bl.x,pd->bl.y,pd->to_x,pd->to_y);
-	WBUFB(buf,56)=0;
-	WBUFB(buf,57)=0;
-	WBUFW(buf,58)=((level = battle_get_lv(&pd->bl))>battle_config.max_lv)? battle_config.max_lv:level;
-
-	return packet_len_table[0x7b];
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-static int clif_set01e1(struct map_session_data *sd, unsigned char *buf) {
-	nullpo_retr(0, sd);
-
-	WBUFW(buf,0)=0x1e1;
-	WBUFL(buf,2)=sd->bl.id;
-	WBUFW(buf,6)=sd->spiritball;
-
-	return packet_len_table[0x1e1];
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-static int clif_set0192(int fd, int m, int x, int y, int type) {
-	WFIFOW(fd,0) = 0x192;
-	WFIFOW(fd,2) = x;
-	WFIFOW(fd,4) = y;
-	WFIFOW(fd,6) = type;
-	memcpy(WFIFOP(fd,8),map[m].name,16);
-	WFIFOSET(fd,packet_len_table[0x192]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_spawnpc(struct map_session_data *sd) {
-	unsigned char buf[128];
-
-	nullpo_retr(0, sd);
-
-	if (sd->disguise > 23 && sd->disguise < 4001) { // mob disguises [Valaris]
-		clif_clearchar(&sd->bl, 9);
-
-		memset(buf, 0, packet_len_table[0x119]);
-
-		WBUFW(buf, 0) = 0x119;
-		WBUFL(buf, 2) = sd->bl.id;
-		WBUFW(buf, 6) = 0;
-		WBUFW(buf, 8) = 0;
-		WBUFW(buf,10) = 0x40;
-		WBUFB(buf,12) = 0;
-
-		clif_send(buf, packet_len_table[0x119], &sd->bl, SELF);
-
-		memset(buf, 0, packet_len_table[0x7c]);
-
-		WBUFW(buf, 0) = 0x7c;
-		WBUFL(buf, 2) = sd->bl.id;
-		WBUFW(buf, 6) = sd->speed;
-		WBUFW(buf, 8) = sd->opt1;
-		WBUFW(buf,10) = sd->opt2;
-		WBUFW(buf,12) = sd->status.option;
-		WBUFW(buf,20) = sd->disguise;
-		WBUFPOS(buf, 36, sd->bl.x, sd->bl.y);
-		clif_send(buf, packet_len_table[0x7c], &sd->bl, AREA);
-	}
-
-	clif_set0078(sd, buf);
-
-#if PACKETVER < 4
-	WBUFW(buf, 0) = 0x79;
-	WBUFW(buf,51) = (sd->status.base_level > battle_config.max_lv) ? battle_config.max_lv : sd->status.base_level;
-	clif_send(buf, packet_len_table[0x79], &sd->bl, AREA_WOS);
-#else
-	WBUFW(buf, 0) = 0x1d9;
-	WBUFW(buf,51) = (sd->status.base_level > battle_config.max_lv) ? battle_config.max_lv : sd->status.base_level;
-	clif_send(buf, packet_len_table[0x1d9], &sd->bl, AREA_WOS);
-#endif
-
-
-	if (sd->spiritball > 0)
-		clif_spiritball(sd);
-
-	if (sd->status.guild_id > 0) { // force display of guild emblem [Valaris]
-		struct guild *g = guild_search(sd->status.guild_id);
-		if (g)
-			clif_guild_emblem(sd,g);
-	}	// end addition [Valaris]
-
-	if (sd->status.class==13 || sd->status.class==21 || sd->status.class==4014 || sd->status.class==4022)
-		pc_setoption(sd,sd->status.option|0x0020); // [Valaris]
-
-	if ((pc_isriding(sd) && pc_checkskill(sd,KN_RIDING)>0) && (sd->status.class==7 ||
-	    sd->status.class==14 || sd->status.class==4008 || sd->status.class==4015))
-		pc_setriding(sd); // update peco riders for people upgrading athena [Valaris]
-
-
-	if (map[sd->bl.m].flag.snow)
-		clif_specialeffect(&sd->bl, 162, 1);
-	if (map[sd->bl.m].flag.fog)
-		clif_specialeffect(&sd->bl, 233, 1);
-	if (map[sd->bl.m].flag.sakura)
-		clif_specialeffect(&sd->bl, 163, 1);
-	if (map[sd->bl.m].flag.leaves)
-		clif_specialeffect(&sd->bl, 333, 1);
-	if (map[sd->bl.m].flag.rain)
-		clif_specialeffect(&sd->bl, 161, 1);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_spawnnpc(struct npc_data *nd)
-{
-	unsigned char buf[64];
-	int len;
-
-	nullpo_retr(0, nd);
-
-	if(nd->class < 0 || nd->flag&1 || nd->class == INVISIBLE_CLASS)
-		return 0;
-
-	memset(buf,0,packet_len_table[0x7c]);
-
-	WBUFW(buf,0)=0x7c;
-	WBUFL(buf,2)=nd->bl.id;
-	WBUFW(buf,6)=nd->speed;
-	WBUFW(buf,20)=nd->class;
-	WBUFPOS(buf,36,nd->bl.x,nd->bl.y);
-
-	clif_send(buf,packet_len_table[0x7c],&nd->bl,AREA);
-
-	len = clif_npc0078(nd,buf);
-	clif_send(buf,len,&nd->bl,AREA);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_spawnmob(struct mob_data *md)
-{
-	unsigned char buf[64];
-	int len;
-
-	nullpo_retr(0, md);
-
-	if (mob_get_viewclass(md->class) > 23 ) {
-		memset(buf,0,packet_len_table[0x7c]);
-
-		WBUFW(buf,0)=0x7c;
-		WBUFL(buf,2)=md->bl.id;
-		WBUFW(buf,6)=md->speed;
-		WBUFW(buf,8)=md->opt1;
-		WBUFW(buf,10)=md->opt2;
-		WBUFW(buf,12)=md->option;
-		WBUFW(buf,20)=mob_get_viewclass(md->class);
-		WBUFPOS(buf,36,md->bl.x,md->bl.y);
-		clif_send(buf,packet_len_table[0x7c],&md->bl,AREA);
-	}
-
-	len = clif_mob0078(md,buf);
-	clif_send(buf,len,&md->bl,AREA);
-
-	if (mob_get_equip(md->class) > 0) // mob equipment [Valaris]
-		clif_mob_equip(md,mob_get_equip(md->class));
-
-	return 0;
-}
-
-// pet
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_spawnpet(struct pet_data *pd)
-{
-	unsigned char buf[64];
-	int len;
-
-	nullpo_retr(0, pd);
-
-	if (mob_get_viewclass(pd->class) >= MAX_PC_CLASS) {
-		memset(buf,0,packet_len_table[0x7c]);
-
-		WBUFW(buf,0)=0x7c;
-		WBUFL(buf,2)=pd->bl.id;
-		WBUFW(buf,6)=pd->speed;
-		WBUFW(buf,20)=mob_get_viewclass(pd->class);
-		WBUFPOS(buf,36,pd->bl.x,pd->bl.y);
-
-		clif_send(buf,packet_len_table[0x7c],&pd->bl,AREA);
-	}
-
-	len = clif_pet0078(pd,buf);
-	clif_send(buf,len,&pd->bl,AREA);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_movepet(struct pet_data *pd) {
-	unsigned char buf[256];
-	int len;
-
-	nullpo_retr(0, pd);
-
-	len = clif_pet007b(pd,buf);
-	clif_send(buf,len,&pd->bl,AREA);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_servertick(struct map_session_data *sd)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x7f;
-	WFIFOL(fd,2)=sd->server_tick;
-	WFIFOSET(fd,packet_len_table[0x7f]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_walkok(struct map_session_data *sd)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x87;
-	WFIFOL(fd,2)=gettick();;
-	WFIFOPOS2(fd,6,sd->bl.x,sd->bl.y,sd->to_x,sd->to_y);
-	WFIFOB(fd,11)=0;
-	WFIFOSET(fd,packet_len_table[0x87]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_movechar(struct map_session_data *sd) {
-	int fd;
-	int len;
-	unsigned char buf[256];
-
-	nullpo_retr(0, sd);
-
-	fd = sd->fd;
-
-	len = clif_set007b(sd, buf);
-
-	if (sd->disguise > 23 && sd->disguise < 4001) {
-		clif_send(buf, len, &sd->bl, AREA);
-		return 0;
-	} else
-		clif_send(buf, len, &sd->bl, AREA_WOS);
-
-	if (battle_config.save_clothcolor == 1 && sd->status.clothes_color > 0)
-		clif_changelook(&sd->bl, LOOK_CLOTHES_COLOR, sd->status.clothes_color);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_quitsave(int fd,struct map_session_data *sd)
-{
-	map_quit(sd);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-static int clif_waitclose(int tid, unsigned int tick, int id, int data) {
-	if (session[id])
-		session[id]->eof = 1;
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_setwaitclose(int fd) {
-	add_timer(gettick() + 5000, clif_waitclose, fd, 0);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_changemap(struct map_session_data *sd, char *mapname, int x, int y) {
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd = sd->fd;
-
-	WFIFOW(fd,0) = 0x91;
-	memcpy(WFIFOP(fd,2), mapname, 16);
-	WFIFOW(fd,18) = x;
-	WFIFOW(fd,20) = y;
-	WFIFOSET(fd, packet_len_table[0x91]);
-
-	if (sd->disguise > 23 && sd->disguise < 4001) // mob disguises [Valaris]
-		clif_spawnpc(sd);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_changemapserver(struct map_session_data *sd, char *mapname, int x, int y, int ip, int port) {
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd = sd->fd;
-	WFIFOW(fd,0) = 0x92;
-	memcpy(WFIFOP(fd,2), mapname, 16);
-	WFIFOW(fd,18) = x;
-	WFIFOW(fd,20) = y;
-	WFIFOL(fd,22) = ip;
-	WFIFOW(fd,26) = port;
-	WFIFOSET(fd, packet_len_table[0x92]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_fixpos(struct block_list *bl) {
-	char buf[16];
-
-	nullpo_retr(0, bl);
-
-	WBUFW(buf,0)=0x88;
-	WBUFL(buf,2)=bl->id;
-	WBUFW(buf,6)=bl->x;
-	WBUFW(buf,8)=bl->y;
-
-	clif_send(buf, packet_len_table[0x88], bl, AREA);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_npcbuysell(struct map_session_data* sd, int id) {
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xc4;
-	WFIFOL(fd,2)=id;
-	WFIFOSET(fd,packet_len_table[0xc4]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_buylist(struct map_session_data *sd, struct npc_data *nd) {
-	struct item_data *id;
-	int fd,i,val;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, nd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xc6;
-	for(i=0;nd->u.shop_item[i].nameid > 0;i++){
-		id = itemdb_search(nd->u.shop_item[i].nameid);
-		val=nd->u.shop_item[i].value;
-		WFIFOL(fd,4+i*11)=val;
-		if (!id->flag.value_notdc)
-			val=pc_modifybuyvalue(sd,val);
-		WFIFOL(fd,8+i*11)=val;
-		WFIFOB(fd,12+i*11)=id->type;
-		if (id->view_id > 0)
-			WFIFOW(fd,13+i*11)=id->view_id;
-		else
-			WFIFOW(fd,13+i*11)=nd->u.shop_item[i].nameid;
-	}
-	WFIFOW(fd,2)=i*11+4;
-	WFIFOSET(fd,WFIFOW(fd,2));
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_selllist(struct map_session_data *sd) {
-	int fd,i,c=0,val;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xc7;
-	for(i=0;i<MAX_INVENTORY;i++) {
-		if(sd->status.inventory[i].nameid > 0 && sd->inventory_data[i]) {
-			val=sd->inventory_data[i]->value_sell;
-			if (val < 0)
-				continue;
-			WFIFOW(fd,4+c*10)=i+2;
-			WFIFOL(fd,6+c*10)=val;
-			if (!sd->inventory_data[i]->flag.value_notoc)
-				val=pc_modifysellvalue(sd,val);
-			WFIFOL(fd,10+c*10)=val;
-			c++;
-		}
-	}
-	WFIFOW(fd,2)=c*10+4;
-	WFIFOSET(fd,WFIFOW(fd,2));
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_scriptmes(struct map_session_data *sd, int npcid, char *mes) {
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xb4;
-	WFIFOW(fd,2)=strlen(mes)+9;
-	WFIFOL(fd,4)=npcid;
-	strcpy(WFIFOP(fd,8),mes);
-	WFIFOSET(fd,WFIFOW(fd,2));
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_scriptnext(struct map_session_data *sd,int npcid) {
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xb5;
-	WFIFOL(fd,2)=npcid;
-	WFIFOSET(fd,packet_len_table[0xb5]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_scriptclose(struct map_session_data *sd, int npcid) {
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xb6;
-	WFIFOL(fd,2)=npcid;
-	WFIFOSET(fd,packet_len_table[0xb6]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_scriptmenu(struct map_session_data *sd, int npcid, char *mes) {
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xb7;
-	WFIFOW(fd,2)=strlen(mes)+8;
-	WFIFOL(fd,4)=npcid;
-	strcpy(WFIFOP(fd,8),mes);
-	WFIFOSET(fd,WFIFOW(fd,2));
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_scriptinput(struct map_session_data *sd, int npcid) {
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x142;
-	WFIFOL(fd,2)=npcid;
-	WFIFOSET(fd,packet_len_table[0x142]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_scriptinputstr(struct map_session_data *sd, int npcid) {
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x1d4;
-	WFIFOL(fd,2)=npcid;
-	WFIFOSET(fd,packet_len_table[0x1d4]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_viewpoint(struct map_session_data *sd, int npc_id, int type, int x, int y, int id, int color) {
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x144;
-	WFIFOL(fd,2)=npc_id;
-	WFIFOL(fd,6)=type;
-	WFIFOL(fd,10)=x;
-	WFIFOL(fd,14)=y;
-	WFIFOB(fd,18)=id;
-	WFIFOL(fd,19)=color;
-	WFIFOSET(fd,packet_len_table[0x144]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_cutin(struct map_session_data *sd, char *image, int type) {
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x1b3;
-	memcpy(WFIFOP(fd,2),image,64);
-	WFIFOB(fd,66)=type;
-	WFIFOSET(fd,packet_len_table[0x1b3]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_additem(struct map_session_data *sd, int n, int amount, int fail) {
-	int fd,j;
-	unsigned char *buf;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	buf=WFIFOP(fd,0);
-	if(fail) {
-		WBUFW(buf,0)=0xa0;
-		WBUFW(buf,2)=n+2;
-		WBUFW(buf,4)=amount;
-		WBUFW(buf,6)=0;
-		WBUFB(buf,8)=0;
-		WBUFB(buf,9)=0;
-		WBUFB(buf,10)=0;
-		WBUFW(buf,11)=0;
-		WBUFW(buf,13)=0;
-		WBUFW(buf,15)=0;
-		WBUFW(buf,17)=0;
-		WBUFW(buf,19)=0;
-		WBUFB(buf,21)=0;
-		WBUFB(buf,22)=fail;
-	} else {
-		if (n<0 || n>=MAX_INVENTORY || sd->status.inventory[n].nameid <=0 || sd->inventory_data[n] == NULL)
-			return 1;
-
-		WBUFW(buf,0)=0xa0;
-		WBUFW(buf,2)=n+2;
-		WBUFW(buf,4)=amount;
-		if (sd->inventory_data[n]->view_id > 0)
-			WBUFW(buf,6)=sd->inventory_data[n]->view_id;
-		else
-			WBUFW(buf,6)=sd->status.inventory[n].nameid;
-		WBUFB(buf,8)=sd->status.inventory[n].identify;
-		if (sd->status.inventory[n].broken==1)
-			WBUFB(buf,9)=1; // is weapon broken [Valaris]
-		else
-			WBUFB(buf,9)=sd->status.inventory[n].attribute;
-		WBUFB(buf,10)=sd->status.inventory[n].refine;
-		if(sd->status.inventory[n].card[0]==0x00ff || sd->status.inventory[n].card[0]==0x00fe || sd->status.inventory[n].card[0]==(short)0xff00) {
-			WBUFW(buf,11)=sd->status.inventory[n].card[0];
-			WBUFW(buf,13)=sd->status.inventory[n].card[1];
-			WBUFW(buf,15)=sd->status.inventory[n].card[2];
-			WBUFW(buf,17)=sd->status.inventory[n].card[3];
-		} else {
-			if (sd->status.inventory[n].card[0] > 0 && (j=itemdb_viewid(sd->status.inventory[n].card[0])) > 0)
-				WBUFW(buf,11)=j;
-			else
-				WBUFW(buf,11)=sd->status.inventory[n].card[0];
-			if (sd->status.inventory[n].card[1] > 0 && (j=itemdb_viewid(sd->status.inventory[n].card[1])) > 0)
-				WBUFW(buf,13)=j;
-			else
-				WBUFW(buf,13)=sd->status.inventory[n].card[1];
-			if (sd->status.inventory[n].card[2] > 0 && (j=itemdb_viewid(sd->status.inventory[n].card[2])) > 0)
-				WBUFW(buf,15)=j;
-			else
-				WBUFW(buf,15)=sd->status.inventory[n].card[2];
-			if (sd->status.inventory[n].card[3] > 0 && (j=itemdb_viewid(sd->status.inventory[n].card[3])) > 0)
-				WBUFW(buf,17)=j;
-			else
-				WBUFW(buf,17)=sd->status.inventory[n].card[3];
-		}
-		WBUFW(buf,19)=pc_equippoint(sd,n);
-		WBUFB(buf,21)=(sd->inventory_data[n]->type == 7)? 4:sd->inventory_data[n]->type;
-		WBUFB(buf,22)=fail;
-	}
-
-	WFIFOSET(fd,packet_len_table[0xa0]);
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_delitem(struct map_session_data *sd,int n,int amount)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xaf;
-	WFIFOW(fd,2)=n+2;
-	WFIFOW(fd,4)=amount;
-
-	WFIFOSET(fd,packet_len_table[0xaf]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_itemlist(struct map_session_data *sd)
-{
-	int i,n,fd,arrow=-1;
-	unsigned char *buf;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	buf = WFIFOP(fd,0);
-#if PACKETVER < 5
-	WBUFW(buf,0)=0xa3;
-	for(i=0,n=0;i<MAX_INVENTORY;i++){
-		if (sd->status.inventory[i].nameid <=0 || sd->inventory_data[i] == NULL || itemdb_isequip2(sd->inventory_data[i]))
-			continue;
-		WBUFW(buf,n*10+4)=i+2;
-		if (sd->inventory_data[i]->view_id > 0)
-			WBUFW(buf,n*10+6)=sd->inventory_data[i]->view_id;
-		else
-			WBUFW(buf,n*10+6)=sd->status.inventory[i].nameid;
-		WBUFB(buf,n*10+8)=sd->inventory_data[i]->type;
-		WBUFB(buf,n*10+9)=sd->status.inventory[i].identify;
-		WBUFW(buf,n*10+10)=sd->status.inventory[i].amount;
-		if (sd->inventory_data[i]->equip == 0x8000) {
-			WBUFW(buf,n*10+12)=0x8000;
-			if (sd->status.inventory[i].equip)
-				arrow=i;	// �‚��łɖ���`�F�b�N
-		} else
-			WBUFW(buf,n*10+12)=0;
-		n++;
-	}
-	if (n) {
-		WBUFW(buf,2)=4+n*10;
-		WFIFOSET(fd,WFIFOW(fd,2));
-	}
-#else
-	WBUFW(buf,0)=0x1ee;
-	for(i=0,n=0;i<MAX_INVENTORY;i++){
-		if(sd->status.inventory[i].nameid <=0 || sd->inventory_data[i] == NULL || itemdb_isequip2(sd->inventory_data[i]))
-			continue;
-		WBUFW(buf,n*18+4)=i+2;
-		if(sd->inventory_data[i]->view_id > 0)
-			WBUFW(buf,n*18+6)=sd->inventory_data[i]->view_id;
-		else
-			WBUFW(buf,n*18+6)=sd->status.inventory[i].nameid;
-		WBUFB(buf,n*18+8)=sd->inventory_data[i]->type;
-		WBUFB(buf,n*18+9)=sd->status.inventory[i].identify;
-		WBUFW(buf,n*18+10)=sd->status.inventory[i].amount;
-		if (sd->inventory_data[i]->equip == 0x8000) {
-			WBUFW(buf,n*18+12)=0x8000;
-			if(sd->status.inventory[i].equip)
-				arrow=i;	// �‚��łɖ���`�F�b�N
-		} else
-			WBUFW(buf,n*18+12)=0;
-		WBUFW(buf,n*18+14)=sd->status.inventory[i].card[0];
-		WBUFW(buf,n*18+16)=sd->status.inventory[i].card[1];
-		WBUFW(buf,n*18+18)=sd->status.inventory[i].card[2];
-		WBUFW(buf,n*18+20)=sd->status.inventory[i].card[3];
-		n++;
-	}
-	if (n) {
-		WBUFW(buf,2)=4+n*18;
-		WFIFOSET(fd,WFIFOW(fd,2));
-	}
-#endif
-	if(arrow >= 0)
-		clif_arrowequip(sd,arrow);
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_equiplist(struct map_session_data *sd)
-{
-	int i,j,n,fd;
-	unsigned char *buf;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	buf = WFIFOP(fd,0);
-	WBUFW(buf,0)=0xa4;
-	for(i=0,n=0;i<MAX_INVENTORY;i++){
-		if(sd->status.inventory[i].nameid<=0 || sd->inventory_data[i] == NULL || !itemdb_isequip2(sd->inventory_data[i]))
-			continue;
-		WBUFW(buf,n*20+4)=i+2;
-		if(sd->inventory_data[i]->view_id > 0)
-			WBUFW(buf,n*20+6)=sd->inventory_data[i]->view_id;
-		else
-			WBUFW(buf,n*20+6)=sd->status.inventory[i].nameid;
-		WBUFB(buf,n*20+8)=(sd->inventory_data[i]->type == 7)? 4:sd->inventory_data[i]->type;
-		WBUFB(buf,n*20+9)=sd->status.inventory[i].identify;
-		WBUFW(buf,n*20+10)=pc_equippoint(sd,i);
-		WBUFW(buf,n*20+12)=sd->status.inventory[i].equip;
-		if(sd->status.inventory[i].broken==1)
-			WBUFB(buf,n*20+14)=1; // is weapon broken [Valaris]
-		else
-			WBUFB(buf,n*20+14)=sd->status.inventory[i].attribute;
-		WBUFB(buf,n*20+15)=sd->status.inventory[i].refine;
-		if(sd->status.inventory[i].card[0]==0x00ff || sd->status.inventory[i].card[0]==0x00fe || sd->status.inventory[i].card[0]==(short)0xff00) {
-			WBUFW(buf,n*20+16)=sd->status.inventory[i].card[0];
-			WBUFW(buf,n*20+18)=sd->status.inventory[i].card[1];
-			WBUFW(buf,n*20+20)=sd->status.inventory[i].card[2];
-			WBUFW(buf,n*20+22)=sd->status.inventory[i].card[3];
-		} else {
-			if(sd->status.inventory[i].card[0] > 0 && (j=itemdb_viewid(sd->status.inventory[i].card[0])) > 0)
-				WBUFW(buf,n*20+16)=j;
-			else
-				WBUFW(buf,n*20+16)=sd->status.inventory[i].card[0];
-			if(sd->status.inventory[i].card[1] > 0 && (j=itemdb_viewid(sd->status.inventory[i].card[1])) > 0)
-				WBUFW(buf,n*20+18)=j;
-			else
-				WBUFW(buf,n*20+18)=sd->status.inventory[i].card[1];
-			if(sd->status.inventory[i].card[2] > 0 && (j=itemdb_viewid(sd->status.inventory[i].card[2])) > 0)
-				WBUFW(buf,n*20+20)=j;
-			else
-				WBUFW(buf,n*20+20)=sd->status.inventory[i].card[2];
-			if(sd->status.inventory[i].card[3] > 0 && (j=itemdb_viewid(sd->status.inventory[i].card[3])) > 0)
-				WBUFW(buf,n*20+22)=j;
-			else
-				WBUFW(buf,n*20+22)=sd->status.inventory[i].card[3];
-		}
-		n++;
-	}
-	if(n){
-		WBUFW(buf,2)=4+n*20;
-		WFIFOSET(fd,WFIFOW(fd,2));
-	}
-	return 0;
-}
-
-/*==========================================
- * �J�v������ɗa���Ă�����Օi&���W�i���X�g
- *------------------------------------------
- */
-int clif_storageitemlist(struct map_session_data *sd,struct storage *stor)
-{
-	struct item_data *id;
-	int i,n,fd;
-	unsigned char *buf;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, stor);
-
-	fd=sd->fd;
-	buf = WFIFOP(fd,0);
-#if PACKETVER < 5
-	WBUFW(buf,0)=0xa5;
-	for(i=0,n=0;i<MAX_STORAGE;i++){
-		if(stor->storage[i].nameid<=0)
-			continue;
-		nullpo_retr(0, id = itemdb_search(stor->storage[i].nameid));
-		if(itemdb_isequip2(id))
-			continue;
-
-		WBUFW(buf,n*10+4)=i+1;
-		if(id->view_id > 0)
-			WBUFW(buf,n*10+6)=id->view_id;
-		else
-			WBUFW(buf,n*10+6)=stor->storage[i].nameid;
-		WBUFB(buf,n*10+8)=id->type;;
-		WBUFB(buf,n*10+9)=stor->storage[i].identify;
-		WBUFW(buf,n*10+10)=stor->storage[i].amount;
-		WBUFW(buf,n*10+12)=0;
-		n++;
-	}
-	if(n){
-		WBUFW(buf,2)=4+n*10;
-		WFIFOSET(fd,WFIFOW(fd,2));
-	}
-#else
-	WBUFW(buf,0)=0x1f0;
-	for(i=0,n=0;i<MAX_STORAGE;i++){
-		if(stor->storage[i].nameid<=0)
-			continue;
-		nullpo_retr(0, id = itemdb_search(stor->storage[i].nameid));
-		if(itemdb_isequip2(id))
-			continue;
-
-		WBUFW(buf,n*18+4)=i+1;
-		if(id->view_id > 0)
-			WBUFW(buf,n*18+6)=id->view_id;
-		else
-			WBUFW(buf,n*18+6)=stor->storage[i].nameid;
-		WBUFB(buf,n*18+8)=id->type;;
-		WBUFB(buf,n*18+9)=stor->storage[i].identify;
-		WBUFW(buf,n*18+10)=stor->storage[i].amount;
-		WBUFW(buf,n*18+12)=0;
-		WBUFW(buf,n*18+14)=stor->storage[i].card[0];
-		WBUFW(buf,n*18+16)=stor->storage[i].card[1];
-		WBUFW(buf,n*18+18)=stor->storage[i].card[2];
-		WBUFW(buf,n*18+20)=stor->storage[i].card[3];
-		n++;
-	}
-	if(n){
-		WBUFW(buf,2)=4+n*18;
-		WFIFOSET(fd,WFIFOW(fd,2));
-	}
-#endif
-	return 0;
-}
-
-/*==========================================
- * �J�v������ɗa���Ă��鑕�����X�g
- *------------------------------------------
- */
-int clif_storageequiplist(struct map_session_data *sd,struct storage *stor)
-{
-	struct item_data *id;
-	int i,j,n,fd;
-	unsigned char *buf;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, stor);
-
-	fd=sd->fd;
-	buf = WFIFOP(fd,0);
-	WBUFW(buf,0)=0xa6;
-	for(i=0,n=0;i<MAX_STORAGE;i++){
-		if(stor->storage[i].nameid<=0)
-			continue;
-		nullpo_retr(0, id = itemdb_search(stor->storage[i].nameid));
-		if(!itemdb_isequip2(id))
-			continue;
-		WBUFW(buf,n*20+4)=i+1;
-		if(id->view_id > 0)
-			WBUFW(buf,n*20+6)=id->view_id;
-		else
-			WBUFW(buf,n*20+6)=stor->storage[i].nameid;
-		WBUFB(buf,n*20+8)=id->type;
-		WBUFB(buf,n*20+9)=stor->storage[i].identify;
-		WBUFW(buf,n*20+10)=id->equip;
-		WBUFW(buf,n*20+12)=stor->storage[i].equip;
-		if(stor->storage[i].broken==1)
-			WBUFB(buf,n*20+14)=1; //is weapon broken [Valaris]
-		else
-			WBUFB(buf,n*20+14)=stor->storage[i].attribute;
-		WBUFB(buf,n*20+15)=stor->storage[i].refine;
-		if(stor->storage[i].card[0]==0x00ff || stor->storage[i].card[0]==0x00fe || stor->storage[i].card[0]==(short)0xff00) {
-			WBUFW(buf,n*20+16)=stor->storage[i].card[0];
-			WBUFW(buf,n*20+18)=stor->storage[i].card[1];
-			WBUFW(buf,n*20+20)=stor->storage[i].card[2];
-			WBUFW(buf,n*20+22)=stor->storage[i].card[3];
-		} else {
-			if(stor->storage[i].card[0] > 0 && (j=itemdb_viewid(stor->storage[i].card[0])) > 0)
-				WBUFW(buf,n*20+16)=j;
-			else
-				WBUFW(buf,n*20+16)=stor->storage[i].card[0];
-			if(stor->storage[i].card[1] > 0 && (j=itemdb_viewid(stor->storage[i].card[1])) > 0)
-				WBUFW(buf,n*20+18)=j;
-			else
-				WBUFW(buf,n*20+18)=stor->storage[i].card[1];
-			if(stor->storage[i].card[2] > 0 && (j=itemdb_viewid(stor->storage[i].card[2])) > 0)
-				WBUFW(buf,n*20+20)=j;
-			else
-				WBUFW(buf,n*20+20)=stor->storage[i].card[2];
-			if(stor->storage[i].card[3] > 0 && (j=itemdb_viewid(stor->storage[i].card[3])) > 0)
-				WBUFW(buf,n*20+22)=j;
-			else
-				WBUFW(buf,n*20+22)=stor->storage[i].card[3];
-		}
-		n++;
-	}
-	if(n){
-		WBUFW(buf,2)=4+n*20;
-		WFIFOSET(fd,WFIFOW(fd,2));
-	}
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_guildstorageitemlist(struct map_session_data *sd,struct guild_storage *stor)
-{
-	struct item_data *id;
-	int i,n,fd;
-	unsigned char *buf;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, stor);
-
-	fd=sd->fd;
-	buf=WFIFOP(fd,0);
-
-#if PACKETVER < 5
-	WBUFW(buf,0)=0xa5;
-	for(i=0,n=0;i<MAX_GUILD_STORAGE;i++){
-		if(stor->storage[i].nameid<=0)
-			continue;
-		nullpo_retr(0, id = itemdb_search(stor->storage[i].nameid));
-		if(itemdb_isequip2(id))
-			continue;
-
-		WBUFW(buf,n*10+4)=i+1;
-		if(id->view_id > 0)
-			WBUFW(buf,n*10+6)=id->view_id;
-		else
-			WBUFW(buf,n*10+6)=stor->storage[i].nameid;
-		WBUFB(buf,n*10+8)=id->type;;
-		WBUFB(buf,n*10+9)=stor->storage[i].identify;
-		WBUFW(buf,n*10+10)=stor->storage[i].amount;
-		WBUFW(buf,n*10+12)=0;
-		n++;
-	}
-	if(n){
-		WBUFW(buf,2)=4+n*10;
-		WFIFOSET(fd,WFIFOW(fd,2));
-	}
-#else
-	WBUFW(buf,0)=0x1f0;
-	for(i=0,n=0;i<MAX_GUILD_STORAGE;i++){
-		if(stor->storage[i].nameid<=0)
-			continue;
-		nullpo_retr(0, id = itemdb_search(stor->storage[i].nameid));
-		if(itemdb_isequip2(id))
-			continue;
-
-		WBUFW(buf,n*18+4)=i+1;
-		if(id->view_id > 0)
-			WBUFW(buf,n*18+6)=id->view_id;
-		else
-			WBUFW(buf,n*18+6)=stor->storage[i].nameid;
-		WBUFB(buf,n*18+8)=id->type;;
-		WBUFB(buf,n*18+9)=stor->storage[i].identify;
-		WBUFW(buf,n*18+10)=stor->storage[i].amount;
-		WBUFW(buf,n*18+12)=0;
-		WBUFW(buf,n*18+14)=stor->storage[i].card[0];
-		WBUFW(buf,n*18+16)=stor->storage[i].card[1];
-		WBUFW(buf,n*18+18)=stor->storage[i].card[2];
-		WBUFW(buf,n*18+20)=stor->storage[i].card[3];
-		n++;
-	}
-	if(n){
-		WBUFW(buf,2)=4+n*18;
-		WFIFOSET(fd,WFIFOW(fd,2));
-	}
-#endif
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_guildstorageequiplist(struct map_session_data *sd,struct guild_storage *stor)
-{
-	struct item_data *id;
-	int i,j,n,fd;
-	unsigned char *buf;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	buf=WFIFOP(fd,0);
-
-	WBUFW(buf,0)=0xa6;
-	for(i=0,n=0;i<MAX_GUILD_STORAGE;i++){
-		if(stor->storage[i].nameid<=0)
-			continue;
-		nullpo_retr(0, id = itemdb_search(stor->storage[i].nameid));
-		if(!itemdb_isequip2(id))
-			continue;
-		WBUFW(buf,n*20+4)=i+1;
-		if(id->view_id > 0)
-			WBUFW(buf,n*20+6)=id->view_id;
-		else
-			WBUFW(buf,n*20+6)=stor->storage[i].nameid;
-		WBUFB(buf,n*20+8)=id->type;
-		WBUFB(buf,n*20+9)=stor->storage[i].identify;
-		WBUFW(buf,n*20+10)=id->equip;
-		WBUFW(buf,n*20+12)=stor->storage[i].equip;
-		if(stor->storage[i].broken==1)
-			WBUFB(buf,n*20+14)=1; // is weapon broken [Valaris]
-		else
-			WBUFB(buf,n*20+14)=stor->storage[i].attribute;
-		WBUFB(buf,n*20+15)=stor->storage[i].refine;
-		if(stor->storage[i].card[0]==0x00ff || stor->storage[i].card[0]==0x00fe || stor->storage[i].card[0]==(short)0xff00) {
-			WBUFW(buf,n*20+16)=stor->storage[i].card[0];
-			WBUFW(buf,n*20+18)=stor->storage[i].card[1];
-			WBUFW(buf,n*20+20)=stor->storage[i].card[2];
-			WBUFW(buf,n*20+22)=stor->storage[i].card[3];
-		} else {
-			if(stor->storage[i].card[0] > 0 && (j=itemdb_viewid(stor->storage[i].card[0])) > 0)
-				WBUFW(buf,n*20+16)=j;
-			else
-				WBUFW(buf,n*20+16)=stor->storage[i].card[0];
-			if(stor->storage[i].card[1] > 0 && (j=itemdb_viewid(stor->storage[i].card[1])) > 0)
-				WBUFW(buf,n*20+18)=j;
-			else
-				WBUFW(buf,n*20+18)=stor->storage[i].card[1];
-			if(stor->storage[i].card[2] > 0 && (j=itemdb_viewid(stor->storage[i].card[2])) > 0)
-				WBUFW(buf,n*20+20)=j;
-			else
-				WBUFW(buf,n*20+20)=stor->storage[i].card[2];
-			if(stor->storage[i].card[3] > 0 && (j=itemdb_viewid(stor->storage[i].card[3])) > 0)
-				WBUFW(buf,n*20+22)=j;
-			else
-				WBUFW(buf,n*20+22)=stor->storage[i].card[3];
-		}
-		n++;
-	}
-	if(n){
-		WBUFW(buf,2)=4+n*20;
-		WFIFOSET(fd,WFIFOW(fd,2));
-	}
-	return 0;
-}
-
-/*==========================================
- * �X�e�[�^�X�𑗂�‚���
- * �\����p�����͂��̒��Ōv�Z���đ���
- *------------------------------------------
- */
-int clif_updatestatus(struct map_session_data *sd,int type)
-{
-	int fd,len=8;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-
-	WFIFOW(fd,0)=0xb0;
-	WFIFOW(fd,2)=type;
-	switch(type){
-		// 00b0
-	case SP_WEIGHT:
-		pc_checkweighticon(sd);
-		WFIFOW(fd,0)=0xb0;
-		WFIFOW(fd,2)=type;
-		WFIFOL(fd,4)=sd->weight;
-		break;
-	case SP_MAXWEIGHT:
-		WFIFOL(fd,4)=sd->max_weight;
-		break;
-	case SP_SPEED:
-		WFIFOL(fd,4)=sd->speed;
-		break;
-	case SP_BASELEVEL:
-		WFIFOL(fd,4)=sd->status.base_level;
-		break;
-	case SP_JOBLEVEL:
-		WFIFOL(fd,4)=sd->status.job_level;
-		break;
-	case SP_MANNER:
-		WFIFOL(fd,4)=sd->status.manner;
-		clif_changestatus(&sd->bl,SP_MANNER,sd->status.manner);
-		break;
-	case SP_STATUSPOINT:
-		WFIFOL(fd,4)=sd->status.status_point;
-		break;
-	case SP_SKILLPOINT:
-		WFIFOL(fd,4)=sd->status.skill_point;
-		break;
-	case SP_HIT:
-		WFIFOL(fd,4)=sd->hit;
-		break;
-	case SP_FLEE1:
-		WFIFOL(fd,4)=sd->flee;
-		break;
-	case SP_FLEE2:
-		WFIFOL(fd,4)=sd->flee2/10;
-		break;
-	case SP_MAXHP:
-		WFIFOL(fd,4)=sd->status.max_hp;
-		break;
-	case SP_MAXSP:
-		WFIFOL(fd,4)=sd->status.max_sp;
-		break;
-	case SP_HP:
-		WFIFOL(fd,4)=sd->status.hp;
-		break;
-	case SP_SP:
-		WFIFOL(fd,4)=sd->status.sp;
-		break;
-	case SP_ASPD:
-		WFIFOL(fd,4)=sd->aspd;
-		break;
-	case SP_ATK1:
-		WFIFOL(fd,4)=sd->base_atk+sd->watk;
-		break;
-	case SP_DEF1:
-		WFIFOL(fd,4)=sd->def;
-		break;
-	case SP_MDEF1:
-		WFIFOL(fd,4)=sd->mdef;
-		break;
-	case SP_ATK2:
-		WFIFOL(fd,4)=sd->watk2;
-		break;
-	case SP_DEF2:
-		WFIFOL(fd,4)=sd->def2;
-		break;
-	case SP_MDEF2:
-		WFIFOL(fd,4)=sd->mdef2;
-		break;
-	case SP_CRITICAL:
-		WFIFOL(fd,4)=sd->critical/10;
-		break;
-	case SP_MATK1:
-		WFIFOL(fd,4)=sd->matk1;
-		break;
-	case SP_MATK2:
-		WFIFOL(fd,4)=sd->matk2;
-		break;
-
-
-	case SP_ZENY:
-		WFIFOW(fd,0)=0xb1;
-		if(sd->status.zeny < 0)
-			sd->status.zeny = 0;
-		WFIFOL(fd,4)=sd->status.zeny;
-		break;
-	case SP_BASEEXP:
-		WFIFOW(fd,0)=0xb1;
-		WFIFOL(fd,4)=sd->status.base_exp;
-		break;
-	case SP_JOBEXP:
-		WFIFOW(fd,0)=0xb1;
-		WFIFOL(fd,4)=sd->status.job_exp;
-		break;
-	case SP_NEXTBASEEXP:
-		WFIFOW(fd,0)=0xb1;
-		WFIFOL(fd,4)=pc_nextbaseexp(sd);
-		break;
-	case SP_NEXTJOBEXP:
-		WFIFOW(fd,0)=0xb1;
-		WFIFOL(fd,4)=pc_nextjobexp(sd);
-		break;
-
-		// 00be �I��
-	case SP_USTR:
-	case SP_UAGI:
-	case SP_UVIT:
-	case SP_UINT:
-	case SP_UDEX:
-	case SP_ULUK:
-		WFIFOW(fd,0)=0xbe;
-		WFIFOB(fd,4)=pc_need_status_point(sd,type-SP_USTR+SP_STR);
-		len=5;
-		break;
-
-		// 013a �I��
-	case SP_ATTACKRANGE:
-		WFIFOW(fd,0)=0x13a;
-		WFIFOW(fd,2)=sd->attackrange;
-		len=4;
-		break;
-
-		// 0141 �I��
-	case SP_STR:
-		WFIFOW(fd,0)=0x141;
-		WFIFOL(fd,2)=type;
-		WFIFOL(fd,6)=sd->status.str;
-		WFIFOL(fd,10)=sd->paramb[0] + sd->parame[0];
-		len=14;
-		break;
-	case SP_AGI:
-		WFIFOW(fd,0)=0x141;
-		WFIFOL(fd,2)=type;
-		WFIFOL(fd,6)=sd->status.agi;
-		WFIFOL(fd,10)=sd->paramb[1] + sd->parame[1];
-		len=14;
-		break;
-	case SP_VIT:
-		WFIFOW(fd,0)=0x141;
-		WFIFOL(fd,2)=type;
-		WFIFOL(fd,6)=sd->status.vit;
-		WFIFOL(fd,10)=sd->paramb[2] + sd->parame[2];
-		len=14;
-		break;
-	case SP_INT:
-		WFIFOW(fd,0)=0x141;
-		WFIFOL(fd,2)=type;
-		WFIFOL(fd,6)=sd->status.int_;
-		WFIFOL(fd,10)=sd->paramb[3] + sd->parame[3];
-		len=14;
-		break;
-	case SP_DEX:
-		WFIFOW(fd,0)=0x141;
-		WFIFOL(fd,2)=type;
-		WFIFOL(fd,6)=sd->status.dex;
-		WFIFOL(fd,10)=sd->paramb[4] + sd->parame[4];
-		len=14;
-		break;
-	case SP_LUK:
-		WFIFOW(fd,0)=0x141;
-		WFIFOL(fd,2)=type;
-		WFIFOL(fd,6)=sd->status.luk;
-		WFIFOL(fd,10)=sd->paramb[5] + sd->parame[5];
-		len=14;
-		break;
-
-	case SP_CARTINFO:
-		WFIFOW(fd,0)=0x121;
-		WFIFOW(fd,2)=sd->cart_num;
-		WFIFOW(fd,4)=sd->cart_max_num;
-		WFIFOL(fd,6)=sd->cart_weight;
-		WFIFOL(fd,10)=sd->cart_max_weight;
-		len=14;
-		break;
-
-	default:
-		if(battle_config.error_log)
-			printf("clif_updatestatus : make %d routine\n",type);
-		return 1;
-	}
-	WFIFOSET(fd,len);
-
-	return 0;
-}
-int clif_changestatus(struct block_list *bl,int type,int val)
-{
-	unsigned char buf[12];
-	struct map_session_data *sd = NULL;
-
-	nullpo_retr(0, bl);
-
-	if(bl->type == BL_PC)
-		sd = (struct map_session_data *)bl;
-
-//printf("clif_changestatus id:%d type:%d val:%d\n",bl->id,type,val);
-	if(sd){
-		WBUFW(buf,0)=0x1ab;
-		WBUFL(buf,2)=bl->id;
-		WBUFW(buf,6)=type;
-		switch(type){
-		case SP_MANNER:
-			WBUFL(buf,8)=val;
-			break;
-		default:
-			if(battle_config.error_log)
-				printf("clif_changestatus : make %d routine\n",type);
-			return 1;
-		}
-		clif_send(buf,packet_len_table[0x1ab],bl,AREA_WOS);
-	}
-	return 0;
-}
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_changelook(struct block_list *bl,int type,int val)
-{
-
-	unsigned char buf[32];
-	struct map_session_data *sd = NULL;
-
-	nullpo_retr(0, bl);
-
-	if(bl->type == BL_PC)
-		sd = (struct map_session_data *)bl;
-
-	if(sd && sd->disguise > 23 && sd->disguise < 4001) // mob disguises [Valaris]
-		return 0;
-
-#if PACKETVER < 4
-	if(sd && (type == LOOK_WEAPON || type == LOOK_SHIELD) && sd->view_class == 22)
-		val =0;
-	WBUFW(buf,0)=0xc3;
-	WBUFL(buf,2)=bl->id;
-	WBUFB(buf,6)=type;
-	WBUFB(buf,7)=val;
-	clif_send(buf,packet_len_table[0xc3],bl,AREA);
-#else
-	if(sd && (type == LOOK_WEAPON || type == LOOK_SHIELD || type == LOOK_SHOES)) {
-		WBUFW(buf,0)=0x1d7;
-		WBUFL(buf,2)=bl->id;
-		if(type == LOOK_SHOES) {
-			WBUFB(buf,6)=9;
-			if(sd->equip_index[2] >= 0 && sd->inventory_data[sd->equip_index[2]]) {
-				if(sd->inventory_data[sd->equip_index[2]]->view_id > 0)
-					WBUFW(buf,7)=sd->inventory_data[sd->equip_index[2]]->view_id;
-				else
-					WBUFW(buf,7)=sd->status.inventory[sd->equip_index[2]].nameid;
-			} else
-				WBUFW(buf,7)=0;
-			WBUFW(buf,9)=0;
-		}
-		else {
-			WBUFB(buf,6)=2;
-			if(sd->equip_index[9] >= 0 && sd->inventory_data[sd->equip_index[9]] && sd->view_class != 22) {
-				if(sd->inventory_data[sd->equip_index[9]]->view_id > 0)
-					WBUFW(buf,7)=sd->inventory_data[sd->equip_index[9]]->view_id;
-				else
-					WBUFW(buf,7)=sd->status.inventory[sd->equip_index[9]].nameid;
-			} else
-				WBUFW(buf,7)=0;
-			if(sd->equip_index[8] >= 0 && sd->equip_index[8] != sd->equip_index[9] && sd->inventory_data[sd->equip_index[8]] &&
-				sd->view_class != 22) {
-				if(sd->inventory_data[sd->equip_index[8]]->view_id > 0)
-					WBUFW(buf,9)=sd->inventory_data[sd->equip_index[8]]->view_id;
-				else
-					WBUFW(buf,9)=sd->status.inventory[sd->equip_index[8]].nameid;
-			} else
-				WBUFW(buf,9)=0;
-		}
-		clif_send(buf,packet_len_table[0x1d7],bl,AREA);
-	}
-	else if(sd && (type == LOOK_BASE) && (val > 255))
-		{
-		WBUFW(buf,0)=0x1d7;
-		WBUFL(buf,2)=bl->id;
-		WBUFB(buf,6)=type;
-		WBUFW(buf,7)=val;
-		WBUFW(buf,9)=0;
-		clif_send(buf,packet_len_table[0x1d7],bl,AREA);
-	} else {
-		WBUFW(buf,0)=0xc3;
-		WBUFL(buf,2)=bl->id;
-		WBUFB(buf,6)=type;
-		WBUFB(buf,7)=val;
-		clif_send(buf,packet_len_table[0xc3],bl,AREA);
-	}
-#endif
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_initialstatus(struct map_session_data *sd)
-{
-	int fd;
-	unsigned char *buf;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	buf=WFIFOP(fd,0);
-
-	WBUFW(buf,0)=0xbd;
-	WBUFW(buf,2)=sd->status.status_point;
-	WBUFB(buf,4)=(sd->status.str > 255)? 255:sd->status.str;
-	WBUFB(buf,5)=pc_need_status_point(sd,SP_STR);
-	WBUFB(buf,6)=(sd->status.agi > 255)? 255:sd->status.agi;
-	WBUFB(buf,7)=pc_need_status_point(sd,SP_AGI);
-	WBUFB(buf,8)=(sd->status.vit > 255)? 255:sd->status.vit;
-	WBUFB(buf,9)=pc_need_status_point(sd,SP_VIT);
-	WBUFB(buf,10)=(sd->status.int_ > 255)? 255:sd->status.int_;
-	WBUFB(buf,11)=pc_need_status_point(sd,SP_INT);
-	WBUFB(buf,12)=(sd->status.dex > 255)? 255:sd->status.dex;
-	WBUFB(buf,13)=pc_need_status_point(sd,SP_DEX);
-	WBUFB(buf,14)=(sd->status.luk > 255)? 255:sd->status.luk;
-	WBUFB(buf,15)=pc_need_status_point(sd,SP_LUK);
-
-	WBUFW(buf,16) = sd->base_atk + sd->watk;
-	WBUFW(buf,18) = sd->watk2; //atk bonus
-	WBUFW(buf,20) = sd->matk1;
-	WBUFW(buf,22) = sd->matk2;
-	WBUFW(buf,24) = sd->def; // def
-	WBUFW(buf,26) = sd->def2;
-	WBUFW(buf,28) = sd->mdef; // mdef
-	WBUFW(buf,30) = sd->mdef2;
-	WBUFW(buf,32) = sd->hit;
-	WBUFW(buf,34) = sd->flee;
-	WBUFW(buf,36) = sd->flee2/10;
-	WBUFW(buf,38) = sd->critical/10;
-	WBUFW(buf,40) = sd->status.karma;
-	WBUFW(buf,42) = sd->status.manner;
-
-	WFIFOSET(fd,packet_len_table[0xbd]);
-
-	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);
-
-	clif_updatestatus(sd,SP_ATTACKRANGE);
-	clif_updatestatus(sd,SP_ASPD);
-
-	return 0;
-}
-
-/*==========================================
- *���
- *------------------------------------------
- */
-int clif_arrowequip(struct map_session_data *sd,int val)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	if(sd->attacktarget && sd->attacktarget > 0) // [Valaris]
-		sd->attacktarget = 0;
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x013c;
-	WFIFOW(fd,2)=val+2;//��̃A�C�e��ID
-
-	WFIFOSET(fd,packet_len_table[0x013c]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_arrow_fail(struct map_session_data *sd,int type)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x013b;
-	WFIFOW(fd,2)=type;
-
-	WFIFOSET(fd,packet_len_table[0x013b]);
-
-	return 0;
-}
-
-/*==========================================
- * �쐬�”\ ��X�g���M
- *------------------------------------------
- */
-int clif_arrow_create_list(struct map_session_data *sd)
-{
-	int i,c,view;
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x1ad;
-
-	for(i=0,c=0;i<MAX_SKILL_ARROW_DB;i++){
-		if(skill_arrow_db[i].nameid > 0 && pc_search_inventory(sd,skill_arrow_db[i].nameid)>=0){
-			if((view = itemdb_viewid(skill_arrow_db[i].nameid)) > 0)
-				WFIFOW(fd,c*2+4) = view;
-			else
-				WFIFOW(fd,c*2+4) = skill_arrow_db[i].nameid;
-			c++;
-		}
-	}
-	WFIFOW(fd,2)=c*2+4;
-	WFIFOSET(fd,WFIFOW(fd,2));
-	if(c > 0) sd->state.make_arrow_flag = 1;
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_statusupack(struct map_session_data *sd,int type,int ok,int val)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xbc;
-	WFIFOW(fd,2)=type;
-	WFIFOB(fd,4)=ok;
-	WFIFOB(fd,5)=val;
-	WFIFOSET(fd,packet_len_table[0xbc]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_equipitemack(struct map_session_data *sd,int n,int pos,int ok)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xaa;
-	WFIFOW(fd,2)=n+2;
-	WFIFOW(fd,4)=pos;
-	WFIFOB(fd,6)=ok;
-	WFIFOSET(fd,packet_len_table[0xaa]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_unequipitemack(struct map_session_data *sd,int n,int pos,int ok)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xac;
-	WFIFOW(fd,2)=n+2;
-	WFIFOW(fd,4)=pos;
-	WFIFOB(fd,6)=ok;
-	WFIFOSET(fd,packet_len_table[0xac]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_misceffect(struct block_list* bl,int type)
-{
-	char buf[32];
-
-	nullpo_retr(0, bl);
-
-	WBUFW(buf,0) = 0x19b;
-	WBUFL(buf,2) = bl->id;
-	WBUFL(buf,6) = type;
-
-	clif_send(buf,packet_len_table[0x19b],bl,AREA);
-
-	return 0;
-}
-int clif_misceffect2(struct block_list *bl, int type) {
-	unsigned char buf[24];
-
-	nullpo_retr(0, bl);
-
-	memset(buf, 0, packet_len_table[0x1f3]);
-
-	WBUFW(buf,0) = 0x1f3;
-	WBUFL(buf,2) = bl->id;
-	WBUFL(buf,6) = type;
-
-	clif_send(buf, packet_len_table[0x1f3], bl, AREA);
-
-	return 0;
-
-}
-/*==========================================
- * �\���I�v�V�����ύX
- *------------------------------------------
- */
-int clif_changeoption(struct block_list* bl)
-{
-	char buf[32];
-	short option;
-	struct status_change *sc_data;
-	static const int omask[]={ 0x10,0x20 };
-	static const int scnum[]={ SC_FALCON, SC_RIDING };
-	int i;
-
-	nullpo_retr(0, bl);
-
-	option = *battle_get_option(bl);
-	sc_data = battle_get_sc_data(bl);
-
-	WBUFW(buf,0) = 0x119;
-	WBUFL(buf,2) = bl->id;
-	WBUFW(buf,6) = *battle_get_opt1(bl);
-	WBUFW(buf,8) = *battle_get_opt2(bl);
-	WBUFW(buf,10) = option;
-	WBUFB(buf,12) = 0;	// ??
-
-	if(bl->type==BL_PC) { // disguises [Valaris]
-		struct map_session_data *sd=((struct map_session_data *)bl);
-		if(sd && sd->disguise > 23 && sd->disguise < 4001) {
-			clif_send(buf,packet_len_table[0x119],bl,AREA_WOS);
-			clif_spawnpc(sd);
-		} else
-			clif_send(buf,packet_len_table[0x119],bl,AREA);
-	} else
-		clif_send(buf,packet_len_table[0x119],bl,AREA);
-
-	// �A�C�R���̕\��
-	for(i=0;i<sizeof(omask)/sizeof(omask[0]);i++){
-		if( option&omask[i] ){
-			if( sc_data[scnum[i]].timer==-1)
-				skill_status_change_start(bl,scnum[i],0,0,0,0,0,0);
-		} else {
-			skill_status_change_end(bl,scnum[i],-1);
-		}
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_useitemack(struct map_session_data *sd,int index,int amount,int ok)
-{
-	nullpo_retr(0, sd);
-
-	if(!ok) {
-		int fd=sd->fd;
-		WFIFOW(fd,0)=0xa8;
-		WFIFOW(fd,2)=index+2;
-		WFIFOW(fd,4)=amount;
-		WFIFOB(fd,6)=ok;
-		WFIFOSET(fd,packet_len_table[0xa8]);
-	}
-	else {
-#if PACKETVER < 3
-		int fd=sd->fd;
-		WFIFOW(fd,0)=0xa8;
-		WFIFOW(fd,2)=index+2;
-		WFIFOW(fd,4)=amount;
-		WFIFOB(fd,6)=ok;
-		WFIFOSET(fd,packet_len_table[0xa8]);
-#else
-		char buf[32];
-
-		WBUFW(buf,0)=0x1c8;
-		WBUFW(buf,2)=index+2;
-		if(sd->inventory_data[index] && sd->inventory_data[index]->view_id > 0)
-			WBUFW(buf,4)=sd->inventory_data[index]->view_id;
-		else
-			WBUFW(buf,4)=sd->status.inventory[index].nameid;
-		WBUFL(buf,6)=sd->bl.id;
-		WBUFW(buf,10)=amount;
-		WBUFB(buf,12)=ok;
-		clif_send(buf,packet_len_table[0x1c8],&sd->bl,AREA);
-#endif
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_createchat(struct map_session_data *sd,int fail)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xd6;
-	WFIFOB(fd,2)=fail;
-	WFIFOSET(fd,packet_len_table[0xd6]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_dispchat(struct chat_data *cd,int fd)
-{
-	char buf[128];	// �ő�title(60�o�C�g)+17
-
-	if(cd==NULL || *cd->owner==NULL)
-		return 1;
-
-	WBUFW(buf,0)=0xd7;
-	WBUFW(buf,2)=strlen(cd->title)+17;
-	WBUFL(buf,4)=(*cd->owner)->id;
-	WBUFL(buf,8)=cd->bl.id;
-	WBUFW(buf,12)=cd->limit;
-	WBUFW(buf,14)=cd->users;
-	WBUFB(buf,16)=cd->pub;
-	strcpy(WBUFP(buf,17),cd->title);
-	if(fd){
-		memcpy(WFIFOP(fd,0),buf,WBUFW(buf,2));
-		WFIFOSET(fd,WBUFW(buf,2));
-	} else {
-		clif_send(buf,WBUFW(buf,2),*cd->owner,AREA_WOSC);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * chat�̏�ԕύX����
- * �O���̐l�p�Ɩ��߃R�[�h(d7->df)���Ⴄ����
- *------------------------------------------
- */
-int clif_changechatstatus(struct chat_data *cd)
-{
-	char buf[128];	// �ő�title(60�o�C�g)+17
-
-	if(cd==NULL || cd->usersd[0]==NULL)
-		return 1;
-
-	WBUFW(buf,0)=0xdf;
-	WBUFW(buf,2)=strlen(cd->title)+17;
-	WBUFL(buf,4)=cd->usersd[0]->bl.id;
-	WBUFL(buf,8)=cd->bl.id;
-	WBUFW(buf,12)=cd->limit;
-	WBUFW(buf,14)=cd->users;
-	WBUFB(buf,16)=cd->pub;
-	strcpy(WBUFP(buf,17),cd->title);
-	clif_send(buf,WBUFW(buf,2),&cd->usersd[0]->bl,CHAT);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_clearchat(struct chat_data *cd,int fd)
-{
-	char buf[32];
-
-	nullpo_retr(0, cd);
-
-	WBUFW(buf,0)=0xd8;
-	WBUFL(buf,2)=cd->bl.id;
-	if(fd){
-		memcpy(WFIFOP(fd,0),buf,packet_len_table[0xd8]);
-		WFIFOSET(fd,packet_len_table[0xd8]);
-	} else {
-		clif_send(buf,packet_len_table[0xd8],*cd->owner,AREA_WOSC);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_joinchatfail(struct map_session_data *sd,int fail)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-
-	WFIFOW(fd,0)=0xda;
-	WFIFOB(fd,2)=fail;
-	WFIFOSET(fd,packet_len_table[0xda]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_joinchatok(struct map_session_data *sd,struct chat_data* cd)
-{
-	int fd;
-	int i;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, cd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xdb;
-	WFIFOW(fd,2)=8+(28*cd->users);
-	WFIFOL(fd,4)=cd->bl.id;
-	for(i = 0;i < cd->users;i++){
-		WFIFOL(fd,8+i*28) = (i!=0)||((*cd->owner)->type==BL_NPC);
-		memcpy(WFIFOP(fd,8+i*28+4),cd->usersd[i]->status.name,24);
-	}
-	WFIFOSET(fd,WFIFOW(fd,2));
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_addchat(struct chat_data* cd,struct map_session_data *sd)
-{
-	char buf[32];
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, cd);
-
-	WBUFW(buf, 0) = 0x0dc;
-	WBUFW(buf, 2) = cd->users;
-	memcpy(WBUFP(buf, 4),sd->status.name,24);
-	clif_send(buf,packet_len_table[0xdc],&sd->bl,CHAT_WOS);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_changechatowner(struct chat_data* cd,struct map_session_data *sd)
-{
-	char buf[64];
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, cd);
-
-	WBUFW(buf, 0) = 0xe1;
-	WBUFL(buf, 2) = 1;
-	memcpy(WBUFP(buf,6),cd->usersd[0]->status.name,24);
-	WBUFW(buf,30) = 0xe1;
-	WBUFL(buf,32) = 0;
-	memcpy(WBUFP(buf,36),sd->status.name,24);
-
-	clif_send(buf,packet_len_table[0xe1]*2,&sd->bl,CHAT);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_leavechat(struct chat_data* cd,struct map_session_data *sd)
-{
-	char buf[32];
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, cd);
-
-	WBUFW(buf, 0) = 0xdd;
-	WBUFW(buf, 2) = cd->users-1;
-	memcpy(WBUFP(buf,4),sd->status.name,24);
-	WBUFB(buf,28) = 0;
-
-	clif_send(buf,packet_len_table[0xdd],&sd->bl,CHAT);
-
-	return 0;
-}
-
-/*==========================================
- * �������v����
- *------------------------------------------
- */
-int clif_traderequest(struct map_session_data *sd,char *name)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xe5;
-	strcpy(WFIFOP(fd,2),name);
-	WFIFOSET(fd,packet_len_table[0xe5]);
-
-	return 0;
-}
-
-/*==========================================
- * �������v������
- *------------------------------------------
- */
-int clif_tradestart(struct map_session_data *sd,int type)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xe7;
-	WFIFOB(fd,2)=type;
-	WFIFOSET(fd,packet_len_table[0xe7]);
-
-	return 0;
-}
-
-/*==========================================
- * ���������̃A�C�e���lj�
- *------------------------------------------
- */
-int clif_tradeadditem(struct map_session_data *sd,struct map_session_data *tsd,int index,int amount)
-{
-	int fd,j;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, tsd);
-
-	fd=tsd->fd;
-	WFIFOW(fd,0)=0xe9;
-	WFIFOL(fd,2)=amount;
-	if(index==0){
-		WFIFOW(fd,6) = 0; // type id
-		WFIFOB(fd,8) = 0; //identify flag
-		WFIFOB(fd,9) = 0; // attribute
-		WFIFOB(fd,10)= 0; //refine
-		WFIFOW(fd,11)= 0; //card (4w)
-		WFIFOW(fd,13)= 0; //card (4w)
-		WFIFOW(fd,15)= 0; //card (4w)
-		WFIFOW(fd,17)= 0; //card (4w)
-	}
-	else{
-		index -= 2;
-		if(sd->inventory_data[index] && sd->inventory_data[index]->view_id > 0)
-			WFIFOW(fd,6) = sd->inventory_data[index]->view_id;
-		else
-			WFIFOW(fd,6) = sd->status.inventory[index].nameid; // type id
-		WFIFOB(fd,8) = sd->status.inventory[index].identify; //identify flag
-		if(sd->status.inventory[index].broken==1)
-			WFIFOB(fd,9) = 1; // is broke weapon [Valaris]
-		else
-			WFIFOB(fd,9) = sd->status.inventory[index].attribute; // attribute
-		WFIFOB(fd,10)= sd->status.inventory[index].refine; //refine
-		if(sd->status.inventory[index].card[0]==0x00ff || sd->status.inventory[index].card[0]==0x00fe || sd->status.inventory[index].card[0]==(short)0xff00) {
-			WFIFOW(fd,11)= sd->status.inventory[index].card[0]; //card (4w)
-			WFIFOW(fd,13)= sd->status.inventory[index].card[1]; //card (4w)
-			WFIFOW(fd,15)= sd->status.inventory[index].card[2]; //card (4w)
-			WFIFOW(fd,17)= sd->status.inventory[index].card[3]; //card (4w)
-		} else {
-			if(sd->status.inventory[index].card[0] > 0 && (j=itemdb_viewid(sd->status.inventory[index].card[0])) > 0)
-				WFIFOW(fd,11)= j;
-			else
-				WFIFOW(fd,11)= sd->status.inventory[index].card[0];
-			if(sd->status.inventory[index].card[1] > 0 && (j=itemdb_viewid(sd->status.inventory[index].card[1])) > 0)
-				WFIFOW(fd,13)= j;
-			else
-				WFIFOW(fd,13)= sd->status.inventory[index].card[1];
-			if(sd->status.inventory[index].card[2] > 0 && (j=itemdb_viewid(sd->status.inventory[index].card[2])) > 0)
-				WFIFOW(fd,15)= j;
-			else
-				WFIFOW(fd,15)= sd->status.inventory[index].card[2];
-			if(sd->status.inventory[index].card[3] > 0 && (j=itemdb_viewid(sd->status.inventory[index].card[3])) > 0)
-				WFIFOW(fd,17)= j;
-			else
-				WFIFOW(fd,17)= sd->status.inventory[index].card[3];
-		}
-	}
-	WFIFOSET(fd,packet_len_table[0xe9]);
-
-	return 0;
-}
-
-/*==========================================
- * �A�C�e���lj�����/���s
- *------------------------------------------
- */
-int clif_tradeitemok(struct map_session_data *sd,int index,int amount,int fail)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-    WFIFOW(fd,0)=0x1b1;
-	//WFIFOW(fd,0)=0xea;
-	WFIFOW(fd,2)=index;
-	WFIFOW(fd,4)=amount;
-    WFIFOB(fd,6)=fail;
-	WFIFOSET(fd,packet_len_table[0x1b1]);
-
-	return 0;
-}
-
-/*==========================================
- * ������ok����
- *------------------------------------------
- */
-int clif_tradedeal_lock(struct map_session_data *sd,int fail)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xec;
-	WFIFOB(fd,2)=fail; // 0=you 1=the other person
-	WFIFOSET(fd,packet_len_table[0xec]);
-
-	return 0;
-}
-
-/*==========================================
- * ���������L�����Z������܂���
- *------------------------------------------
- */
-int clif_tradecancelled(struct map_session_data *sd)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xee;
-	WFIFOSET(fd,packet_len_table[0xee]);
-
-	return 0;
-}
-
-/*==========================================
- * ����������
- *------------------------------------------
- */
-int clif_tradecompleted(struct map_session_data *sd,int fail)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xf0;
-	WFIFOB(fd,2)=fail;
-	WFIFOSET(fd,packet_len_table[0xf0]);
-
-	return 0;
-}
-
-/*==========================================
- * �J�v���q�ɂ̃A�C�e�������X�V
- *------------------------------------------
- */
-int clif_updatestorageamount(struct map_session_data *sd,struct storage *stor)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, stor);
-
-	fd=sd->fd;
-	WFIFOW(fd,0) = 0xf2;  // update storage amount
-	WFIFOW(fd,2) = stor->storage_amount;  //items
-	WFIFOW(fd,4) = MAX_STORAGE; //items max
-	WFIFOSET(fd,packet_len_table[0xf2]);
-
-	return 0;
-}
-
-/*==========================================
- * �J�v���q�ɂɃA�C�e����lj�����
- *------------------------------------------
- */
-int clif_storageitemadded(struct map_session_data *sd,struct storage *stor,int index,int amount)
-{
-	int view,fd,j;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, stor);
-
-	fd=sd->fd;
-	WFIFOW(fd,0) =0xf4; // Storage item added
-	WFIFOW(fd,2) =index+1; // index
-	WFIFOL(fd,4) =amount; // amount
-	if((view = itemdb_viewid(stor->storage[index].nameid)) > 0)
-		WFIFOW(fd,8) =view;
-	else
-		WFIFOW(fd,8) =stor->storage[index].nameid; // id
-	WFIFOB(fd,10)=stor->storage[index].identify; //identify flag
-	if(stor->storage[index].broken==1)
-		WFIFOB(fd,11)=1; // is weapon broken [Valaris]
-	else
-		WFIFOB(fd,11)=stor->storage[index].attribute; // attribute
-	WFIFOB(fd,12)=stor->storage[index].refine; //refine
-	if(stor->storage[index].card[0]==0x00ff || stor->storage[index].card[0]==0x00fe || stor->storage[index].card[0]==(short)0xff00) {
-		WFIFOW(fd,13)=stor->storage[index].card[0]; //card (4w)
-		WFIFOW(fd,15)=stor->storage[index].card[1]; //card (4w)
-		WFIFOW(fd,17)=stor->storage[index].card[2]; //card (4w)
-		WFIFOW(fd,19)=stor->storage[index].card[3]; //card (4w)
-	} else {
-		if(stor->storage[index].card[0] > 0 && (j=itemdb_viewid(stor->storage[index].card[0])) > 0)
-			WFIFOW(fd,13)= j;
-		else
-			WFIFOW(fd,13)= stor->storage[index].card[0];
-		if(stor->storage[index].card[1] > 0 && (j=itemdb_viewid(stor->storage[index].card[1])) > 0)
-			WFIFOW(fd,15)= j;
-		else
-			WFIFOW(fd,15)= stor->storage[index].card[1];
-		if(stor->storage[index].card[2] > 0 && (j=itemdb_viewid(stor->storage[index].card[2])) > 0)
-			WFIFOW(fd,17)= j;
-		else
-			WFIFOW(fd,17)= stor->storage[index].card[2];
-		if(stor->storage[index].card[3] > 0 && (j=itemdb_viewid(stor->storage[index].card[3])) > 0)
-			WFIFOW(fd,19)= j;
-		else
-			WFIFOW(fd,19)= stor->storage[index].card[3];
-	}
-	WFIFOSET(fd,packet_len_table[0xf4]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_updateguildstorageamount(struct map_session_data *sd,struct guild_storage *stor)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, stor);
-
-	fd=sd->fd;
-	WFIFOW(fd,0) = 0xf2;  // update storage amount
-	WFIFOW(fd,2) = stor->storage_amount;  //items
-	WFIFOW(fd,4) = MAX_GUILD_STORAGE; //items max
-	WFIFOSET(fd,packet_len_table[0xf2]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_guildstorageitemadded(struct map_session_data *sd,struct guild_storage *stor,int index,int amount)
-{
-	int view,fd,j;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, stor);
-
-	fd=sd->fd;
-	WFIFOW(fd,0) =0xf4; // Storage item added
-	WFIFOW(fd,2) =index+1; // index
-	WFIFOL(fd,4) =amount; // amount
-	if((view = itemdb_viewid(stor->storage[index].nameid)) > 0)
-		WFIFOW(fd,8) =view;
-	else
-		WFIFOW(fd,8) =stor->storage[index].nameid; // id
-	WFIFOB(fd,10)=stor->storage[index].identify; //identify flag
-	if(stor->storage[index].broken==1)
-		WFIFOB(fd,11)=1; // is weapon broken [Valaris]
-	else
-		WFIFOB(fd,11)=stor->storage[index].attribute; // attribute
-	WFIFOB(fd,12)=stor->storage[index].refine; //refine
-	if(stor->storage[index].card[0]==0x00ff || stor->storage[index].card[0]==0x00fe || stor->storage[index].card[0]==(short)0xff00) {
-		WFIFOW(fd,13)=stor->storage[index].card[0]; //card (4w)
-		WFIFOW(fd,15)=stor->storage[index].card[1]; //card (4w)
-		WFIFOW(fd,17)=stor->storage[index].card[2]; //card (4w)
-		WFIFOW(fd,19)=stor->storage[index].card[3]; //card (4w)
-	} else {
-		if(stor->storage[index].card[0] > 0 && (j=itemdb_viewid(stor->storage[index].card[0])) > 0)
-			WFIFOW(fd,13)= j;
-		else
-			WFIFOW(fd,13)= stor->storage[index].card[0];
-		if(stor->storage[index].card[1] > 0 && (j=itemdb_viewid(stor->storage[index].card[1])) > 0)
-			WFIFOW(fd,15)= j;
-		else
-			WFIFOW(fd,15)= stor->storage[index].card[1];
-		if(stor->storage[index].card[2] > 0 && (j=itemdb_viewid(stor->storage[index].card[2])) > 0)
-			WFIFOW(fd,17)= j;
-		else
-			WFIFOW(fd,17)= stor->storage[index].card[2];
-		if(stor->storage[index].card[3] > 0 && (j=itemdb_viewid(stor->storage[index].card[3])) > 0)
-			WFIFOW(fd,19)= j;
-		else
-			WFIFOW(fd,19)= stor->storage[index].card[3];
-	}
-	WFIFOSET(fd,packet_len_table[0xf4]);
-
-	return 0;
-}
-
-/*==========================================
- * �J�v���q�ɂ���A�C�e������苎��
- *------------------------------------------
- */
-int clif_storageitemremoved(struct map_session_data *sd,int index,int amount)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xf6; // Storage item removed
-	WFIFOW(fd,2)=index+1;
-	WFIFOL(fd,4)=amount;
-	WFIFOSET(fd,packet_len_table[0xf6]);
-
-	return 0;
-}
-
-/*==========================================
- * �J�v���q�ɂ�‚���
- *------------------------------------------
- */
-int clif_storageclose(struct map_session_data *sd)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xf8; // Storage Closed
-	WFIFOSET(fd,packet_len_table[0xf8]);
-
-	return 0;
-}
-
-//
-// callback�n ?
-//
-/*==========================================
- * PC�\��
- *------------------------------------------
- */
-void clif_getareachar_pc(struct map_session_data* sd,struct map_session_data* dstsd)
-{
-	int len;
-
-	nullpo_retv(sd);
-	nullpo_retv(dstsd);
-
-	if(dstsd->walktimer != -1){
-		len = clif_set007b(dstsd,WFIFOP(sd->fd,0));
-		WFIFOSET(sd->fd,len);
-	} else {
-		len = clif_set0078(dstsd,WFIFOP(sd->fd,0));
-		WFIFOSET(sd->fd,len);
-	}
-
-	if(dstsd->chatID){
-		struct chat_data *cd;
-		cd=(struct chat_data*)map_id2bl(dstsd->chatID);
-		if(cd->usersd[0]==dstsd)
-			clif_dispchat(cd,sd->fd);
-	}
-	if(dstsd->vender_id){
-		clif_showvendingboard(&dstsd->bl,dstsd->message,sd->fd);
-	}
-	if(dstsd->spiritball > 0) {
-		clif_set01e1(dstsd,WFIFOP(sd->fd,0));
-		WFIFOSET(sd->fd,packet_len_table[0x1e1]);
-	}
-	if(battle_config.save_clothcolor==1 && dstsd->status.clothes_color > 0)
-		clif_changelook(&dstsd->bl,LOOK_CLOTHES_COLOR,dstsd->status.clothes_color);
-
-	if(sd->status.manner < 0)
-		clif_changestatus(&sd->bl,SP_MANNER,sd->status.manner);
-
-}
-
-/*==========================================
- * NPC�\��
- *------------------------------------------
- */
-void clif_getareachar_npc(struct map_session_data* sd,struct npc_data* nd)
-{
-	int len;
-
-	nullpo_retv(sd);
-	nullpo_retv(nd);
-
-	if(nd->class < 0 || nd->flag&1 || nd->class == INVISIBLE_CLASS)
-		return;
-
-	len = clif_npc0078(nd,WFIFOP(sd->fd,0));
-	WFIFOSET(sd->fd,len);
-
-	if(nd->chat_id){
-		clif_dispchat((struct chat_data*)map_id2bl(nd->chat_id),sd->fd);
-	}
-
-}
-
-/*==========================================
- * �ړ���~
- *------------------------------------------
- */
-int clif_movemob(struct mob_data *md)
-{
-	unsigned char buf[256];
-	int len;
-
-	nullpo_retr(0, md);
-
-	len = clif_mob007b(md,buf);
-	clif_send(buf,len,&md->bl,AREA);
-
-	if(mob_get_equip(md->class) > 0) // mob equipment [Valaris]
-		clif_mob_equip(md,mob_get_equip(md->class));
-
-	return 0;
-}
-
-/*==========================================
- * �����X�^�[�̈ʒu�C��
- *------------------------------------------
- */
-int clif_fixmobpos(struct mob_data *md)
-{
-	unsigned char buf[256];
-	int len;
-
-	nullpo_retr(0, md);
-
-	if(md->state.state == MS_WALK){
-		len = clif_mob007b(md,buf);
-		clif_send(buf,len,&md->bl,AREA);
-	} else {
-		len = clif_mob0078(md,buf);
-		clif_send(buf,len,&md->bl,AREA);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * PC�̈ʒu�C��
- *------------------------------------------
- */
-int clif_fixpcpos(struct map_session_data *sd)
-{
-	unsigned char buf[256];
-	int len;
-
-	nullpo_retr(0, sd);
-
-	if(sd->walktimer != -1){
-		len = clif_set007b(sd,buf);
-		clif_send(buf,len,&sd->bl,AREA);
-	} else {
-		len = clif_set0078(sd,buf);
-		clif_send(buf,len,&sd->bl,AREA);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_fixpetpos(struct pet_data *pd)
-{
-	unsigned char buf[256];
-	int len;
-
-	nullpo_retr(0, pd);
-
-	if(pd->state.state == MS_WALK){
-		len = clif_pet007b(pd,buf);
-		clif_send(buf,len,&pd->bl,AREA);
-	} else {
-		len = clif_pet0078(pd,buf);
-		clif_send(buf,len,&pd->bl,AREA);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �ʏ�U���G�t�F�N�g���_���[�W
- *------------------------------------------
- */
-int clif_damage(struct block_list *src,struct block_list *dst,unsigned int tick,int sdelay,int ddelay,int damage,int div,int type,int damage2)
-{
-	unsigned char buf[256];
-	struct status_change *sc_data;
-
-	nullpo_retr(0, src);
-	nullpo_retr(0, dst);
-
-	sc_data = battle_get_sc_data(dst);
-
-	if(type != 4 && dst->type == BL_PC && ((struct map_session_data *)dst)->special_state.infinite_endure)
-		type = 9;
-	if(sc_data) {
-		if(type != 4 && sc_data[SC_ENDURE].timer != -1)
-			type = 9;
-		if(sc_data[SC_HALLUCINATION].timer != -1) {
-			if(damage > 0)
-				damage = damage*(5+sc_data[SC_HALLUCINATION].val1) + rand()%100;
-			if(damage2 > 0)
-				damage2 = damage2*(5+sc_data[SC_HALLUCINATION].val1) + rand()%100;
-		}
-	}
-
-	WBUFW(buf,0)=0x8a;
-	WBUFL(buf,2)=src->id;
-	WBUFL(buf,6)=dst->id;
-	WBUFL(buf,10)=tick;
-	WBUFL(buf,14)=sdelay;
-	WBUFL(buf,18)=ddelay;
-	WBUFW(buf,22)=(damage > 0x7fff)? 0x7fff:damage;
-	WBUFW(buf,24)=div;
-	WBUFB(buf,26)=type;
-	WBUFW(buf,27)=damage2;
-	clif_send(buf,packet_len_table[0x8a],src,AREA);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_getareachar_mob(struct map_session_data* sd,struct mob_data* md)
-{
-	int len;
-	nullpo_retv(sd);
-	nullpo_retv(md);
-
-	if(md->state.state == MS_WALK){
-		len = clif_mob007b(md,WFIFOP(sd->fd,0));
-		WFIFOSET(sd->fd,len);
-	} else {
-		len = clif_mob0078(md,WFIFOP(sd->fd,0));
-		WFIFOSET(sd->fd,len);
-	}
-
-	if(mob_get_equip(md->class) > 0) // mob equipment [Valaris]
-		clif_mob_equip(md,mob_get_equip(md->class));
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_getareachar_pet(struct map_session_data* sd,struct pet_data* pd)
-{
-	int len;
-
-	nullpo_retv(sd);
-	nullpo_retv(pd);
-
-	if(pd->state.state == MS_WALK){
-		len = clif_pet007b(pd,WFIFOP(sd->fd,0));
-		WFIFOSET(sd->fd,len);
-	} else {
-		len = clif_pet0078(pd,WFIFOP(sd->fd,0));
-		WFIFOSET(sd->fd,len);
-	}
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_getareachar_item(struct map_session_data* sd,struct flooritem_data* fitem)
-{
-	int view,fd;
-
-	nullpo_retv(sd);
-	nullpo_retv(fitem);
-
-	fd=sd->fd;
-	//009d <ID>.l <item ID>.w <identify flag>.B <X>.w <Y>.w <amount>.w <subX>.B <subY>.B
-	WFIFOW(fd,0)=0x9d;
-	WFIFOL(fd,2)=fitem->bl.id;
-	if((view = itemdb_viewid(fitem->item_data.nameid)) > 0)
-		WFIFOW(fd,6)=view;
-	else
-		WFIFOW(fd,6)=fitem->item_data.nameid;
-	WFIFOB(fd,8)=fitem->item_data.identify;
-	WFIFOW(fd,9)=fitem->bl.x;
-	WFIFOW(fd,11)=fitem->bl.y;
-	WFIFOW(fd,13)=fitem->item_data.amount;
-	WFIFOB(fd,15)=fitem->subx;
-	WFIFOB(fd,16)=fitem->suby;
-
-	WFIFOSET(fd,packet_len_table[0x9d]);
-}
-/*==========================================
- * �ꏊ�X�L���G�t�F�N�g�����E�ɓ���
- *------------------------------------------
- */
-int clif_getareachar_skillunit(struct map_session_data *sd,struct skill_unit *unit)
-{
-	int fd;
-	struct block_list *bl;
-
-	nullpo_retr(0, unit);
-
-	fd=sd->fd;
-	bl=map_id2bl(unit->group->src_id);
-#if PACKETVER < 3
-	memset(WFIFOP(fd,0),0,packet_len_table[0x11f]);
-	WFIFOW(fd, 0)=0x11f;
-	WFIFOL(fd, 2)=unit->bl.id;
-	WFIFOL(fd, 6)=unit->group->src_id;
-	WFIFOW(fd,10)=unit->bl.x;
-	WFIFOW(fd,12)=unit->bl.y;
-	WFIFOB(fd,14)=unit->group->unit_id;
-	WFIFOB(fd,15)=0;
-	WFIFOSET(fd,packet_len_table[0x11f]);
-#else
-	memset(WFIFOP(fd,0),0,packet_len_table[0x1c9]);
-	WFIFOW(fd, 0)=0x1c9;
-	WFIFOL(fd, 2)=unit->bl.id;
-	WFIFOL(fd, 6)=unit->group->src_id;
-	WFIFOW(fd,10)=unit->bl.x;
-	WFIFOW(fd,12)=unit->bl.y;
-	WFIFOB(fd,14)=unit->group->unit_id;
-	WFIFOB(fd,15)=1;
-	WFIFOL(fd,15+1)=0;						//1-4���ׂ�����Œ�
-	WFIFOL(fd,15+5)=0;						//5-8���ׂ�����Œ�
-											//9-12�}�b�v���Ƃň���77-80�Ƃ͂܂��Ⴄ4�o�C�g�̂��Ȃ�傫�Ȑ���
-	WFIFOL(fd,15+13)=unit->bl.y - 0x12;		//13-16���j�b�g��Y���W-18���ۂ�(Y:17��FF FF FF FF)
-	WFIFOL(fd,15+17)=0x004f37dd;			//17-20���ׂ�����Œ�
-	WFIFOL(fd,15+21)=0x0012f674;			//21-24���ׂ�����Œ�
-	WFIFOL(fd,15+25)=0x0012f664;			//25-28���ׂ�����Œ�
-	WFIFOL(fd,15+29)=0x0012f654;			//29-32���ׂ�����Œ�
-	WFIFOL(fd,15+33)=0x77527bbc;			//33-36���ׂ�����Œ�
-											//37-39
-	WFIFOB(fd,15+40)=0x2d;					//40���ׂ�����Œ�
-	WFIFOL(fd,15+41)=0;						//41-44���ׂ�����0�Œ�
-	WFIFOL(fd,15+45)=0;						//45-48���ׂ�����0�Œ�
-	WFIFOL(fd,15+49)=0;						//49-52���ׂ�����0�Œ�
-	WFIFOL(fd,15+53)=0x0048d919;			//53-56���ׂ�����Œ�
-	WFIFOL(fd,15+57)=0x0000003e;			//57-60���ׂ�����Œ�
-	WFIFOL(fd,15+61)=0x0012f66c;			//61-64���ׂ�����Œ�
-											//65-68
-											//69-72
-	if(bl) WFIFOL(fd,15+73)=bl->y;			//73-76�p�҂�Y���W
-		WFIFOL(fd,15+77)=unit->bl.m;			//77-80�}�b�vID���Ȃ��H���Ȃ�2�o�C�g�ő��肻���Ȑ���
-	WFIFOB(fd,15+81)=0xaa;					//81�I�[����0xaa
-
-	/*	Graffiti [Valaris]	*/
-	if(unit->group->unit_id==0xb0)	{
-		WFIFOL(fd,15)=1;
-		WFIFOL(fd,16)=1;
-		memcpy(WFIFOP(fd,17),unit->group->valstr,80);
-	}
-
-	WFIFOSET(fd,packet_len_table[0x1c9]);
-#endif
-	if(unit->group->skill_id == WZ_ICEWALL)
-		clif_set0192(fd,unit->bl.m,unit->bl.x,unit->bl.y,5);
-
-	return 0;
-}
-/*==========================================
- * �ꏊ�X�L���G�t�F�N�g�����E���������
- *------------------------------------------
- */
-int clif_clearchar_skillunit(struct skill_unit *unit,int fd)
-{
-	nullpo_retr(0, unit);
-
-	WFIFOW(fd, 0)=0x120;
-	WFIFOL(fd, 2)=unit->bl.id;
-	WFIFOSET(fd,packet_len_table[0x120]);
-	if(unit->group->skill_id == WZ_ICEWALL)
-		clif_set0192(fd,unit->bl.m,unit->bl.x,unit->bl.y,unit->val2);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_01ac(struct block_list *bl)
-{
-	char buf[32];
-
-	nullpo_retr(0, bl);
-
-	WBUFW(buf, 0) = 0x1ac;
-	WBUFL(buf, 2) = bl->id;
-
-	clif_send(buf,packet_len_table[0x1ac],bl,AREA);
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
- int clif_getareachar(struct block_list* bl,va_list ap)
-{
-	struct map_session_data *sd;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-
-	sd=va_arg(ap,struct map_session_data*);
-
-	switch(bl->type){
-	case BL_PC:
-		if(sd==(struct map_session_data*)bl)
-			break;
-		clif_getareachar_pc(sd,(struct map_session_data*) bl);
-		break;
-	case BL_NPC:
-		clif_getareachar_npc(sd,(struct npc_data*) bl);
-		break;
-	case BL_MOB:
-		clif_getareachar_mob(sd,(struct mob_data*) bl);
-		break;
-	case BL_PET:
-		clif_getareachar_pet(sd,(struct pet_data*) bl);
-		break;
-	case BL_ITEM:
-		clif_getareachar_item(sd,(struct flooritem_data*) bl);
-		break;
-	case BL_SKILL:
-		clif_getareachar_skillunit(sd,(struct skill_unit *)bl);
-		break;
-	default:
-		if(battle_config.error_log)
-			printf("get area char ??? %d\n",bl->type);
-		break;
-	}
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_pcoutsight(struct block_list *bl,va_list ap)
-{
-	struct map_session_data *sd,*dstsd;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, sd=va_arg(ap,struct map_session_data*));
-
-	switch(bl->type){
-	case BL_PC:
-		dstsd = (struct map_session_data*) bl;
-		if(sd != dstsd) {
-			clif_clearchar_id(dstsd->bl.id,0,sd->fd);
-			clif_clearchar_id(sd->bl.id,0,dstsd->fd);
-			if(dstsd->chatID){
-				struct chat_data *cd;
-				cd=(struct chat_data*)map_id2bl(dstsd->chatID);
-				if(cd->usersd[0]==dstsd)
-					clif_dispchat(cd,sd->fd);
-			}
-			if(dstsd->vender_id){
-				clif_closevendingboard(&dstsd->bl,sd->fd);
-			}
-		}
-		break;
-	case BL_NPC:
-		if( ((struct npc_data *)bl)->class != INVISIBLE_CLASS )
-			clif_clearchar_id(bl->id,0,sd->fd);
-		break;
-	case BL_MOB:
-	case BL_PET:
-		clif_clearchar_id(bl->id,0,sd->fd);
-		break;
-	case BL_ITEM:
-		clif_clearflooritem((struct flooritem_data*)bl,sd->fd);
-		break;
-	case BL_SKILL:
-		clif_clearchar_skillunit((struct skill_unit *)bl,sd->fd);
-		break;
-	}
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_pcinsight(struct block_list *bl,va_list ap)
-{
-	struct map_session_data *sd,*dstsd;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, sd=va_arg(ap,struct map_session_data*));
-
-	switch(bl->type){
-	case BL_PC:
-		dstsd = (struct map_session_data *)bl;
-		if(sd != dstsd) {
-			clif_getareachar_pc(sd,dstsd);
-			clif_getareachar_pc(dstsd,sd);
-		}
-		break;
-	case BL_NPC:
-		clif_getareachar_npc(sd,(struct npc_data*)bl);
-		break;
-	case BL_MOB:
-		clif_getareachar_mob(sd,(struct mob_data*)bl);
-		break;
-	case BL_PET:
-		clif_getareachar_pet(sd,(struct pet_data*)bl);
-		break;
-	case BL_ITEM:
-		clif_getareachar_item(sd,(struct flooritem_data*)bl);
-		break;
-	case BL_SKILL:
-		clif_getareachar_skillunit(sd,(struct skill_unit *)bl);
-		break;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_moboutsight(struct block_list *bl,va_list ap)
-{
-	struct map_session_data *sd;
-	struct mob_data *md;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, md=va_arg(ap,struct mob_data*));
-
-	if(bl->type==BL_PC && (sd = (struct map_session_data*) bl)){
-		clif_clearchar_id(md->bl.id,0,sd->fd);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_mobinsight(struct block_list *bl,va_list ap)
-{
-	struct map_session_data *sd;
-	struct mob_data *md;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-
-	md=va_arg(ap,struct mob_data*);
-	if(bl->type==BL_PC && (sd = (struct map_session_data *)bl)){
-		clif_getareachar_mob(sd,md);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_petoutsight(struct block_list *bl,va_list ap)
-{
-	struct map_session_data *sd;
-	struct pet_data *pd;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, pd=va_arg(ap,struct pet_data*));
-
-	if(bl->type==BL_PC && (sd = (struct map_session_data*) bl)){
-		clif_clearchar_id(pd->bl.id,0,sd->fd);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_petinsight(struct block_list *bl,va_list ap)
-{
-	struct map_session_data *sd;
-	struct pet_data *pd;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-
-	pd=va_arg(ap,struct pet_data*);
-	if(bl->type==BL_PC && (sd = (struct map_session_data *)bl)){
-		clif_getareachar_pet(sd,pd);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_skillinfo(struct map_session_data *sd,int skillid,int type,int range)
-{
-	int fd,id;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	if( (id=sd->status.skill[skillid].id) <= 0 )
-		return 0;
-	WFIFOW(fd,0)=0x147;
-	WFIFOW(fd,2) = id;
-	if(type < 0)
-		WFIFOW(fd,4) = skill_get_inf(id);
-	else
-		WFIFOW(fd,4) = type;
-	WFIFOW(fd,6) = 0;
-	WFIFOW(fd,8) = sd->status.skill[skillid].lv;
-	WFIFOW(fd,10) = skill_get_sp(id,sd->status.skill[skillid].lv);
-	if(range < 0) {
-		range = skill_get_range(id,sd->status.skill[skillid].lv);
-		if(range < 0)
-			range = battle_get_range(&sd->bl) - (range + 1);
-		WFIFOW(fd,12)= range;
-	} else
-		WFIFOW(fd,12)= range;
-	memset(WFIFOP(fd,14),0,24);
-	if(!(skill_get_inf2(id)&0x01) || battle_config.quest_skill_learn == 1 || (battle_config.gm_allskill > 0 && pc_isGM(sd) >= battle_config.gm_allskill) )
-		WFIFOB(fd,38)= (sd->status.skill[skillid].lv < skill_get_max(id) && sd->status.skill[skillid].flag ==0 )? 1:0;
-	else
-		WFIFOB(fd,38) = 0;
-	WFIFOSET(fd,packet_len_table[0x147]);
-
-	return 0;
-}
-
-/*==========================================
- * �X�L�����X�g�𑗐M����
- *------------------------------------------
- */
-int clif_skillinfoblock(struct map_session_data *sd)
-{
-	int fd;
-	int i,c,len=4,id,range;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x10f;
-	for ( i = c = 0; i < MAX_SKILL; i++){
-		if( (id=sd->status.skill[i].id)!=0 ){
-			WFIFOW(fd,len  ) = id;
-			WFIFOW(fd,len+2) = skill_get_inf(id);
-			WFIFOW(fd,len+4) = 0;
-			WFIFOW(fd,len+6) = sd->status.skill[i].lv;
-			WFIFOW(fd,len+8) = skill_get_sp(id,sd->status.skill[i].lv);
-			range = skill_get_range(id,sd->status.skill[i].lv);
-			if(range < 0)
-				range = battle_get_range(&sd->bl) - (range + 1);
-			WFIFOW(fd,len+10)= range;
-			memset(WFIFOP(fd,len+12),0,24);
-			if(!(skill_get_inf2(id)&0x01) || battle_config.quest_skill_learn == 1 || (battle_config.gm_allskill > 0 && pc_isGM(sd) >= battle_config.gm_allskill) )
-				WFIFOB(fd,len+36)= (sd->status.skill[i].lv < skill_get_max(id) && sd->status.skill[i].flag ==0 )? 1:0;
-			else
-				WFIFOB(fd,len+36) = 0;
-			len+=37;
-			c++;
-		}
-	}
-	WFIFOW(fd,2)=len;
-	WFIFOSET(fd,len);
-
-	return 0;
-}
-
-/*==========================================
- * �X�L������U��ʒm
- *------------------------------------------
- */
-int clif_skillup(struct map_session_data *sd,int skill_num)
-{
-	int range,fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0) = 0x10e;
-	WFIFOW(fd,2) = skill_num;
-	WFIFOW(fd,4) = sd->status.skill[skill_num].lv;
-	WFIFOW(fd,6) = skill_get_sp(skill_num,sd->status.skill[skill_num].lv);
-	range = skill_get_range(skill_num,sd->status.skill[skill_num].lv);
-	if(range < 0)
-		range = battle_get_range(&sd->bl) - (range + 1);
-	WFIFOW(fd,8) = range;
-	WFIFOB(fd,10) = (sd->status.skill[skill_num].lv < skill_get_max(sd->status.skill[skill_num].id)) ? 1 : 0;
-	WFIFOSET(fd,packet_len_table[0x10e]);
-
-	return 0;
-}
-
-/*==========================================
- * �X�L���r���G�t�F�N�g�𑗐M����
- *------------------------------------------
- */
-int clif_skillcasting(struct block_list* bl,
-	int src_id,int dst_id,int dst_x,int dst_y,int skill_num,int casttime)
-{
-	unsigned char buf[32];
-	WBUFW(buf,0) = 0x13e;
-	WBUFL(buf,2) = src_id;
-	WBUFL(buf,6) = dst_id;
-	WBUFW(buf,10) = dst_x;
-	WBUFW(buf,12) = dst_y;
-	WBUFW(buf,14) = skill_num;//���@�r���X�L��
-	WBUFL(buf,16) = skill_get_pl(skill_num);//����
-	WBUFL(buf,20) = casttime;//skill�r������
-	clif_send(buf,packet_len_table[0x13e], bl, AREA);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_skillcastcancel(struct block_list* bl)
-{
-	unsigned char buf[16];
-
-	nullpo_retr(0, bl);
-
-	WBUFW(buf,0) = 0x1b9;
-	WBUFL(buf,2) = bl->id;
-	clif_send(buf,packet_len_table[0x1b9], bl, AREA);
-
-	return 0;
-}
-
-/*==========================================
- * �X�L���r�����s
- *------------------------------------------
- */
-int clif_skill_fail(struct map_session_data *sd,int skill_id,int type,int btype)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-
-	if(type==0x4 && battle_config.display_delay_skill_fail==0){
-		return 0;
-	}
-
-	WFIFOW(fd,0) = 0x110;
-	WFIFOW(fd,2) = skill_id;
-	WFIFOW(fd,4) = btype;
-	WFIFOW(fd,6) = 0;
-	WFIFOB(fd,8) = 0;
-	WFIFOB(fd,9) = type;
-	WFIFOSET(fd,packet_len_table[0x110]);
-
-	return 0;
-}
-
-/*==========================================
- * �X�L���U���G�t�F�N�g���_���[�W
- *------------------------------------------
- */
-int clif_skill_damage(struct block_list *src,struct block_list *dst,
-	unsigned int tick,int sdelay,int ddelay,int damage,int div,int skill_id,int skill_lv,int type)
-{
-	unsigned char buf[64];
-	struct status_change *sc_data;
-
-	nullpo_retr(0, src);
-	nullpo_retr(0, dst);
-
-	sc_data = battle_get_sc_data(dst);
-
-	if(type != 5 && dst->type == BL_PC && ((struct map_session_data *)dst)->special_state.infinite_endure)
-		type = 9;
-	if(sc_data) {
-		if(type != 5 && sc_data[SC_ENDURE].timer != -1)
-			type = 9;
-		if(sc_data[SC_HALLUCINATION].timer != -1 && damage > 0)
-			damage = damage*(5+sc_data[SC_HALLUCINATION].val1) + rand()%100;
-	}
-
-#if PACKETVER < 3
-	WBUFW(buf,0)=0x114;
-	WBUFW(buf,2)=skill_id;
-	WBUFL(buf,4)=src->id;
-	WBUFL(buf,8)=dst->id;
-	WBUFL(buf,12)=tick;
-	WBUFL(buf,16)=sdelay;
-	WBUFL(buf,20)=ddelay;
-	WBUFW(buf,24)=damage;
-	WBUFW(buf,26)=skill_lv;
-	WBUFW(buf,28)=div;
-	WBUFB(buf,30)=(type>0)?type:skill_get_hit(skill_id);
-	clif_send(buf,packet_len_table[0x114],src,AREA);
-#else
-	WBUFW(buf,0)=0x1de;
-	WBUFW(buf,2)=skill_id;
-	WBUFL(buf,4)=src->id;
-	WBUFL(buf,8)=dst->id;
-	WBUFL(buf,12)=tick;
-	WBUFL(buf,16)=sdelay;
-	WBUFL(buf,20)=ddelay;
-	WBUFL(buf,24)=damage;
-	WBUFW(buf,28)=skill_lv;
-	WBUFW(buf,30)=div;
-	WBUFB(buf,32)=(type>0)?type:skill_get_hit(skill_id);
-	clif_send(buf,packet_len_table[0x1de],src,AREA);
-#endif
-
-	return 0;
-}
-
-/*==========================================
- * ������΂��X�L���U���G�t�F�N�g���_���[�W
- *------------------------------------------
- */
-int clif_skill_damage2(struct block_list *src,struct block_list *dst,
-	unsigned int tick,int sdelay,int ddelay,int damage,int div,int skill_id,int skill_lv,int type)
-{
-	unsigned char buf[64];
-	struct status_change *sc_data;
-
-	nullpo_retr(0, src);
-	nullpo_retr(0, dst);
-
-	sc_data = battle_get_sc_data(dst);
-
-	if(type != 5 && dst->type == BL_PC && ((struct map_session_data *)dst)->special_state.infinite_endure)
-		type = 9;
-	if(sc_data) {
-		if(type != 5 && sc_data[SC_ENDURE].timer != -1)
-			type = 9;
-		if(sc_data[SC_HALLUCINATION].timer != -1 && damage > 0)
-			damage = damage*(5+sc_data[SC_HALLUCINATION].val1) + rand()%100;
-	}
-
-	WBUFW(buf,0)=0x115;
-	WBUFW(buf,2)=skill_id;
-	WBUFL(buf,4)=src->id;
-	WBUFL(buf,8)=dst->id;
-	WBUFL(buf,12)=tick;
-	WBUFL(buf,16)=sdelay;
-	WBUFL(buf,20)=ddelay;
-	WBUFW(buf,24)=dst->x;
-	WBUFW(buf,26)=dst->y;
-	WBUFW(buf,28)=damage;
-	WBUFW(buf,30)=skill_lv;
-	WBUFW(buf,32)=div;
-	WBUFB(buf,34)=(type>0)?type:skill_get_hit(skill_id);
-	clif_send(buf,packet_len_table[0x115],src,AREA);
-
-	return 0;
-}
-
-/*==========================================
- * �x��/�񕜃X�L���G�t�F�N�g
- *------------------------------------------
- */
-int clif_skill_nodamage(struct block_list *src,struct block_list *dst,
-	int skill_id,int heal,int fail)
-{
-	unsigned char buf[32];
-
-	nullpo_retr(0, src);
-	nullpo_retr(0, dst);
-
-	WBUFW(buf,0)=0x11a;
-	WBUFW(buf,2)=skill_id;
-	WBUFW(buf,4)=(heal > 0x7fff)? 0x7fff:heal;
-	WBUFL(buf,6)=dst->id;
-	WBUFL(buf,10)=src->id;
-	WBUFB(buf,14)=fail;
-	clif_send(buf,packet_len_table[0x11a],src,AREA);
-
-	return 0;
-}
-
-/*==========================================
- * �ꏊ�X�L���G�t�F�N�g
- *------------------------------------------
- */
-int clif_skill_poseffect(struct block_list *src,int skill_id,int val,int x,int y,int tick)
-{
-	unsigned char buf[32];
-
-	nullpo_retr(0, src);
-
-	WBUFW(buf,0)=0x117;
-	WBUFW(buf,2)=skill_id;
-	WBUFL(buf,4)=src->id;
-	WBUFW(buf,8)=val;
-	WBUFW(buf,10)=x;
-	WBUFW(buf,12)=y;
-	WBUFL(buf,14)=tick;
-	clif_send(buf,packet_len_table[0x117],src,AREA);
-
-	return 0;
-}
-
-/*==========================================
- * �ꏊ�X�L���G�t�F�N�g�\��
- *------------------------------------------
- */
-int clif_skill_setunit(struct skill_unit *unit)
-{
-	unsigned char buf[128];
-	struct block_list *bl;
-
-	nullpo_retr(0, unit);
-
-	bl=map_id2bl(unit->group->src_id);
-
-#if PACKETVER < 3
-	memset(WBUFP(buf, 0),0,packet_len_table[0x11f]);
-	WBUFW(buf, 0)=0x11f;
-	WBUFL(buf, 2)=unit->bl.id;
-	WBUFL(buf, 6)=unit->group->src_id;
-	WBUFW(buf,10)=unit->bl.x;
-	WBUFW(buf,12)=unit->bl.y;
-	WBUFB(buf,14)=unit->group->unit_id;
-	WBUFB(buf,15)=0;
-	clif_send(buf,packet_len_table[0x11f],&unit->bl,AREA);
-#else
-		memset(WBUFP(buf, 0),0,packet_len_table[0x1c9]);
-		WBUFW(buf, 0)=0x1c9;
-		WBUFL(buf, 2)=unit->bl.id;
-		WBUFL(buf, 6)=unit->group->src_id;
-		WBUFW(buf,10)=unit->bl.x;
-		WBUFW(buf,12)=unit->bl.y;
-		WBUFB(buf,14)=unit->group->unit_id;
-		WBUFB(buf,15)=1;
-		WBUFL(buf,15+1)=0;						//1-4���ׂ�����Œ�
-		WBUFL(buf,15+5)=0;						//5-8���ׂ�����Œ�
-											//9-12�}�b�v���Ƃň���77-80�Ƃ͂܂��Ⴄ4�o�C�g�̂��Ȃ�傫�Ȑ���
-		WBUFL(buf,15+13)=unit->bl.y - 0x12;		//13-16���j�b�g��Y���W-18���ۂ�(Y:17��FF FF FF FF)
-		WBUFL(buf,15+17)=0x004f37dd;			//17-20���ׂ�����Œ�(0x1b2��0x004fdbdd������)
-		WBUFL(buf,15+21)=0x0012f674;			//21-24���ׂ�����Œ�
-		WBUFL(buf,15+25)=0x0012f664;			//25-28���ׂ�����Œ�
-		WBUFL(buf,15+29)=0x0012f654;			//29-32���ׂ�����Œ�
-		WBUFL(buf,15+33)=0x77527bbc;			//33-36���ׂ�����Œ�
-											//37-39
-		WBUFB(buf,15+40)=0x2d;					//40���ׂ�����Œ�
-		WBUFL(buf,15+41)=0;						//41-44���ׂ�����0�Œ�
-		WBUFL(buf,15+45)=0;						//45-48���ׂ�����0�Œ�
-		WBUFL(buf,15+49)=0;						//49-52���ׂ�����0�Œ�
-		WBUFL(buf,15+53)=0x0048d919;			//53-56���ׂ�����Œ�(0x01b2��0x00495119������)
-		WBUFL(buf,15+57)=0x0000003e;			//57-60���ׂ�����Œ�
-		WBUFL(buf,15+61)=0x0012f66c;			//61-64���ׂ�����Œ�
-											//65-68
-											//69-72
-		if(bl) WBUFL(buf,15+73)=bl->y;			//73-76�p�҂�Y���W
-			WBUFL(buf,15+77)=unit->bl.m;			//77-80�}�b�vID���Ȃ��H���Ȃ�2�o�C�g�ő��肻���Ȑ���
-		WBUFB(buf,15+81)=0xaa;					//81�I�[����0xaa
-
-		/*		Graffiti [Valaris]		*/
-		if(unit->group->unit_id==0xb0)	{
-			WBUFL(buf,15)=1;
-			WBUFL(buf,16)=1;
-			memcpy(WBUFP(buf,17),unit->group->valstr,80);
-		}
-
-		clif_send(buf,packet_len_table[0x1c9],&unit->bl,AREA);
-#endif
-	return 0;
-}
-/*==========================================
- * �ꏊ�X�L���G�t�F�N�g�폜
- *------------------------------------------
- */
-int clif_skill_delunit(struct skill_unit *unit)
-{
-	unsigned char buf[16];
-
-	nullpo_retr(0, unit);
-
-	WBUFW(buf, 0)=0x120;
-	WBUFL(buf, 2)=unit->bl.id;
-	clif_send(buf,packet_len_table[0x120],&unit->bl,AREA);
-	return 0;
-}
-/*==========================================
- * ���[�v�ꏊ�I��
- *------------------------------------------
- */
-int clif_skill_warppoint(struct map_session_data *sd,int skill_num,
-	const char *map1,const char *map2,const char *map3,const char *map4)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x11c;
-	WFIFOW(fd,2)=skill_num;
-	memcpy(WFIFOP(fd, 4),map1,16);
-	memcpy(WFIFOP(fd,20),map2,16);
-	memcpy(WFIFOP(fd,36),map3,16);
-	memcpy(WFIFOP(fd,52),map4,16);
-	WFIFOSET(fd,packet_len_table[0x11c]);
-	return 0;
-}
-/*==========================================
- * ��������
- *------------------------------------------
- */
-int clif_skill_memo(struct map_session_data *sd,int flag)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-
-	WFIFOW(fd,0)=0x11e;
-	WFIFOB(fd,2)=flag;
-	WFIFOSET(fd,packet_len_table[0x11e]);
-	return 0;
-}
-int clif_skill_teleportmessage(struct map_session_data *sd,int flag)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x189;
-	WFIFOW(fd,2)=flag;
-	WFIFOSET(fd,packet_len_table[0x189]);
-	return 0;
-}
-
-/*==========================================
- * �����X�^�[���
- *------------------------------------------
- */
-int clif_skill_estimation(struct map_session_data *sd,struct block_list *dst)
-{
-	struct mob_data *md;
-	unsigned char buf[64];
-	int i;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, dst);
-
-	if(dst->type!=BL_MOB )
-		return 0;
-	if((md=(struct mob_data *)dst) == NULL)
-		return 0;
-
-	WBUFW(buf, 0)=0x18c;
-	WBUFW(buf, 2)=mob_get_viewclass(md->class);
-	WBUFW(buf, 4)=mob_db[md->class].lv;
-	WBUFW(buf, 6)=mob_db[md->class].size;
-	WBUFL(buf, 8)=md->hp;
-	WBUFW(buf,12)=battle_get_def2(&md->bl);
-	WBUFW(buf,14)=mob_db[md->class].race;
-	WBUFW(buf,16)=battle_get_mdef2(&md->bl) - (mob_db[md->class].vit>>1);
-	WBUFW(buf,18)=battle_get_elem_type(&md->bl);
-	for(i=0;i<9;i++)
-		WBUFB(buf,20+i)= battle_attr_fix(100,i+1,md->def_ele);
-
-	if(sd->status.party_id>0)
-		clif_send(buf,packet_len_table[0x18c],&sd->bl,PARTY_AREA);
-	else{
-		memcpy(WFIFOP(sd->fd,0),buf,packet_len_table[0x18c]);
-		WFIFOSET(sd->fd,packet_len_table[0x18c]);
-	}
-	return 0;
-}
-/*==========================================
- * �A�C�e�������”\���X�g
- *------------------------------------------
- */
-int clif_skill_produce_mix_list(struct map_session_data *sd,int trigger)
-{
-	int i,c,view,fd;
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd, 0)=0x18d;
-
-	for(i=0,c=0;i<MAX_SKILL_PRODUCE_DB;i++){
-		if( skill_can_produce_mix(sd,skill_produce_db[i].nameid,trigger) ){
-			if((view = itemdb_viewid(skill_produce_db[i].nameid)) > 0)
-				WFIFOW(fd,c*8+ 4)= view;
-			else
-				WFIFOW(fd,c*8+ 4)= skill_produce_db[i].nameid;
-			WFIFOW(fd,c*8+ 6)= 0x0012;
-			WFIFOL(fd,c*8+ 8)= sd->status.char_id;
-			c++;
-		}
-	}
-	WFIFOW(fd, 2)=c*8+8;
-	WFIFOSET(fd,WFIFOW(fd,2));
-	if(c > 0) sd->state.produce_flag = 1;
-	return 0;
-}
-
-/*==========================================
- * ��Ԉُ�A�C�R��/���b�Z�[�W�\��
- *------------------------------------------
- */
-int clif_status_change(struct block_list *bl,int type,int flag)
-{
-	unsigned char buf[16];
-
-	nullpo_retr(0, bl);
-
-	WBUFW(buf,0)=0x0196;
-	WBUFW(buf,2)=type;
-	WBUFL(buf,4)=bl->id;
-	WBUFB(buf,8)=flag;
-	clif_send(buf,packet_len_table[0x196],bl,AREA);
-	return 0;
-}
-
-/*==========================================
- * Send message (modified by [Yor])
- *------------------------------------------
- */
-int clif_displaymessage(const int fd, char* mes) 
-{
-	int len_mes = strlen(mes);
-
-	if (len_mes > 0) { // don't send a void message (it's not displaying on the client chat). @help can send void line.
-		WFIFOW(fd,0) = 0x8e;
-		WFIFOW(fd,2) = 5 + len_mes; // 4 + len + NULL teminate
-		memcpy(WFIFOP(fd,4), mes, len_mes + 1);
-		WFIFOSET(fd, 5 + len_mes);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �V�̐��𑗐M����
- *------------------------------------------
- */
-int clif_GMmessage(struct block_list *bl, char* mes, int len, int flag) 
-{
-        unsigned char lbuf[255];
-	unsigned char *buf = ((len + 16) >= sizeof(lbuf)) ? malloc(len+16) : lbuf;
-	int lp = (flag&0x10) ? 8 : 4;
-
-	WBUFW(buf,0) = 0x9a;
-	WBUFW(buf,2) = len + lp;
-	WBUFL(buf,4) = 0x65756c62;
-	memcpy(WBUFP(buf,lp), mes, len);
-	flag &= 0x07;
-	clif_send(buf, WBUFW(buf,2), bl,
-		(flag==1) ? ALL_SAMEMAP:
-		(flag==2) ? AREA:
-		(flag==3) ? SELF:
-		ALL_CLIENT);
-        if (buf != lbuf)
-            free(buf);
-	return 0;
-}
-
-/*==========================================
- * HPSP�񕜃G�t�F�N�g�𑗐M����
- *------------------------------------------
- */
-int clif_heal(int fd,int type,int val)
-{
-	WFIFOW(fd,0)=0x13d;
-	WFIFOW(fd,2)=type;
-	WFIFOW(fd,4)=val;
-	WFIFOSET(fd,packet_len_table[0x13d]);
-
-	return 0;
-}
-
-/*==========================================
- * ��������
- *------------------------------------------
- */
-int clif_resurrection(struct block_list *bl,int type)
-{
-	unsigned char buf[16];
-
-	nullpo_retr(0, bl);
-
-	if(bl->type==BL_PC) { // disguises [Valaris]
-		struct map_session_data *sd=((struct map_session_data *)bl);
-		if(sd && sd->disguise > 23 && sd->disguise < 4001)
-			clif_spawnpc(sd);
-	}
-
-	WBUFW(buf,0)=0x148;
-	WBUFL(buf,2)=bl->id;
-	WBUFW(buf,6)=type;
-
-	clif_send(buf,packet_len_table[0x148],bl,type==1 ? AREA : AREA_WOS);
-
-	return 0;
-}
-
-/*==========================================
- * PVP�����H�i���j
- *------------------------------------------
- */
-int clif_set0199(int fd,int type)
-{
-	WFIFOW(fd,0)=0x199;
-	WFIFOW(fd,2)=type;
-	WFIFOSET(fd,packet_len_table[0x199]);
-
-	return 0;
-}
-
-/*==========================================
- * PVP�����H(��)
- *------------------------------------------
- */
-int clif_pvpset(struct map_session_data *sd,int pvprank,int pvpnum,int type)
-{
-	nullpo_retr(0, sd);
-
-	if(map[sd->bl.m].flag.nopvp)
-		return 0;
-
-	if(type == 2) {
-		WFIFOW(sd->fd,0) = 0x19a;
-		WFIFOL(sd->fd,2) = sd->bl.id;
-		if(pvprank<=0)
-			pc_calc_pvprank(sd);
-		WFIFOL(sd->fd,6) = pvprank;
-		WFIFOL(sd->fd,10) = pvpnum;
-		WFIFOSET(sd->fd,packet_len_table[0x19a]);
-	} else {
-		char buf[32];
-
-		WBUFW(buf,0) = 0x19a;
-		WBUFL(buf,2) = sd->bl.id;
-		if(sd->status.option&0x46)
-			WBUFL(buf,6) = -1;
-		else
-			if(pvprank<=0)
-				pc_calc_pvprank(sd);
-			WBUFL(buf,6) = pvprank;
-		WBUFL(buf,10) = pvpnum;
-		if(!type)
-			clif_send(buf,packet_len_table[0x19a],&sd->bl,AREA);
-		else
-			clif_send(buf,packet_len_table[0x19a],&sd->bl,ALL_SAMEMAP);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_send0199(int map,int type)
-{
-	struct block_list bl;
-	char buf[16];
-
-	bl.m = map;
-	WBUFW(buf,0)=0x199;
-	WBUFW(buf,2)=type;
-	clif_send(buf,packet_len_table[0x199],&bl,ALL_SAMEMAP);
-
-	return 0;
-}
-
-/*==========================================
- * ���B�G�t�F�N�g�𑗐M����
- *------------------------------------------
- */
-int clif_refine(int fd,struct map_session_data *sd,int fail,int index,int val)
-{
-	WFIFOW(fd,0)=0x188;
-	WFIFOW(fd,2)=fail;
-	WFIFOW(fd,4)=index+2;
-	WFIFOW(fd,6)=val;
-	WFIFOSET(fd,packet_len_table[0x188]);
-
-	return 0;
-}
-
-/*==========================================
- * Wisp/page is transmitted to the destination player
- *------------------------------------------
- */
-int clif_wis_message(int fd, char *nick, char *mes, int mes_len) // R 0097 <len>.w <nick>.24B <message>.?B
-{
-	WFIFOW(fd,0) = 0x97;
-	WFIFOW(fd,2) = mes_len + 24 + 4;
-	memcpy(WFIFOP(fd,4), nick, 24);
-	memcpy(WFIFOP(fd,28), mes, mes_len);
-	WFIFOSET(fd,WFIFOW(fd,2));
-	return 0;
-}
-
-/*==========================================
- * The transmission result of Wisp/page is transmitted to the source player
- *------------------------------------------
- */
-int clif_wis_end(int fd, int flag) // R 0098 <type>.B: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-{ 
-	WFIFOW(fd,0) = 0x98;
-	WFIFOW(fd,2) = flag;
-	WFIFOSET(fd,packet_len_table[0x98]);
-	return 0;
-}
-
-/*==========================================
- * �L����ID���O�������ʂ𑗐M����
- *------------------------------------------
- */
-int clif_solved_charname(struct map_session_data *sd,int char_id)
-{
-	char *p= map_charid2nick(char_id);
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	if(p!=NULL){
-		WFIFOW(fd,0)=0x194;
-		WFIFOL(fd,2)=char_id;
-		memcpy(WFIFOP(fd,6), p,24 );
-		WFIFOSET(fd,packet_len_table[0x194]);
-	}else{
-		map_reqchariddb(sd,char_id);
-		chrif_searchcharid(char_id);
-	}
-	return 0;
-}
-
-/*==========================================
- * �J�[�h�̑}���”\���X�g��Ԃ�
- *------------------------------------------
- */
-int clif_use_card(struct map_session_data *sd,int idx)
-{
-	nullpo_retr(0, sd);
-
-	if(sd->inventory_data[idx]) {
-		int i,c;
-		int ep=sd->inventory_data[idx]->equip;
-		int fd=sd->fd;
-		WFIFOW(fd,0)=0x017b;
-
-		for(i=c=0;i<MAX_INVENTORY;i++){
-			int j;
-
-			if(sd->inventory_data[i] == NULL)
-				continue;
-			if(sd->inventory_data[i]->type!=4 && sd->inventory_data[i]->type!=5)	// ����h���Ȃ�
-				continue;
-			if(sd->status.inventory[i].card[0]==0x00ff)	// ��������
-				continue;
-			if(sd->status.inventory[i].card[0]==(short)0xff00 || sd->status.inventory[i].card[0]==0x00fe)
-				continue;
-			if(sd->status.inventory[i].identify==0 )	// ���Ӓ�
-				continue;
-
-			if((sd->inventory_data[i]->equip&ep)==0)	// ���������Ⴄ
-				continue;
-			if(sd->inventory_data[i]->type==4 && ep==32)	// ���J�[�h�Ɨ��蕐��
-				continue;
-
-			for(j=0;j<sd->inventory_data[i]->slot;j++){
-				if( sd->status.inventory[i].card[j]==0 )
-					break;
-			}
-			if(j==sd->inventory_data[i]->slot)	// ���łɃJ�[�h����t
-				continue;
-
-			WFIFOW(fd,4+c*2)=i+2;
-			c++;
-		}
-		WFIFOW(fd,2)=4+c*2;
-		WFIFOSET(fd,WFIFOW(fd,2));
-	}
-
-	return 0;
-}
-/*==========================================
- * �J�[�h�̑}���I��
- *------------------------------------------
- */
-int clif_insert_card(struct map_session_data *sd,int idx_equip,int idx_card,int flag)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x17d;
-	WFIFOW(fd,2)=idx_equip+2;
-	WFIFOW(fd,4)=idx_card+2;
-	WFIFOB(fd,6)=flag;
-	WFIFOSET(fd,packet_len_table[0x17d]);
-	return 0;
-}
-
-/*==========================================
- * �Ӓ�”\�A�C�e�����X�g���M
- *------------------------------------------
- */
-int clif_item_identify_list(struct map_session_data *sd)
-{
-	int i,c;
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-
-	WFIFOW(fd,0)=0x177;
-	for(i=c=0;i<MAX_INVENTORY;i++){
-		if(sd->status.inventory[i].nameid > 0 && sd->status.inventory[i].identify!=1){
-			WFIFOW(fd,c*2+4)=i+2;
-			c++;
-		}
-	}
-	if(c > 0) {
-		WFIFOW(fd,2)=c*2+4;
-		WFIFOSET(fd,WFIFOW(fd,2));
-	}
-	return 0;
-}
-
-/*==========================================
- * �Ӓ茋��
- *------------------------------------------
- */
-int clif_item_identified(struct map_session_data *sd,int idx,int flag)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd, 0)=0x179;
-	WFIFOW(fd, 2)=idx+2;
-	WFIFOB(fd, 4)=flag;
-	WFIFOSET(fd,packet_len_table[0x179]);
-	return 0;
-}
-
-/*==========================================
- * �C���”\�A�C�e�����X�g���M
- * �����ۂ̃p�P�b�g���킩��Ȃ��̂œ��삵�܂���
- *------------------------------------------
- */
-int clif_item_repair_list(struct map_session_data *sd)
-{
-	int i,c;
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-
-	WFIFOW(fd,0)=0x0;
-	for(i=c=0;i<MAX_INVENTORY;i++){
-		if(sd->status.inventory[i].nameid > 0 && sd->status.inventory[i].broken!=0){
-			WFIFOW(fd,c*2+4)=i+2;
-			c++;
-		}
-	}
-	if(c > 0) {
-		WFIFOW(fd,2)=c*2+4;
-		WFIFOSET(fd,WFIFOW(fd,2));
-	}
-	return 0;
-}
-
-/*==========================================
- * �A�C�e���ɂ��ꎞ�I�ȃX�L������
- *------------------------------------------
- */
-int clif_item_skill(struct map_session_data *sd,int skillid,int skilllv,const char *name)
-{
-	int range,fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd, 0)=0x147;
-	WFIFOW(fd, 2)=skillid;
-	WFIFOW(fd, 4)=skill_get_inf(skillid);
-	WFIFOW(fd, 6)=0;
-	WFIFOW(fd, 8)=skilllv;
-	WFIFOW(fd,10)=skill_get_sp(skillid,skilllv);
-	range = skill_get_range(skillid,skilllv);
-	if(range < 0)
-		range = battle_get_range(&sd->bl) - (range + 1);
-	WFIFOW(fd,12)=range;
-	memcpy(WFIFOP(fd,14),name,24);
-	WFIFOB(fd,38)=0;
-	WFIFOSET(fd,packet_len_table[0x147]);
-	return 0;
-}
-
-/*==========================================
- * �J�[�g�ɃA�C�e���lj�
- *------------------------------------------
- */
-int clif_cart_additem(struct map_session_data *sd,int n,int amount,int fail)
-{
-	int view,j,fd;
-	unsigned char *buf;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	buf=WFIFOP(fd,0);
-	if(n<0 || n>=MAX_CART || sd->status.cart[n].nameid<=0)
-		return 1;
-
-	WBUFW(buf,0)=0x124;
-	WBUFW(buf,2)=n+2;
-	WBUFL(buf,4)=amount;
-	if((view = itemdb_viewid(sd->status.cart[n].nameid)) > 0)
-		WBUFW(buf,8)=view;
-	else
-		WBUFW(buf,8)=sd->status.cart[n].nameid;
-	WBUFB(buf,10)=sd->status.cart[n].identify;
-	if(sd->status.cart[n].broken==1) //is weapon broken [Valaris]
-		WBUFB(buf,11)=1;
-	else
-		WBUFB(buf,11)=sd->status.cart[n].attribute;
-	WBUFB(buf,12)=sd->status.cart[n].refine;
-	if(sd->status.cart[n].card[0]==0x00ff || sd->status.cart[n].card[0]==0x00fe || sd->status.cart[n].card[0]==(short)0xff00) {
-		WBUFW(buf,13)=sd->status.cart[n].card[0];
-		WBUFW(buf,15)=sd->status.cart[n].card[1];
-		WBUFW(buf,17)=sd->status.cart[n].card[2];
-		WBUFW(buf,19)=sd->status.cart[n].card[3];
-	} else {
-		if(sd->status.cart[n].card[0] > 0 && (j=itemdb_viewid(sd->status.cart[n].card[0])) > 0)
-			WBUFW(buf,13)= j;
-		else
-			WBUFW(buf,13)= sd->status.cart[n].card[0];
-		if(sd->status.cart[n].card[1] > 0 && (j=itemdb_viewid(sd->status.cart[n].card[1])) > 0)
-			WBUFW(buf,15)= j;
-		else
-			WBUFW(buf,15)= sd->status.cart[n].card[1];
-		if(sd->status.cart[n].card[2] > 0 && (j=itemdb_viewid(sd->status.cart[n].card[2])) > 0)
-			WBUFW(buf,17)= j;
-		else
-			WBUFW(buf,17)= sd->status.cart[n].card[2];
-		if(sd->status.cart[n].card[3] > 0 && (j=itemdb_viewid(sd->status.cart[n].card[3])) > 0)
-			WBUFW(buf,19)= j;
-		else
-			WBUFW(buf,19)= sd->status.cart[n].card[3];
-	}
-	WFIFOSET(fd,packet_len_table[0x124]);
-	return 0;
-}
-
-/*==========================================
- * �J�[�g����A�C�e���폜
- *------------------------------------------
- */
-int clif_cart_delitem(struct map_session_data *sd,int n,int amount)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-
-	WFIFOW(fd,0)=0x125;
-	WFIFOW(fd,2)=n+2;
-	WFIFOL(fd,4)=amount;
-
-	WFIFOSET(fd,packet_len_table[0x125]);
-
-	return 0;
-}
-
-/*==========================================
- * �J�[�g�̃A�C�e�����X�g
- *------------------------------------------
- */
-int clif_cart_itemlist(struct map_session_data *sd)
-{
-	struct item_data *id;
-	int i,n,fd;
-	unsigned char *buf;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	buf = WFIFOP(fd,0);
-#if PACKETVER < 5
-	WBUFW(buf,0)=0x123;
-	for(i=0,n=0;i<MAX_CART;i++){
-		if(sd->status.cart[i].nameid<=0)
-			continue;
-		id = itemdb_search(sd->status.cart[i].nameid);
-		if(itemdb_isequip2(id))
-			continue;
-		WBUFW(buf,n*10+4)=i+2;
-		if(id->view_id > 0)
-			WBUFW(buf,n*10+6)=id->view_id;
-		else
-			WBUFW(buf,n*10+6)=sd->status.cart[i].nameid;
-		WBUFB(buf,n*10+8)=id->type;
-		WBUFB(buf,n*10+9)=sd->status.cart[i].identify;
-		WBUFW(buf,n*10+10)=sd->status.cart[i].amount;
-		WBUFW(buf,n*10+12)=0;
-		n++;
-	}
-	if(n){
-		WBUFW(buf,2)=4+n*10;
-		WFIFOSET(fd,WFIFOW(fd,2));
-	}
-#else
-	WBUFW(buf,0)=0x1ef;
-	for(i=0,n=0;i<MAX_CART;i++){
-		if(sd->status.cart[i].nameid<=0)
-			continue;
-		id = itemdb_search(sd->status.cart[i].nameid);
-		if(itemdb_isequip2(id))
-			continue;
-		WBUFW(buf,n*18+4)=i+2;
-		if(id->view_id > 0)
-			WBUFW(buf,n*18+6)=id->view_id;
-		else
-			WBUFW(buf,n*18+6)=sd->status.cart[i].nameid;
-		WBUFB(buf,n*18+8)=id->type;
-		WBUFB(buf,n*18+9)=sd->status.cart[i].identify;
-		WBUFW(buf,n*18+10)=sd->status.cart[i].amount;
-		WBUFW(buf,n*18+12)=0;
-		WBUFW(buf,n*18+14)=sd->status.cart[i].card[0];
-		WBUFW(buf,n*18+16)=sd->status.cart[i].card[1];
-		WBUFW(buf,n*18+18)=sd->status.cart[i].card[2];
-		WBUFW(buf,n*18+20)=sd->status.cart[i].card[3];
-		n++;
-	}
-	if(n){
-		WBUFW(buf,2)=4+n*18;
-		WFIFOSET(fd,WFIFOW(fd,2));
-	}
-#endif
-	return 0;
-}
-
-/*==========================================
- * �J�[�g�̑����i���X�g
- *------------------------------------------
- */
-int clif_cart_equiplist(struct map_session_data *sd)
-{
-	struct item_data *id;
-	int i,j,n,fd;
-	unsigned char *buf;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	buf = WFIFOP(fd,0);
-
-	WBUFW(buf,0)=0x122;
-	for(i=0,n=0;i<MAX_INVENTORY;i++){
-		if(sd->status.cart[i].nameid<=0)
-			continue;
-		id = itemdb_search(sd->status.cart[i].nameid);
-		if(!itemdb_isequip2(id))
-			continue;
-		WBUFW(buf,n*20+4)=i+2;
-		if(id->view_id > 0)
-			WBUFW(buf,n*20+6)=id->view_id;
-		else
-			WBUFW(buf,n*20+6)=sd->status.cart[i].nameid;
-		WBUFB(buf,n*20+8)=id->type;
-		WBUFB(buf,n*20+9)=sd->status.cart[i].identify;
-		WBUFW(buf,n*20+10)=id->equip;
-		WBUFW(buf,n*20+12)=sd->status.cart[i].equip;
-		if(sd->status.cart[i].broken==1)
-			WBUFB(buf,n*20+14)=1; //is weapon broken [Valaris]
-		else
-			WBUFB(buf,n*20+14)=sd->status.cart[i].attribute;
-		WBUFB(buf,n*20+15)=sd->status.cart[i].refine;
-		if(sd->status.cart[i].card[0]==0x00ff || sd->status.cart[i].card[0]==0x00fe || sd->status.cart[i].card[0]==(short)0xff00) {
-			WBUFW(buf,n*20+16)=sd->status.cart[i].card[0];
-			WBUFW(buf,n*20+18)=sd->status.cart[i].card[1];
-			WBUFW(buf,n*20+20)=sd->status.cart[i].card[2];
-			WBUFW(buf,n*20+22)=sd->status.cart[i].card[3];
-		} else {
-			if(sd->status.cart[i].card[0] > 0 && (j=itemdb_viewid(sd->status.cart[i].card[0])) > 0)
-				WBUFW(buf,n*20+16)= j;
-			else
-				WBUFW(buf,n*20+16)= sd->status.cart[i].card[0];
-			if(sd->status.cart[i].card[1] > 0 && (j=itemdb_viewid(sd->status.cart[i].card[1])) > 0)
-				WBUFW(buf,n*20+18)= j;
-			else
-				WBUFW(buf,n*20+18)= sd->status.cart[i].card[1];
-			if(sd->status.cart[i].card[2] > 0 && (j=itemdb_viewid(sd->status.cart[i].card[2])) > 0)
-				WBUFW(buf,n*20+20)= j;
-			else
-				WBUFW(buf,n*20+20)= sd->status.cart[i].card[2];
-			if(sd->status.cart[i].card[3] > 0 && (j=itemdb_viewid(sd->status.cart[i].card[3])) > 0)
-				WBUFW(buf,n*20+22)= j;
-			else
-				WBUFW(buf,n*20+22)= sd->status.cart[i].card[3];
-		}
-		n++;
-	}
-	if(n){
-		WBUFW(buf,2)=4+n*20;
-		WFIFOSET(fd,WFIFOW(fd,2));
-	}
-	return 0;
-}
-
-/*==========================================
- * �I�X�J��
- *------------------------------------------
- */
-int clif_openvendingreq(struct map_session_data *sd,int num)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x12d;
-	WFIFOW(fd,2)=num;
-	WFIFOSET(fd,packet_len_table[0x12d]);
-
-	return 0;
-}
-
-/*==========================================
- * �I�X�Ŕ•\��
- *------------------------------------------
- */
-int clif_showvendingboard(struct block_list* bl,char *message,int fd)
-{
-	unsigned char buf[128];
-
-	nullpo_retr(0, bl);
-
-	WBUFW(buf,0)=0x131;
-	WBUFL(buf,2)=bl->id;
-	strncpy(WBUFP(buf,6),message,80);
-	if(fd){
-		memcpy(WFIFOP(fd,0),buf,packet_len_table[0x131]);
-		WFIFOSET(fd,packet_len_table[0x131]);
-	}else{
-		clif_send(buf,packet_len_table[0x131],bl,AREA_WOS);
-	}
-	return 0;
-}
-
-/*==========================================
- * �I�X�Ŕ���
- *------------------------------------------
- */
-int clif_closevendingboard(struct block_list* bl,int fd)
-{
-	unsigned char buf[16];
-
-	nullpo_retr(0, bl);
-
-	WBUFW(buf,0)=0x132;
-	WBUFL(buf,2)=bl->id;
-	if(fd){
-		memcpy(WFIFOP(fd,0),buf,packet_len_table[0x132]);
-		WFIFOSET(fd,packet_len_table[0x132]);
-	}else{
-		clif_send(buf,packet_len_table[0x132],bl,AREA_WOS);
-	}
-
-	return 0;
-}
-/*==========================================
- * �I�X�A�C�e�����X�g
- *------------------------------------------
- */
-int clif_vendinglist(struct map_session_data *sd,int id,struct vending *vending)
-{
-	struct item_data *data;
-	int i,j,n,index,fd;
-	struct map_session_data *vsd;
-	unsigned char *buf;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, vending);
-	nullpo_retr(0, vsd=map_id2sd(id));
-
-	fd=sd->fd;
-	buf = WFIFOP(fd,0);
-	WBUFW(buf,0)=0x133;
-	WBUFL(buf,4)=id;
-	for(i=0,n=0;i<vsd->vend_num;i++){
-		if(vending[i].amount<=0)
-			continue;
-		WBUFL(buf,8+n*22)=vending[i].value;
-		WBUFW(buf,12+n*22)=vending[i].amount;
-		WBUFW(buf,14+n*22)=(index=vending[i].index)+2;
-		if(vsd->status.cart[index].nameid <= 0 || vsd->status.cart[index].amount <= 0)
-			continue;
-		data = itemdb_search(vsd->status.cart[index].nameid);
-		WBUFB(buf,16+n*22)=data->type;
-		if(data->view_id > 0)
-			WBUFW(buf,17+n*22)=data->view_id;
-		else
-			WBUFW(buf,17+n*22)=vsd->status.cart[index].nameid;
-		WBUFB(buf,19+n*22)=vsd->status.cart[index].identify;
-		if(vsd->status.cart[index].broken==1)
-			WBUFB(buf,20+n*22)=1; //is weapon broken [Valaris]
-		else
-			WBUFB(buf,20+n*22)=vsd->status.cart[index].attribute;
-		WBUFB(buf,21+n*22)=vsd->status.cart[index].refine;
-		if(vsd->status.cart[index].card[0]==0x00ff || vsd->status.cart[index].card[0]==0x00fe || vsd->status.cart[index].card[0]==(short)0xff00) {
-			WBUFW(buf,22+n*22)=vsd->status.cart[index].card[0];
-			WBUFW(buf,24+n*22)=vsd->status.cart[index].card[1];
-			WBUFW(buf,26+n*22)=vsd->status.cart[index].card[2];
-			WBUFW(buf,28+n*22)=vsd->status.cart[index].card[3];
-		} else {
-			if(vsd->status.cart[index].card[0] > 0 && (j=itemdb_viewid(vsd->status.cart[index].card[0])) > 0)
-				WBUFW(buf,22+n*22)= j;
-			else
-				WBUFW(buf,22+n*22)= vsd->status.cart[index].card[0];
-			if(vsd->status.cart[index].card[1] > 0 && (j=itemdb_viewid(vsd->status.cart[index].card[1])) > 0)
-				WBUFW(buf,24+n*22)= j;
-			else
-				WBUFW(buf,24+n*22)= vsd->status.cart[index].card[1];
-			if(vsd->status.cart[index].card[2] > 0 && (j=itemdb_viewid(vsd->status.cart[index].card[2])) > 0)
-				WBUFW(buf,26+n*22)= j;
-			else
-				WBUFW(buf,26+n*22)= vsd->status.cart[index].card[2];
-			if(vsd->status.cart[index].card[3] > 0 && (j=itemdb_viewid(vsd->status.cart[index].card[3])) > 0)
-				WBUFW(buf,28+n*22)= j;
-			else
-				WBUFW(buf,28+n*22)= vsd->status.cart[index].card[3];
-		}
-		n++;
-	}
-	if(n > 0){
-		WBUFW(buf,2)=8+n*22;
-		WFIFOSET(fd,WFIFOW(fd,2));
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �I�X�A�C�e���w�����s
- *------------------------------------------
-*/
-int clif_buyvending(struct map_session_data *sd,int index,int amount,int fail)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x135;
-	WFIFOW(fd,2)=index+2;
-	WFIFOW(fd,4)=amount;
-	WFIFOB(fd,6)=fail;
-	WFIFOSET(fd,packet_len_table[0x135]);
-
-	return 0;
-}
-
-/*==========================================
- * �I�X�J�ݐ���
- *------------------------------------------
-*/
-int clif_openvending(struct map_session_data *sd,int id,struct vending *vending)
-{
-	struct item_data *data;
-	int i,j,n,index,fd;
-	unsigned char *buf;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	buf = WFIFOP(fd,0);
-
-	WBUFW(buf,0)=0x136;
-	WBUFL(buf,4)=id;
-	for(i=0,n=0;i<sd->vend_num;i++){
-		if (sd->vend_num > 2+pc_checkskill(sd,MC_VENDING)) return 0;
-		WBUFL(buf,8+n*22)=vending[i].value;
-		WBUFW(buf,12+n*22)=(index=vending[i].index)+2;
-		WBUFW(buf,14+n*22)=vending[i].amount;
-		if(sd->status.cart[index].nameid <= 0 || sd->status.cart[index].amount <= 0 || sd->status.cart[index].identify==0 ||
-			sd->status.cart[index].broken==1) // Prevent unidentified and broken items from being sold [Valaris]
-			continue;
-		data = itemdb_search(sd->status.cart[index].nameid);
-		WBUFB(buf,16+n*22)=data->type;
-		if(data->view_id > 0)
-			WBUFW(buf,17+n*22)=data->view_id;
-		else
-			WBUFW(buf,17+n*22)=sd->status.cart[index].nameid;
-		WBUFB(buf,19+n*22)=sd->status.cart[index].identify;
-		if(sd->status.cart[index].broken==1)
-			WBUFB(buf,20+n*22)=1; // is weapon broken [Valaris]
-		else
-			WBUFB(buf,20+n*22)=sd->status.cart[index].attribute;
-		WBUFB(buf,21+n*22)=sd->status.cart[index].refine;
-		if(sd->status.cart[index].card[0]==0x00ff || sd->status.cart[index].card[0]==0x00fe || sd->status.cart[index].card[0]==(short)0xff00) {
-			WBUFW(buf,22+n*22)=sd->status.cart[index].card[0];
-			WBUFW(buf,24+n*22)=sd->status.cart[index].card[1];
-			WBUFW(buf,26+n*22)=sd->status.cart[index].card[2];
-			WBUFW(buf,28+n*22)=sd->status.cart[index].card[3];
-		} else {
-			if(sd->status.cart[index].card[0] > 0 && (j=itemdb_viewid(sd->status.cart[index].card[0])) > 0)
-				WBUFW(buf,22+n*22)= j;
-			else
-				WBUFW(buf,22+n*22)= sd->status.cart[index].card[0];
-			if(sd->status.cart[index].card[1] > 0 && (j=itemdb_viewid(sd->status.cart[index].card[1])) > 0)
-				WBUFW(buf,24+n*22)= j;
-			else
-				WBUFW(buf,24+n*22)= sd->status.cart[index].card[1];
-			if(sd->status.cart[index].card[2] > 0 && (j=itemdb_viewid(sd->status.cart[index].card[2])) > 0)
-				WBUFW(buf,26+n*22)= j;
-			else
-				WBUFW(buf,26+n*22)= sd->status.cart[index].card[2];
-			if(sd->status.cart[index].card[3] > 0 && (j=itemdb_viewid(sd->status.cart[index].card[3])) > 0)
-				WBUFW(buf,28+n*22)= j;
-			else
-				WBUFW(buf,28+n*22)= sd->status.cart[index].card[3];
-		}
-		n++;
-	}
-	if(n > 0){
-		WBUFW(buf,2)=8+n*22;
-		WFIFOSET(fd,WFIFOW(fd,2));
-	}
-
-	return n;
-}
-
-/*==========================================
- * �I�X�A�C�e���̔���
- *------------------------------------------
-*/
-int clif_vendingreport(struct map_session_data *sd,int index,int amount)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x137;
-	WFIFOW(fd,2)=index+2;
-	WFIFOW(fd,4)=amount;
-	WFIFOSET(fd,packet_len_table[0x137]);
-
-	return 0;
-}
-
-/*==========================================
- * �p�[�e�B�쐬����
- *------------------------------------------
- */
-int clif_party_created(struct map_session_data *sd,int flag)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xfa;
-	WFIFOB(fd,2)=flag;
-	WFIFOSET(fd,packet_len_table[0xfa]);
-	return 0;
-}
-/*==========================================
- * �p�[�e�B��񑗐M
- *------------------------------------------
- */
-int clif_party_info(struct party *p,int fd)
-{
-	unsigned char buf[1024];
-	int i,c;
-	struct map_session_data *sd=NULL;
-
-	nullpo_retr(0, p);
-
-	WBUFW(buf,0)=0xfb;
-	memcpy(WBUFP(buf,4),p->name,24);
-	for(i=c=0;i<MAX_PARTY;i++){
-		struct party_member *m=&p->member[i];
-		if(m->account_id>0){
-			if(sd==NULL) sd=m->sd;
-			WBUFL(buf,28+c*46)=m->account_id;
-			memcpy(WBUFP(buf,28+c*46+ 4),m->name,24);
-			memcpy(WBUFP(buf,28+c*46+28),m->map,16);
-			WBUFB(buf,28+c*46+44)=(m->leader)?0:1;
-			WBUFB(buf,28+c*46+45)=(m->online)?0:1;
-			c++;
-		}
-	}
-	WBUFW(buf,2)=28+c*46;
-	if(fd>=0){	// fd���ݒ肳��Ă�Ȃ炻��ɑ���
-		memcpy(WFIFOP(fd,0),buf,WBUFW(buf,2));
-		WFIFOSET(fd,WFIFOW(fd,2));
-		return 9;
-	}
-	if(sd!=NULL)
-		clif_send(buf,WBUFW(buf,2),&sd->bl,PARTY);
-	return 0;
-}
-/*==========================================
- * �p�[�e�B���U
- *------------------------------------------
- */
-int clif_party_invite(struct map_session_data *sd,struct map_session_data *tsd)
-{
-	int fd;
-	struct party *p;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, tsd);
-
-	fd=tsd->fd;
-
-	if( (p=party_search(sd->status.party_id))==NULL )
-		return 0;
-
-	WFIFOW(fd,0)=0xfe;
-	WFIFOL(fd,2)=sd->status.account_id;
-	memcpy(WFIFOP(fd,6),p->name,24);
-	WFIFOSET(fd,packet_len_table[0xfe]);
-	return 0;
-}
-
-/*==========================================
- * �p�[�e�B���U����
- *------------------------------------------
- */
-int clif_party_inviteack(struct map_session_data *sd,char *nick,int flag)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xfd;
-	memcpy(WFIFOP(fd,2),nick,24);
-	WFIFOB(fd,26)=flag;
-	WFIFOSET(fd,packet_len_table[0xfd]);
-	return 0;
-}
-
-/*==========================================
- * �p�[�e�B�ݒ著�M
- * flag & 0x001=exp�ύX�~�X
- *        0x010=item�ύX�~�X
- *        0x100=��l�ɂ̂ݑ��M
- *------------------------------------------
- */
-int clif_party_option(struct party *p,struct map_session_data *sd,int flag)
-{
-	unsigned char buf[16];
-
-	nullpo_retr(0, p);
-
-//	if(battle_config.etc_log)
-//		printf("clif_party_option: %d %d %d\n",p->exp,p->item,flag);
-	if(sd==NULL && flag==0){
-		int i;
-		for(i=0;i<MAX_PARTY;i++)
-			if((sd=map_id2sd(p->member[i].account_id))!=NULL)
-				break;
-	}
-	if(sd==NULL)
-		return 0;
-	WBUFW(buf,0)=0x101;
-	WBUFW(buf,2)=((flag&0x01)?2:p->exp);
-	WBUFW(buf,4)=((flag&0x10)?2:p->item);
-	if(flag==0)
-		clif_send(buf,packet_len_table[0x101],&sd->bl,PARTY);
-	else {
-		memcpy(WFIFOP(sd->fd,0),buf,packet_len_table[0x101]);
-		WFIFOSET(sd->fd,packet_len_table[0x101]);
-	}
-	return 0;
-}
-/*==========================================
- * �p�[�e�B�E�ށi�E�ޑO�ɌĂԂ��Ɓj
- *------------------------------------------
- */
-int clif_party_leaved(struct party *p,struct map_session_data *sd,int account_id,char *name,int flag)
-{
-	unsigned char buf[64];
-	int i;
-
-	nullpo_retr(0, p);
-
-	WBUFW(buf,0)=0x105;
-	WBUFL(buf,2)=account_id;
-	memcpy(WBUFP(buf,6),name,24);
-	WBUFB(buf,30)=flag&0x0f;
-
-	if((flag&0xf0)==0){
-		if(sd==NULL)
-			for(i=0;i<MAX_PARTY;i++)
-				if((sd=p->member[i].sd)!=NULL)
-					break;
-		if (sd!=NULL)
-			clif_send(buf,packet_len_table[0x105],&sd->bl,PARTY);
-	} else if (sd!=NULL) {
-		memcpy(WFIFOP(sd->fd,0),buf,packet_len_table[0x105]);
-		WFIFOSET(sd->fd,packet_len_table[0x105]);
-	}
-	return 0;
-}
-/*==========================================
- * �p�[�e�B���b�Z�[�W���M
- *------------------------------------------
- */
-int clif_party_message(struct party *p,int account_id,char *mes,int len)
-{
-	struct map_session_data *sd;
-	int i;
-
-	nullpo_retr(0, p);
-
-	for(i=0;i<MAX_PARTY;i++){
-		if((sd=p->member[i].sd)!=NULL)
-			break;
-	}
-	if(sd!=NULL){
-		unsigned char buf[1024];
-		WBUFW(buf,0)=0x109;
-		WBUFW(buf,2)=len+8;
-		WBUFL(buf,4)=account_id;
-		memcpy(WBUFP(buf,8),mes,len);
-		clif_send(buf,len+8,&sd->bl,PARTY);
-	}
-	return 0;
-}
-/*==========================================
- * �p�[�e�B���W�ʒm
- *------------------------------------------
- */
-int clif_party_xy(struct party *p,struct map_session_data *sd)
-{
-	unsigned char buf[16];
-
-	nullpo_retr(0, sd);
-
-	WBUFW(buf,0)=0x107;
-	WBUFL(buf,2)=sd->status.account_id;
-	WBUFW(buf,6)=sd->bl.x;
-	WBUFW(buf,8)=sd->bl.y;
-	clif_send(buf,packet_len_table[0x107],&sd->bl,PARTY_SAMEMAP_WOS);
-//	if(battle_config.etc_log)
-//		printf("clif_party_xy %d\n",sd->status.account_id);
-	return 0;
-}
-/*==========================================
- * �p�[�e�BHP�ʒm
- *------------------------------------------
- */
-int clif_party_hp(struct party *p,struct map_session_data *sd)
-{
-	unsigned char buf[16];
-
-	nullpo_retr(0, sd);
-
-	WBUFW(buf,0)=0x106;
-	WBUFL(buf,2)=sd->status.account_id;
-	WBUFW(buf,6)=(sd->status.hp > 0x7fff)? 0x7fff:sd->status.hp;
-	WBUFW(buf,8)=(sd->status.max_hp > 0x7fff)? 0x7fff:sd->status.max_hp;
-	clif_send(buf,packet_len_table[0x106],&sd->bl,PARTY_AREA_WOS);
-//	if(battle_config.etc_log)
-//		printf("clif_party_hp %d\n",sd->status.account_id);
-	return 0;
-}
-/*==========================================
- * �p�[�e�B�ꏊ�ړ��i���g�p�j
- *------------------------------------------
- */
-int clif_party_move(struct party *p,struct map_session_data *sd,int online)
-{
-	unsigned char buf[128];
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, p);
-
-	WBUFW(buf, 0)=0x104;
-	WBUFL(buf, 2)=sd->status.account_id;
-	WBUFL(buf, 6)=0;
-	WBUFW(buf,10)=sd->bl.x;
-	WBUFW(buf,12)=sd->bl.y;
-	WBUFB(buf,14)=!online;
-	memcpy(WBUFP(buf,15),p->name,24);
-	memcpy(WBUFP(buf,39),sd->status.name,24);
-	memcpy(WBUFP(buf,63),map[sd->bl.m].name,16);
-	clif_send(buf,packet_len_table[0x104],&sd->bl,PARTY);
-	return 0;
-}
-/*==========================================
- * �U�����邽�߂Ɉړ����K�v
- *------------------------------------------
- */
-int clif_movetoattack(struct map_session_data *sd,struct block_list *bl)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, bl);
-
-	fd=sd->fd;
-	WFIFOW(fd, 0)=0x139;
-	WFIFOL(fd, 2)=bl->id;
-	WFIFOW(fd, 6)=bl->x;
-	WFIFOW(fd, 8)=bl->y;
-	WFIFOW(fd,10)=sd->bl.x;
-	WFIFOW(fd,12)=sd->bl.y;
-	WFIFOW(fd,14)=sd->attackrange;
-	WFIFOSET(fd,packet_len_table[0x139]);
-	return 0;
-}
-/*==========================================
- * �����G�t�F�N�g
- *------------------------------------------
- */
-int clif_produceeffect(struct map_session_data *sd,int flag,int nameid)
-{
-	int view,fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	// ���O�̓o�^�Ƒ��M���ɂ��Ă���
-	if( map_charid2nick(sd->status.char_id)==NULL )
-		map_addchariddb(sd->status.char_id,sd->status.name);
-	clif_solved_charname(sd,sd->status.char_id);
-
-	WFIFOW(fd, 0)=0x18f;
-	WFIFOW(fd, 2)=flag;
-	if((view = itemdb_viewid(nameid)) > 0)
-		WFIFOW(fd, 4)=view;
-	else
-		WFIFOW(fd, 4)=nameid;
-	WFIFOSET(fd,packet_len_table[0x18f]);
-	return 0;
-}
-
-// pet
-int clif_catch_process(struct map_session_data *sd)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x19e;
-	WFIFOSET(fd,packet_len_table[0x19e]);
-
-	return 0;
-}
-
-int clif_pet_rulet(struct map_session_data *sd,int data)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x1a0;
-	WFIFOB(fd,2)=data;
-	WFIFOSET(fd,packet_len_table[0x1a0]);
-
-	return 0;
-}
-
-/*==========================================
- * pet�����X�g�쐬
- *------------------------------------------
- */
-int clif_sendegg(struct map_session_data *sd)
-{
-	//R 01a6 <len>.w <index>.w*
-	int i,n=0,fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x1a6;
-	if(sd->status.pet_id <= 0) {
-		for(i=0,n=0;i<MAX_INVENTORY;i++){
-			if(sd->status.inventory[i].nameid<=0 || sd->inventory_data[i] == NULL ||
-			   sd->inventory_data[i]->type!=7 ||
-			   sd->status.inventory[i].amount<=0)
-				continue;
-			WFIFOW(fd,n*2+4)=i+2;
-			n++;
-		}
-	}
-	WFIFOW(fd,2)=4+n*2;
-	WFIFOSET(fd,WFIFOW(fd,2));
-
-	return 0;
-}
-
-int clif_send_petdata(struct map_session_data *sd,int type,int param)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x1a4;
-	WFIFOB(fd,2)=type;
-	WFIFOL(fd,3)=sd->pd->bl.id;
-	WFIFOL(fd,7)=param;
-	WFIFOSET(fd,packet_len_table[0x1a4]);
-
-	return 0;
-}
-
-int clif_send_petstatus(struct map_session_data *sd)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x1a2;
-	memcpy(WFIFOP(fd,2),sd->pet.name,24);
-	WFIFOB(fd,26)=(battle_config.pet_rename == 1)? 0:sd->pet.rename_flag;
-	WFIFOW(fd,27)=sd->pet.level;
-	WFIFOW(fd,29)=sd->pet.hungry;
-	WFIFOW(fd,31)=sd->pet.intimate;
-	WFIFOW(fd,33)=sd->pet.equip;
-	WFIFOSET(fd,packet_len_table[0x1a2]);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_pet_emotion(struct pet_data *pd,int param)
-{
-	unsigned char buf[16];
-	struct map_session_data *sd;
-
-	nullpo_retr(0, pd);
-	nullpo_retr(0, sd = pd->msd);
-
-	memset(buf,0,packet_len_table[0x1aa]);
-
-	WBUFW(buf,0)=0x1aa;
-	WBUFL(buf,2)=pd->bl.id;
-	if(param >= 100 && sd->petDB->talk_convert_class) {
-		if(sd->petDB->talk_convert_class < 0)
-			return 0;
-		else if(sd->petDB->talk_convert_class > 0) {
-			param -= (pd->class - 100)*100;
-			param += (sd->petDB->talk_convert_class - 100)*100;
-		}
-	}
-	WBUFL(buf,6)=param;
-
-	clif_send(buf,packet_len_table[0x1aa],&pd->bl,AREA);
-
-	return 0;
-}
-
-int clif_pet_performance(struct block_list *bl,int param)
-{
-	unsigned char buf[16];
-
-	nullpo_retr(0, bl);
-
-	memset(buf,0,packet_len_table[0x1a4]);
-
-	WBUFW(buf,0)=0x1a4;
-	WBUFB(buf,2)=4;
-	WBUFL(buf,3)=bl->id;
-	WBUFL(buf,7)=param;
-
-	clif_send(buf,packet_len_table[0x1a4],bl,AREA);
-
-	return 0;
-}
-
-int clif_pet_equip(struct pet_data *pd,int nameid)
-{
-	unsigned char buf[16];
-	int view;
-
-	nullpo_retr(0, pd);
-
-	memset(buf,0,packet_len_table[0x1a4]);
-
-	WBUFW(buf,0)=0x1a4;
-	WBUFB(buf,2)=3;
-	WBUFL(buf,3)=pd->bl.id;
-	if((view = itemdb_viewid(nameid)) > 0)
-		WBUFL(buf,7)=view;
-	else
-		WBUFL(buf,7)=nameid;
-
-	clif_send(buf,packet_len_table[0x1a4],&pd->bl,AREA);
-
-	return 0;
-}
-
-int clif_pet_food(struct map_session_data *sd,int foodid,int fail)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x1a3;
-	WFIFOB(fd,2)=fail;
-	WFIFOW(fd,3)=foodid;
-	WFIFOSET(fd,packet_len_table[0x1a3]);
-
-	return 0;
-}
-
-/*==========================================
- * �I�[�g�X�y�� ���X�g���M
- *------------------------------------------
- */
-int clif_autospell(struct map_session_data *sd,int skilllv)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd, 0)=0x1cd;
-
-	if(skilllv>0 && pc_checkskill(sd,MG_NAPALMBEAT)>0)
-		WFIFOL(fd,2)= MG_NAPALMBEAT;
-	else
-		WFIFOL(fd,2)= 0x00000000;
-	if(skilllv>1 && pc_checkskill(sd,MG_COLDBOLT)>0)
-		WFIFOL(fd,6)= MG_COLDBOLT;
-	else
-		WFIFOL(fd,6)= 0x00000000;
-	if(skilllv>1 && pc_checkskill(sd,MG_FIREBOLT)>0)
-		WFIFOL(fd,10)= MG_FIREBOLT;
-	else
-		WFIFOL(fd,10)= 0x00000000;
-	if(skilllv>1 && pc_checkskill(sd,MG_LIGHTNINGBOLT)>0)
-		WFIFOL(fd,14)= MG_LIGHTNINGBOLT;
-	else
-		WFIFOL(fd,14)= 0x00000000;
-	if(skilllv>4 && pc_checkskill(sd,MG_SOULSTRIKE)>0)
-		WFIFOL(fd,18)= MG_SOULSTRIKE;
-	else
-		WFIFOL(fd,18)= 0x00000000;
-	if(skilllv>7 && pc_checkskill(sd,MG_FIREBALL)>0)
-		WFIFOL(fd,22)= MG_FIREBALL;
-	else
-		WFIFOL(fd,22)= 0x00000000;
-	if(skilllv>9 && pc_checkskill(sd,MG_FROSTDIVER)>0)
-		WFIFOL(fd,26)= MG_FROSTDIVER;
-	else
-		WFIFOL(fd,26)= 0x00000000;
-
-	WFIFOSET(fd,packet_len_table[0x1cd]);
-	return 0;
-}
-
-/*==========================================
- * �f�B�{�[�V�����̐‚���
- *------------------------------------------
- */
-int clif_devotion(struct map_session_data *sd,int target)
-{
-	unsigned char buf[56];
-	int n;
-
-	nullpo_retr(0, sd);
-
-	WBUFW(buf,0)=0x1cf;
-	WBUFL(buf,2)=sd->bl.id;
-//	WBUFL(buf,6)=target;
-	for(n=0;n<5;n++)
-		WBUFL(buf,6+4*n)=sd->dev.val2[n];
-//		WBUFL(buf,10+4*n)=0;
-	WBUFB(buf,26)=8;
-	WBUFB(buf,27)=0;
-
-	clif_send(buf,packet_len_table[0x1cf],&sd->bl,AREA);
-	return 0;
-}
-
-/*==========================================
- * ����
- *------------------------------------------
- */
-int clif_spiritball(struct map_session_data *sd)
-{
-	unsigned char buf[16];
-
-	nullpo_retr(0, sd);
-
-	WBUFW(buf,0)=0x1d0;
-	WBUFL(buf,2)=sd->bl.id;
-	WBUFW(buf,6)=sd->spiritball;
-	clif_send(buf,packet_len_table[0x1d0],&sd->bl,AREA);
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_combo_delay(struct block_list *bl,int wait)
-{
-	unsigned char buf[32];
-
-	nullpo_retr(0, bl);
-
-	WBUFW(buf,0)=0x1d2;
-	WBUFL(buf,2)=bl->id;
-	WBUFL(buf,6)=wait;
-	clif_send(buf,packet_len_table[0x1d2],bl,AREA);
-
-	return 0;
-}
-/*==========================================
- *���n���
- *------------------------------------------
- */
-int clif_bladestop(struct block_list *src,struct block_list *dst,
-	int bool)
-{
-	unsigned char buf[32];
-
-	nullpo_retr(0, src);
-	nullpo_retr(0, dst);
-
-	WBUFW(buf,0)=0x1d1;
-	WBUFL(buf,2)=src->id;
-	WBUFL(buf,6)=dst->id;
-	WBUFL(buf,10)=bool;
-
-	clif_send(buf,packet_len_table[0x1d1],src,AREA);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_changemapcell(int m,int x,int y,int cell_type,int type)
-{
-	struct block_list bl;
-	char buf[32];
-
-	bl.m = m;
-	bl.x = x;
-	bl.y = y;
-	WBUFW(buf,0) = 0x192;
-	WBUFW(buf,2) = x;
-	WBUFW(buf,4) = y;
-	WBUFW(buf,6) = cell_type;
-	memcpy(WBUFP(buf,8),map[m].name,16);
-	if(!type)
-		clif_send(buf,packet_len_table[0x192],&bl,AREA);
-	else
-		clif_send(buf,packet_len_table[0x192],&bl,ALL_SAMEMAP);
-
-	return 0;
-}
-
-/*==========================================
- * MVP�G�t�F�N�g
- *------------------------------------------
- */
-int clif_mvp_effect(struct map_session_data *sd)
-{
-	unsigned char buf[16];
-
-	nullpo_retr(0, sd);
-
-	WBUFW(buf,0)=0x10c;
-	WBUFL(buf,2)=sd->bl.id;
-	clif_send(buf,packet_len_table[0x10c],&sd->bl,AREA);
-	return 0;
-}
-/*==========================================
- * MVP�A�C�e������
- *------------------------------------------
- */
-int clif_mvp_item(struct map_session_data *sd,int nameid)
-{
-	int view,fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x10a;
-	if((view = itemdb_viewid(nameid)) > 0)
-		WFIFOW(fd,2)=view;
-	else
-		WFIFOW(fd,2)=nameid;
-	WFIFOSET(fd,packet_len_table[0x10a]);
-	return 0;
-}
-/*==========================================
- * MVP�o���l����
- *------------------------------------------
- */
-int clif_mvp_exp(struct map_session_data *sd,int exp)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x10b;
-	WFIFOL(fd,2)=exp;
-	WFIFOSET(fd,packet_len_table[0x10b]);
-	return 0;
-}
-
-/*==========================================
- * �M���h�쐬�”ےʒm
- *------------------------------------------
- */
-int clif_guild_created(struct map_session_data *sd,int flag)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x167;
-	WFIFOB(fd,2)=flag;
-	WFIFOSET(fd,packet_len_table[0x167]);
-	return 0;
-}
-/*==========================================
- * �M���h�����ʒm
- *------------------------------------------
- */
-int clif_guild_belonginfo(struct map_session_data *sd,struct guild *g)
-{
-	int ps,fd;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, g);
-
-	fd=sd->fd;
-	ps=guild_getposition(sd,g);
-
-	memset(WFIFOP(fd,0),0,packet_len_table[0x16c]);
-	WFIFOW(fd,0)=0x16c;
-	WFIFOL(fd,2)=g->guild_id;
-	WFIFOL(fd,6)=g->emblem_id;
-	WFIFOL(fd,10)=g->position[ps].mode;
-	memcpy(WFIFOP(fd,19),g->name,24);
-	WFIFOSET(fd,packet_len_table[0x16c]);
-	return 0;
-}
-/*==========================================
- * �M���h�����o���O�C���ʒm
- *------------------------------------------
- */
-int clif_guild_memberlogin_notice(struct guild *g,int idx,int flag)
-{
-	unsigned char buf[64];
-
-	nullpo_retr(0, g);
-
-	WBUFW(buf, 0)=0x16d;
-	WBUFL(buf, 2)=g->member[idx].account_id;
-	WBUFL(buf, 6)=g->member[idx].char_id;
-	WBUFL(buf,10)=flag;
-	if(g->member[idx].sd==NULL){
-		struct map_session_data *sd=guild_getavailablesd(g);
-		if(sd!=NULL)
-			clif_send(buf,packet_len_table[0x16d],&sd->bl,GUILD);
-	}else
-		clif_send(buf,packet_len_table[0x16d],&g->member[idx].sd->bl,GUILD_WOS);
-	return 0;
-}
-/*==========================================
- * �M���h�}�X�^�[�ʒm(14d�ւ̉���)
- *------------------------------------------
- */
-int clif_guild_masterormember(struct map_session_data *sd)
-{
-	int type=0x57,fd;
-	struct guild *g;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	g=guild_search(sd->status.guild_id);
-	if(g!=NULL && strcmp(g->master,sd->status.name)==0)
-		type=0xd7;
-	WFIFOW(fd,0)=0x14e;
-	WFIFOL(fd,2)=type;
-	WFIFOSET(fd,packet_len_table[0x14e]);
-	return 0;
-}
-/*==========================================
- * Basic Info (Territories [Valaris])
- *------------------------------------------
- */
-int clif_guild_basicinfo(struct map_session_data *sd)
-{
-	int fd,i,t=0;
-	struct guild *g;
-	struct guild_castle *gc=NULL;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	g=guild_search(sd->status.guild_id);
-	if(g==NULL)
-		return 0;
-
-	WFIFOW(fd, 0)=0x1b6;//0x150;
-	WFIFOL(fd, 2)=g->guild_id;
-	WFIFOL(fd, 6)=g->guild_lv;
-	WFIFOL(fd,10)=g->connect_member;
-	WFIFOL(fd,14)=g->max_member;
-	WFIFOL(fd,18)=g->average_lv;
-	WFIFOL(fd,22)=g->exp;
-	WFIFOL(fd,26)=g->next_exp;
-	WFIFOL(fd,30)=0;	// ��[
-	WFIFOL(fd,34)=0;	// VW�i���i�̈����H�F�����O���t���E�j
-	WFIFOL(fd,38)=0;	// RF�i���`�̓x�����H�F�����O���t�㉺�j
-	WFIFOL(fd,42)=0;	// �l���H
-	memcpy(WFIFOP(fd,46),g->name,24);
-	memcpy(WFIFOP(fd,70),g->master,24);
-
-	for(i=0;i<MAX_GUILDCASTLE;i++){
-		gc=guild_castle_search(i);
-		if(!gc) continue;
-			if(g->guild_id == gc->guild_id)	t++;
-	}
-
-	if      (t==1)  memcpy(WFIFOP(fd,94),"One Castle",20);
-	else if (t==2)  memcpy(WFIFOP(fd,94),"Two Castles",20);
-	else if (t==3)  memcpy(WFIFOP(fd,94),"Three Castles",20);
-	else if (t==4)  memcpy(WFIFOP(fd,94),"Four Castles",20);
-	else if (t==5)  memcpy(WFIFOP(fd,94),"Five Castles",20);
-	else if (t==6)  memcpy(WFIFOP(fd,94),"Six Castles",20);
-	else if (t==7)  memcpy(WFIFOP(fd,94),"Seven Castles",20);
-	else if (t==8)  memcpy(WFIFOP(fd,94),"Eight Castles",20);
-	else if (t==9)  memcpy(WFIFOP(fd,94),"Nine Castles",20);
-	else if (t==10) memcpy(WFIFOP(fd,94),"Ten Castles",20);
-	else if (t==11) memcpy(WFIFOP(fd,94),"Eleven Castles",20);
-	else if (t==12) memcpy(WFIFOP(fd,94),"Twelve Castles",20);
-	else if (t==13) memcpy(WFIFOP(fd,94),"Thirteen Castles",20);
-	else if (t==14) memcpy(WFIFOP(fd,94),"Fourteen Castles",20);
-	else if (t==15) memcpy(WFIFOP(fd,94),"Fifteen Castles",20);
-	else if (t==16) memcpy(WFIFOP(fd,94),"Sixteen Castles",20);
-	else if (t==17) memcpy(WFIFOP(fd,94),"Seventeen Castles",20);
-	else if (t==18) memcpy(WFIFOP(fd,94),"Eighteen Castles",20);
-	else if (t==19) memcpy(WFIFOP(fd,94),"Nineteen Castles",20);
-	else if (t==20) memcpy(WFIFOP(fd,94),"Twenty Castles",20);
-	else if (t==21) memcpy(WFIFOP(fd,94),"Twenty One Castles",20);
-	else if (t==22) memcpy(WFIFOP(fd,94),"Twenty Two Castles",20);
-	else if (t==23) memcpy(WFIFOP(fd,94),"Twenty Three Castles",20);
-	else if (t==24) memcpy(WFIFOP(fd,94),"Twenty Four Castles",20);
-	else if (t==MAX_GUILDCASTLE) memcpy(WFIFOP(fd,94),"Total Domination",20);
-	else memcpy(WFIFOP(fd,94),"None Taken",20);
-
-	WFIFOSET(fd,packet_len_table[WFIFOW(fd,0)]);
-	clif_guild_emblem(sd,g);	// Guild emblem vanish fix [Valaris]
-	return 0;
-}
-
-/*==========================================
- * �M���h����/�G�Ώ��
- *------------------------------------------
- */
-int clif_guild_allianceinfo(struct map_session_data *sd)
-{
-	int fd,i,c;
-	struct guild *g;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	g=guild_search(sd->status.guild_id);
-	if(g==NULL)
-		return 0;
-	WFIFOW(fd, 0)=0x14c;
-	for(i=c=0;i<MAX_GUILDALLIANCE;i++){
-		struct guild_alliance *a=&g->alliance[i];
-		if(a->guild_id>0){
-			WFIFOL(fd,c*32+4)=a->opposition;
-			WFIFOL(fd,c*32+8)=a->guild_id;
-			memcpy(WFIFOP(fd,c*32+12),a->name,24);
-			c++;
-		}
-	}
-	WFIFOW(fd, 2)=c*32+4;
-	WFIFOSET(fd,WFIFOW(fd,2));
-	return 0;
-}
-
-/*==========================================
- * �M���h�����o�[���X�g
- *------------------------------------------
- */
-int clif_guild_memberlist(struct map_session_data *sd)
-{
-	int fd;
-	int i,c;
-	struct guild *g;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	g=guild_search(sd->status.guild_id);
-	if(g==NULL)
-		return 0;
-
-	WFIFOW(fd, 0)=0x154;
-	for(i=0,c=0;i<g->max_member;i++){
-		struct guild_member *m=&g->member[i];
-		if(m->account_id==0)
-			continue;
-		WFIFOL(fd,c*104+ 4)=m->account_id;
-		WFIFOL(fd,c*104+ 8)=m->char_id;
-		WFIFOW(fd,c*104+12)=m->hair;
-		WFIFOW(fd,c*104+14)=m->hair_color;
-		WFIFOW(fd,c*104+16)=m->gender;
-		WFIFOW(fd,c*104+18)=m->class;
-		WFIFOW(fd,c*104+20)=m->lv;
-		WFIFOL(fd,c*104+22)=m->exp;
-		WFIFOL(fd,c*104+26)=m->online;
-		WFIFOL(fd,c*104+30)=m->position;
-		memset(WFIFOP(fd,c*104+34),0,50);	// �����H
-		memcpy(WFIFOP(fd,c*104+84),m->name,24);
-		c++;
-	}
-	WFIFOW(fd, 2)=c*104+4;
-	WFIFOSET(fd,WFIFOW(fd,2));
-	return 0;
-}
-/*==========================================
- * �M���h��E�����X�g
- *------------------------------------------
- */
-int clif_guild_positionnamelist(struct map_session_data *sd)
-{
-	int i,fd;
-	struct guild *g;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	g=guild_search(sd->status.guild_id);
-	if(g==NULL)
-		return 0;
-	WFIFOW(fd, 0)=0x166;
-	for(i=0;i<MAX_GUILDPOSITION;i++){
-		WFIFOL(fd,i*28+4)=i;
-		memcpy(WFIFOP(fd,i*28+8),g->position[i].name,24);
-	}
-	WFIFOW(fd,2)=i*28+4;
-	WFIFOSET(fd,WFIFOW(fd,2));
-	return 0;
-}
-/*==========================================
- * �M���h��E��񃊃X�g
- *------------------------------------------
- */
-int clif_guild_positioninfolist(struct map_session_data *sd)
-{
-	int i,fd;
-	struct guild *g;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	g=guild_search(sd->status.guild_id);
-	if(g==NULL)
-		return 0;
-	WFIFOW(fd, 0)=0x160;
-	for(i=0;i<MAX_GUILDPOSITION;i++){
-		struct guild_position *p=&g->position[i];
-		WFIFOL(fd,i*16+ 4)=i;
-		WFIFOL(fd,i*16+ 8)=p->mode;
-		WFIFOL(fd,i*16+12)=i;
-		WFIFOL(fd,i*16+16)=p->exp_mode;
-	}
-	WFIFOW(fd, 2)=i*16+4;
-	WFIFOSET(fd,WFIFOW(fd,2));
-	return 0;
-}
-/*==========================================
- * �M���h��E�ύX�ʒm
- *------------------------------------------
- */
-int clif_guild_positionchanged(struct guild *g,int idx)
-{
-	struct map_session_data *sd;
-	unsigned char buf[128];
-
-	nullpo_retr(0, g);
-
-	WBUFW(buf, 0)=0x174;
-	WBUFW(buf, 2)=44;
-	WBUFL(buf, 4)=idx;
-	WBUFL(buf, 8)=g->position[idx].mode;
-	WBUFL(buf,12)=idx;
-	WBUFL(buf,16)=g->position[idx].exp_mode;
-	memcpy(WBUFP(buf,20),g->position[idx].name,24);
-	if( (sd=guild_getavailablesd(g))!=NULL )
-		clif_send(buf,WBUFW(buf,2),&sd->bl,GUILD);
-	return 0;
-}
-/*==========================================
- * �M���h�����o�ύX�ʒm
- *------------------------------------------
- */
-int clif_guild_memberpositionchanged(struct guild *g,int idx)
-{
-	struct map_session_data *sd;
-	unsigned char buf[64];
-
-	nullpo_retr(0, g);
-
-	WBUFW(buf, 0)=0x156;
-	WBUFW(buf, 2)=16;
-	WBUFL(buf, 4)=g->member[idx].account_id;
-	WBUFL(buf, 8)=g->member[idx].char_id;
-	WBUFL(buf,12)=g->member[idx].position;
-	if( (sd=guild_getavailablesd(g))!=NULL )
-		clif_send(buf,WBUFW(buf,2),&sd->bl,GUILD);
-	return 0;
-}
-/*==========================================
- * �M���h�G���u�������M
- *------------------------------------------
- */
-int clif_guild_emblem(struct map_session_data *sd,struct guild *g)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, g);
-
-	fd=sd->fd;
-
-	if(g->emblem_len<=0)
-		return 0;
-	WFIFOW(fd,0)=0x152;
-	WFIFOW(fd,2)=g->emblem_len+12;
-	WFIFOL(fd,4)=g->guild_id;
-	WFIFOL(fd,8)=g->emblem_id;
-	memcpy(WFIFOP(fd,12),g->emblem_data,g->emblem_len);
-	WFIFOSET(fd,WFIFOW(fd,2));
-	return 0;
-}
-/*==========================================
- * �M���h�X�L�����M
- *------------------------------------------
- */
-int clif_guild_skillinfo(struct map_session_data *sd)
-{
-	int fd;
-	int i,id,c;
-	struct guild *g;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	g=guild_search(sd->status.guild_id);
-	if(g==NULL)
-		return 0;
-	WFIFOW(fd,0)=0x0162;
-	WFIFOW(fd,4)=g->skill_point;
-	for(i=c=0;i<MAX_GUILDSKILL;i++){
-		if(g->skill[i].id>0){
-			WFIFOW(fd,c*37+ 6) = id = g->skill[i].id;
-			WFIFOW(fd,c*37+ 8) = guild_skill_get_inf(id);
-			WFIFOW(fd,c*37+10) = 0;
-			WFIFOW(fd,c*37+12) = g->skill[i].lv;
-			WFIFOW(fd,c*37+14) = guild_skill_get_sp(id,g->skill[i].lv);
-			WFIFOW(fd,c*37+16) = guild_skill_get_range(id);
-			memset(WFIFOP(fd,c*37+18),0,24);
-			WFIFOB(fd,c*37+42)= //up;
-				(g->skill[i].lv < guild_skill_get_max(id))? 1:0;
-			c++;
-		}
-	}
-	WFIFOW(fd,2)=c*37+6;
-	WFIFOSET(fd,WFIFOW(fd,2));
-	return 0;
-}
-/*==========================================
- * �M���h���m���M
- *------------------------------------------
- */
-int clif_guild_notice(struct map_session_data *sd,struct guild *g)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, g);
-
-	fd=sd->fd;
-	if(*g->mes1==0 && *g->mes2==0)
-		return 0;
-	WFIFOW(fd,0)=0x16f;
-	memcpy(WFIFOP(fd,2),g->mes1,60);
-	memcpy(WFIFOP(fd,62),g->mes2,120);
-	WFIFOSET(fd,packet_len_table[0x16f]);
-	return 0;
-}
-
-/*==========================================
- * �M���h�����o���U
- *------------------------------------------
- */
-int clif_guild_invite(struct map_session_data *sd,struct guild *g)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, g);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x16a;
-	WFIFOL(fd,2)=g->guild_id;
-	memcpy(WFIFOP(fd,6),g->name,24);
-	WFIFOSET(fd,packet_len_table[0x16a]);
-	return 0;
-}
-/*==========================================
- * �M���h�����o���U����
- *------------------------------------------
- */
-int clif_guild_inviteack(struct map_session_data *sd,int flag)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x169;
-	WFIFOB(fd,2)=flag;
-	WFIFOSET(fd,packet_len_table[0x169]);
-	return 0;
-}
-/*==========================================
- * �M���h�����o�E�ޒʒm
- *------------------------------------------
- */
-int clif_guild_leave(struct map_session_data *sd,const char *name,const char *mes)
-{
-	unsigned char buf[128];
-
-	nullpo_retr(0, sd);
-
-	WBUFW(buf, 0)=0x15a;
-	memcpy(WBUFP(buf, 2),name,24);
-	memcpy(WBUFP(buf,26),mes,40);
-	clif_send(buf,packet_len_table[0x15a],&sd->bl,GUILD);
-	return 0;
-}
-/*==========================================
- * �M���h�����o�Ǖ��ʒm
- *------------------------------------------
- */
-int clif_guild_explusion(struct map_session_data *sd,const char *name,const char *mes,
-	int account_id)
-{
-	unsigned char buf[128];
-
-	nullpo_retr(0, sd);
-
-	WBUFW(buf, 0)=0x15c;
-	memcpy(WBUFP(buf, 2),name,24);
-	memcpy(WBUFP(buf,26),mes,40);
-	memcpy(WBUFP(buf,66),"dummy",24);
-	clif_send(buf,packet_len_table[0x15c],&sd->bl,GUILD);
-	return 0;
-}
-/*==========================================
- * �M���h�Ǖ������o���X�g
- *------------------------------------------
- */
-int clif_guild_explusionlist(struct map_session_data *sd)
-{
-	int fd;
-	int i,c;
-	struct guild *g;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	g=guild_search(sd->status.guild_id);
-	if(g==NULL)
-		return 0;
-	WFIFOW(fd,0)=0x163;
-	for(i=c=0;i<MAX_GUILDEXPLUSION;i++){
-		struct guild_explusion *e=&g->explusion[i];
-		if(e->account_id>0){
-			memcpy(WFIFOP(fd,c*88+ 4),e->name,24);
-			memcpy(WFIFOP(fd,c*88+28),e->acc,24);
-			memcpy(WFIFOP(fd,c*88+52),e->mes,44);
-			c++;
-		}
-	}
-	WFIFOW(fd,2)=c*88+4;
-	WFIFOSET(fd,WFIFOW(fd,2));
-	return 0;
-}
-
-/*==========================================
- * �M���h��b
- *------------------------------------------
- */
-int clif_guild_message(struct guild *g,int account_id,const char *mes,int len)
-{
-	struct map_session_data *sd;
-	unsigned char lbuf[255];
-	unsigned char *buf = lbuf;
-        if (len + 32 >= sizeof(lbuf))
-            buf = malloc(len + 32);
-	WBUFW(buf, 0)=0x17f;
-	WBUFW(buf, 2)=len+4;
-	memcpy(WBUFP(buf,4),mes,len);
-
-	if( (sd=guild_getavailablesd(g))!=NULL )
-		clif_send(buf,WBUFW(buf,2),&sd->bl,GUILD);
-        if ( buf != lbuf)
-            free(buf);
-	return 0;
-}
-/*==========================================
- * �M���h�X�L������U��ʒm
- *------------------------------------------
- */
-int clif_guild_skillup(struct map_session_data *sd,int skill_num,int lv)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0) = 0x10e;
-	WFIFOW(fd,2) = skill_num;
-	WFIFOW(fd,4) = lv;
-	WFIFOW(fd,6) = guild_skill_get_sp(skill_num,lv);
-	WFIFOW(fd,8) = guild_skill_get_range(skill_num);
-	WFIFOB(fd,10) = 1;
-	WFIFOSET(fd,11);
-	return 0;
-}
-/*==========================================
- * �M���h�����v��
- *------------------------------------------
- */
-int clif_guild_reqalliance(struct map_session_data *sd,int account_id,const char *name)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x171;
-	WFIFOL(fd,2)=account_id;
-	memcpy(WFIFOP(fd,6),name,24);
-	WFIFOSET(fd,packet_len_table[0x171]);
-	return 0;
-}
-/*==========================================
- * �M���h��������
- *------------------------------------------
- */
-int clif_guild_allianceack(struct map_session_data *sd,int flag)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x173;
-	WFIFOL(fd,2)=flag;
-	WFIFOSET(fd,packet_len_table[0x173]);
-	return 0;
-}
-/*==========================================
- * �M���h�֌W�����ʒm
- *------------------------------------------
- */
-int clif_guild_delalliance(struct map_session_data *sd,int guild_id,int flag)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x184;
-	WFIFOL(fd,2)=guild_id;
-	WFIFOL(fd,6)=flag;
-	WFIFOSET(fd,packet_len_table[0x184]);
-	return 0;
-}
-/*==========================================
- * �M���h�G�Ό���
- *------------------------------------------
- */
-int clif_guild_oppositionack(struct map_session_data *sd,int flag)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x181;
-	WFIFOB(fd,2)=flag;
-	WFIFOSET(fd,packet_len_table[0x181]);
-	return 0;
-}
-/*==========================================
- * �M���h�֌W�lj�
- *------------------------------------------
- */
-/*int clif_guild_allianceadded(struct guild *g,int idx)
-{
-	unsigned char buf[64];
-	WBUFW(fd,0)=0x185;
-	WBUFL(fd,2)=g->alliance[idx].opposition;
-	WBUFL(fd,6)=g->alliance[idx].guild_id;
-	memcpy(WBUFP(fd,10),g->alliance[idx].name,24);
-	clif_send(buf,packet_len_table[0x185],guild_getavailablesd(g),GUILD);
-	return 0;
-}*/
-
-/*==========================================
- * �M���h���U�ʒm
- *------------------------------------------
- */
-int clif_guild_broken(struct map_session_data *sd,int flag)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x15e;
-	WFIFOL(fd,2)=flag;
-	WFIFOSET(fd,packet_len_table[0x15e]);
-	return 0;
-}
-
-/*==========================================
- * �G���[�V����
- *------------------------------------------
- */
-void clif_emotion(struct block_list *bl,int type)
-{
-	unsigned char buf[8];
-
-	nullpo_retv(bl);
-
-	WBUFW(buf,0)=0xc0;
-	WBUFL(buf,2)=bl->id;
-	WBUFB(buf,6)=type;
-	clif_send(buf,packet_len_table[0xc0],bl,AREA);
-}
-
-/*==========================================
- * �g�[�L�[�{�b�N�X
- *------------------------------------------
- */
-void clif_talkiebox(struct block_list *bl,char* talkie)
-{
-	unsigned char buf[86];
-
-	nullpo_retv(bl);
-
-	WBUFW(buf,0)=0x191;
-	WBUFL(buf,2)=bl->id;
-	memcpy(WBUFP(buf,6),talkie,80);
-	clif_send(buf,packet_len_table[0x191],bl,AREA);
-}
-
-/*==========================================
- * �����G�t�F�N�g
- *------------------------------------------
- */
-void clif_wedding_effect(struct block_list *bl) {
-	unsigned char buf[6];
-
-	nullpo_retv(bl);
-
-	WBUFW(buf,0) = 0x1ea;
-	WBUFL(buf,2) = bl->id;
-	clif_send(buf, packet_len_table[0x1ea], bl, AREA);
-}
-/*==========================================
- * ���Ȃ��Ɉ��������g�p�����O����
- *------------------------------------------
-
-void clif_callpartner(struct map_session_data *sd)
-{
-	unsigned char buf[26];
-	char *p;
-
-	nullpo_retv(sd);
-
-	if(sd->status.partner_id){
-		WBUFW(buf,0)=0x1e6;
-		p = map_charid2nick(sd->status.partner_id);
-		if(p){
-			memcpy(WBUFP(buf,2),p,24);
-		}else{
-			map_reqchariddb(sd,sd->status.partner_id);
-			chrif_searchcharid(sd->status.partner_id);
-			WBUFB(buf,2) = 0;
-		}
-		clif_send(buf,packet_len_table[0x1e6]&sd->bl,AREA);
-	}
-	return;
-}
-*/
-/*==========================================
- * ����
- *------------------------------------------
- */
-void clif_sitting(int fd, struct map_session_data *sd) 
-{
-	unsigned char buf[64];
-
-	nullpo_retv(sd);
-
-	WBUFW(buf, 0) = 0x8a;
-	WBUFL(buf, 2) = sd->bl.id;
-	WBUFB(buf,26) = 2;
-	clif_send(buf, packet_len_table[0x8a], &sd->bl, AREA);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int clif_disp_onlyself(struct map_session_data *sd, char *mes, int len) 
-{
-	unsigned char lbuf[255];
-	unsigned char *buf = (len + 32 >= sizeof(lbuf)) ? malloc(len + 32) : lbuf;
-
-	nullpo_retr(0, sd);
-
-	WBUFW(buf, 0) = 0x17f;
-	WBUFW(buf, 2) = len + 8;
-	memcpy(WBUFP(buf,4), mes, len + 4);
-
-	clif_send(buf, WBUFW(buf,2), &sd->bl, SELF);
-
-        if (buf != lbuf)
-            free(buf);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-
-int clif_GM_kickack(struct map_session_data *sd, int id) 
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd = sd->fd;
-	WFIFOW(fd,0) = 0xcd;
-	WFIFOL(fd,2) = id;
-	WFIFOSET(fd, packet_len_table[0xcd]);
-	return 0;
-}
-
-void clif_parse_QuitGame(int fd,struct map_session_data *sd);
-
-int clif_GM_kick(struct map_session_data *sd,struct map_session_data *tsd,int type)
-{
-	nullpo_retr(0, tsd);
-
-	if(type)
-		clif_GM_kickack(sd,tsd->status.account_id);
-	tsd->opt1 = tsd->opt2 = 0;
-	clif_parse_QuitGame(tsd->fd,tsd);
-
-	return 0;
-}
-/*==========================================
- * Wis���ۋ��‰���
- *------------------------------------------
- */
-int clif_wisexin(struct map_session_data *sd,int type,int flag)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xd1;
-	WFIFOB(fd,2)=type;
-	WFIFOB(fd,3)=flag;
-	WFIFOSET(fd,packet_len_table[0xd1]);
-
-	return 0;
-}
-/*==========================================
- * Wis�S���ۋ��‰���
- *------------------------------------------
- */
-int clif_wisall(struct map_session_data *sd,int type,int flag)
-{
-	int fd;
-
-	nullpo_retr(0, sd);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0xd2;
-	WFIFOB(fd,2)=type;
-	WFIFOB(fd,3)=flag;
-	WFIFOSET(fd,packet_len_table[0xd2]);
-
-	return 0;
-}
-/*==========================================
- * �T�E���h�G�t�F�N�g
- *------------------------------------------
- */
-void clif_soundeffect(struct map_session_data *sd,struct block_list *bl,char *name,int type)
-{
-	int fd;
-
-	nullpo_retv(sd);
-	nullpo_retv(bl);
-
-	fd=sd->fd;
-	WFIFOW(fd,0)=0x1d3;
-	memcpy(WFIFOP(fd,2),name,24);
-	WFIFOB(fd,26)=type;
-	WFIFOL(fd,27)=0;
-	WFIFOL(fd,31)=bl->id;
-	WFIFOSET(fd,packet_len_table[0x1d3]);
-
-	return;
-}
-// displaying special effects (npcs, weather, etc) [Valaris]
-int clif_specialeffect(struct block_list *bl, int type, int flag) {
-	unsigned char buf[24];
-
-	nullpo_retr(0, bl);
-
-	memset(buf, 0, packet_len_table[0x1f3]);
-
-	WBUFW(buf,0) = 0x1f3;
-	WBUFL(buf,2) = bl->id;
-	WBUFL(buf,6) = type;
-
-	if (flag==2) {
-		struct map_session_data *sd=NULL;
-		int i;
-		for(i=0; i < fd_max; i++) {
-			if (session[i] && (sd = session[i]->session_data) != NULL && sd->state.auth && sd->bl.m == bl->m)
-				clif_specialeffect(&sd->bl,type,1);
-		}
-	}
-	
-	else if (flag==1)
-		clif_send(buf, packet_len_table[0x1f3], bl, SELF);
-	else if (!flag)
-		clif_send(buf, packet_len_table[0x1f3], bl, AREA);
-
-	return 0;
-
-}
-// ------------
-// clif_parse_*
-// ------------
-// �p�P�b�g�ǂݎ���ĐF�X����
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_WantToConnection(int fd, struct map_session_data *sd) 
-{
-	struct map_session_data *old_sd;
-	int account_id; // account_id in the packet 0x72 or 0x7E
-
-	if (sd) {
-		if (battle_config.error_log)
-			printf("clif_parse_WantToConnection : invalid request?\n");
-		return;
-	}
-
-	// 0x72
-	if (RFIFOW(fd,0) == 0x72) {
-		//printf("Received bytes %d with packet 0x72.\n", RFIFOREST(fd));
-		if (RFIFOREST(fd) >= 39 && (RFIFOB(fd,38) == 0 || RFIFOB(fd,38) == 1)) // 00 = Female, 01 = Male
-			account_id = RFIFOL(fd,12);
-		else if (RFIFOREST(fd) >= 22 && (RFIFOB(fd,21) == 0 || RFIFOB(fd,21) == 1)) // 00 = Female, 01 = Male
-			account_id = RFIFOL(fd,5);
-		else // old packet version
-			account_id = RFIFOL(fd,2);
-	// 0x7E
-	} else if (RFIFOW(fd,0) == 0x7E) {
-		//printf("Received bytes %d with packet 0x7E.\n", RFIFOREST(fd));
-		if (RFIFOREST(fd) >= 37 && (RFIFOB(fd,36) == 0 || RFIFOB(fd,36) == 1)) // 00 = Female, 01 = Male
-			account_id = RFIFOL(fd,9);
-		else
-			account_id = RFIFOL(fd,12);
-	// 0xF5
-	} else {
-		//printf("Received bytes %d with packet 0xF5.\n", RFIFOREST(fd));
-		account_id = RFIFOL(fd,7);
-	}
-
-	// if same account already connected, we disconnect the 2 sessions
-	if ((old_sd = map_id2sd(account_id)) != NULL) {
-		clif_authfail_fd(fd, 2); // same id
-		clif_authfail_fd(old_sd->fd, 2); // same id
-		printf("clif_parse_WantToConnection: Double connection for account %d (sessions: #%d (new) and #%d (old)).\n", account_id, fd, old_sd->fd);
-	} else {
-		sd = session[fd]->session_data = calloc(sizeof(*sd), 1);
-		if (sd == NULL) {
-			printf("out of memory : clif_parse_WantToConnection\n");
-			exit(1);
-		}
-		sd->fd = fd;
-
-		// 0x72
-		if (RFIFOW(fd,0) == 0x72) {
-			if (RFIFOREST(fd) >= 39 && (RFIFOB(fd,38) == 0 || RFIFOB(fd,38) == 1)) { // 00 = Female, 01 = Male
-				sd->packet_ver = 7; // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-				pc_setnewpc(sd, account_id, RFIFOL(fd,22), RFIFOL(fd,30), RFIFOL(fd,34), RFIFOB(fd,38), fd);
-			} else if (RFIFOREST(fd) >= 22 && (RFIFOB(fd,21) == 0 || RFIFOB(fd,21) == 1)) { // 00 = Female, 01 = Male
-				sd->packet_ver = 6; // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-				pc_setnewpc(sd, account_id, RFIFOL(fd,9), RFIFOL(fd,13), RFIFOL(fd,17), RFIFOB(fd,21), fd);
-			} else { // old packet version
-				sd->packet_ver = 5; // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-				pc_setnewpc(sd, account_id, RFIFOL(fd,6), RFIFOL(fd,10), RFIFOL(fd,14), RFIFOB(fd,18), fd);
-			}
-		// 0x7E
-		} else if (RFIFOW(fd,0) == 0x7E) {
-			if (RFIFOREST(fd) >= 37 && (RFIFOB(fd,36) == 0 || RFIFOB(fd,36) == 1)) { // 00 = Female, 01 = Male
-				sd->packet_ver = 9; // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-				pc_setnewpc(sd, account_id, RFIFOL(fd,21), RFIFOL(fd,28), RFIFOL(fd,32), RFIFOB(fd,36), fd);
-			} else {
-				sd->packet_ver = 8; // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-				pc_setnewpc(sd, account_id, RFIFOL(fd,18), RFIFOL(fd,24), RFIFOL(fd,28), RFIFOB(fd,32), fd);
-			}
-		// 0xF5
-		} else {
-			sd->packet_ver = 10; // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-			pc_setnewpc(sd, account_id, RFIFOL(fd,15), RFIFOL(fd,25), RFIFOL(fd,29), RFIFOB(fd,33), fd);
-		}
-
-		WFIFOL(fd,0) = sd->bl.id;
-		WFIFOSET(fd,4);
-
-		map_addiddb(&sd->bl);
-
-		chrif_authreq(sd);
-	}
-
-	return;
-}
-
-/*==========================================
- * 007d �N���C�A���g���}�b�v�ǂݍ��݊���
- * map�N�����ɕK�v�ȃf�[�^��S�đ���‚���
- *------------------------------------------
- */
-void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
-{
-//	struct item_data* item;
-	int i;
-	nullpo_retv(sd);
-
-	if(sd->bl.prev != NULL)
-		return;
-
-	// �ڑ�ok��
-	//clif_authok();
-	if(sd->npc_id) npc_event_dequeue(sd);
-	clif_skillinfoblock(sd);
-	pc_checkitem(sd);
-	//guild_info();
-
-	// loadendack��
-	// next exp
-	clif_updatestatus(sd,SP_NEXTBASEEXP);
-	clif_updatestatus(sd,SP_NEXTJOBEXP);
-	// skill point
-	clif_updatestatus(sd,SP_SKILLPOINT);
-	// item
-	clif_itemlist(sd);
-	clif_equiplist(sd);
-	// cart
-	if(pc_iscarton(sd)){
-		clif_cart_itemlist(sd);
-		clif_cart_equiplist(sd);
-		clif_updatestatus(sd,SP_CARTINFO);
-	}
-	// param all
-	clif_initialstatus(sd);
-	// party
-	party_send_movemap(sd);
-	// guild
-	guild_send_memberinfoshort(sd,1);
-	// 119
-	// 78
-
-	if(battle_config.pc_invincible_time > 0) {
-		if(map[sd->bl.m].flag.gvg)
-			pc_setinvincibletimer(sd,battle_config.pc_invincible_time<<1);
-		else
-			pc_setinvincibletimer(sd,battle_config.pc_invincible_time);
-	}
-
-	map_addblock(&sd->bl);	// �u���b�N�o�^
-	clif_spawnpc(sd);	// spawn
-
-	// weight max , now
-	clif_updatestatus(sd,SP_MAXWEIGHT);
-	clif_updatestatus(sd,SP_WEIGHT);
-
-	// pvp
-	if(sd->pvp_timer!=-1 && !battle_config.pk_mode)
-		delete_timer(sd->pvp_timer,pc_calc_pvprank_timer);
-	if(map[sd->bl.m].flag.pvp){
-		if(!battle_config.pk_mode) { // remove pvp stuff for pk_mode [Valaris]
-			sd->pvp_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;
-		}
-		clif_set0199(sd->fd,1);
-	} else {
-		sd->pvp_timer=-1;
-	}
-	if(map[sd->bl.m].flag.gvg) {
-		clif_set0199(sd->fd,3);
-	}
-
-	// pet
-	if(sd->status.pet_id > 0 && sd->pd && sd->pet.intimate > 0) {
-		map_addblock(&sd->pd->bl);
-		clif_spawnpet(sd->pd);
-		clif_send_petdata(sd,0,0);
-		clif_send_petdata(sd,5,0x14);
-		clif_send_petstatus(sd);
-	}
-
-	if(sd->state.connect_new) {
-		sd->state.connect_new = 0;
-		if(sd->status.class != sd->view_class)
-			clif_changelook(&sd->bl,LOOK_BASE,sd->view_class);
-		if(sd->status.pet_id > 0 && sd->pd && sd->pet.intimate > 900)
-			clif_pet_emotion(sd->pd,(sd->pd->class - 100)*100 + 50 + pet_hungry_val(sd));
-
-/*						Stop players from spawning inside castles [Valaris]					*/
-
-                        {
-			struct guild_castle *gc=guild_mapname2gc(map[sd->bl.m].name);
-			if (gc)
-				pc_setpos(sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,2);
-                        }
-
-/*						End Addition [Valaris]			*/
-
-		}
-
-	// view equipment item
-#if PACKETVER < 4
-	clif_changelook(&sd->bl,LOOK_WEAPON,sd->status.weapon);
-	clif_changelook(&sd->bl,LOOK_SHIELD,sd->status.shield);
-#else
-	clif_changelook(&sd->bl,LOOK_WEAPON,0);
-#endif
-	if(battle_config.save_clothcolor==1 && sd->status.clothes_color > 0)
-		clif_changelook(&sd->bl,LOOK_CLOTHES_COLOR,sd->status.clothes_color);
-
-	if(sd->status.hp<sd->status.max_hp>>2 && pc_checkskill(sd,SM_AUTOBERSERK)>0 &&
-		(sd->sc_data[SC_PROVOKE].timer==-1 || sd->sc_data[SC_PROVOKE].val2==0 ))
-		// �I�[�g�o�[�T�[�N����
-		skill_status_change_start(&sd->bl,SC_PROVOKE,10,1,0,0,0,0);
-	
-//	if(time(&timer) < ((weddingtime=pc_readglobalreg(sd,"PC_WEDDING_TIME")) + 3600))
-//		skill_status_change_start(&sd->bl,SC_WEDDING,0,weddingtime,0,0,36000,0);
-
-	if(battle_config.muting_players && sd->status.manner < 0)
-		skill_status_change_start(&sd->bl,SC_NOCHAT,0,0,0,0,0,0);
-
-	// option
-	clif_changeoption(&sd->bl);
-	if(sd->sc_data[SC_TRICKDEAD].timer != -1)
-		skill_status_change_end(&sd->bl,SC_TRICKDEAD,-1);
-	if(sd->sc_data[SC_SIGNUMCRUCIS].timer != -1 && !battle_check_undead(7,sd->def_ele))
-		skill_status_change_end(&sd->bl,SC_SIGNUMCRUCIS,-1);
-	if(sd->special_state.infinite_endure && sd->sc_data[SC_ENDURE].timer == -1)
-		skill_status_change_start(&sd->bl,SC_ENDURE,10,1,0,0,0,0);
-	for(i=0;i<MAX_INVENTORY;i++){
-		if(sd->status.inventory[i].equip && sd->status.inventory[i].equip & 0x0002 && sd->status.inventory[i].broken==1)
-			skill_status_change_start(&sd->bl,SC_BROKNWEAPON,0,0,0,0,0,0);
-		if(sd->status.inventory[i].equip && sd->status.inventory[i].equip & 0x0010 && sd->status.inventory[i].broken==1)
-			skill_status_change_start(&sd->bl,SC_BROKNARMOR,0,0,0,0,0,0);
-	}
-
-	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,0,sd);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_TickSend(int fd, struct map_session_data *sd) {
-	nullpo_retv(sd);
-
-	if (sd->packet_ver == 8) // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		sd->client_tick = RFIFOL(fd,6);
-	else if (sd->packet_ver == 9) // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		sd->client_tick = RFIFOL(fd,9);
-	else if (sd->packet_ver == 10) // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		sd->client_tick = RFIFOL(fd,7);
-	else // old version by default (and version 6 + 7)
-		sd->client_tick = RFIFOL(fd,2);
-	sd->server_tick = gettick();
-	clif_servertick(sd);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_WalkToXY(int fd, struct map_session_data *sd) {
-	int x, y;
-
-	nullpo_retv(sd);
-
-	if (pc_isdead(sd)) {
-		clif_clearchar_area(&sd->bl, 1);
-		return;
-	}
-
-	if (sd->npc_id != 0 || sd->vender_id != 0)
-		return;
-
-	if (sd->skilltimer != -1 && pc_checkskill(sd, SA_FREECAST) <= 0) // �t���[�L���X�g
-		return;
-
-	if (sd->chatID)
-		return;
-
-	if (sd->canmove_tick > gettick())
-		return;
-
-	// �X�e�[�^�X�ُ��n�C�f�B���O��(�g���l���h���C�u��)�œ����Ȃ�
-	if ((sd->opt1 > 0 && sd->opt1 != 6) ||
-	     sd->sc_data[SC_ANKLE].timer !=-1 || //�A���N���X�l�A
-	     sd->sc_data[SC_AUTOCOUNTER].timer !=-1 || //�I�[�g�J�E���^�[
-	     sd->sc_data[SC_TRICKDEAD].timer !=-1 || //���񂾂ӂ�
-	     sd->sc_data[SC_BLADESTOP].timer !=-1 || //���n���
-	     sd->sc_data[SC_SPIDERWEB].timer !=-1 || //�X�p�C�_�[�E�F�b�u
-	     (sd->sc_data[SC_DANCING].timer !=-1 && sd->sc_data[SC_DANCING].val4)) //���t�X�L�����t���͓����Ȃ�
-		return;
-	if ((sd->status.option & 2) && pc_checkskill(sd, RG_TUNNELDRIVE) <= 0)
-		return;
-
-	if (sd->invincible_timer != -1)
-		pc_delinvincibletimer(sd);
-
-	pc_stopattack(sd);
-
-	if (sd->packet_ver == 6) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		x = RFIFOB(fd,5) * 4 + (RFIFOB(fd,6) >> 6);
-		y = ((RFIFOB(fd,6) & 0x3f) << 4) + (RFIFOB(fd,7) >> 4);
-	} else if (sd->packet_ver == 7) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		x = RFIFOB(fd,6) * 4 + (RFIFOB(fd,7) >> 6);
-		y = ((RFIFOB(fd,7) & 0x3f) << 4) + (RFIFOB(fd,8) >> 4);
-	} else if (sd->packet_ver == 8) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		x = RFIFOB(fd,3) * 4 + (RFIFOB(fd,4) >> 6);
-		y = ((RFIFOB(fd,4) & 0x3f) << 4) + (RFIFOB(fd,5) >> 4);
-	} else if (sd->packet_ver == 9) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		x = RFIFOB(fd,12) * 4 + (RFIFOB(fd,13) >> 6);
-		y = ((RFIFOB(fd,13) & 0x3f) << 4) + (RFIFOB(fd,14) >> 4);
-	} else if (sd->packet_ver == 10) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		x = RFIFOB(fd,6) * 4 + (RFIFOB(fd,7) >> 6);
-		y = ((RFIFOB(fd,7) & 0x3f) << 4) + (RFIFOB(fd,8) >> 4);
-	} else { // old version by default
-		x = RFIFOB(fd,2) * 4 + (RFIFOB(fd,3) >> 6);
-		y = ((RFIFOB(fd,3) & 0x3f) << 4) + (RFIFOB(fd,4) >> 4);
-	}
-	pc_walktoxy(sd, x, y);
-
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_QuitGame(int fd, struct map_session_data *sd) {
-	unsigned int tick=gettick();
-	struct skill_unit_group* sg;
-
-	nullpo_retv(sd);
-
-	WFIFOW(fd,0) = 0x18b;
-	if ((!pc_isdead(sd) && (sd->opt1 || (sd->opt2 && !(night_flag == 1 && sd->opt2 == STATE_BLIND)))) ||
-		sd->skilltimer != -1 ||
-		(DIFF_TICK(tick , sd->canact_tick) < 0) ||
-	    (sd->sc_data && sd->sc_data[SC_DANCING].timer!=-1 && sd->sc_data[SC_DANCING].val4 && (sg=(struct skill_unit_group *)sd->sc_data[SC_DANCING].val2) && sg->src_id == sd->bl.id)) {
-		WFIFOW(fd,2)=1;
-		WFIFOSET(fd,packet_len_table[0x18b]);
-		return;
-	}
-
-	/*	Rovert's prevent logout option fixed [Valaris]	*/
-	if ((battle_config.prevent_logout && (gettick() - sd->canlog_tick) >= 10000) || (!battle_config.prevent_logout)) {
-		clif_setwaitclose(fd);
-		WFIFOW(fd,2)=0;
-	} else {
-		WFIFOW(fd,2)=1;
-	}
-	WFIFOSET(fd,packet_len_table[0x18b]);
-
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_GetCharNameRequest(int fd, struct map_session_data *sd) {
-	struct block_list *bl;
-	int account_id;
-
-	if (sd->packet_ver == 8) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		account_id = RFIFOL(fd,11);
-	} else if (sd->packet_ver == 9) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		account_id = RFIFOL(fd,8);
-	} else if (sd->packet_ver == 10) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		account_id = RFIFOL(fd,10);
-	} else { // old version by default (+ packet version 6 and 7)
-		account_id = RFIFOL(fd,2);
-	}
-	bl = map_id2bl(account_id);
-	if (bl == NULL)
-		return;
-
-	WFIFOW(fd,0) = 0x95;
-	WFIFOL(fd,2) = account_id;
-
-	switch(bl->type) {
-	case BL_PC:
-	  {
-		struct map_session_data *ssd = (struct map_session_data *)bl;
-		struct party *p = NULL;
-		struct guild *g = NULL;
-
-		nullpo_retv(ssd);
-
-		memcpy(WFIFOP(fd,6), ssd->status.name, 24);
-		if (ssd->status.guild_id > 0 && (g = guild_search(ssd->status.guild_id)) != NULL &&
-		    (ssd->status.party_id == 0 || (p = party_search(ssd->status.party_id)) != NULL)) {
-			// �M���h�����Ȃ�p�P�b�g0195��Ԃ�
-			int i, ps = -1;
-			for(i = 0; i < g->max_member; i++) {
-				if (g->member[i].account_id == ssd->status.account_id &&
-				    g->member[i].char_id == ssd->status.char_id )
-					ps = g->member[i].position;
-			}
-			if (ps >= 0 && ps < MAX_GUILDPOSITION) {
-				WFIFOW(fd, 0) = 0x195;
-				if (p)
-					memcpy(WFIFOP(fd,30), p->name, 24);
-				else
-					WFIFOB(fd,30) = 0;
-				memcpy(WFIFOP(fd,54), g->name,24);
-				memcpy(WFIFOP(fd,78), g->position[ps].name, 24);
-				WFIFOSET(fd,packet_len_table[0x195]);
-				break;
-			}
-		}
-		WFIFOSET(fd,packet_len_table[0x95]);
-	  }
-		break;
-	case BL_PET:
-		memcpy(WFIFOP(fd,6), ((struct pet_data*)bl)->name, 24);
-		WFIFOSET(fd,packet_len_table[0x95]);
-		break;
-	case BL_NPC:
-		memcpy(WFIFOP(fd,6), ((struct npc_data*)bl)->name, 24);
-		WFIFOSET(fd,packet_len_table[0x95]);
-		break;
-	case BL_MOB:
-		{
-			struct mob_data *md = (struct mob_data *)bl;
-
-			nullpo_retv(md);
-
-			memcpy(WFIFOP(fd,6), md->name, 24);
-			if (md->class >= 1285 && md->class <= 1288) {
-				struct guild *g;
-				struct guild_castle *gc = guild_mapname2gc(map[md->bl.m].name);
-				if (gc && gc->guild_id > 0 && (g = guild_search(gc->guild_id)) != NULL) {
-					WFIFOW(fd, 0) = 0x195;
-					WFIFOB(fd,30) = 0;
-					memcpy(WFIFOP(fd,54), g->name, 24);
-					memcpy(WFIFOP(fd,78), gc->castle_name, 24);
-					WFIFOSET(fd,packet_len_table[0x195]);
-				} else {
-					WFIFOSET(fd,packet_len_table[0x95]);
-				}
-			} else if (battle_config.show_mob_hp == 1) {
-				char mobhp[50];
-				sprintf(mobhp, "hp: %d/%d", md->hp, mob_db[md->class].max_hp);
-				WFIFOW(fd, 0) = 0x195;
-				memcpy(WFIFOP(fd,30), mobhp, 24);
-				WFIFOB(fd,54) = 0;
-				WFIFOB(fd,78) = 0;
-				WFIFOSET(fd,packet_len_table[0x195]);
-			} else {
-				WFIFOSET(fd,packet_len_table[0x95]);
-			}
-		}
-		break;
-	default:
-		if (battle_config.error_log)
-			printf("clif_parse_GetCharNameRequest : bad type %d(%d)\n", bl->type, account_id);
-		break;
-	}
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_GlobalMessage(int fd, struct map_session_data *sd) { // S 008c <len>.w <str>.?B
-	char *message = (char *) malloc(RFIFOW(fd,2) + 128);
-	char *buf = (char *) malloc(RFIFOW(fd,2) + 4);
-
-	nullpo_retv(sd);
-
-	memset(message, '\0', RFIFOW(fd,2) + 128);
-	memset(buf, '\0', RFIFOW(fd,2) + 4);
-
-	if ((is_atcommand(fd, sd, RFIFOP(fd,4), 0) != AtCommand_None) ||
-            ( sd->sc_data && 
-		(sd->sc_data[SC_BERSERK].timer!=-1 ||	//�o�[�T�[�N���͉�b���s��
-		sd->sc_data[SC_NOCHAT].timer!=-1 ) ))	//�`���b�g�֎~ 
-            {
-                free(message);
-                free(buf);
-		return;
-            }
-
-	//printf("clif_parse_GlobalMessage: message: '%s'.\n", RFIFOP(fd,4));
-	if (strncmp(RFIFOP(fd,4), sd->status.name, strlen(sd->status.name)) != 0) {
-		printf("Hack on global message: character '%s' (account: %d), use an other name to send a (normal) message.\n", sd->status.name, sd->status.account_id);
-
-		// information is sended to all online GM
-		sprintf(message, "Hack on global message (normal message): character '%s' (account: %d) uses an other name.", sd->status.name, sd->status.account_id);
-		intif_wis_message_to_gm(wisp_server_name, battle_config.hack_info_GM_level, message, strlen(message) + 1);
-		if (strlen(RFIFOP(fd,4)) == 0)
-			strcpy(message, " This player sends a void name and a void message.");
-		else
-			sprintf(message, " This player sends (name:message): '%s'.", RFIFOP(fd,4));
-		intif_wis_message_to_gm(wisp_server_name, battle_config.hack_info_GM_level, message, strlen(message) + 1);
-		// message about the ban
-		if (battle_config.ban_spoof_namer > 0)
-			sprintf(message, " This player has been banned for %d minute(s).", battle_config.ban_spoof_namer);
-		else
-			sprintf(message, " This player hasn't been banned (Ban option is disabled).");
-		intif_wis_message_to_gm(wisp_server_name, battle_config.hack_info_GM_level, message, strlen(message) + 1);
-
-		// if we ban people
-		if (battle_config.ban_spoof_namer > 0) {
-			chrif_char_ask_name(-1, sd->status.name, 2, 0, 0, 0, 0, battle_config.ban_spoof_namer, 0); // type: 2 - ban (year, month, day, hour, minute, second)
-			clif_setwaitclose(fd); // forced to disconnect because of the hack
-		}
-		// but for the hacker, we display on his screen (he see/look no difference).
-	} else {
-		// send message to others
-		WBUFW(buf,0) = 0x8d;
-		WBUFW(buf,2) = RFIFOW(fd,2) + 4; // len of message - 4 + 8
-		WBUFL(buf,4) = sd->bl.id;
-		memcpy(WBUFP(buf,8), RFIFOP(fd,4), RFIFOW(fd,2) - 4);
-		clif_send(buf, WBUFW(buf,2), &sd->bl, sd->chatID ? CHAT_WOS : AREA_CHAT_WOC);
-	}
-
-	// send back message to the speaker
-	memcpy(WFIFOP(fd,0), RFIFOP(fd,0), RFIFOW(fd,2));
-	WFIFOW(fd,0) = 0x8e;
-	WFIFOSET(fd, WFIFOW(fd,2));
-
-        free(message);
-        free(buf);
-
-	return;
-}
-
-int clif_message(struct block_list *bl, char* msg)
-{
-	unsigned short msg_len = strlen(msg) + 1;
-	unsigned char buf[256];
-
-	nullpo_retr(0, bl);
-
-	WBUFW(buf, 0) = 0x8d;
-	WBUFW(buf, 2) = msg_len + 8;
-	WBUFL(buf, 4) = bl->id;
-	memcpy(WBUFP(buf, 8), msg, msg_len);
-
-	clif_send(buf, WBUFW(buf,2), bl, AREA);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_MapMove(int fd, struct map_session_data *sd) {
-// /m /mapmove (as @rura GM command)
-	char output[100];
-	char map_name[17];
-
-	nullpo_retv(sd);
-
-	memset(output, '\0', sizeof(output));
-	memset(map_name, '\0', sizeof(map_name));
-
-	if ((battle_config.atc_gmonly == 0 || pc_isGM(sd)) &&
-	    (pc_isGM(sd) >= get_atcommand_level(AtCommand_MapMove))) {
-		memcpy(map_name, RFIFOP(fd,2), 16);
-		sprintf(output, "%s %d %d", map_name, RFIFOW(fd,18), RFIFOW(fd,20));
-		atcommand_rura(fd, sd, "@rura", output);
-	}
-
-	return;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_ChangeDir(int fd, struct map_session_data *sd) {
-	unsigned char buf[64];
-	short headdir, dir;
-
-	nullpo_retv(sd);
-
-	if (sd->packet_ver == 7) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		headdir = RFIFOW(fd,5);
-		dir = RFIFOB(fd,12);
-	} else if (sd->packet_ver == 8) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		headdir = RFIFOW(fd,5);
-		dir = RFIFOB(fd,12);
-	} else if (sd->packet_ver == 9) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		headdir = RFIFOW(fd,7);
-		dir = RFIFOB(fd,11);
-	} else if (sd->packet_ver == 10) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		headdir = RFIFOW(fd,4);
-		dir = RFIFOB(fd,9);
-	} else { // old version by default (and packet version 6)
-		headdir = RFIFOW(fd,2);
-		dir = RFIFOB(fd,4);
-	}
-
-	pc_setdir(sd, dir, headdir);
-
-	WBUFW(buf,0) = 0x9c;
-	WBUFL(buf,2) = sd->bl.id;
-	WBUFW(buf,6) = headdir;
-	WBUFB(buf,8) = dir;
-	if (sd->disguise > 23 && sd->disguise < 4001) // mob disguises [Valaris]
-		clif_send(buf, packet_len_table[0x9c], &sd->bl, AREA);
-	else
-		clif_send(buf, packet_len_table[0x9c], &sd->bl, AREA_WOS);
-
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_Emotion(int fd, struct map_session_data *sd) {
-	unsigned char buf[64];
-
-	nullpo_retv(sd);
-
-	if (battle_config.basic_skill_check == 0 || pc_checkskill(sd, NV_BASIC) >= 2) {
-		WBUFW(buf,0) = 0xc0;
-		WBUFL(buf,2) = sd->bl.id;
-		WBUFB(buf,6) = RFIFOB(fd,2);
-		clif_send(buf, packet_len_table[0xc0], &sd->bl, AREA);
-	} else
-		clif_skill_fail(sd, 1, 0, 1);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_HowManyConnections(int fd, struct map_session_data *sd) {
-	WFIFOW(fd,0) = 0xc2;
-	WFIFOL(fd,2) = map_getusers();
-	WFIFOSET(fd,packet_len_table[0xc2]);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_ActionRequest(int fd, struct map_session_data *sd) {
-	unsigned int tick;
-	unsigned char buf[64];
-	int action_type, target_id;
-
-	nullpo_retv(sd);
-
-	if (pc_isdead(sd)) {
-		clif_clearchar_area(&sd->bl, 1);
-		return;
-	}
-	if (sd->npc_id != 0 || sd->opt1 > 0 || sd->status.option & 2 ||
-	    (sd->sc_data &&
-	     (sd->sc_data[SC_AUTOCOUNTER].timer != -1 || //�I�[�g�J�E���^�[
-	      sd->sc_data[SC_BLADESTOP].timer != -1 || //���n���
-	      sd->sc_data[SC_DANCING].timer != -1)))
-		return;
-
-	tick = gettick();
-
-	pc_stop_walking(sd, 0);
-	pc_stopattack(sd);
-
-	if (sd->packet_ver == 8) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		target_id = RFIFOL(fd,3);
-		action_type = RFIFOB(fd,8);
-	} else if (sd->packet_ver == 9) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		target_id = RFIFOL(fd,7);
-		action_type = RFIFOB(fd,17);
-	} else if (sd->packet_ver == 10) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		target_id = RFIFOL(fd,9);
-		action_type = RFIFOB(fd,22);
-	} else { // old version by default (and packet version 6 and 7)
-		target_id = RFIFOL(fd,2);
-		action_type = RFIFOB(fd,6);
-	}
-
-	switch(action_type) {
-	case 0x00: // once attack
-	case 0x07: // continuous attack
-		if(sd->sc_data[SC_WEDDING].timer != -1 || sd->view_class==22)
-			return;
-		if (sd->vender_id != 0)
-			return;
-		if (!battle_config.sdelay_attack_enable && pc_checkskill(sd, SA_FREECAST) <= 0) {
-			if (DIFF_TICK(tick, sd->canact_tick) < 0) {
-				clif_skill_fail(sd, 1, 4, 0);
-				return;
-			}
-		}
-		if (sd->invincible_timer != -1)
-			pc_delinvincibletimer(sd);
-		if (sd->attacktarget > 0) // [Valaris]
-			sd->attacktarget = 0;
-		pc_attack(sd, target_id, action_type != 0);
-		break;
-	case 0x02: // sitdown
-		if (battle_config.basic_skill_check == 0 || pc_checkskill(sd, NV_BASIC) >= 3) {
-			pc_stop_walking(sd, 1);
-			skill_gangsterparadise(sd, 1); // �M�����O�X�^�[�p���_�C�X�ݒ�
-			pc_setsit(sd);
-			clif_sitting(fd, sd);
-		} else
-			clif_skill_fail(sd, 1, 0, 2);
-		break;
-	case 0x03: // standup
-		skill_gangsterparadise(sd, 0); // �M�����O�X�^�[�p���_�C�X����
-		pc_setstand(sd);
-		WBUFW(buf, 0) = 0x8a;
-		WBUFL(buf, 2) = sd->bl.id;
-		WBUFB(buf,26) = 3;
-		clif_send(buf, packet_len_table[0x8a], &sd->bl, AREA);
-		break;
-	}
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_Restart(int fd, struct map_session_data *sd) {
-	nullpo_retv(sd);
-
-	switch(RFIFOB(fd,2)) {
-	case 0x00:
-		if (pc_isdead(sd)) {
-			pc_setstand(sd);
-			pc_setrestartvalue(sd, 3);
-			pc_setpos(sd, sd->status.save_point.map, sd->status.save_point.x, sd->status.save_point.y, 2);
-		}
-		break;
-	case 0x01:
-		if(!pc_isdead(sd) && (sd->opt1 || (sd->opt2 && !(night_flag == 1 && sd->opt2 == STATE_BLIND))))
-			return;
-
-		/*	Rovert's Prevent logout option - Fixed [Valaris]	*/
-		if ((battle_config.prevent_logout && (gettick() - sd->canlog_tick) >= 10000) || (!battle_config.prevent_logout)) {
-			chrif_charselectreq(sd);
-		} else {
-			WFIFOW(fd,0)=0x18b;
-			WFIFOW(fd,2)=1;
-
-			WFIFOSET(fd,packet_len_table[0x018b]);
-		}
-		break;
-	}
-}
-
-/*==========================================
- * Transmission of a wisp (S 0096 <len>.w <nick>.24B <message>.?B)
- *------------------------------------------
- */
-void clif_parse_Wis(int fd, struct map_session_data *sd) { // S 0096 <len>.w <nick>.24B <message>.?B // rewritten by [Yor]
-	struct map_session_data *dstsd;
-	int i;
-        int gmlen = strlen(RFIFOP(fd,28));
-        char gmbuf[512];
-	char *gm_command = ((gmlen+28) > sizeof(gmbuf)) ? (char *) malloc(gmlen + 28) : gmbuf;
-        // 24+3+(RFIFOW(fd,2)-28)+1 or 24+3+(strlen(RFIFOP(fd,28))+1 (size can be wrong with hacker)
-
-	//printf("clif_parse_Wis: message: '%s'.\n", RFIFOP(fd,28));
-	memset(gm_command, 0, gmlen);
-	sprintf(gm_command, "%s : %s", sd->status.name, RFIFOP(fd,28));
-	if ((is_atcommand(fd, sd, gm_command, 0) != AtCommand_None) ||
-            ( sd && sd->sc_data && 
-		(sd->sc_data[SC_BERSERK].timer!=-1 ||	//�o�[�T�[�N���͉�b���s��
-		sd->sc_data[SC_NOCHAT].timer!=-1 ) ))	//�`���b�g�֎~
-            {
-                if (gm_command != gmbuf)
-                    free(gm_command);
-		return;
-            }
-
-	// searching destination character
-	dstsd = map_nick2sd(RFIFOP(fd,4));
-	// player is not on this map-server
-	if (dstsd == NULL ||
-	// At this point, don't send wisp/page if it's not exactly the same name, because (example)
-	// if there are 'Test' player on an other map-server and 'test' player on this map-server,
-	// and if we ask for 'Test', we must not contact 'test' player
-	// so, we send information to inter-server, which is the only one which decide (and copy correct name).
-	    strcmp(dstsd->status.name, RFIFOP(fd,4)) != 0) // not exactly same name
-		// send message to inter-server
-		intif_wis_message(sd, RFIFOP(fd,4), RFIFOP(fd,28), RFIFOW(fd,2)-28);
-	// player is on this map-server
-	else {
-		// if you send to your self, don't send anything to others
-		if (dstsd->fd == fd) // but, normaly, it's impossible!
-			clif_wis_message(fd, wisp_server_name, "You can not page yourself. Sorry.", strlen("You can not page yourself. Sorry.") + 1);
-		// otherwise, send message and answer immediatly
-		else {
-			if (dstsd->ignoreAll == 1)
-				clif_wis_end(fd, 2); // type: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-			else {
-				// if player ignore the source character
-				for(i = 0; i < (sizeof(dstsd->ignore) / sizeof(dstsd->ignore[0])); i++)
-					if (strcmp(dstsd->ignore[i].name, sd->status.name) == 0) {
-						clif_wis_end(fd, 2);	// flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-						break;
-					}
-				// if source player not found in ignore list
-				if (i == (sizeof(sd->ignore) / sizeof(sd->ignore[0]))) {
-					clif_wis_message(dstsd->fd, sd->status.name, RFIFOP(fd,28), RFIFOW(fd,2) - 28);
-					clif_wis_end(fd, 0); // type: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-				}
-			}
-		}
-	}
-        
-        if (gm_command != gmbuf)
-            free(gm_command);
-
-	return;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_GMmessage(int fd, struct map_session_data *sd) {
-// /b
-	nullpo_retv(sd);
-
-	if ((battle_config.atc_gmonly == 0 || pc_isGM(sd)) &&
-	    (pc_isGM(sd) >= get_atcommand_level(AtCommand_Broadcast)))
-		intif_GMmessage(RFIFOP(fd,4), RFIFOW(fd,2)-4, 0);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_TakeItem(int fd, struct map_session_data *sd) {
-	struct flooritem_data *fitem;
-	int map_object_id;
-
-	nullpo_retv(sd);
-
-	if (sd->packet_ver == 7) // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		map_object_id = RFIFOL(fd,6);
-	else if (sd->packet_ver == 8) // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		map_object_id = RFIFOL(fd,6);
-	else if (sd->packet_ver == 9) // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		map_object_id = RFIFOL(fd,9);
-	else if (sd->packet_ver == 10) // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		map_object_id = RFIFOL(fd,7);
-	else // old version by default (and parcket version 6)
-		map_object_id = RFIFOL(fd,2);
-	fitem = (struct flooritem_data*)map_id2bl(map_object_id);
-
-	if (pc_isdead(sd)) {
-		clif_clearchar_area(&sd->bl, 1);
-		return;
-	}
-
-	if( sd->npc_id!=0 || sd->vender_id != 0 || sd->opt1 > 0 ||
-		(sd->sc_data && (sd->sc_data[SC_TRICKDEAD].timer != -1 || //���񂾂ӂ�
-		sd->sc_data[SC_BLADESTOP].timer != -1 || //���n���
-		sd->sc_data[SC_BERSERK].timer!=-1 ||	//�o�[�T�[�N
-		sd->sc_data[SC_NOCHAT].timer!=-1 )) )	//��b�֎~
-		return;
-
-	if (fitem == NULL || fitem->bl.m != sd->bl.m)
-		return;
-
-	pc_takeitem(sd, fitem);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_DropItem(int fd, struct map_session_data *sd) {
-	int item_index, item_amount;
-
-	nullpo_retv(sd);
-
-	if (pc_isdead(sd)) {
-		clif_clearchar_area(&sd->bl, 1);
-		return;
-	}
-	if (sd->npc_id != 0 || sd->vender_id != 0 || sd->opt1 > 0 ||
-		(sd->sc_data && (sd->sc_data[SC_AUTOCOUNTER].timer != -1 || //�I�[�g�J�E���^�[
-		sd->sc_data[SC_BLADESTOP].timer != -1 || //���n���
-		sd->sc_data[SC_BERSERK].timer != -1)) ) //�o�[�T�[�N
-		return;
-
-	if (sd->packet_ver == 8) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		item_index = RFIFOW(fd,5) - 2;
-		item_amount = RFIFOW(fd,12);
-	} else if (sd->packet_ver == 9) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		item_index = RFIFOW(fd,8) - 2;
-		item_amount = RFIFOW(fd,15);
-	} else if (sd->packet_ver == 10) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		item_index = RFIFOW(fd,6) - 2;
-		item_amount = RFIFOW(fd,15);
-	} else { // old version by default (+ packet version 6 and 7)
-		item_index = RFIFOW(fd,2) - 2;
-		item_amount = RFIFOW(fd,4);
-	}
-
-	pc_dropitem(sd, item_index, item_amount);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_UseItem(int fd, struct map_session_data *sd) {
-	nullpo_retv(sd);
-
-	if (pc_isdead(sd)) {
-		clif_clearchar_area(&sd->bl, 1);
-		return;
-	}
-	if (sd->npc_id!=0 || sd->vender_id != 0 || sd->opt1 > 0 ||
-	    (sd->sc_data && (sd->sc_data[SC_TRICKDEAD].timer != -1 || //���񂾂ӂ�
-	     sd->sc_data[SC_BLADESTOP].timer != -1 || //���n���
-		sd->sc_data[SC_BERSERK].timer!=-1 ||	//�o�[�T�[�N
-		sd->sc_data[SC_NOCHAT].timer!=-1 )) )	//��b�֎~
-		return;
-
-	if (sd->invincible_timer != -1)
-		pc_delinvincibletimer(sd);
-
-	if (sd->packet_ver == 6) // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		pc_useitem(sd,RFIFOW(fd,5)-2);
-	else if (sd->packet_ver == 7) // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		pc_useitem(sd,RFIFOW(fd,6)-2);
-	else if (sd->packet_ver == 8) // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		pc_useitem(sd,RFIFOW(fd,6)-2);
-	else if (sd->packet_ver == 9) // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		pc_useitem(sd,RFIFOW(fd,9)-2);
-	else if (sd->packet_ver == 10) // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		pc_useitem(sd,RFIFOW(fd,7)-2);
-	else // old version by default
-		pc_useitem(sd,RFIFOW(fd,2)-2);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_EquipItem(int fd,struct map_session_data *sd)
-{
-	int index;
-
-	nullpo_retv(sd);
-
-	if(pc_isdead(sd)) {
-		clif_clearchar_area(&sd->bl,1);
-		return;
-	}
-	index = RFIFOW(fd,2)-2;
-	if(sd->npc_id!=0 || sd->vender_id != 0) return;
-	if(sd->sc_data && ( sd->sc_data[SC_BLADESTOP].timer!=-1 || sd->sc_data[SC_BERSERK].timer!=-1 )) return;
-
-	if(sd->status.inventory[index].identify != 1) {		// ���Ӓ�
-		// Bjorn: Auto-identify items when equipping them as there
-		//  is no nice way to do this in the client yet.
-		sd->status.inventory[index].identify = 1;
-		//clif_equipitemack(sd,index,0,0);	// fail
-		//return;
-	}
-	//�y�b�g�p�����ł��邩�Ȃ���
-	if(sd->inventory_data[index]) {
-		if(sd->inventory_data[index]->type != 8){
-			if(sd->inventory_data[index]->type == 10)
-				RFIFOW(fd,4)=0x8000;	// ��𖳗���葕���ł���悤�Ɂi�|�|�G
-			pc_equipitem(sd,index,RFIFOW(fd,4));
-		} else
-			pet_equipitem(sd,index);
-	}
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_UnequipItem(int fd,struct map_session_data *sd)
-{
-	int index;
-
-	nullpo_retv(sd);
-
-	if(pc_isdead(sd)) {
-		clif_clearchar_area(&sd->bl,1);
-		return;
-	}
-	index = RFIFOW(fd,2)-2;
-	if(sd->status.inventory[index].broken == 1 && sd->sc_data && sd->sc_data[SC_BROKNWEAPON].timer!=-1)
-		skill_status_change_end(&sd->bl,SC_BROKNWEAPON,-1);
-	if(sd->status.inventory[index].broken == 1 && sd->sc_data && sd->sc_data[SC_BROKNARMOR].timer!=-1)
-		skill_status_change_end(&sd->bl,SC_BROKNARMOR,-1);
-	if(sd->sc_data && ( sd->sc_data[SC_BLADESTOP].timer!=-1 || sd->sc_data[SC_BERSERK].timer!=-1 ))
-		return;
-
-	if(sd->npc_id!=0 || sd->vender_id != 0 || sd->opt1 > 0)
-		return;
-	pc_unequipitem(sd,index,0);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_NpcClicked(int fd,struct map_session_data *sd)
-{
-	nullpo_retv(sd);
-
-	if(pc_isdead(sd)) {
-		clif_clearchar_area(&sd->bl,1);
-		return;
-	}
-	if(sd->npc_id!=0 || sd->vender_id != 0)
-		return;
-	npc_click(sd,RFIFOL(fd,2));
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_NpcBuySellSelected(int fd,struct map_session_data *sd)
-{
-	npc_buysellsel(sd,RFIFOL(fd,2),RFIFOB(fd,6));
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_NpcBuyListSend(int fd,struct map_session_data *sd)
-{
-	int fail=0,n;
-	unsigned short *item_list;
-
-	n = (RFIFOW(fd,2)-4) /4;
-	item_list = (unsigned short*)RFIFOP(fd,4);
-
-	fail = npc_buylist(sd,n,item_list);
-
-	WFIFOW(fd,0)=0xca;
-	WFIFOB(fd,2)=fail;
-	WFIFOSET(fd,packet_len_table[0xca]);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_NpcSellListSend(int fd,struct map_session_data *sd)
-{
-	int fail=0,n;
-	unsigned short *item_list;
-
-	n = (RFIFOW(fd,2)-4) /4;
-	item_list = (unsigned short*)RFIFOP(fd,4);
-
-	fail = npc_selllist(sd,n,item_list);
-
-	WFIFOW(fd,0)=0xcb;
-	WFIFOB(fd,2)=fail;
-	WFIFOSET(fd,packet_len_table[0xcb]);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_CreateChatRoom(int fd,struct map_session_data *sd)
-{
-	if(battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 4){
-		chat_createchat(sd,RFIFOW(fd,4),RFIFOB(fd,6),RFIFOP(fd,7),RFIFOP(fd,15),RFIFOW(fd,2)-15);
-	} else
-		clif_skill_fail(sd,1,0,3);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_ChatAddMember(int fd,struct map_session_data *sd)
-{
-	chat_joinchat(sd,RFIFOL(fd,2),RFIFOP(fd,6));
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_ChatRoomStatusChange(int fd,struct map_session_data *sd)
-{
-	chat_changechatstatus(sd,RFIFOW(fd,4),RFIFOB(fd,6),RFIFOP(fd,7),RFIFOP(fd,15),RFIFOW(fd,2)-15);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_ChangeChatOwner(int fd,struct map_session_data *sd)
-{
-	chat_changechatowner(sd,RFIFOP(fd,6));
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_KickFromChat(int fd,struct map_session_data *sd)
-{
-	chat_kickchat(sd,RFIFOP(fd,2));
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_ChatLeave(int fd,struct map_session_data *sd)
-{
-	chat_leavechat(sd);
-}
-
-/*==========================================
- * ����v���𑊎�ɑ���
- *------------------------------------------
- */
-void clif_parse_TradeRequest(int fd,struct map_session_data *sd)
-{
-	nullpo_retv(sd);
-
-	if(battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 1){
-		trade_traderequest(sd,RFIFOL(sd->fd,2));
-	} else
-		clif_skill_fail(sd,1,0,0);
-}
-
-/*==========================================
- * ����v��
- *------------------------------------------
- */
-void clif_parse_TradeAck(int fd,struct map_session_data *sd)
-{
-	nullpo_retv(sd);
-
-	trade_tradeack(sd,RFIFOB(sd->fd,2));
-}
-
-/*==========================================
- * �A�C�e���lj�
- *------------------------------------------
- */
-void clif_parse_TradeAddItem(int fd,struct map_session_data *sd)
-{
-	nullpo_retv(sd);
-
-	trade_tradeadditem(sd,RFIFOW(sd->fd,2),RFIFOL(sd->fd,4));
-}
-
-/*==========================================
- * �A�C�e���lj�����(ok����)
- *------------------------------------------
- */
-void clif_parse_TradeOk(int fd,struct map_session_data *sd)
-{
-	trade_tradeok(sd);
-}
-
-/*==========================================
- * ����L�����Z��
- *------------------------------------------
- */
-void clif_parse_TradeCansel(int fd,struct map_session_data *sd)
-{
-	trade_tradecancel(sd);
-}
-
-/*==========================================
- * �������(trade����)
- *------------------------------------------
- */
-void clif_parse_TradeCommit(int fd,struct map_session_data *sd)
-{
-	trade_tradecommit(sd);
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_StopAttack(int fd,struct map_session_data *sd)
-{
-	pc_stopattack(sd);
-}
-
-/*==========================================
- * �J�[�g�փA�C�e�����ڂ�
- *------------------------------------------
- */
-void clif_parse_PutItemToCart(int fd,struct map_session_data *sd)
-{
-	nullpo_retv(sd);
-
-	if(sd->npc_id!=0 || sd->vender_id != 0)
-		return;
-	pc_putitemtocart(sd,RFIFOW(fd,2)-2,RFIFOL(fd,4));
-}
-/*==========================================
- * �J�[�g����A�C�e�����o��
- *------------------------------------------
- */
-void clif_parse_GetItemFromCart(int fd,struct map_session_data *sd)
-{
-	nullpo_retv(sd);
-
-	if(sd->npc_id!=0 || sd->vender_id != 0) return;
-	pc_getitemfromcart(sd,RFIFOW(fd,2)-2,RFIFOL(fd,4));
-}
-
-/*==========================================
- * �t���i(��,�y�R,�J�[�g)���͂���
- *------------------------------------------
- */
-void clif_parse_RemoveOption(int fd,struct map_session_data *sd)
-{
-	if(pc_isriding(sd)) {	// jobchange when removing peco [Valaris]
-		if(sd->status.class==13)
-			sd->status.class=sd->view_class=7;
-
-		if(sd->status.class==21)
-			sd->status.class=sd->view_class=14;
-
-		if(sd->status.class==4014)
-			sd->status.class=sd->view_class=4008;
-
-		if(sd->status.class==4022)
-			sd->status.class=sd->view_class=4015;
-	}
-
-	pc_setoption(sd,0);
-}
-
-/*==========================================
- * �`�F���W�J�[�g
- *------------------------------------------
- */
-void clif_parse_ChangeCart(int fd,struct map_session_data *sd)
-{
-	pc_setcart(sd,RFIFOW(fd,2));
-}
-
-/*==========================================
- * �X�e�[�^�X�A�b�v
- *------------------------------------------
- */
-void clif_parse_StatusUp(int fd,struct map_session_data *sd)
-{
-	pc_statusup(sd,RFIFOW(fd,2));
-}
-
-/*==========================================
- * �X�L�����x���A�b�v
- *------------------------------------------
- */
-void clif_parse_SkillUp(int fd,struct map_session_data *sd)
-{
-	pc_skillup(sd,RFIFOW(fd,2));
-}
-
-/*==========================================
- * �X�L���g�p�iID�w��j
- *------------------------------------------
- */
-void clif_parse_UseSkillToId(int fd, struct map_session_data *sd) {
-	int skillnum, skilllv, lv, target_id;
-	unsigned int tick = gettick();
-
-	nullpo_retv(sd);
-
-	if(map[sd->bl.m].flag.noskill) return;
-	if (sd->chatID || sd->npc_id != 0 || sd->vender_id != 0)
-		return;
-
-	if (sd->packet_ver == 6) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		skilllv = RFIFOW(fd,4);
-		skillnum = RFIFOW(fd,9);
-		target_id = RFIFOL(fd,11);
-	} else if (sd->packet_ver == 7) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		skilllv = RFIFOW(fd,7);
-		skillnum = RFIFOW(fd,9);
-		target_id = RFIFOL(fd,15);
-	} else if (sd->packet_ver == 8) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		skilllv = RFIFOW(fd,7);
-		skillnum = RFIFOW(fd,12);
-		target_id = RFIFOL(fd,16);
-	} else if (sd->packet_ver == 9) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		skilllv = RFIFOW(fd,11);
-		skillnum = RFIFOW(fd,18);
-		target_id = RFIFOL(fd,22);
-	} else if (sd->packet_ver == 10) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		skilllv = RFIFOW(fd,9);
-		skillnum = RFIFOW(fd,15);
-		target_id = RFIFOL(fd,18);
-	} else { // old version by default
-		skilllv = RFIFOW(fd,2);
-		skillnum = RFIFOW(fd,4);
-		target_id = RFIFOL(fd,6);
-	}
-
-	if (sd->skilltimer != -1) {
-		if (skillnum != SA_CASTCANCEL)
-			return;
-	} else if (DIFF_TICK(tick, sd->canact_tick) < 0) {
-		clif_skill_fail(sd, skillnum, 4, 0);
-		return;
-	}
-
-	if ((sd->sc_data[SC_TRICKDEAD].timer != -1 && skillnum != NV_TRICKDEAD) || 
-		sd->sc_data[SC_BERSERK].timer != -1 || sd->sc_data[SC_NOCHAT].timer!=-1 ||
-			sd->sc_data[SC_WEDDING].timer!=-1 || sd->view_class==22)
-		return;
-	if (sd->invincible_timer != -1)
-		pc_delinvincibletimer(sd);
-	if (sd->skillitem >= 0 && sd->skillitem == skillnum) {
-		if (skilllv != sd->skillitemlv)
-			skilllv = sd->skillitemlv;
-		skill_use_id(sd, target_id, skillnum, skilllv);
-	} else {
-		sd->skillitem = sd->skillitemlv = -1;
-		if (skillnum == MO_EXTREMITYFIST) {
-			if ((sd->sc_data[SC_COMBO].timer == -1 || (sd->sc_data[SC_COMBO].val1 != MO_COMBOFINISH && sd->sc_data[SC_COMBO].val1 != CH_CHAINCRUSH))) {
-				if (!sd->state.skill_flag ) {
-					sd->state.skill_flag = 1;
-					clif_skillinfo(sd, MO_EXTREMITYFIST, 1, -1);
-					return;
-				} else if (sd->bl.id == target_id) {
-					clif_skillinfo(sd, MO_EXTREMITYFIST, 1, -1);
-					return;
-				}
-			}
-		}
-		if ((lv = pc_checkskill(sd, skillnum)) > 0) {
-			if (skilllv > lv)
-				skilllv = lv;
-			skill_use_id(sd, target_id, skillnum, skilllv);
-			if (sd->state.skill_flag)
-				sd->state.skill_flag = 0;
-		}
-	}
-}
-
-/*==========================================
- * �X�L���g�p�i�ꏊ�w��j
- *------------------------------------------
- */
-void clif_parse_UseSkillToPos(int fd, struct map_session_data *sd) {
-	int skillnum, skilllv, lv, x, y;
-	unsigned int tick = gettick();
-	int skillmoreinfo;
-
-	nullpo_retv(sd);
-
-	if(map[sd->bl.m].flag.noskill) return;
-	if (sd->npc_id != 0 || sd->vender_id != 0) return;
-	if(sd->chatID) return;
-
-	skillmoreinfo = -1;
-	if (sd->packet_ver == 6) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		skilllv = RFIFOW(fd,4);
-		skillnum = RFIFOW(fd,9);
-		x = RFIFOW(fd,11);
-		y = RFIFOW(fd,13);
-		if (RFIFOW(fd,0) == 0x190)
-			skillmoreinfo = 15;
-	} else if (sd->packet_ver == 7) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		skilllv = RFIFOW(fd,7);
-		skillnum = RFIFOW(fd,9);
-		x = RFIFOW(fd,15);
-		y = RFIFOW(fd,17);
-		if (RFIFOW(fd,0) == 0x190)
-			skillmoreinfo = 19;
-	} else if (sd->packet_ver == 8) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		skilllv = RFIFOW(fd,3);
-		skillnum = RFIFOW(fd,6);
-		x = RFIFOW(fd,17);
-		y = RFIFOW(fd,21);
-		if (RFIFOW(fd,0) == 0x0a2)
-			skillmoreinfo = 23;
-	} else if (sd->packet_ver == 9) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		skilllv = RFIFOW(fd,5);
-		skillnum = RFIFOW(fd,15);
-		x = RFIFOW(fd,29);
-		y = RFIFOW(fd,38);
-		if (RFIFOW(fd,0) == 0x0a2)
-			skillmoreinfo = 40;
-	} else if (sd->packet_ver == 10) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		skilllv = RFIFOW(fd,10);
-		skillnum = RFIFOW(fd,14);
-		x = RFIFOW(fd,18);
-		y = RFIFOW(fd,23);
-		if (RFIFOW(fd,0) == 0x0a7)
-			skillmoreinfo = 25;
-	} else { // old version by default
-		skilllv = RFIFOW(fd,2);
-		skillnum = RFIFOW(fd,4);
-		x = RFIFOW(fd,6);
-		y = RFIFOW(fd,8);
-		if (RFIFOW(fd,0) == 0x190)
-			skillmoreinfo = 10;
-	}
-
-	if (skillmoreinfo != -1) {
-		if (pc_issit(sd)) {
-			clif_skill_fail(sd, skillnum, 0, 0);
-			return;
-		}
-		memcpy(talkie_mes, RFIFOP(fd,skillmoreinfo), 80);
-	}
-
-	if (sd->skilltimer != -1)
-		return;
-	else if (DIFF_TICK(tick, sd->canact_tick) < 0) {
-		clif_skill_fail(sd, skillnum, 4, 0);
-		return;
-	}
-
-	if((sd->sc_data[SC_TRICKDEAD].timer != -1 && skillnum != NV_TRICKDEAD) || 
-		sd->sc_data[SC_BERSERK].timer!=-1 || sd->sc_data[SC_NOCHAT].timer!=-1 ||
-			sd->sc_data[SC_WEDDING].timer!=-1 || sd->view_class==22)
-		return;
-	if (sd->invincible_timer != -1)
-		pc_delinvincibletimer(sd);
-	if (sd->skillitem >= 0 && sd->skillitem == skillnum) {
-		if (skilllv != sd->skillitemlv)
-			skilllv = sd->skillitemlv;
-		skill_use_pos(sd, x, y, skillnum, skilllv);
-	} else {
-		sd->skillitem = sd->skillitemlv = -1;
-		if ((lv = pc_checkskill(sd, skillnum)) > 0) {
-			if (skilllv > lv)
-				skilllv = lv;
-			skill_use_pos(sd, x, y, skillnum,skilllv);
-		}
-	}
-}
-
-/*==========================================
- * �X�L���g�p�imap�w��j
- *------------------------------------------
- */
-void clif_parse_UseSkillMap(int fd,struct map_session_data *sd)
-{
-	nullpo_retv(sd);
-
-	if(map[sd->bl.m].flag.noskill) return;
-	if(sd->chatID) return;
-
-	if(sd->npc_id!=0 || sd->vender_id != 0 || (sd->sc_data && 
-		(sd->sc_data[SC_TRICKDEAD].timer != -1 ||
-		sd->sc_data[SC_BERSERK].timer!=-1 ||
-		sd->sc_data[SC_NOCHAT].timer!=-1 ||
-		sd->sc_data[SC_WEDDING].timer!=-1 ||
-		sd->view_class==22)))
-		return;
-
-	if(sd->invincible_timer != -1)
-		pc_delinvincibletimer(sd);
-
-	skill_castend_map(sd,RFIFOW(fd,2),RFIFOP(fd,4));
-}
-/*==========================================
- * �����v��
- *------------------------------------------
- */
-void clif_parse_RequestMemo(int fd,struct map_session_data *sd)
-{
-	pc_memo(sd,-1);
-}
-/*==========================================
- * �A�C�e������
- *------------------------------------------
- */
-void clif_parse_ProduceMix(int fd,struct map_session_data *sd)
-{
-	nullpo_retv(sd);
-
-	sd->state.produce_flag = 0;
-	skill_produce_mix(sd,RFIFOW(fd,2),RFIFOW(fd,4),RFIFOW(fd,6),RFIFOW(fd,8));
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_NpcSelectMenu(int fd,struct map_session_data *sd)
-{
-	nullpo_retv(sd);
-
-	sd->npc_menu=RFIFOB(fd,6);
-	npc_scriptcont(sd,RFIFOL(fd,2));
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_NpcNextClicked(int fd,struct map_session_data *sd)
-{
-	npc_scriptcont(sd,RFIFOL(fd,2));
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_NpcAmountInput(int fd,struct map_session_data *sd)
-{
-	nullpo_retv(sd);
-
-#define RFIFOL_(fd,pos) (*(int*)(session[fd]->rdata+session[fd]->rdata_pos+(pos)))
-	//Input Value overflow Exploit FIX
-	sd->npc_amount=RFIFOL_(fd,6); //fixed by Lupus. npc_amount is (int) but was RFIFOL changing it to (unsigned int)
-
-#undef RFIFOL_
-
-	npc_scriptcont(sd,RFIFOL(fd,2));
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_NpcStringInput(int fd,struct map_session_data *sd)
-{
-	nullpo_retv(sd);
-
-	if(RFIFOW(fd,2)-7 >= sizeof(sd->npc_str)){
-		printf("clif: input string too long !\n");
-		memcpy(sd->npc_str,RFIFOP(fd,8),sizeof(sd->npc_str));
-		sd->npc_str[sizeof(sd->npc_str)-1]=0;
-	} else
-		strcpy(sd->npc_str,RFIFOP(fd,8));
-	npc_scriptcont(sd,RFIFOL(fd,4));
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void clif_parse_NpcCloseClicked(int fd,struct map_session_data *sd)
-{
-	npc_scriptcont(sd,RFIFOL(fd,2));
-}
-
-/*==========================================
- * �A�C�e���Ӓ�
- *------------------------------------------
- */
-void clif_parse_ItemIdentify(int fd,struct map_session_data *sd)
-{
-	pc_item_identify(sd,RFIFOW(fd,2)-2);
-}
-/*==========================================
- * ��쐬
- *------------------------------------------
- */
-void clif_parse_SelectArrow(int fd,struct map_session_data *sd)
-{
-	nullpo_retv(sd);
-
-	sd->state.make_arrow_flag = 0;
-	skill_arrow_create(sd,RFIFOW(fd,2));
-}
-/*==========================================
- * �I�[�g�X�y����M
- *------------------------------------------
- */
-void clif_parse_AutoSpell(int fd,struct map_session_data *sd)
-{
-	skill_autospell(sd,RFIFOW(fd,2));
-}
-/*==========================================
- * �J�[�h�g�p
- *------------------------------------------
- */
-void clif_parse_UseCard(int fd,struct map_session_data *sd)
-{
-	clif_use_card(sd,RFIFOW(fd,2)-2);
-}
-/*==========================================
- * �J�[�h�}�������I��
- *------------------------------------------
- */
-void clif_parse_InsertCard(int fd,struct map_session_data *sd)
-{
-	pc_insert_card(sd,RFIFOW(fd,2)-2,RFIFOW(fd,4)-2);
-}
-
-/*==========================================
- * 0193 �L����ID���O����
- *------------------------------------------
- */
-void clif_parse_SolveCharName(int fd, struct map_session_data *sd) {
-	int char_id;
-
-	if (sd->packet_ver == 8) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		char_id = RFIFOL(fd,8);
-	} else if (sd->packet_ver == 9) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		char_id = RFIFOL(fd,7);
-	} else if (sd->packet_ver == 10) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		char_id = RFIFOL(fd,10);
-	} else { // old version by default (+ packet version 6 and 7)
-		char_id = RFIFOL(fd,2);
-	}
-	clif_solved_charname(sd, char_id);
-}
-
-/*==========================================
- * 0197 /resetskill /resetstate
- *------------------------------------------
- */
-void clif_parse_ResetChar(int fd, struct map_session_data *sd) {
-	nullpo_retv(sd);
-
-	if (battle_config.atc_gmonly == 0 || pc_isGM(sd)) {
-		switch(RFIFOW(fd,2)){
-		case 0:
-			if (pc_isGM(sd) >= get_atcommand_level(AtCommand_ResetState))
-				pc_resetstate(sd);
-			break;
-		case 1:
-			if (pc_isGM(sd) >= get_atcommand_level(AtCommand_ResetState))
-				pc_resetskill(sd);
-			break;
-		}
-	}
-}
-
-/*==========================================
- * 019c /lb��
- *------------------------------------------
- */
-void clif_parse_LGMmessage(int fd, struct map_session_data *sd) {
-	unsigned char buf[64];
-
-	nullpo_retv(sd);
-
-	if ((battle_config.atc_gmonly == 0 || pc_isGM(sd)) &&
-	    (pc_isGM(sd) >= get_atcommand_level(AtCommand_LocalBroadcast))) {
-		WBUFW(buf,0) = 0x9a;
-		WBUFW(buf,2) = RFIFOW(fd,2);
-		memcpy(WBUFP(buf,4), RFIFOP(fd,4), RFIFOW(fd,2) - 4);
-		clif_send(buf, RFIFOW(fd,2), &sd->bl, ALL_SAMEMAP);
-	}
-}
-
-/*==========================================
- * �J�v���q�ɂ֓����
- *------------------------------------------
- */
-void clif_parse_MoveToKafra(int fd, struct map_session_data *sd) {
-	int item_index, item_amount;
-
-	nullpo_retv(sd);
-
-	if (sd->packet_ver == 8) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		item_index = RFIFOW(fd,5) - 2;
-		item_amount = RFIFOL(fd,12);
-	} else if (sd->packet_ver == 9) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		item_index = RFIFOW(fd,5) - 2;
-		item_amount = RFIFOL(fd,19);
-	} else if (sd->packet_ver == 10) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		item_index = RFIFOW(fd,3) - 2;
-		item_amount = RFIFOL(fd,15);
-	} else { // old version by default (+ packet version 6 and 7)
-		item_index = RFIFOW(fd,2) - 2;
-		item_amount = RFIFOL(fd,4);
-	}
-
-	if (sd->npc_id != 0 || sd->vender_id != 0)
-		return;
-
-	if (sd->state.storage_flag)
-		storage_guild_storageadd(sd, item_index, item_amount);
-	else
-		storage_storageadd(sd, item_index, item_amount);
-}
-
-/*==========================================
- * �J�v���q�ɂ���o��
- *------------------------------------------
- */
-void clif_parse_MoveFromKafra(int fd,struct map_session_data *sd) {
-	int item_index, item_amount;
-
-	nullpo_retv(sd);
-
-	if (sd->packet_ver == 8) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		item_index = RFIFOW(fd,10) - 1;
-		item_amount = RFIFOL(fd,22);
-	} else if (sd->packet_ver == 9) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		item_index = RFIFOW(fd,11) - 1;
-		item_amount = RFIFOL(fd,22);
-	} else if (sd->packet_ver == 10) { // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-		item_index = RFIFOW(fd,3) - 1;
-		item_amount = RFIFOL(fd,13);
-	} else { // old version by default (+ packet version 6 and 7)
-		item_index = RFIFOW(fd,2) - 1;
-		item_amount = RFIFOL(fd,4);
-	}
-
-	if (sd->npc_id != 0 || sd->vender_id != 0)
-		return;
-
-	if (sd->state.storage_flag)
-		storage_guild_storageget(sd, item_index, item_amount);
-	else
-		storage_storageget(sd, item_index, item_amount);
-}
-
-/*==========================================
- * �J�v���q�ɂփJ�[�g��������
- *------------------------------------------
- */
-void clif_parse_MoveToKafraFromCart(int fd, struct map_session_data *sd) {
-	nullpo_retv(sd);
-
-	if (sd->npc_id != 0 || sd->vender_id != 0)
-		return;
-	if (sd->state.storage_flag)
-		storage_guild_storageaddfromcart(sd, RFIFOW(fd,2) - 2, RFIFOL(fd,4));
-	else
-		storage_storageaddfromcart(sd, RFIFOW(fd,2) - 2, RFIFOL(fd,4));
-}
-
-/*==========================================
- * �J�v���q�ɂ���o��
- *------------------------------------------
- */
-void clif_parse_MoveFromKafraToCart(int fd, struct map_session_data *sd) {
-	nullpo_retv(sd);
-
-	if (sd->npc_id != 0 || sd->vender_id != 0)
-		return;
-	if (sd->state.storage_flag)
-		storage_guild_storagegettocart(sd, RFIFOW(fd,2)-1, RFIFOL(fd,4));
-	else
-		storage_storagegettocart(sd, RFIFOW(fd,2)-1, RFIFOL(fd,4));
-}
-
-/*==========================================
- * �J�v���q�ɂ�‚���
- *------------------------------------------
- */
-void clif_parse_CloseKafra(int fd, struct map_session_data *sd) {
-	nullpo_retv(sd);
-
-	if (sd->state.storage_flag)
-		storage_guild_storageclose(sd);
-	else
-		storage_storageclose(sd);
-}
-
-/*==========================================
- * �p�[�e�B�����
- *------------------------------------------
- */
-void clif_parse_CreateParty(int fd, struct map_session_data *sd) {
-	if (battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 7) {
-		party_create(sd,RFIFOP(fd,2));
-	} else
-		clif_skill_fail(sd,1,0,4);
-}
-
-/*==========================================
- * �p�[�e�B�����
- *------------------------------------------
- */
-void clif_parse_CreateParty2(int fd, struct map_session_data *sd) {
-	if (battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 7){
-		party_create(sd, RFIFOP(fd,2));
-	} else
-		clif_skill_fail(sd, 1, 0, 4);
-}
-
-/*==========================================
- * �p�[�e�B�Ɋ��U
- *------------------------------------------
- */
-void clif_parse_PartyInvite(int fd, struct map_session_data *sd) {
-	party_invite(sd, RFIFOL(fd,2));
-}
-
-/*==========================================
- * �p�[�e�B���U�ԓ�
- *------------------------------------------
- */
-void clif_parse_ReplyPartyInvite(int fd,struct map_session_data *sd) {
-	if(battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 5){
-		party_reply_invite(sd,RFIFOL(fd,2),RFIFOL(fd,6));
-	} else {
-		party_reply_invite(sd,RFIFOL(fd,2),-1);
-		clif_skill_fail(sd,1,0,4);
-	}
-}
-
-/*==========================================
- * �p�[�e�B�E�ޗv��
- *------------------------------------------
- */
-void clif_parse_LeaveParty(int fd, struct map_session_data *sd) {
-	party_leave(sd);
-}
-
-/*==========================================
- * �p�[�e�B�����v��
- *------------------------------------------
- */
-void clif_parse_RemovePartyMember(int fd, struct map_session_data *sd) {
-	party_removemember(sd,RFIFOL(fd,2),RFIFOP(fd,6));
-}
-
-/*==========================================
- * �p�[�e�B�ݒ�ύX�v��
- *------------------------------------------
- */
-void clif_parse_PartyChangeOption(int fd, struct map_session_data *sd) {
-	party_changeoption(sd, RFIFOW(fd,2), RFIFOW(fd,4));
-}
-
-/*==========================================
- * �p�[�e�B���b�Z�[�W���M�v��
- *------------------------------------------
- */
-void clif_parse_PartyMessage(int fd, struct map_session_data *sd) {
-	nullpo_retv(sd);
-
-	if (is_atcommand(fd, sd, RFIFOP(fd,4), 0) != AtCommand_None)
-		return;
-	if(sd->sc_data &&
-		(sd->sc_data[SC_BERSERK].timer!=-1 ||	//�o�[�T�[�N���͉�b���s��
-		sd->sc_data[SC_NOCHAT].timer!=-1))		//�`���b�g�֎~
-		return;
-
-	party_send_message(sd, RFIFOP(fd,4), RFIFOW(fd,2)-4);
-}
-
-/*==========================================
- * �I�X��
- *------------------------------------------
- */
-void clif_parse_CloseVending(int fd, struct map_session_data *sd) {
-	vending_closevending(sd);
-}
-
-/*==========================================
- * �I�X�A�C�e�����X�g�v��
- *------------------------------------------
- */
-void clif_parse_VendingListReq(int fd, struct map_session_data *sd) {
-	nullpo_retv(sd);
-
-	vending_vendinglistreq(sd,RFIFOL(fd,2));
-	if(sd->npc_id)
-		npc_event_dequeue(sd);
-}
-
-/*==========================================
- * �I�X�A�C�e���w��
- *------------------------------------------
- */
-void clif_parse_PurchaseReq(int fd, struct map_session_data *sd) {
-	vending_purchasereq(sd, RFIFOW(fd,2), RFIFOL(fd,4), RFIFOP(fd,8));
-}
-
-/*==========================================
- * �I�X�J��
- *------------------------------------------
- */
-void clif_parse_OpenVending(int fd,struct map_session_data *sd) {
-	vending_openvending(sd, RFIFOW(fd,2), RFIFOP(fd,4), RFIFOB(fd,84), RFIFOP(fd,85));
-}
-
-/*==========================================
- * /monster /item rewriten by [Yor]
- *------------------------------------------
- */
-void clif_parse_GM_Monster_Item(int fd, struct map_session_data *sd) {
-	char monster_item_name[25];
-
-	nullpo_retv(sd);
-
-	memset(monster_item_name, '\0', sizeof(monster_item_name));
-
-	if (battle_config.atc_gmonly == 0 || pc_isGM(sd)) {
-		memcpy(monster_item_name, RFIFOP(fd,2), 24);
-
-		if (mobdb_searchname(monster_item_name) != 0) {
-			if (pc_isGM(sd) >= get_atcommand_level(AtCommand_Monster))
-				atcommand_spawn(fd, sd, "@spawn", monster_item_name); // as @spawn
-		} else if (itemdb_searchname(monster_item_name) != NULL) {
-			if (pc_isGM(sd) >= get_atcommand_level(AtCommand_Item))
-				atcommand_item(fd, sd, "@item", monster_item_name); // as @item
-		}
-
-	}
-}
-
-/*==========================================
- * �M���h�����
- *------------------------------------------
- */
-void clif_parse_CreateGuild(int fd,struct map_session_data *sd) {
-	guild_create(sd, RFIFOP(fd,6));
-}
-
-/*==========================================
- * �M���h�}�X�^�[���ǂ����m�F
- *------------------------------------------
- */
-void clif_parse_GuildCheckMaster(int fd, struct map_session_data *sd) {
-	clif_guild_masterormember(sd);
-}
-
-/*==========================================
- * �M���h���v��
- *------------------------------------------
- */
-void clif_parse_GuildReqeustInfo(int fd, struct map_session_data *sd) {
-	switch(RFIFOL(fd,2)){
-	case 0:	// �M���h��{���A�����G�Ώ��
-		clif_guild_basicinfo(sd);
-		clif_guild_allianceinfo(sd);
-		break;
-	case 1:	// �����o�[���X�g�A��E�����X�g
-		clif_guild_positionnamelist(sd);
-		clif_guild_memberlist(sd);
-		break;
-	case 2:	// ��E�����X�g�A��E��񃊃X�g
-		clif_guild_positionnamelist(sd);
-		clif_guild_positioninfolist(sd);
-		break;
-	case 3:	// �X�L�����X�g
-		clif_guild_skillinfo(sd);
-		break;
-	case 4:	// �Ǖ����X�g
-		clif_guild_explusionlist(sd);
-		break;
-	default:
-		if (battle_config.error_log)
-			printf("clif: guild request info: unknown type %d\n", RFIFOL(fd,2));
-		break;
-	}
-}
-
-/*==========================================
- * �M���h��E�ύX
- *------------------------------------------
- */
-void clif_parse_GuildChangePositionInfo(int fd, struct map_session_data *sd) {
-	int i;
-
-	for(i = 4; i < RFIFOW(fd,2); i += 40 ){
-		guild_change_position(sd, RFIFOL(fd,i), RFIFOL(fd,i+4), RFIFOL(fd,i+12), RFIFOP(fd,i+16));
-	}
-}
-
-/*==========================================
- * �M���h�����o��E�ύX
- *------------------------------------------
- */
-void clif_parse_GuildChangeMemberPosition(int fd, struct map_session_data *sd) {
-	int i;
-
-	nullpo_retv(sd);
-
-	for(i=4;i<RFIFOW(fd,2);i+=12){
-		guild_change_memberposition(sd->status.guild_id,
-			RFIFOL(fd,i),RFIFOL(fd,i+4),RFIFOL(fd,i+8));
-	}
-}
-
-/*==========================================
- * �M���h�G���u�����v��
- *------------------------------------------
- */
-void clif_parse_GuildRequestEmblem(int fd,struct map_session_data *sd) {
-	struct guild *g=guild_search(RFIFOL(fd,2));
-	if(g!=NULL)
-		clif_guild_emblem(sd,g);
-}
-
-/*==========================================
- * �M���h�G���u�����ύX
- *------------------------------------------
- */
-void clif_parse_GuildChangeEmblem(int fd,struct map_session_data *sd) {
-	guild_change_emblem(sd,RFIFOW(fd,2)-4,RFIFOP(fd,4));
-}
-
-/*==========================================
- * �M���h���m�ύX
- *------------------------------------------
- */
-void clif_parse_GuildChangeNotice(int fd,struct map_session_data *sd) {
-	guild_change_notice(sd,RFIFOL(fd,2),RFIFOP(fd,6),RFIFOP(fd,66));
-}
-
-/*==========================================
- * �M���h���U
- *------------------------------------------
- */
-void clif_parse_GuildInvite(int fd,struct map_session_data *sd) {
-	guild_invite(sd,RFIFOL(fd,2));
-}
-
-/*==========================================
- * �M���h���U�ԐM
- *------------------------------------------
- */
-void clif_parse_GuildReplyInvite(int fd,struct map_session_data *sd) {
-	guild_reply_invite(sd,RFIFOL(fd,2),RFIFOB(fd,6));
-}
-
-/*==========================================
- * �M���h�E��
- *------------------------------------------
- */
-void clif_parse_GuildLeave(int fd,struct map_session_data *sd) {
-	guild_leave(sd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOP(fd,14));
-}
-
-/*==========================================
- * �M���h�Ǖ�
- *------------------------------------------
- */
-void clif_parse_GuildExplusion(int fd,struct map_session_data *sd) {
-	guild_explusion(sd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOP(fd,14));
-}
-
-/*==========================================
- * �M���h��b
- *------------------------------------------
- */
-void clif_parse_GuildMessage(int fd,struct map_session_data *sd) {
-	nullpo_retv(sd);
-
-	if (is_atcommand(fd, sd, RFIFOP(fd, 4), 0) != AtCommand_None)
-		return;
-	if(sd->sc_data &&
-		(sd->sc_data[SC_BERSERK].timer!=-1 ||	//�o�[�T�[�N���͉�b���s��
-		sd->sc_data[SC_NOCHAT].timer!=-1))		//�`���b�g�֎~
-		return;
-
-	guild_send_message(sd, RFIFOP(fd,4), RFIFOW(fd,2)-4);
-}
-
-/*==========================================
- * �M���h�����v��
- *------------------------------------------
- */
-void clif_parse_GuildRequestAlliance(int fd, struct map_session_data *sd) {
-	guild_reqalliance(sd,RFIFOL(fd,2));
-}
-
-/*==========================================
- * �M���h�����v���ԐM
- *------------------------------------------
- */
-void clif_parse_GuildReplyAlliance(int fd, struct map_session_data *sd) {
-	guild_reply_reqalliance(sd,RFIFOL(fd,2),RFIFOL(fd,6));
-}
-
-/*==========================================
- * �M���h�֌W����
- *------------------------------------------
- */
-void clif_parse_GuildDelAlliance(int fd, struct map_session_data *sd) {
-	guild_delalliance(sd,RFIFOL(fd,2),RFIFOL(fd,6));
-}
-
-/*==========================================
- * �M���h�G��
- *------------------------------------------
- */
-void clif_parse_GuildOpposition(int fd, struct map_session_data *sd) {
-	guild_opposition(sd,RFIFOL(fd,2));
-}
-
-/*==========================================
- * �M���h���U
- *------------------------------------------
- */
-void clif_parse_GuildBreak(int fd, struct map_session_data *sd) {
-	guild_break(sd,RFIFOP(fd,2));
-}
-
-// pet
-void clif_parse_PetMenu(int fd, struct map_session_data *sd) {
-	pet_menu(sd,RFIFOB(fd,2));
-}
-
-void clif_parse_CatchPet(int fd, struct map_session_data *sd) {
-	pet_catch_process2(sd,RFIFOL(fd,2));
-}
-
-void clif_parse_SelectEgg(int fd, struct map_session_data *sd) {
-	pet_select_egg(sd,RFIFOW(fd,2)-2);
-}
-
-void clif_parse_SendEmotion(int fd, struct map_session_data *sd) {
-	nullpo_retv(sd);
-
-	if(sd->pd)
-		clif_pet_emotion(sd->pd,RFIFOL(fd,2));
-}
-
-void clif_parse_ChangePetName(int fd, struct map_session_data *sd) {
-	pet_change_name(sd,RFIFOP(fd,2));
-}
-
-// Kick (right click menu for GM "(name) force to quit")
-void clif_parse_GMKick(int fd, struct map_session_data *sd) {
-	struct block_list *target;
-	int tid = RFIFOL(fd,2);
-
-	nullpo_retv(sd);
-
-	if ((battle_config.atc_gmonly == 0 || pc_isGM(sd)) &&
-	    (pc_isGM(sd) >= get_atcommand_level(AtCommand_Kick))) {
-		target = map_id2bl(tid);
-		if (target) {
-			if (target->type == BL_PC) {
-				struct map_session_data *tsd = (struct map_session_data *)target;
-				if (pc_isGM(sd) > pc_isGM(tsd))
-					clif_GM_kick(sd, tsd, 1);
-				else
-					clif_GM_kickack(sd, 0);
-			} else if (target->type == BL_MOB) {
-				struct mob_data *md = (struct mob_data *)target;
-				sd->state.attack_type = 0;
-				mob_damage(&sd->bl, md, md->hp, 2);
-			} else
-				clif_GM_kickack(sd, 0);
-		} else
-			clif_GM_kickack(sd, 0);
-	}
-}
-
-/*==========================================
- * /shift
- *------------------------------------------
- */
-void clif_parse_Shift(int fd, struct map_session_data *sd) {	// Rewriten by [Yor]
-	char player_name[25];
-
-	nullpo_retv(sd);
-
-	memset(player_name, '\0', sizeof(player_name));
-
-	if ((battle_config.atc_gmonly == 0 || pc_isGM(sd)) &&
-	    (pc_isGM(sd) >= get_atcommand_level(AtCommand_JumpTo))) {
-		memcpy(player_name, RFIFOP(fd,2), 24);
-		atcommand_jumpto(fd, sd, "@jumpto", player_name); // as @jumpto
-	}
-
-	return;
-}
-
-/*==========================================
- * /recall
- *------------------------------------------
- */
-void clif_parse_Recall(int fd, struct map_session_data *sd) {	// Added by RoVeRT
-	char player_name[25];
-
-	nullpo_retv(sd);
-
-	memset(player_name, '\0', sizeof(player_name));
-
-	if ((battle_config.atc_gmonly == 0 || pc_isGM(sd)) &&
-	    (pc_isGM(sd) >= get_atcommand_level(AtCommand_Recall))) {
-		memcpy(player_name, RFIFOP(fd,2), 24);
-		atcommand_recall(fd, sd, "@recall", player_name); // as @recall
-	}
-
-	return;
-}
-
-void clif_parse_GMHide(int fd, struct map_session_data *sd) {	// Modified by [Yor]
-	nullpo_retv(sd);
-
-	//printf("%2x %2x %2x\n", RFIFOW(fd,0), RFIFOW(fd,2), RFIFOW(fd,4)); // R 019d <Option_value>.2B <flag>.2B
-	if ((battle_config.atc_gmonly == 0 || pc_isGM(sd)) &&
-	    (pc_isGM(sd) >= get_atcommand_level(AtCommand_Hide))) {
-		if (sd->status.option & OPTION_HIDE) { // OPTION_HIDE = 0x40
-			sd->status.option &= ~OPTION_HIDE; // OPTION_HIDE = 0x40
-			clif_displaymessage(fd, "Invisible: Off.");
-		} else {
-			sd->status.option |= OPTION_HIDE; // OPTION_HIDE = 0x40
-			clif_displaymessage(fd, "Invisible: On.");
-		}
-		clif_changeoption(&sd->bl);
-	}
-}
-
-/*==========================================
- * GM�ɂ��`���b�g�֎~���ԕt�^
- *------------------------------------------
- */
-void clif_parse_GMReqNoChat(int fd,struct map_session_data *sd)
-{
-	int tid = RFIFOL(fd,2);
-	int type = RFIFOB(fd,6);
-	int limit = RFIFOW(fd,7);
-	struct block_list *bl = map_id2bl(tid);
-	struct map_session_data *dstsd;
-	int dstfd;
-
-	nullpo_retv(sd);
-
-	if(!battle_config.muting_players) {
-		clif_displaymessage(fd, "Muting is disabled.");
-		return;
-	}
-
-	if(type == 0)
-		limit = 0 - limit;
-	if(bl->type == BL_PC && (dstsd =(struct map_session_data *)bl)){
-		if((tid == bl->id && type == 2 && !pc_isGM(sd)) || (pc_isGM(sd) > pc_isGM(dstsd)) ){
-			dstfd = dstsd->fd;
-			WFIFOW(dstfd,0)=0x14b;
-			WFIFOB(dstfd,2)=(type==2)?1:type;
-			memcpy(WFIFOP(dstfd,3),sd->status.name,24);
-			WFIFOSET(dstfd,packet_len_table[0x14b]);
-			dstsd->status.manner -= limit;
-			if(dstsd->status.manner < 0)
-				skill_status_change_start(bl,SC_NOCHAT,0,0,0,0,0,0);
-			else{
-				dstsd->status.manner = 0;
-				skill_status_change_end(bl,SC_NOCHAT,-1);
-			}
-		printf("name:%s type:%d limit:%d manner:%d\n",dstsd->status.name,type,limit,dstsd->status.manner);
-		}
-	}
-
-	return;
-}
-/*==========================================
- * GM�ɂ��`���b�g�֎~���ԎQ�Ɓi�H�j
- *------------------------------------------
- */
-void clif_parse_GMReqNoChatCount(int fd,struct map_session_data *sd)
-{
-	int tid = RFIFOL(fd,2);
-
-	WFIFOW(fd,0)=0x1e0;
-	WFIFOL(fd,2)=tid;
-	sprintf(WFIFOP(fd,6),"%d",tid);
-//	memcpy(WFIFOP(fd,6),"TESTNAME",24);
-	WFIFOSET(fd,packet_len_table[0x1e0]);
-
-	return;
-}
-
-void clif_parse_PMIgnore(int fd, struct map_session_data *sd) {	// Rewritten by [Yor]
-	char output[1024];
-	char *nick; // S 00cf <nick>.24B <type>.B: 00 (/ex nick) deny speech from nick, 01 (/in nick) allow speech from nick
-	int i;
-	int pos;
-
-	memset(output, '\0', sizeof(output));
-
-	nick = RFIFOP(fd,2); // speed up
-	//printf("Ignore: char '%s' state: %d\n", nick, RFIFOB(fd,26));
-	// we ask for deny (we add nick only if it's not already exist
-	if (RFIFOB(fd,26) == 0) { // type
-		if (strlen(nick) >= 4 && strlen(nick) < 24) { // do something only if nick can be exist
-			pos = -1;
-			for(i = 0; i < (sizeof(sd->ignore) / sizeof(sd->ignore[0])); i++) {
-				if (strcmp(sd->ignore[i].name, nick) == 0)
-					break;
-				else if (pos == -1 && sd->ignore[i].name[0] == '\0')
-					pos = i;
-			}
-			WFIFOW(fd,0) = 0x0d1; // R 00d1 <type>.B <fail>.B: type: 0: deny, 1: allow, fail: 0: success, 1: fail
-			WFIFOB(fd,2) = 0;
-			// if a position is found and name not found, we add it in the list
-			if (pos != -1 && i == (sizeof(sd->ignore) / sizeof(sd->ignore[0]))) {
-				memcpy(sd->ignore[pos].name, nick, 24);
-				WFIFOB(fd,3) = 0; // success
-				WFIFOSET(fd, packet_len_table[0x0d1]);
-				if (strcmp(wisp_server_name, nick) == 0) { // to found possible bot users that automaticaly ignores people.
-					sprintf(output, "Character '%s' (account: %d) has tried to block wisps from '%s' (wisp name of the server). Bot user?", sd->status.name, sd->status.account_id, wisp_server_name);
-					intif_wis_message_to_gm(wisp_server_name, battle_config.hack_info_GM_level, output, strlen(output) + 1);
-					// send something to be inform and force bot to ignore twice... If GM receiving block + block again, it's a bot :)
-					clif_wis_message(fd, wisp_server_name, "Add me in your ignore list, doesn't block my wisps.", strlen("Add me in your ignore list, doesn't block my wisps.") + 1);
-				}
-			} else {
-				WFIFOB(fd,3) = 1; // fail
-				if (i == (sizeof(sd->ignore) / sizeof(sd->ignore[0]))) {
-					clif_wis_message(fd, wisp_server_name, "You can not block more people.", strlen("You can not block more people.") + 1);
-					if (strcmp(wisp_server_name, nick) == 0) { // to found possible bot users that automaticaly ignores people.
-						sprintf(output, "Character '%s' (account: %d) has tried to block wisps from '%s' (wisp name of the server). Bot user?", sd->status.name, sd->status.account_id, wisp_server_name);
-						intif_wis_message_to_gm(wisp_server_name, battle_config.hack_info_GM_level, output, strlen(output) + 1);
-					}
-				} else {
-					clif_wis_message(fd, wisp_server_name, "This player is already blocked.", strlen("This player is already blocked.") + 1);
-					if (strcmp(wisp_server_name, nick) == 0) { // to found possible bot users that automaticaly ignores people.
-						sprintf(output, "Character '%s' (account: %d) has tried AGAIN to block wisps from '%s' (wisp name of the server). Bot user?", sd->status.name, sd->status.account_id, wisp_server_name);
-						intif_wis_message_to_gm(wisp_server_name, battle_config.hack_info_GM_level, output, strlen(output) + 1);
-			}
-				}
-			}
-		} else
-			clif_wis_message(fd, wisp_server_name, "It's impossible to block this player.", strlen("It's impossible to block this player.") + 1);
-		// we ask for allow (we remove all same nick if exist)
-		} else {
-		if (strlen(nick) >= 4 && strlen(nick) < 24) { // do something only if nick can be exist
-			WFIFOW(fd,0) = 0x0d1; // R 00d1 <type>.B <fail>.B: type: 0: deny, 1: allow, fail: 0: success, 1: fail
-			WFIFOB(fd,2) = 1;
-			for(i = 0; i < (sizeof(sd->ignore) / sizeof(sd->ignore[0])); i++)
-				if (strcmp(sd->ignore[i].name, nick) == 0) {
-					memset(sd->ignore[i].name, 0, sizeof(sd->ignore[i].name));
-					WFIFOB(fd,3) = 0; // success
-					WFIFOSET(fd, packet_len_table[0x0d1]);
-					break;
-				}
-			if (i == (sizeof(sd->ignore) / sizeof(sd->ignore[0]))) {
-				WFIFOB(fd,3) = 1; // fail
-				WFIFOSET(fd, packet_len_table[0x0d1]);
-				clif_wis_message(fd, wisp_server_name, "This player is not blocked by you.", strlen("This player is not blocked by you.") + 1);
-			}
-		} else
-			clif_wis_message(fd, wisp_server_name, "It's impossible to unblock this player.", strlen("It's impossible to unblock this player.") + 1);
-	}
-
-//	for(i = 0; i < (sizeof(sd->ignore) / sizeof(sd->ignore[0])); i++) // for debug only
-//		if (sd->ignore[i].name[0] != '\0')
-//			printf("Ignored player: '%s'\n", sd->ignore[i].name);
-
-	return;
-}
-
-void clif_parse_PMIgnoreAll(int fd, struct map_session_data *sd) { // Rewritten by [Yor]
-	//printf("Ignore all: state: %d\n", RFIFOB(fd,2));
-	if (RFIFOB(fd,2) == 0) {// S 00d0 <type>len.B: 00 (/exall) deny all speech, 01 (/inall) allow all speech
-		WFIFOW(fd,0) = 0x0d2; // R 00d2 <type>.B <fail>.B: type: 0: deny, 1: allow, fail: 0: success, 1: fail
-		WFIFOB(fd,2) = 0;
-		if (sd->ignoreAll == 0) {
-			sd->ignoreAll = 1;
-			WFIFOB(fd,3) = 0; // success
-			WFIFOSET(fd, packet_len_table[0x0d2]);
-		} else {
-			WFIFOB(fd,3) = 1; // fail
-			WFIFOSET(fd, packet_len_table[0x0d2]);
-			clif_wis_message(fd, wisp_server_name, "You already block everyone.", strlen("You already block everyone.") + 1);
-		}
-	} else {
-		WFIFOW(fd,0) = 0x0d2; // R 00d2 <type>.B <fail>.B: type: 0: deny, 1: allow, fail: 0: success, 1: fail
-		WFIFOB(fd,2) = 1;
-		if (sd->ignoreAll == 1) {
-			sd->ignoreAll = 0;
-			WFIFOB(fd,3) = 0; // success
-			WFIFOSET(fd, packet_len_table[0x0d2]);
-		} else {
-			WFIFOB(fd,3) = 1; // fail
-			WFIFOSET(fd, packet_len_table[0x0d2]);
-			clif_wis_message(fd, wisp_server_name, "You already allow everyone.", strlen("You already allow everyone.") + 1);
-		}
-	}
-
-	return;
-}
-
-void clif_parse_skillMessage(int fd, struct map_session_data *sd) {	// Added by RoVeRT
-	int skillid,skilllv, x, y;
-	char *mes;
-
-	skilllv = RFIFOW(fd,2);
-	skillid = RFIFOW(fd,4);
-
-	y = RFIFOB(fd,6);
-	x = RFIFOB(fd,8);
-
-	mes = RFIFOP(fd,10);
-
-	// skill 220 = graffiti
-//	printf("skill: %d %d location: %3d %3d message: %s\n", skillid, skilllv, x, y, (char*)mes);
-}
-
-int monk(struct map_session_data *sd, struct block_list *target, int type) {
-//R 01d1 <Monk id>L <Target monster id>L <Bool>L
-	int fd=sd->fd;
-	WFIFOW(fd,0)=0x1d1;
-	WFIFOL(fd,2)=sd->bl.id;
-	WFIFOL(fd,6)=target->id;
-	WFIFOL(fd,10)=type;
-	WFIFOSET(fd,packet_len_table[0x1d1]);
-
-	return 0;
-}
-
-/*==========================================
- * �X�p�m�r��/doridori�ɂ��SPR2�{
- *------------------------------------------
- */
-void clif_parse_sn_doridori(int fd, struct map_session_data *sd) {
-	if (sd)
-		sd->doridori_counter = 1;
-
-	return;
-}
-/*==========================================
- * �X�p�m�r�̔����g��
- *------------------------------------------
- */
-void clif_parse_sn_explosionspirits(int fd, struct map_session_data *sd) 
-{
-	if(sd){
-		int nextbaseexp=pc_nextbaseexp(sd);
-		struct pc_base_job s_class = pc_calc_base_job(sd->status.class);
-		if (battle_config.etc_log){
-			if(nextbaseexp != 0)
-				printf("SuperNovice explosionspirits!! %d %d %d %d\n",sd->bl.id,s_class.job,sd->status.base_exp,(int)((double)1000*sd->status.base_exp/nextbaseexp));
-			else
-				printf("SuperNovice explosionspirits!! %d %d %d 000\n",sd->bl.id,s_class.job,sd->status.base_exp);
-		}
-		if(s_class.job == 23 && sd->status.base_exp > 0 && nextbaseexp > 0 && (int)((double)1000*sd->status.base_exp/nextbaseexp)%100==0){
-			clif_skill_nodamage(&sd->bl,&sd->bl,MO_EXPLOSIONSPIRITS,5,1);
-			skill_status_change_start(&sd->bl,SkillStatusChangeTable[MO_EXPLOSIONSPIRITS],5,0,0,0,skill_get_time(MO_EXPLOSIONSPIRITS,5),0 );
-		}
-	}
-	return;
-}
-
-// functions list
-static void (*clif_parse_func_table[4][0x220])() = {
-	{
-	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-
-	// 40
-	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-
-	// 70
-	NULL, NULL, clif_parse_WantToConnection, NULL, NULL, NULL, NULL, NULL,
-	NULL, NULL, NULL, NULL, NULL, clif_parse_LoadEndAck, clif_parse_TickSend, NULL,
-
-	// 80
-	NULL, NULL, NULL, NULL, NULL, clif_parse_WalkToXY, NULL, NULL,
-	NULL, clif_parse_ActionRequest, NULL, NULL, clif_parse_GlobalMessage, NULL, NULL, NULL,
-	// 90
-	clif_parse_NpcClicked, NULL, NULL, NULL, clif_parse_GetCharNameRequest, NULL, clif_parse_Wis, NULL,
-	NULL, clif_parse_GMmessage, NULL, clif_parse_ChangeDir, NULL, NULL, NULL, clif_parse_TakeItem,
-	// a0
-	NULL, NULL, clif_parse_DropItem, NULL, NULL, NULL, NULL, clif_parse_UseItem,
-	NULL, clif_parse_EquipItem, NULL, clif_parse_UnequipItem, NULL, NULL, NULL, NULL,
-	// b0
-	NULL, NULL, clif_parse_Restart, NULL, NULL, NULL, NULL, NULL,
-	clif_parse_NpcSelectMenu, clif_parse_NpcNextClicked, NULL, clif_parse_StatusUp, NULL, NULL, NULL, clif_parse_Emotion,
-
-	// c0
-	NULL, clif_parse_HowManyConnections, NULL, NULL, NULL, clif_parse_NpcBuySellSelected, NULL, NULL,
-	clif_parse_NpcBuyListSend, clif_parse_NpcSellListSend, NULL, NULL, clif_parse_GMKick, NULL, NULL, clif_parse_PMIgnore,
-	// d0
-	clif_parse_PMIgnoreAll, NULL, NULL, NULL, NULL, clif_parse_CreateChatRoom, NULL, NULL,
-	NULL, clif_parse_ChatAddMember, NULL, NULL, NULL, NULL, clif_parse_ChatRoomStatusChange, NULL,
-	// e0
-	clif_parse_ChangeChatOwner, NULL, clif_parse_KickFromChat, clif_parse_ChatLeave, clif_parse_TradeRequest, NULL, clif_parse_TradeAck, NULL,
-	clif_parse_TradeAddItem, NULL, NULL, clif_parse_TradeOk, NULL, clif_parse_TradeCansel, NULL, clif_parse_TradeCommit,
-	// f0
-	NULL, NULL, NULL, clif_parse_MoveToKafra, NULL, clif_parse_MoveFromKafra, NULL, clif_parse_CloseKafra,
-	NULL, clif_parse_CreateParty, NULL, NULL, clif_parse_PartyInvite, NULL, NULL, clif_parse_ReplyPartyInvite,
-
-	// 100
-	clif_parse_LeaveParty, NULL, clif_parse_PartyChangeOption, clif_parse_RemovePartyMember, NULL, NULL, NULL, NULL,
-	clif_parse_PartyMessage, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-	// 110
-	NULL, NULL, clif_parse_SkillUp, clif_parse_UseSkillToId, NULL, NULL, clif_parse_UseSkillToPos, NULL,
-	clif_parse_StopAttack, NULL, NULL, clif_parse_UseSkillMap, NULL, clif_parse_RequestMemo, NULL, NULL,
-	// 120
-	NULL, NULL, NULL, NULL, NULL, NULL, clif_parse_PutItemToCart, clif_parse_GetItemFromCart,
-	clif_parse_MoveFromKafraToCart, clif_parse_MoveToKafraFromCart, clif_parse_RemoveOption, NULL, NULL, NULL, clif_parse_CloseVending, NULL,
-	// 130
-	clif_parse_VendingListReq, NULL, NULL, NULL, clif_parse_PurchaseReq, NULL, NULL, NULL,
-	NULL, NULL, NULL, NULL, NULL, NULL, NULL, clif_parse_GM_Monster_Item,
-
-	// 140
-	clif_parse_MapMove, NULL, NULL, clif_parse_NpcAmountInput, NULL, NULL, clif_parse_NpcCloseClicked, NULL,
-	NULL, clif_parse_GMReqNoChat, NULL, NULL, NULL, clif_parse_GuildCheckMaster, NULL, clif_parse_GuildReqeustInfo,
-	// 150
-	NULL, clif_parse_GuildRequestEmblem, NULL, clif_parse_GuildChangeEmblem, NULL, clif_parse_GuildChangeMemberPosition, NULL, NULL,
-	NULL, clif_parse_GuildLeave, NULL, clif_parse_GuildExplusion, NULL, clif_parse_GuildBreak, NULL, NULL,
-	// 160
-	NULL, clif_parse_GuildChangePositionInfo, NULL, NULL, NULL, clif_parse_CreateGuild, NULL, NULL,
-	clif_parse_GuildInvite, NULL, NULL, clif_parse_GuildReplyInvite, NULL, NULL, clif_parse_GuildChangeNotice, NULL,
-	// 170
-	clif_parse_GuildRequestAlliance, NULL, clif_parse_GuildReplyAlliance, NULL, NULL, NULL, NULL, NULL,
-	clif_parse_ItemIdentify, NULL, clif_parse_UseCard, NULL, clif_parse_InsertCard, NULL, clif_parse_GuildMessage, NULL,
-
-	// 180
-	clif_parse_GuildOpposition, NULL, NULL, clif_parse_GuildDelAlliance, NULL, NULL, NULL, NULL,
-	NULL, NULL, clif_parse_QuitGame, NULL, NULL, NULL, clif_parse_ProduceMix, NULL,
-	// 190
-	clif_parse_UseSkillToPos, NULL, NULL, clif_parse_SolveCharName, NULL, NULL, NULL, clif_parse_ResetChar,
-	NULL, NULL, NULL, NULL, clif_parse_LGMmessage, clif_parse_GMHide, NULL, clif_parse_CatchPet,
-	// 1a0
-	NULL, clif_parse_PetMenu, NULL, NULL, NULL, clif_parse_ChangePetName, NULL, clif_parse_SelectEgg,
-	NULL, clif_parse_SendEmotion, NULL, NULL, NULL, NULL, clif_parse_SelectArrow, clif_parse_ChangeCart,
-	// 1b0
-	NULL, NULL, clif_parse_OpenVending, NULL, NULL, NULL, NULL, NULL,
-	NULL, NULL, clif_parse_Shift, clif_parse_Shift, clif_parse_Recall, clif_parse_Recall, NULL, NULL,
-
-	// 1c0
-	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-	NULL, NULL, NULL, NULL, NULL, NULL, clif_parse_AutoSpell,
-	NULL,
-	// 1d0
-	NULL, NULL, NULL, NULL, NULL, clif_parse_NpcStringInput, NULL, NULL,
-	NULL, NULL, NULL, NULL, NULL, NULL, NULL, clif_parse_GMReqNoChatCount,
-	// 1e0
-	NULL, NULL, NULL, NULL, NULL, NULL, NULL, clif_parse_sn_doridori,
-	clif_parse_CreateParty2, NULL, NULL, NULL, NULL, clif_parse_sn_explosionspirits, NULL, NULL,
-	// 1f0
-	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-
-	// 200
-	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-	// 210
-	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-#if 0
-	case 0xce: clif_parse_GMkillall
-	case 0xd3: clif_parse_IgnoreList
-#endif
-	},
-	{NULL},
-	{NULL},
-	{NULL}
-};
-
-/*==========================================
- * �N���C�A���g����̃p�P�b�g���
- * socket.c��do_parsepacket����Ăяo�����
- *------------------------------------------
- */
-static int clif_parse(int fd) {
-	int packet_len = 0, cmd=0, packet_ver =0;
-	struct map_session_data *sd=NULL;
-	
-	sd = session[fd]->session_data;
-
-	// �ڑ����؂�Ă�̂Ō�n��
-	if (!chrif_isconnect() || session[fd]->eof) { // char�I�Ɍq�����ĂȂ��Ԃ͐ڑ��֎~ (!chrif_isconnect())
-		if (sd && sd->state.auth) {
-			clif_quitsave(fd, sd);
-			if (sd->status.name != NULL)
-				printf("Player [%s] has logged off your server.\n", sd->status.name); // Player logout display [Valaris]
-			else
-				printf("Player with account [%d] has logged off your server.\n", sd->bl.id); // Player logout display [Yor]
-		} else if (sd) { // not authentified! (refused by char-server or disconnect before to be authentified)
-			printf("Player with account [%d] has logged off your server (not auth account).\n", sd->bl.id); // Player logout display [Yor]
-			map_deliddb(&sd->bl); // account_id has been included in the DB before auth answer
-		}
-		if(fd) close(fd);
-		if(fd) delete_session(fd);
-		return 0;
-	}
-
-	if (RFIFOREST(fd) < 2)
-		return 0;
-
-	cmd = RFIFOW(fd,0);
-
-	// �Ǘ��p�p�P�b�g����
-	if (cmd >= 30000) {
-		switch(cmd) {
-		case 0x7530: // Athena��񏊓�
-			WFIFOW(fd,0) = 0x7531;
-			WFIFOB(fd,2) = ATHENA_MAJOR_VERSION;
-			WFIFOB(fd,3) = ATHENA_MINOR_VERSION;
-			WFIFOB(fd,4) = ATHENA_REVISION;
-			WFIFOB(fd,5) = ATHENA_RELEASE_FLAG;
-			WFIFOB(fd,6) = ATHENA_OFFICIAL_FLAG;
-			WFIFOB(fd,7) = ATHENA_SERVER_MAP;
-			WFIFOW(fd,8) = ATHENA_MOD_VERSION;
-			WFIFOSET(fd,10);
-			RFIFOSKIP(fd,2);
-			break;
-		case 0x7532: // �ڑ��̐ؒf
-			session[fd]->eof = 1;
-			break;
-		}
-		return 0;
-	}
-
-	// get packet version before to parse
-	packet_ver = 0;
-	if (sd)
-		packet_ver = sd->packet_ver;
-	// check authentification packet to know packet version
-	else {
-		// 0x72
-		if (cmd == 0x72) {
-			if (RFIFOREST(fd) >= 39 && (RFIFOB(fd,38) == 0 || RFIFOB(fd,38) == 1)) // 00 = Female, 01 = Male
-				packet_ver = 7; // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-			else if (RFIFOREST(fd) >= 22 && (RFIFOB(fd,21) == 0 || RFIFOB(fd,21) == 1)) // 00 = Female, 01 = Male
-				packet_ver = 6; // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-			else if (RFIFOREST(fd) >= 19 && (RFIFOB(fd,18) == 0 || RFIFOB(fd,18) == 1)) // 00 = Female, 01 = Male
-				packet_ver = 5; // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-			// else probably incomplete packet
-			else if (RFIFOREST(fd) < 19)
-				return 0;
-		// 0x7E
-		} else if (cmd == 0x7E) {
-			if (RFIFOREST(fd) >= 37 && (RFIFOB(fd,36) == 0 || RFIFOB(fd,36) == 1)) // 00 = Female, 01 = Male
-				packet_ver = 9; // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-			else if (RFIFOREST(fd) >= 33 && (RFIFOB(fd,32) == 0 || RFIFOB(fd,32) == 1)) // 00 = Female, 01 = Male
-				packet_ver = 8; // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-			// else probably incomplete packet
-			else if (RFIFOREST(fd) < 33)
-				return 0;
-		// 0xF5
-		} else {
-			if (RFIFOREST(fd) >= 34 && (RFIFOB(fd,33) == 0 || RFIFOB(fd,33) == 1)) // 00 = Female, 01 = Male
-				packet_ver = 10; // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-			// else probably incomplete packet
-			else if (RFIFOREST(fd) < 34)
-				return 0;
-		}
-		// check if version is accepted
-		if ((packet_ver ==  5 && (battle_config.packet_ver_flag &  1) == 0) ||
-		    (packet_ver ==  6 && (battle_config.packet_ver_flag &  2) == 0) ||
-		    (packet_ver ==  7 && (battle_config.packet_ver_flag &  4) == 0) ||
-		    (packet_ver ==  8 && (battle_config.packet_ver_flag &  8) == 0) ||
-		    (packet_ver ==  9 && (battle_config.packet_ver_flag & 16) == 0) ||
-		    (packet_ver == 10 && (battle_config.packet_ver_flag & 32) == 0)) {
-			WFIFOW(fd,0) = 0x6a;
-			WFIFOB(fd,2) = 5; // 05 = Game's EXE is not the latest version
-			WFIFOSET(fd,23);
-			session[fd]->eof = 1;
-			return 0;
-		}
-	}
-
-	// �Q�[���p�ȊO�p�P�b�g���A�F�؂��I����O��0072�ȊO��������A�ؒf����
-	if (packet_ver < 5 || packet_ver > 10 || // if packet is not inside these values: session is incorrect?? or auth packet is unknown
-	    cmd >= 0x220 || packet_size_table[packet_ver-5][cmd] == 0) {
-		if (!fd)
-			return 0;
-		session[fd]->eof = 1;
-		printf("clif_parse: session #%d, packet 0x%x (%d bytes received) -> disconnected.\n", fd, cmd, RFIFOREST(fd));
-		return 0;
-	}
-
-	// �p�P�b�g�����v�Z
-	packet_len = packet_size_table[packet_ver-5][cmd];
-	if (packet_len == -1) {
-		if (RFIFOREST(fd) < 4)
-			return 0; // �•ϒ��p�P�b�g�Œ����̏��܂Ńf�[�^�����ĂȂ�
-		packet_len = RFIFOW(fd,2);
-		if (packet_len < 4 || packet_len > 32768) {
-			session[fd]->eof = 1;
-			return 0;
-		}
-	}
-	if (RFIFOREST(fd) < packet_len)
-		return 0; // �܂�1�p�P�b�g���f�[�^�������ĂȂ�
-
-	if (sd && sd->state.auth == 1 && sd->state.waitingdisconnect == 1) { // �ؒf�҂��̏ꍇ�p�P�b�g���������Ȃ�
-
-	} else if (packet_ver < 8 && clif_parse_func_table[0][cmd]) { // packet version 5-6-7 use same functions, but size are different
-		// �p�P�b�g����
-		clif_parse_func_table[0][cmd](fd, sd);
-	} else if (packet_ver >= 8 && clif_parse_func_table[packet_ver - 7][cmd]) {
-		// �p�P�b�g����
-		clif_parse_func_table[packet_ver - 7][cmd](fd, sd);
-	} else {
-		// �s���ȃp�P�b�g
-		if (battle_config.error_log) {
-			if (fd)
-				printf("\nclif_parse: session #%d, packet 0x%x, lenght %d\n", fd, cmd, packet_len);
-#ifdef DUMP_UNKNOWN_PACKET
-			{
-				int i;
-				FILE *fp;
-				char packet_txt[256] = "save/packet.txt";
-				time_t now;
-				printf("---- 00-01-02-03-04-05-06-07-08-09-0A-0B-0C-0D-0E-0F");
-				for(i = 0; i < packet_len; i++) {
-					if ((i & 15) == 0)
-						printf("\n%04X ",i);
-					printf("%02X ", RFIFOB(fd,i));
-				}
-				if (sd && sd->state.auth) {
-					if (sd->status.name != NULL)
-						printf("\nAccount ID %d, character ID %d, player name %s.\n",
-						       sd->status.account_id, sd->status.char_id, sd->status.name);
-					else
-						printf("\nAccount ID %d.\n", sd->bl.id);
-				} else if (sd) // not authentified! (refused by char-server or disconnect before to be authentified)
-					printf("\nAccount ID %d.\n", sd->bl.id);
-
-				if ((fp = fopen(packet_txt, "a")) == NULL) {
-					printf("clif.c: cant write [%s] !!! data is lost !!!\n", packet_txt);
-					return 1;
-				} else {
-					time(&now);
-					if (sd && sd->state.auth) {
-						if (sd->status.name != NULL)
-							fprintf(fp, "%sPlayer with account ID %d (character ID %d, player name %s) sent wrong packet:\n",
-							        asctime(localtime(&now)), sd->status.account_id, sd->status.char_id, sd->status.name);
-						else
-							fprintf(fp, "%sPlayer with account ID %d sent wrong packet:\n", asctime(localtime(&now)), sd->bl.id);
-					} else if (sd) // not authentified! (refused by char-server or disconnect before to be authentified)
-						fprintf(fp, "%sPlayer with account ID %d sent wrong packet:\n", asctime(localtime(&now)), sd->bl.id);
-
-					fprintf(fp, "\t---- 00-01-02-03-04-05-06-07-08-09-0A-0B-0C-0D-0E-0F");
-					for(i = 0; i < packet_len; i++) {
-						if ((i & 15) == 0)
-							fprintf(fp, "\n\t%04X ", i);
-						fprintf(fp, "%02X ", RFIFOB(fd,i));
-					}
-					fprintf(fp, "\n\n");
-					fclose(fp);
-				}
-			}
-#endif
-		}
-	}
-	RFIFOSKIP(fd, packet_len);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int do_init_clif(void) {
-	int i;
-
-	// functions of packet version 5-6-7 are same, but size are different
-	// init packet function calls for packet ver 8
-	memcpy(clif_parse_func_table[1], clif_parse_func_table[0], sizeof(clif_parse_func_table[0]));
-	clif_parse_func_table[1][0x072] = clif_parse_DropItem;
-	clif_parse_func_table[1][0x07e] = clif_parse_WantToConnection;
-	clif_parse_func_table[1][0x085] = clif_parse_UseSkillToId;
-	clif_parse_func_table[1][0x089] = clif_parse_GetCharNameRequest;
-	clif_parse_func_table[1][0x08c] = clif_parse_UseSkillToPos;
-	clif_parse_func_table[1][0x094] = clif_parse_TakeItem;
-	clif_parse_func_table[1][0x09b] = clif_parse_WalkToXY;
-	clif_parse_func_table[1][0x09f] = clif_parse_ChangeDir;
-	clif_parse_func_table[1][0x0a2] = clif_parse_UseSkillToPos;
-	clif_parse_func_table[1][0x0a7] = clif_parse_SolveCharName;
-	clif_parse_func_table[1][0x0f3] = clif_parse_GlobalMessage;
-	clif_parse_func_table[1][0x0f5] = clif_parse_UseItem;
-	clif_parse_func_table[1][0x0f7] = clif_parse_TickSend;
-	clif_parse_func_table[1][0x113] = clif_parse_MoveToKafra;
-	clif_parse_func_table[1][0x116] = clif_parse_CloseKafra;
-	clif_parse_func_table[1][0x190] = clif_parse_MoveFromKafra;
-	clif_parse_func_table[1][0x193] = clif_parse_ActionRequest;
-	// init packet function calls for packet ver 9 (same function of packet version 8, but size are different)
-	memcpy(clif_parse_func_table[2], clif_parse_func_table[1], sizeof(clif_parse_func_table[0]));
-	// init packet function calls for packet ver 10
-	memcpy(clif_parse_func_table[3], clif_parse_func_table[2], sizeof(clif_parse_func_table[0]));
-	clif_parse_func_table[3][0x072] = clif_parse_UseItem;
-	clif_parse_func_table[3][0x07e] = clif_parse_MoveToKafra;
-	clif_parse_func_table[3][0x085] = clif_parse_ActionRequest;
-	clif_parse_func_table[3][0x089] = clif_parse_WalkToXY;
-	clif_parse_func_table[3][0x08c] = clif_parse_UseSkillToPos;
-	clif_parse_func_table[3][0x094] = clif_parse_DropItem;
-	clif_parse_func_table[3][0x09b] = clif_parse_GetCharNameRequest;
-	clif_parse_func_table[3][0x09f] = clif_parse_GlobalMessage;
-	clif_parse_func_table[3][0x0a2] = clif_parse_SolveCharName;
-	clif_parse_func_table[3][0x0a7] = clif_parse_UseSkillToPos;
-	clif_parse_func_table[3][0x0f3] = clif_parse_ChangeDir;
-	clif_parse_func_table[3][0x0f5] = clif_parse_WantToConnection;
-	clif_parse_func_table[3][0x0f7] = clif_parse_CloseKafra;
-	clif_parse_func_table[3][0x113] = clif_parse_TakeItem;
-	clif_parse_func_table[3][0x116] = clif_parse_TickSend;
-	clif_parse_func_table[3][0x190] = clif_parse_UseSkillToId;
-	clif_parse_func_table[3][0x193] = clif_parse_MoveFromKafra;
-
-	// size of packet version 5
-	memcpy(&packet_size_table[0], &packet_len_table, sizeof(packet_len_table));
-	// size of packet version 6
-	memcpy(&packet_size_table[1], &packet_size_table[0], sizeof(packet_len_table));
-	packet_size_table[1][0x072] = 22;
-	packet_size_table[1][0x085] = 8;
-	packet_size_table[1][0x0a7] = 13;
-	packet_size_table[1][0x113] = 15;
-	packet_size_table[1][0x116] = 15;
-	packet_size_table[1][0x190] = 95;
-	// size of packet version 7
-	memcpy(&packet_size_table[2], &packet_size_table[1], sizeof(packet_len_table));
-	packet_size_table[2][0x072] = 39;
-	packet_size_table[2][0x085] = 9;
-	packet_size_table[2][0x09b] = 13;
-	packet_size_table[2][0x09f] = 10;
-	packet_size_table[2][0x0a7] = 17;
-	packet_size_table[2][0x113] = 19;
-	packet_size_table[2][0x116] = 19;
-	packet_size_table[2][0x190] = 99;
-	// size of packet version 8
-	memcpy(&packet_size_table[3], &packet_size_table[2], sizeof(packet_len_table));
-	packet_size_table[3][0x072] = 14;
-	packet_size_table[3][0x07e] = 33;
-	packet_size_table[3][0x085] = 20;
-	packet_size_table[3][0x089] = 15;
-	packet_size_table[3][0x08c] = 23;
-	packet_size_table[3][0x094] = 10;
-	packet_size_table[3][0x09b] = 6;
-	packet_size_table[3][0x09f] = 13;
-	packet_size_table[3][0x0a2] = 103;
-	packet_size_table[3][0x0a7] = 12;
-	packet_size_table[3][0x0f3] = -1;
-	packet_size_table[3][0x0f5] = 17;
-	packet_size_table[3][0x0f7] = 10;
-	packet_size_table[3][0x113] = 16;
-	packet_size_table[3][0x116] = 2;
-	packet_size_table[3][0x190] = 26;
-	packet_size_table[3][0x193] = 9;
-	// size of packet version 9
-	memcpy(&packet_size_table[4], &packet_size_table[3], sizeof(packet_len_table));
-	packet_size_table[4][0x072] = 17;
-	packet_size_table[4][0x07e] = 37;
-	packet_size_table[4][0x085] = 26;
-	packet_size_table[4][0x089] = 12;
-	packet_size_table[4][0x08c] = 40;
-	packet_size_table[4][0x094] = 13;
-	packet_size_table[4][0x09b] = 15;
-	packet_size_table[4][0x09f] = 12;
-	packet_size_table[4][0x0a2] = 120;
-	packet_size_table[4][0x0a7] = 11;
-//	packet_size_table[4][0x0f3] = -1;
-	packet_size_table[4][0x0f5] = 24;
-	packet_size_table[4][0x0f7] = 13;
-	packet_size_table[4][0x113] = 23;
-//	packet_size_table[4][0x116] = 2;
-	packet_size_table[4][0x190] = 26;
-	packet_size_table[4][0x193] = 18;
-	// new packet
-	packet_size_table[4][0x20f] = 10;
-	packet_size_table[4][0x210] = 22;
-	packet_size_table[4][0x212] = 26;
-	packet_size_table[4][0x213] = 26;
-	packet_size_table[4][0x214] = 42;
-	// size of packet version 9
-	memcpy(&packet_size_table[5], &packet_size_table[4], sizeof(packet_len_table));
-	packet_size_table[5][0x072] = 20;
-	packet_size_table[5][0x07e] = 19;
-	packet_size_table[5][0x085] = 23;
-	packet_size_table[5][0x089] = 9;
-	packet_size_table[5][0x08c] = 105;
-	packet_size_table[5][0x094] = 17;
-	packet_size_table[5][0x09b] = 14;
-	packet_size_table[5][0x09f] = -1;
-	packet_size_table[5][0x0a2] = 14;
-	packet_size_table[5][0x0a7] = 25;
-	packet_size_table[5][0x0f3] = 10;
-	packet_size_table[5][0x0f5] = 34;
-	packet_size_table[5][0x0f7] = 2;
-	packet_size_table[5][0x113] = 11;
-	packet_size_table[5][0x116] = 11;
-	packet_size_table[5][0x190] = 22;
-	packet_size_table[5][0x193] = 17;
-
-	set_defaultparse(clif_parse);
-	for(i = 0; i < 10; i++) {
-		if (make_listen_port(map_port))
-			break;
-#ifdef LCCWIN32
-		Sleep(20000);
-#else
-		sleep(20);
-#endif
-	}
-	if (i == 10) {
-		printf("cant bind game port\n");
-		exit(1);
-	}
-
-	add_timer_func_list(clif_waitclose, "clif_waitclose");
-	add_timer_func_list(clif_clearchar_delay_sub, "clif_clearchar_delay_sub");
-
-	return 0;
-}
-
diff --git a/misc/src/map/clif.h b/misc/src/map/clif.h
deleted file mode 100644
index cdddd8b..0000000
--- a/misc/src/map/clif.h
+++ /dev/null
@@ -1,280 +0,0 @@
-// $Id: clif.h,v 1.4 2004/09/25 05:32:18 MouseJstr Exp $
-#ifndef _CLIF_H_
-#define _CLIF_H_
-
-#include <sys/types.h>
-
-#ifdef LCCWIN32
-#include <winsock.h>
-typedef unsigned int in_addr_t;
-#else
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#endif
-
-#include "map.h"
-
-void clif_setip(char*);
-void clif_setport(int);
-
-in_addr_t clif_getip(void);
-int clif_getport(void);
-int clif_countusers(void);
-void clif_setwaitclose(int);
-
-int clif_authok(struct map_session_data *);
-int clif_authfail_fd(int,int);
-int clif_charselectok(int);
-int clif_dropflooritem(struct flooritem_data *);
-int clif_clearflooritem(struct flooritem_data *,int);
-int clif_clearchar(struct block_list*,int);	// area or fd
-int clif_clearchar_delay(unsigned int,struct block_list *,int);
-#define clif_clearchar_area(bl,type) clif_clearchar(bl,type)
-int clif_clearchar_id(int,int,int);
-int clif_spawnpc(struct map_session_data*);	//area
-int clif_spawnnpc(struct npc_data*);	// area
-int clif_spawnmob(struct mob_data*);	// area
-int clif_spawnpet(struct pet_data*);	// area
-int clif_walkok(struct map_session_data*);	// self
-int clif_movechar(struct map_session_data*);	// area
-int clif_movemob(struct mob_data*);	//area
-int clif_movepet(struct pet_data *pd);	//area
-int clif_changemap(struct map_session_data*,char*,int,int);	//self
-int clif_changemapserver(struct map_session_data*,char*,int,int,int,int);	//self
-int clif_fixpos(struct block_list *);	// area
-int clif_fixmobpos(struct mob_data *md);
-int clif_fixpcpos(struct map_session_data *sd);
-int clif_fixpetpos(struct pet_data *pd);
-int clif_npcbuysell(struct map_session_data*,int);	//self
-int clif_buylist(struct map_session_data*,struct npc_data*);	//self
-int clif_selllist(struct map_session_data*);	//self
-int clif_scriptmes(struct map_session_data*,int,char*);	//self
-int clif_scriptnext(struct map_session_data*,int);	//self
-int clif_scriptclose(struct map_session_data*,int);	//self
-int clif_scriptmenu(struct map_session_data*,int,char*);	//self
-int clif_scriptinput(struct map_session_data*,int);	//self
-int clif_scriptinputstr(struct map_session_data *sd,int npcid);	// self
-int clif_cutin(struct map_session_data*,char*,int);	//self
-int clif_viewpoint(struct map_session_data*,int,int,int,int,int,int);	//self
-int clif_additem(struct map_session_data*,int,int,int);	//self
-int clif_delitem(struct map_session_data*,int,int);	//self
-int clif_updatestatus(struct map_session_data*,int);	//self
-int clif_changestatus(struct block_list*,int,int);	//area
-int clif_damage(struct block_list *,struct block_list *,unsigned int,int,int,int,int,int,int);	// area
-#define clif_takeitem(src,dst) clif_damage(src,dst,0,0,0,0,0,1,0)
-int clif_changelook(struct block_list *,int,int);	// area
-int clif_arrowequip(struct map_session_data *sd,int val); //self
-int clif_arrow_fail(struct map_session_data *sd,int type); //self
-int clif_arrow_create_list(struct map_session_data *sd);	//self
-int clif_statusupack(struct map_session_data *,int,int,int);	// self
-int clif_equipitemack(struct map_session_data *,int,int,int);	// self
-int clif_unequipitemack(struct map_session_data *,int,int,int);	// self
-int clif_misceffect(struct block_list*,int);	// area
-int clif_misceffect2(struct block_list *bl,int type);
-int clif_changeoption(struct block_list*);	// area
-int clif_useitemack(struct map_session_data*,int,int,int);	// self
-
-int clif_createchat(struct map_session_data*,int);	// self
-int clif_dispchat(struct chat_data*,int);	// area or fd
-int clif_joinchatfail(struct map_session_data*,int);	// self
-int clif_joinchatok(struct map_session_data*,struct chat_data*);	// self
-int clif_addchat(struct chat_data*,struct map_session_data*);	// chat
-int clif_changechatowner(struct chat_data*,struct map_session_data*);	// chat
-int clif_clearchat(struct chat_data*,int);	// area or fd
-int clif_leavechat(struct chat_data*,struct map_session_data*);	// chat
-int clif_changechatstatus(struct chat_data*);	// chat
-
-void clif_emotion(struct block_list *bl,int type);
-void clif_talkiebox(struct block_list *bl,char* talkie);
-void clif_wedding_effect(struct block_list *bl);
-void clif_sitting(int fd, struct map_session_data *sd);
-//void clif_callpartner(struct map_session_data *sd);
-//void clif_sitting(struct map_session_data *sd);
-void clif_soundeffect(struct map_session_data *sd,struct block_list *bl,char *name,int type);
-
-// trade
-int clif_traderequest(struct map_session_data *sd,char *name);
-int clif_tradestart(struct map_session_data *sd,int type);
-int clif_tradeadditem(struct map_session_data *sd,struct map_session_data *tsd,int index,int amount);
-int clif_tradeitemok(struct map_session_data *sd,int index,int amount,int fail);
-int clif_tradedeal_lock(struct map_session_data *sd,int fail);
-int clif_tradecancelled(struct map_session_data *sd);
-int clif_tradecompleted(struct map_session_data *sd,int fail);
-
-// storage
-#include "storage.h"
-int clif_storageitemlist(struct map_session_data *sd,struct storage *stor);
-int clif_storageequiplist(struct map_session_data *sd,struct storage *stor);
-int clif_updatestorageamount(struct map_session_data *sd,struct storage *stor);
-int clif_storageitemadded(struct map_session_data *sd,struct storage *stor,int index,int amount);
-int clif_storageitemremoved(struct map_session_data *sd,int index,int amount);
-int clif_storageclose(struct map_session_data *sd);
-int clif_guildstorageitemlist(struct map_session_data *sd,struct guild_storage *stor);
-int clif_guildstorageequiplist(struct map_session_data *sd,struct guild_storage *stor);
-int clif_updateguildstorageamount(struct map_session_data *sd,struct guild_storage *stor);
-int clif_guildstorageitemadded(struct map_session_data *sd,struct guild_storage *stor,int index,int amount);
-
-int clif_pcinsight(struct block_list *,va_list);	// map_forallinmovearea callback
-int clif_pcoutsight(struct block_list *,va_list);	// map_forallinmovearea callback
-int clif_mobinsight(struct block_list *,va_list);	// map_forallinmovearea callback
-int clif_moboutsight(struct block_list *,va_list);	// map_forallinmovearea callback
-int clif_petoutsight(struct block_list *bl,va_list ap);
-int clif_petinsight(struct block_list *bl,va_list ap);
-
-int clif_class_change(struct block_list *bl,int class,int type);
-int clif_mob_class_change(struct mob_data *md,int class);
-int clif_mob_equip(struct mob_data *md,int nameid); // [Valaris]
-
-int clif_skillinfo(struct map_session_data *sd,int skillid,int type,int range);
-int clif_skillinfoblock(struct map_session_data *sd);
-int clif_skillup(struct map_session_data *sd,int skill_num);
-
-int clif_skillcasting(struct block_list* bl,
-	int src_id,int dst_id,int dst_x,int dst_y,int skill_num,int casttime);
-int clif_skillcastcancel(struct block_list* bl);
-int clif_skill_fail(struct map_session_data *sd,int skill_id,int type,int btype);
-int clif_skill_damage(struct block_list *src,struct block_list *dst,
-	unsigned int tick,int sdelay,int ddelay,int damage,int div,
-	int skill_id,int skill_lv,int type);
-int clif_skill_damage2(struct block_list *src,struct block_list *dst,
-	unsigned int tick,int sdelay,int ddelay,int damage,int div,
-	int skill_id,int skill_lv,int type);
-int clif_skill_nodamage(struct block_list *src,struct block_list *dst,
-	int skill_id,int heal,int fail);
-int clif_skill_poseffect(struct block_list *src,int skill_id,
-	int val,int x,int y,int tick);
-int clif_skill_estimation(struct map_session_data *sd,struct block_list *dst);
-int clif_skill_warppoint(struct map_session_data *sd,int skill_num,
-	const char *map1,const char *map2,const char *map3,const char *map4);
-int clif_skill_memo(struct map_session_data *sd,int flag);
-int clif_skill_teleportmessage(struct map_session_data *sd,int flag);
-int clif_skill_produce_mix_list(struct map_session_data *sd,int trigger);
-
-int clif_produceeffect(struct map_session_data *sd,int flag,int nameid);
-
-int clif_skill_setunit(struct skill_unit *unit);
-int clif_skill_delunit(struct skill_unit *unit);
-
-int clif_01ac(struct block_list *bl);
-
-int clif_autospell(struct map_session_data *sd,int skilllv);
-int clif_devotion(struct map_session_data *sd,int target);
-int clif_spiritball(struct map_session_data *sd);
-int clif_combo_delay(struct block_list *src,int wait);
-int clif_bladestop(struct block_list *src,struct block_list *dst,int bool);
-int clif_changemapcell(int m,int x,int y,int cell_type,int type);
-
-int clif_status_change(struct block_list *bl,int type,int flag);
-
-int clif_wis_message(int fd,char *nick,char *mes,int mes_len);
-int clif_wis_end(int fd,int flag);
-
-int clif_solved_charname(struct map_session_data *sd,int char_id);
-
-int clif_use_card(struct map_session_data *sd,int idx);
-int clif_insert_card(struct map_session_data *sd,int idx_equip,int idx_card,int flag);
-
-int clif_itemlist(struct map_session_data *sd);
-int clif_equiplist(struct map_session_data *sd);
-
-int clif_cart_additem(struct map_session_data*,int,int,int);
-int clif_cart_delitem(struct map_session_data*,int,int);
-int clif_cart_itemlist(struct map_session_data *sd);
-int clif_cart_equiplist(struct map_session_data *sd);
-
-int clif_item_identify_list(struct map_session_data *sd);
-int clif_item_identified(struct map_session_data *sd,int idx,int flag);
-int clif_item_repair_list(struct map_session_data *sd);
-
-int clif_item_skill(struct map_session_data *sd,int skillid,int skilllv,const char *name);
-
-int clif_mvp_effect(struct map_session_data *sd);
-int clif_mvp_item(struct map_session_data *sd,int nameid);
-int clif_mvp_exp(struct map_session_data *sd,int exp);
-
-// vending
-int clif_openvendingreq(struct map_session_data *sd,int num);
-int clif_showvendingboard(struct block_list* bl,char *message,int fd);
-int clif_closevendingboard(struct block_list* bl,int fd);
-int clif_vendinglist(struct map_session_data *sd,int id,struct vending *vending);
-int clif_buyvending(struct map_session_data *sd,int index,int amount,int fail);
-int clif_openvending(struct map_session_data *sd,int id,struct vending *vending);
-int clif_vendingreport(struct map_session_data *sd,int index,int amount);
-
-int clif_movetoattack(struct map_session_data *sd,struct block_list *bl);
-
-// party
-int clif_party_created(struct map_session_data *sd,int flag);
-int clif_party_info(struct party *p,int fd);
-int clif_party_invite(struct map_session_data *sd,struct map_session_data *tsd);
-int clif_party_inviteack(struct map_session_data *sd,char *nick,int flag);
-int clif_party_option(struct party *p,struct map_session_data *sd,int flag);
-int clif_party_leaved(struct party *p,struct map_session_data *sd,int account_id,char *name,int flag);
-int clif_party_message(struct party *p,int account_id,char *mes,int len);
-int clif_party_move(struct party *p,struct map_session_data *sd,int online);
-int clif_party_xy(struct party *p,struct map_session_data *sd);
-int clif_party_hp(struct party *p,struct map_session_data *sd);
-
-// guild
-int clif_guild_created(struct map_session_data *sd,int flag);
-int clif_guild_belonginfo(struct map_session_data *sd,struct guild *g);
-int clif_guild_basicinfo(struct map_session_data *sd);
-int clif_guild_allianceinfo(struct map_session_data *sd);
-int clif_guild_memberlist(struct map_session_data *sd);
-int clif_guild_skillinfo(struct map_session_data *sd);
-int clif_guild_memberlogin_notice(struct guild *g,int idx,int flag);
-int clif_guild_invite(struct map_session_data *sd,struct guild *g);
-int clif_guild_inviteack(struct map_session_data *sd,int flag);
-int clif_guild_leave(struct map_session_data *sd,const char *name,const char *mes);
-int clif_guild_explusion(struct map_session_data *sd,const char *name,const char *mes,
-	int account_id);
-int clif_guild_positionchanged(struct guild *g,int idx);
-int clif_guild_memberpositionchanged(struct guild *g,int idx);
-int clif_guild_emblem(struct map_session_data *sd,struct guild *g);
-int clif_guild_notice(struct map_session_data *sd,struct guild *g);
-int clif_guild_message(struct guild *g,int account_id,const char *mes,int len);
-int clif_guild_skillup(struct map_session_data *sd,int skill_num,int lv);
-int clif_guild_reqalliance(struct map_session_data *sd,int account_id,const char *name);
-int clif_guild_allianceack(struct map_session_data *sd,int flag);
-int clif_guild_delalliance(struct map_session_data *sd,int guild_id,int flag);
-int clif_guild_oppositionack(struct map_session_data *sd,int flag);
-int clif_guild_broken(struct map_session_data *sd,int flag);
-
-
-// atcommand
-int clif_displaymessage(const int fd,char* mes);
-int clif_disp_onlyself(struct map_session_data *sd,char *mes,int len);
-int clif_GMmessage(struct block_list *bl,char* mes,int len,int flag);
-int clif_heal(int fd,int type,int val);
-int clif_resurrection(struct block_list *bl,int type);
-int clif_set0199(int fd,int type);
-int clif_pvpset(struct map_session_data *sd, int pvprank, int pvpnum,int type);
-int clif_send0199(int map,int type);
-int clif_refine(int fd,struct map_session_data *sd,int fail,int index,int val);
-
-//petsystem
-int clif_catch_process(struct map_session_data *sd);
-int clif_pet_rulet(struct map_session_data *sd,int data);
-int clif_sendegg(struct map_session_data *sd);
-int clif_send_petdata(struct map_session_data *sd,int type,int param);
-int clif_send_petstatus(struct map_session_data *sd);
-int clif_pet_emotion(struct pet_data *pd,int param);
-int clif_pet_performance(struct block_list *bl,int param);
-int clif_pet_equip(struct pet_data *pd,int nameid);
-int clif_pet_food(struct map_session_data *sd,int foodid,int fail);
-
-int clif_specialeffect(struct block_list *bl,int type, int flag); // special effects [Valaris]
-int clif_message(struct block_list *bl, char* msg); // messages (from mobs/npcs) [Valaris]
-
-int clif_GM_kickack(struct map_session_data *sd,int id);
-int clif_GM_kick(struct map_session_data *sd,struct map_session_data *tsd,int type);
-
-int clif_foreachclient(int (*)(struct map_session_data*,va_list),...);
-
-int do_final_clif(void);
-int do_init_clif(void);
-
-#endif
-
-
diff --git a/misc/src/map/guild.c b/misc/src/map/guild.c
deleted file mode 100644
index c32ebb4..0000000
--- a/misc/src/map/guild.c
+++ /dev/null
@@ -1,1543 +0,0 @@
-// $Id: guild.c,v 1.5 2004/09/25 05:32:18 MouseJstr Exp $
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "guild.h"
-#include "storage.h"
-#include "db.h"
-#include "timer.h"
-#include "socket.h"
-#include "nullpo.h"
-#include "malloc.h"
-#include "battle.h"
-#include "npc.h"
-#include "pc.h"
-#include "map.h"
-#include "mob.h"
-#include "intif.h"
-#include "clif.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-static struct dbt *guild_db;
-static struct dbt *castle_db;
-static struct dbt *guild_expcache_db;
-static struct dbt *guild_infoevent_db;
-static struct dbt *guild_castleinfoevent_db;
-
-struct eventlist {
-	char name[50];
-	struct eventlist *next;
-};
-
-// �M���h��EXP�L���b�V���̃t���b�V���Ɋ֘A����萔
-#define GUILD_PAYEXP_INVERVAL 10000	// �Ԋu(�L���b�V���̍ő吶�����ԁA�~���b)
-#define GUILD_PAYEXP_LIST 8192	// �L���b�V���̍ő吔
-
-// �M���h��EXP�L���b�V��
-struct guild_expcache {
-	int guild_id, account_id, char_id, exp;
-};
-
-// �M���h�X�L��db�̃A�N�Z�T�i���͒��ł��ő�p�j
-int guild_skill_get_inf(int id){ return 0; }
-int guild_skill_get_sp(int id,int lv){ return 0; }
-int guild_skill_get_range(int id){ return 0; }
-int guild_skill_get_max(int id){ return (id==10004)?10:1; }
-
-// �M���h�X�L�������邩�m�F
-int guild_checkskill(struct guild *g,int id){ return g->skill[id-10000].lv; }
-
-
-int guild_payexp_timer(int tid,unsigned int tick,int id,int data);
-int guild_gvg_eliminate_timer(int tid,unsigned int tick,int id,int data);
-
-
-static int guild_read_castledb(void)
-{
-	FILE *fp;
-	char line[1024];
-	int j,ln=0;
-	char *str[32],*p;
-	struct guild_castle *gc;
-
-	if( (fp=fopen("db/castle_db.txt","r"))==NULL){
-		printf("can't read db/castle_db.txt\n");
-		return -1;
-	}
-
-	while(fgets(line,1020,fp)){
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		memset(str,0,sizeof(str));
-		gc=(struct guild_castle *)aCalloc(1,sizeof(struct guild_castle));
-		for(j=0,p=line;j<6 && p;j++){
-			str[j]=p;
-			p=strchr(p,',');
-			if(p) *p++=0;
-		}
-
-		gc->guild_id=0; // <Agit> Clear Data for Initialize
-		gc->economy=0; gc->defense=0; gc->triggerE=0; gc->triggerD=0; gc->nextTime=0; gc->payTime=0;
-		gc->createTime=0; gc->visibleC=0; gc->visibleG0=0; gc->visibleG1=0; gc->visibleG2=0;
-		gc->visibleG3=0; gc->visibleG4=0; gc->visibleG5=0; gc->visibleG6=0; gc->visibleG7=0;
-		gc->Ghp0=0; gc->Ghp1=0; gc->Ghp2=0; gc->Ghp3=0; gc->Ghp4=0; gc->Ghp5=0; gc->Ghp6=0; gc->Ghp7=0; // guardian HP [Valaris]
-
-		gc->castle_id=atoi(str[0]);
-		memcpy(gc->map_name,str[1],24);
-		memcpy(gc->castle_name,str[2],24);
-		memcpy(gc->castle_event,str[3],24);
-
-		numdb_insert(castle_db,gc->castle_id,gc);
-
-		//intif_guild_castle_info(gc->castle_id);
-
-		ln++;
-	}
-	fclose(fp);
-	printf("read db/castle_db.txt done (count=%d)\n",ln);
-	return 0;
-}
-
-// ������
-void do_init_guild(void)
-{
-	guild_db=numdb_init();
-	castle_db=numdb_init();
-	guild_expcache_db=numdb_init();
-	guild_infoevent_db=numdb_init();
-	guild_castleinfoevent_db=numdb_init();
-
-	guild_read_castledb();
-
-	add_timer_func_list(guild_gvg_eliminate_timer,"guild_gvg_eliminate_timer");
-	add_timer_func_list(guild_payexp_timer,"guild_payexp_timer");
-	add_timer_interval(gettick()+GUILD_PAYEXP_INVERVAL,guild_payexp_timer,0,0,GUILD_PAYEXP_INVERVAL);
-}
-
-
-// ����
-struct guild *guild_search(int guild_id)
-{
-	return numdb_search(guild_db,guild_id);
-}
-int guild_searchname_sub(void *key,void *data,va_list ap)
-{
-	struct guild *g=(struct guild *)data,**dst;
-	char *str;
-	str=va_arg(ap,char *);
-	dst=va_arg(ap,struct guild **);
-	if(strcmpi(g->name,str)==0)
-		*dst=g;
-	return 0;
-}
-// �M���h������
-struct guild* guild_searchname(char *str)
-{
-	struct guild *g=NULL;
-	numdb_foreach(guild_db,guild_searchname_sub,str,&g);
-	return g;
-}
-struct guild_castle *guild_castle_search(int gcid)
-{
-	return numdb_search(castle_db,gcid);
-}
-
-// mapname�ɑΉ������A�W�g��gc��Ԃ�
-struct guild_castle *guild_mapname2gc(char *mapname)
-{
-	int i;
-	struct guild_castle *gc=NULL;
-	for(i=0;i<MAX_GUILDCASTLE;i++){
-		gc=guild_castle_search(i);
-		if(!gc) continue;
-		if(strcmp(gc->map_name,mapname)==0) return gc;
-	}
-	return NULL;
-}
-
-// ���O�C�����̃M���h�����o�[�̂P�l��sd��Ԃ�
-struct map_session_data *guild_getavailablesd(struct guild *g)
-{
-	int i;
-
-	nullpo_retr(NULL, g);
-
-	for(i=0;i<g->max_member;i++)
-		if(g->member[i].sd!=NULL)
-			return g->member[i].sd;
-	return NULL;
-}
-
-// �M���h�����o�[�̃C���f�b�N�X��Ԃ�
-int guild_getindex(struct guild *g,int account_id,int char_id)
-{
-	int i;
-	if(g==NULL)
-		return -1;
-	for(i=0;i<g->max_member;i++)
-		if( g->member[i].account_id==account_id &&
-			g->member[i].char_id==char_id )
-			return i;
-	return -1;
-}
-// �M���h�����o�[�̖�E��Ԃ�
-int guild_getposition(struct map_session_data *sd,struct guild *g)
-{
-	int i;
-
-	nullpo_retr(-1, sd);
-
-	if(g==NULL && (g=guild_search(sd->status.guild_id))==NULL)
-		return -1;
-	for(i=0;i<g->max_member;i++)
-		if( g->member[i].account_id==sd->status.account_id &&
-			g->member[i].char_id==sd->status.char_id )
-			return g->member[i].position;
-	return -1;
-}
-
-// �����o�[���̍쐬
-void guild_makemember(struct guild_member *m,struct map_session_data *sd)
-{
-	nullpo_retv(sd);
-
-	memset(m,0,sizeof(struct guild_member));
-	m->account_id	=sd->status.account_id;
-	m->char_id		=sd->status.char_id;
-	m->hair			=sd->status.hair;
-	m->hair_color	=sd->status.hair_color;
-	m->gender		=sd->sex;
-	m->class		=sd->status.class;
-	m->lv			=sd->status.base_level;
-	m->exp			=0;
-	m->exp_payper	=0;
-	m->online		=1;
-	m->position		=MAX_GUILDPOSITION-1;
-	memcpy(m->name,sd->status.name,24);
-	return;
-}
-// �M���h�����m�F
-int guild_check_conflict(struct map_session_data *sd)
-{
-	nullpo_retr(0, sd);
-
-	intif_guild_checkconflict(sd->status.guild_id,
-		sd->status.account_id,sd->status.char_id);
-	return 0;
-}
-
-// �M���h��EXP�L���b�V����inter�I�Ƀt���b�V������
-int guild_payexp_timer_sub(void *key,void *data,va_list ap)
-{
-	int i, *dellist,*delp, dataid=(int)key;
-	struct guild_expcache *c;
-	struct guild *g;
-
-	nullpo_retr(0, ap);
-	nullpo_retr(0, c=(struct guild_expcache *)data);
-	nullpo_retr(0, dellist=va_arg(ap,int *));
-	nullpo_retr(0, delp=va_arg(ap,int *));
-
-	if( *delp>=GUILD_PAYEXP_LIST || (g=guild_search(c->guild_id))==NULL )
-		return 0;
-	if( ( i=guild_getindex(g,c->account_id,c->char_id) )<0 )
-		return 0;
-
-	g->member[i].exp+=c->exp;
-	intif_guild_change_memberinfo(g->guild_id,c->account_id,c->char_id,
-		GMI_EXP,&g->member[i].exp,sizeof(g->member[i].exp));
-	c->exp=0;
-
-	dellist[(*delp)++]=dataid;
-	free(c);
-	return 0;
-}
-int guild_payexp_timer(int tid,unsigned int tick,int id,int data)
-{
-	int dellist[GUILD_PAYEXP_LIST],delp=0,i;
-	numdb_foreach(guild_expcache_db,guild_payexp_timer_sub,
-		dellist,&delp);
-	for(i=0;i<delp;i++)
-		numdb_erase(guild_expcache_db,dellist[i]);
-//	if(battle_config.etc_log)
-//		printf("guild exp %d charactor's exp flushed !\n",delp);
-	return 0;
-}
-
-//------------------------------------------------------------------------
-
-// �쐬�v��
-int guild_create(struct map_session_data *sd,char *name)
-{
-	nullpo_retr(0, sd);
-
-	if(sd->status.guild_id==0){
-		if(!battle_config.guild_emperium_check || pc_search_inventory(sd,714) >= 0) {
-			struct guild_member m;
-			guild_makemember(&m,sd);
-			m.position=0;
-			intif_guild_create(name,&m);
-		} else
-			clif_guild_created(sd,3);	// �G���y���E�������Ȃ�
-	}else
-		clif_guild_created(sd,1);	// ���łɏ������Ă���
-
-	return 0;
-}
-
-// �쐬�”�
-int guild_created(int account_id,int guild_id)
-{
-	struct map_session_data *sd=map_id2sd(account_id);
-
-	if(sd==NULL)
-		return 0;
-	if(guild_id>0) {
-			struct guild *g;
-			sd->status.guild_id=guild_id;
-			sd->guild_sended=0;
-			if((g=numdb_search(guild_db,guild_id))!=NULL){
-				printf("guild: id already exists!\n");
-				exit(1);
-			}
-			clif_guild_created(sd,0);
-			if(battle_config.guild_emperium_check)
-				pc_delitem(sd,pc_search_inventory(sd,714),1,0);	// �G���y���E������
-	} else {
-		clif_guild_created(sd,2);	// �쐬���s�i�����M���h���݁j
-	}
-	return 0;
-}
-
-// ���v��
-int guild_request_info(int guild_id)
-{
-//	if(battle_config.etc_log)
-//		printf("guild_request_info\n");
-	return intif_guild_request_info(guild_id);
-}
-// �C�x���g�t�����v��
-int guild_npc_request_info(int guild_id,const char *event)
-{
-	struct eventlist *ev;
-
-	if( guild_search(guild_id) ){
-		if(event && *event)
-			npc_event_do(event);
-		return 0;
-	}
-
-	if(event==NULL || *event==0)
-		return guild_request_info(guild_id);
-
-	ev=(struct eventlist *)aCalloc(1,sizeof(struct eventlist));
-	memcpy(ev->name,event,sizeof(ev->name));
-	ev->next=(struct eventlist *)numdb_search(guild_infoevent_db,guild_id);
-	numdb_insert(guild_infoevent_db,guild_id,ev);
-	return guild_request_info(guild_id);
-}
-
-// �����L�����̊m�F
-int guild_check_member(const struct guild *g)
-{
-	int i;
-	struct map_session_data *sd;
-
-	nullpo_retr(0, g);
-
-	for(i=0;i<fd_max;i++){
-		if(session[i] && (sd=session[i]->session_data) && sd->state.auth){
-			if(sd->status.guild_id==g->guild_id){
-				int j,f=1;
-				for(j=0;j<MAX_GUILD;j++){	// �f�[�^�����邩
-					if(	g->member[j].account_id==sd->status.account_id &&
-						g->member[j].char_id==sd->status.char_id)
-						f=0;
-				}
-				if(f){
-					sd->status.guild_id=0;
-					sd->guild_sended=0;
-					sd->guild_emblem_id=0;
-					if(battle_config.error_log)
-						printf("guild: check_member %d[%s] is not member\n",sd->status.account_id,sd->status.name);
-				}
-			}
-		}
-	}
-	return 0;
-}
-// ��񏊓����s�i����ID�̃L������S���������ɂ���j
-int guild_recv_noinfo(int guild_id)
-{
-	int i;
-	struct map_session_data *sd;
-	for(i=0;i<fd_max;i++){
-		if(session[i] && (sd=session[i]->session_data) && sd->state.auth){
-			if(sd->status.guild_id==guild_id)
-				sd->status.guild_id=0;
-		}
-	}
-	return 0;
-}
-// ��񏊓�
-int guild_recv_info(struct guild *sg)
-{
-	struct guild *g,before;
-	int i,bm,m;
-	struct eventlist *ev,*ev2;
-
-	nullpo_retr(0, sg);
-
-	if((g=numdb_search(guild_db,sg->guild_id))==NULL){
-		g=(struct guild *)aCalloc(1,sizeof(struct guild));
-		numdb_insert(guild_db,sg->guild_id,g);
-		before=*sg;
-
-		// �ŏ��̃��[�h�Ȃ̂Ń��[�U�[�̃`�F�b�N���s��
-		guild_check_member(sg);
-	}else
-		before=*g;
-	memcpy(g,sg,sizeof(struct guild));
-
-	for(i=bm=m=0;i<g->max_member;i++){	// sd�̐ݒ�Ɛl���̊m�F
-		if(g->member[i].account_id>0){
-			struct map_session_data *sd = map_id2sd(g->member[i].account_id);
-			g->member[i].sd=(sd!=NULL &&
-				sd->status.char_id==g->member[i].char_id &&
-				sd->status.guild_id==g->guild_id)?	sd:NULL;
-			m++;
-		}else
-			g->member[i].sd=NULL;
-		if(before.member[i].account_id>0)
-			bm++;
-	}
-
-	for(i=0;i<g->max_member;i++){	// ���̑��M
-		struct map_session_data *sd = g->member[i].sd;
-		if( sd==NULL )
-			continue;
-
-		if(	before.guild_lv!=g->guild_lv || bm!=m ||
-			before.max_member!=g->max_member ){
-			clif_guild_basicinfo(sd);	// ��{��񑗐M
-			clif_guild_emblem(sd,g);	// �G���u�������M
-		}
-
-		if(bm!=m){		// �����o�[��񑗐M
-			clif_guild_memberlist(g->member[i].sd);
-		}
-
-		if( before.skill_point!=g->skill_point)
-			clif_guild_skillinfo(sd);	// �X�L����񑗐M
-
-		if( sd->guild_sended==0){	// �����M�Ȃ珊����������
-			clif_guild_belonginfo(sd,g);
-			clif_guild_notice(sd,g);
-			sd->guild_emblem_id=g->emblem_id;
-			sd->guild_sended=1;
-		}
-	}
-
-	// �C�x���g�̔���
-	if( (ev=numdb_search(guild_infoevent_db,sg->guild_id))!=NULL ){
-		numdb_erase(guild_infoevent_db,sg->guild_id);
-		for(;ev;ev2=ev->next,free(ev),ev=ev2){
-			npc_event_do(ev->name);
-		}
-	}
-
-	return 0;
-}
-
-
-// �M���h�ւ̊��U
-int guild_invite(struct map_session_data *sd,int account_id)
-{
-	struct map_session_data *tsd;
-	struct guild *g;
-	int i;
-
-	nullpo_retr(0, sd);
-
-	tsd= map_id2sd(account_id);
-	g=guild_search(sd->status.guild_id);
-
-	if(tsd==NULL || g==NULL)
-		return 0;
-	if(!battle_config.invite_request_check) {
-		if (tsd->party_invite>0 || tsd->trade_partner) {	// ���肪��������ǂ���
-			clif_guild_inviteack(sd,0);
-			return 0;
-		}
-	}
-	if( tsd->status.guild_id>0 || tsd->guild_invite>0 ){	// ����̏����m�F
-		clif_guild_inviteack(sd,0);
-		return 0;
-	}
-
-	// ����m�F
-	for(i=0;i<g->max_member;i++)
-		if(g->member[i].account_id==0)
-			break;
-	if(i==g->max_member){
-		clif_guild_inviteack(sd,3);
-		return 0;
-	}
-
-	tsd->guild_invite=sd->status.guild_id;
-	tsd->guild_invite_account=sd->status.account_id;
-
-	clif_guild_invite(tsd,g);
-	return 0;
-}
-// �M���h���U�ւ̕ԓ�
-int guild_reply_invite(struct map_session_data *sd,int guild_id,int flag)
-{
-	struct map_session_data *tsd;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, tsd= map_id2sd( sd->guild_invite_account ));
-
-	if(sd->guild_invite!=guild_id)	// ���U�ƃM���hID���Ⴄ
-		return 0;
-
-	if(flag==1){	// ����
-		struct guild_member m;
-		struct guild *g;
-		int i;
-
-		// ����m�F
-		if( (g=guild_search(tsd->status.guild_id))==NULL ){
-			sd->guild_invite=0;
-			sd->guild_invite_account=0;
-			return 0;
-		}
-		for(i=0;i<g->max_member;i++)
-			if(g->member[i].account_id==0)
-				break;
-		if(i==g->max_member){
-			sd->guild_invite=0;
-			sd->guild_invite_account=0;
-			clif_guild_inviteack(tsd,3);
-			return 0;
-		}
-
-
-		//inter�I�֒lj��v��
-		guild_makemember(&m,sd);
-		intif_guild_addmember( sd->guild_invite, &m );
-		return 0;
-	}else{		// ����
-		sd->guild_invite=0;
-		sd->guild_invite_account=0;
-		if(tsd==NULL)
-			return 0;
-		clif_guild_inviteack(tsd,1);
-	}
-	return 0;
-}
-// �M���h�����o���lj����ꂽ
-int guild_member_added(int guild_id,int account_id,int char_id,int flag)
-{
-	struct map_session_data *sd= map_id2sd(account_id),*sd2;
-	struct guild *g;
-
-	if( (g=guild_search(guild_id))==NULL )
-		return 0;
-
-	if((sd==NULL || sd->guild_invite==0) && flag==0){
-		// �L�������ɓo�^�ł��Ȃ��������ߒE�ޗv�����o��
-		if(battle_config.error_log)
-			printf("guild: member added error %d is not online\n",account_id);
- 		intif_guild_leave(guild_id,account_id,char_id,0,"**�o�^���s**");
-		return 0;
-	}
-	sd->guild_invite=0;
-	sd->guild_invite_account=0;
-
-	sd2=map_id2sd(sd->guild_invite_account);
-
-	if(flag==1){	// ���s
-		if( sd2!=NULL )
-			clif_guild_inviteack(sd2,3);
-		return 0;
-	}
-
-		// ����
-	sd->guild_sended=0;
-	sd->status.guild_id=guild_id;
-
-	if( sd2!=NULL )
-		clif_guild_inviteack(sd2,2);
-
-	// �������������m�F
-	guild_check_conflict(sd);
-
-	return 0;
-}
-
-// �M���h�E�ޗv��
-int guild_leave(struct map_session_data *sd,int guild_id,
-	int account_id,int char_id,const char *mes)
-{
-	struct guild *g;
-	int i;
-
-	nullpo_retr(0, sd);
-
-	g = guild_search(sd->status.guild_id);
-
-	if(g==NULL)
-		return 0;
-
-	if(	sd->status.account_id!=account_id ||
-		sd->status.char_id!=char_id || sd->status.guild_id!=guild_id)
-		return 0;
-
-	for(i=0;i<g->max_member;i++){	// �������Ă��邩
-		if(	g->member[i].account_id==sd->status.account_id &&
-			g->member[i].char_id==sd->status.char_id ){
-			intif_guild_leave(g->guild_id,sd->status.account_id,sd->status.char_id,0,mes);
-			return 0;
-		}
-	}
-	return 0;
-}
-// �M���h�Ǖ��v��
-int guild_explusion(struct map_session_data *sd,int guild_id,
-	int account_id,int char_id,const char *mes)
-{
-	struct guild *g;
-	int i,ps;
-
-	nullpo_retr(0, sd);
-
-	g = guild_search(sd->status.guild_id);
-
-	if(g==NULL)
-		return 0;
-
-	if(	sd->status.guild_id!=guild_id)
-		return 0;
-
-	if( (ps=guild_getposition(sd,g))<0 || !(g->position[ps].mode&0x0010) )
-		return 0;	// ������������
-
-	for(i=0;i<g->max_member;i++){	// �������Ă��邩
-		if(	g->member[i].account_id==account_id &&
-			g->member[i].char_id==char_id ){
-			intif_guild_leave(g->guild_id,account_id,char_id,1,mes);
-			return 0;
-		}
-	}
-	return 0;
-}
-// �M���h�����o���E�ނ���
-int guild_member_leaved(int guild_id,int account_id,int char_id,int flag,
-	const char *name,const char *mes)
-{
-	struct map_session_data *sd=map_id2sd(account_id);
-	struct guild *g=guild_search(guild_id);
-	int i;
-
-	if(g!=NULL){
-		int i;
-		for(i=0;i<g->max_member;i++)
-			if(	g->member[i].account_id==account_id &&
-				g->member[i].char_id==char_id ){
-				struct map_session_data *sd2=sd;
-				if(sd2==NULL)
-					sd2=guild_getavailablesd(g);
-				else
-				{
-					if(flag==0)
-						clif_guild_leave(sd2,name,mes);
-					else
-						clif_guild_explusion(sd2,name,mes,account_id);
-				}
-				g->member[i].account_id=0;
-				g->member[i].sd=NULL;
-			}
-	}
-	if(sd!=NULL && sd->status.guild_id==guild_id){
-		sd->status.guild_id=0;
-		sd->guild_emblem_id=0;
-		sd->guild_sended=0;
-	}
-
-	// �����o�[���X�g��S���ɍĒʒm
-	for(i=0;i<g->max_member;i++){
-		if( g->member[i].sd!=NULL )
-			clif_guild_memberlist(g->member[i].sd);
-	}
-
-	return 0;
-}
-// �M���h�����o�̃I�����C�����/Lv�X�V���M
-int guild_send_memberinfoshort(struct map_session_data *sd,int online)
-{
-	struct guild *g;
-
-	nullpo_retr(0, sd);
-
-	if(sd->status.guild_id<=0)
-		return 0;
-	g=guild_search(sd->status.guild_id);
-	if(g==NULL)
-		return 0;
-
-	intif_guild_memberinfoshort(g->guild_id,
-		sd->status.account_id,sd->status.char_id,online,sd->status.base_level,sd->status.class);
-
-	if( !online ){	// ���O�A�E�g����Ȃ�sd���N���A���ďI��
-		int i=guild_getindex(g,sd->status.account_id,sd->status.char_id);
-		if(i>=0)
-			g->member[i].sd=NULL;
-		return 0;
-	}
-
-	if( sd->guild_sended!=0 )	// �M���h�������M�f�[�^�͑��M�ς�
-		return 0;
-
-	// �����m�F
-	guild_check_conflict(sd);
-
-	// ����Ȃ�M���h�������M�f�[�^���M
-	if( (g=guild_search(sd->status.guild_id))!=NULL ){
-		guild_check_member(g);	// �������m�F����
-		if(sd->status.guild_id==g->guild_id){
-			clif_guild_belonginfo(sd,g);
-			clif_guild_notice(sd,g);
-			sd->guild_sended=1;
-			sd->guild_emblem_id=g->emblem_id;
-		}
-	}
-	return 0;
-}
-// �M���h�����o�̃I�����C�����/Lv�X�V�ʒm
-int guild_recv_memberinfoshort(int guild_id,int account_id,int char_id,int online,int lv,int class)
-{
-	int i,alv,c,idx=0,om=0,oldonline=-1;
-	struct guild *g=guild_search(guild_id);
-	if(g==NULL)
-		return 0;
-	for(i=0,alv=0,c=0,om=0;i<g->max_member;i++){
-		struct guild_member *m=&g->member[i];
-		if(m->account_id==account_id && m->char_id==char_id ){
-			oldonline=m->online;
-			m->online=online;
-			m->lv=lv;
-			m->class=class;
-			idx=i;
-		}
-		if(m->account_id>0){
-			alv+=m->lv;
-			c++;
-		}
-		if(m->online)
-			om++;
-	}
-	if(idx==g->max_member){
-		if(battle_config.error_log)
-			printf("guild: not found member %d,%d on %d[%s]\n",	account_id,char_id,guild_id,g->name);
-		return 0;
-	}
-	g->average_lv=alv/c;
-	g->connect_member=om;
-
-	if(oldonline!=online)	// �I�����C����Ԃ��ς�����̂Œʒm
-		clif_guild_memberlogin_notice(g,idx,online);
-
-	for(i=0;i<g->max_member;i++){	// sd�Đݒ�
-		struct map_session_data *sd= map_id2sd(g->member[i].account_id);
-		g->member[i].sd=(sd!=NULL &&
-			sd->status.char_id==g->member[i].char_id &&
-			sd->status.guild_id==guild_id)?sd:NULL;
-	}
-
-	// �����ɃN���C�A���g�ɑ��M�������K�v
-
-	return 0;
-}
-// �M���h��b���M
-int guild_send_message(struct map_session_data *sd,char *mes,int len)
-{
-	nullpo_retr(0, sd);
-
-	if(sd->status.guild_id==0)
-		return 0;
-	intif_guild_message(sd->status.guild_id,sd->status.account_id,mes,len);
-	return 0;
-}
-// �M���h��b��M
-int guild_recv_message(int guild_id,int account_id,char *mes,int len)
-{
-	struct guild *g;
-	if( (g=guild_search(guild_id))==NULL)
-		return 0;
-	clif_guild_message(g,account_id,mes,len);
-	return 0;
-}
-// �M���h�����o�̖�E�ύX
-int guild_change_memberposition(int guild_id,int account_id,int char_id,int idx)
-{
-	return intif_guild_change_memberinfo(
-		guild_id,account_id,char_id,GMI_POSITION,&idx,sizeof(idx));
-}
-// �M���h�����o�̖�E�ύX�ʒm
-int guild_memberposition_changed(struct guild *g,int idx,int pos)
-{
-	nullpo_retr(0, g);
-
-	g->member[idx].position=pos;
-	clif_guild_memberpositionchanged(g,idx);
-	return 0;
-}
-// �M���h��E�ύX
-int guild_change_position(struct map_session_data *sd,int idx,
-	int mode,int exp_mode,const char *name)
-{
-	struct guild_position p;
-
-	nullpo_retr(0, sd);
-
-	if(exp_mode>battle_config.guild_exp_limit)
-		exp_mode=battle_config.guild_exp_limit;
-	if(exp_mode<0)exp_mode=0;
-	p.mode=mode;
-	p.exp_mode=exp_mode;
-	memcpy(p.name,name,24);
-	return intif_guild_position(sd->status.guild_id,idx,&p);
-}
-// �M���h��E�ύX�ʒm
-int guild_position_changed(int guild_id,int idx,struct guild_position *p)
-{
-	struct guild *g=guild_search(guild_id);
-	if(g==NULL)
-		return 0;
-	memcpy(&g->position[idx],p,sizeof(struct guild_position));
-	clif_guild_positionchanged(g,idx);
-	return 0;
-}
-// �M���h���m�ύX
-int guild_change_notice(struct map_session_data *sd,int guild_id,const char *mes1,const char *mes2)
-{
-	nullpo_retr(0, sd);
-
-	if(guild_id!=sd->status.guild_id)
-		return 0;
-	return intif_guild_notice(guild_id,mes1,mes2);
-}
-// �M���h���m�ύX�ʒm
-int guild_notice_changed(int guild_id,const char *mes1,const char *mes2)
-{
-	int i;
-	struct map_session_data *sd;
-	struct guild *g=guild_search(guild_id);
-	if(g==NULL)
-		return 0;
-
-	memcpy(g->mes1,mes1,60);
-	memcpy(g->mes2,mes2,120);
-
-	for(i=0;i<g->max_member;i++){
-		if((sd=g->member[i].sd)!=NULL)
-			clif_guild_notice(sd,g);
-	}
-	return 0;
-}
-// �M���h�G���u�����ύX
-int guild_change_emblem(struct map_session_data *sd,int len,const char *data)
-{
-	nullpo_retr(0, sd);
-
-	return intif_guild_emblem(sd->status.guild_id,len,data);
-}
-// �M���h�G���u�����ύX�ʒm
-int guild_emblem_changed(int len,int guild_id,int emblem_id,const char *data)
-{
-	int i;
-	struct map_session_data *sd;
-	struct guild *g=guild_search(guild_id);
-	if(g==NULL)
-		return 0;
-
-	memcpy(g->emblem_data,data,len);
-	g->emblem_len=len;
-	g->emblem_id=emblem_id;
-
-	for(i=0;i<g->max_member;i++){
-		if((sd=g->member[i].sd)!=NULL){
-			sd->guild_emblem_id=emblem_id;
-			clif_guild_belonginfo(sd,g);
-			clif_guild_emblem(sd,g);
-		}
-	}
-	return 0;
-}
-
-// �M���h��EXP��[
-int guild_payexp(struct map_session_data *sd,int exp)
-{
-	struct guild *g;
-	struct guild_expcache *c;
-	int per,exp2;
-
-	nullpo_retr(0, sd);
-
-	if(sd->status.guild_id==0 || (g=guild_search(sd->status.guild_id))==NULL )
-		return 0;
-	if( (per=g->position[guild_getposition(sd,g)].exp_mode)<=0 )
-		return 0;
-	if( per>100 )per=100;
-
-	if( (exp2=exp*per/100)<=0 )
-		return 0;
-
-	if( (c=numdb_search(guild_expcache_db,sd->status.char_id))==NULL ){
-		c=(struct guild_expcache *)aCalloc(1,sizeof(struct guild_expcache));
-		c->guild_id=sd->status.guild_id;
-		c->account_id=sd->status.account_id;
-		c->char_id=sd->status.char_id;
-		c->exp=exp2;
-		numdb_insert(guild_expcache_db,c->char_id,c);
-	}else{
-		c->exp+=exp2;
-	}
-	return exp2;
-}
-
-// �X�L���|�C���g����U��
-int guild_skillup(struct map_session_data *sd,int skill_num)
-{
-	struct guild *g;
-	int idx;
-
-	nullpo_retr(0, sd);
-
-	if(sd->status.guild_id==0 || (g=guild_search(sd->status.guild_id))==NULL)
-		return 0;
-	if(strcmp(sd->status.name,g->master))
-		return 0;
-
-	if( g->skill_point>0 &&
-		g->skill[(idx=skill_num-10000)].id!=0 &&
-		g->skill[idx].lv < guild_skill_get_max(skill_num) ){
-		intif_guild_skillup(g->guild_id,skill_num,sd->status.account_id);
-	}
-	return 0;
-}
-// �X�L���|�C���g����U��ʒm
-int guild_skillupack(int guild_id,int skill_num,int account_id)
-{
-	struct map_session_data *sd=map_id2sd(account_id);
-	struct guild *g=guild_search(guild_id);
-	int i;
-	if(g==NULL)
-		return 0;
-	if(sd!=NULL)
-		clif_guild_skillup(sd,skill_num,g->skill[skill_num-10000].lv);
-	// �S���ɒʒm
-	for(i=0;i<g->max_member;i++)
-		if((sd=g->member[i].sd)!=NULL)
-			clif_guild_skillinfo(sd);
-	return 0;
-}
-
-// �M���h����������
-int guild_get_alliance_count(struct guild *g,int flag)
-{
-	int i,c;
-
-	nullpo_retr(0, g);
-
-	for(i=c=0;i<MAX_GUILDALLIANCE;i++){
-		if(	g->alliance[i].guild_id>0 &&
-			g->alliance[i].opposition==flag )
-			c++;
-	}
-	return c;
-}
-// �M���h�����v��
-int guild_reqalliance(struct map_session_data *sd,int account_id)
-{
-	struct map_session_data *tsd= map_id2sd(account_id);
-	struct guild *g[2];
-	int i;
-
-	if(agit_flag)	{	// Disable alliance creation during woe [Valaris]
-		clif_displaymessage(sd->fd,"Alliances cannot be made during Guild Wars!");
-		return 0;
-	}	// end addition [Valaris]
-
-
-	nullpo_retr(0, sd);
-
-	if(tsd==NULL || tsd->status.guild_id<=0)
-		return 0;
-
-	g[0]=guild_search(sd->status.guild_id);
-	g[1]=guild_search(tsd->status.guild_id);
-
-	if(g[0]==NULL || g[1]==NULL)
-		return 0;
-
-	if( guild_get_alliance_count(g[0],0)>3 )	// �������m�F
-		clif_guild_allianceack(sd,4);
-	if( guild_get_alliance_count(g[1],0)>3 )
-		clif_guild_allianceack(sd,3);
-
-	if( tsd->guild_alliance>0 ){	// ���肪�����v����Ԃ��ǂ����m�F
-		clif_guild_allianceack(sd,1);
-		return 0;
-	}
-
-	for(i=0;i<MAX_GUILDALLIANCE;i++){	// ���łɓ�����Ԃ��m�F
-		if(	g[0]->alliance[i].guild_id==tsd->status.guild_id &&
-			g[0]->alliance[i].opposition==0){
-			clif_guild_allianceack(sd,0);
-			return 0;
-		}
-	}
-
-	tsd->guild_alliance=sd->status.guild_id;
-	tsd->guild_alliance_account=sd->status.account_id;
-
-	clif_guild_reqalliance(tsd,sd->status.account_id,g[0]->name);
-	return 0;
-}
-// �M���h���U�ւ̕ԓ�
-int guild_reply_reqalliance(struct map_session_data *sd,int account_id,int flag)
-{
-	struct map_session_data *tsd;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, tsd= map_id2sd( account_id ));
-
-	if(sd->guild_alliance!=tsd->status.guild_id)	// ���U�ƃM���hID���Ⴄ
-		return 0;
-
-	if(flag==1){	// ����
-		int i;
-
-		struct guild *g;	// �������Ċm�F
-		if( (g=guild_search(sd->status.guild_id))==NULL ||
-			guild_get_alliance_count(g,0)>3 ){
-			clif_guild_allianceack(sd,4);
-			clif_guild_allianceack(tsd,3);
-			return 0;
-		}
-		if( (g=guild_search(tsd->status.guild_id))==NULL ||
-			guild_get_alliance_count(g,0)>3 ){
-			clif_guild_allianceack(sd,3);
-			clif_guild_allianceack(tsd,4);
-			return 0;
-		}
-
-		// �G�Ί֌W�Ȃ�G�΂��~�߂�
-		if((g=guild_search(sd->status.guild_id)) == NULL)
-			return 0;
-		for(i=0;i<MAX_GUILDALLIANCE;i++){
-			if(	g->alliance[i].guild_id==tsd->status.guild_id &&
-				g->alliance[i].opposition==1)
-				intif_guild_alliance( sd->status.guild_id,tsd->status.guild_id,
-					sd->status.account_id,tsd->status.account_id,9 );
-		}
-		if((g=guild_search(tsd->status.guild_id)) == NULL)
-			return 0;
-		for(i=0;i<MAX_GUILDALLIANCE;i++){
-			if(	g->alliance[i].guild_id==sd->status.guild_id &&
-				g->alliance[i].opposition==1)
-				intif_guild_alliance( tsd->status.guild_id,sd->status.guild_id,
-					tsd->status.account_id,sd->status.account_id,9 );
-		}
-
-		// inter�I�֓����v��
-		intif_guild_alliance( sd->status.guild_id,tsd->status.guild_id,
-			sd->status.account_id,tsd->status.account_id,0 );
-		return 0;
-	}else{		// ����
-		sd->guild_alliance=0;
-		sd->guild_alliance_account=0;
-		if(tsd!=NULL)
-			clif_guild_allianceack(tsd,3);
-	}
-	return 0;
-}
-// �M���h�֌W����
-int guild_delalliance(struct map_session_data *sd,int guild_id,int flag)
-{
-	if(agit_flag)	{	// Disable alliance breaking during woe [Valaris]
-		clif_displaymessage(sd->fd,"Alliances cannot be broken during Guild Wars!");
-		return 0;
-	}	// end addition [Valaris]
-
-	nullpo_retr(0, sd);
-
-	intif_guild_alliance( sd->status.guild_id,guild_id,
-		sd->status.account_id,0,flag|8 );
-	return 0;
-}
-// �M���h�G��
-int guild_opposition(struct map_session_data *sd,int char_id)
-{
-	struct map_session_data *tsd=map_id2sd(char_id);
-	struct guild *g;
-	int i;
-
-	nullpo_retr(0, sd);
-
-	g=guild_search(sd->status.guild_id);
-	if(g==NULL || tsd==NULL)
-		return 0;
-
-	if( guild_get_alliance_count(g,1)>3 )	// �G�ΐ��m�F
-		clif_guild_oppositionack(sd,1);
-
-	for(i=0;i<MAX_GUILDALLIANCE;i++){	// ���łɊ֌W�������Ă��邩�m�F
-		if(g->alliance[i].guild_id==tsd->status.guild_id){
-			if(g->alliance[i].opposition==1){	// ���łɓG��
-				clif_guild_oppositionack(sd,2);
-				return 0;
-			}else	// �����j��
-				intif_guild_alliance( sd->status.guild_id,tsd->status.guild_id,
-					sd->status.account_id,tsd->status.account_id,8 );
-		}
-	}
-
-	// inter�I�ɓG�Ηv��
-	intif_guild_alliance( sd->status.guild_id,tsd->status.guild_id,
-			sd->status.account_id,tsd->status.account_id,1 );
-	return 0;
-}
-// �M���h����/�G�Βʒm
-int guild_allianceack(int guild_id1,int guild_id2,int account_id1,int account_id2,
-	int flag,const char *name1,const char *name2)
-{
-	struct guild *g[2];
-	int guild_id[2]={guild_id1,guild_id2};
-	const char *guild_name[2]={name1,name2};
-	struct map_session_data *sd[2]={map_id2sd(account_id1),map_id2sd(account_id2)};
-	int j,i;
-
-	g[0]=guild_search(guild_id1);
-	g[1]=guild_search(guild_id2);
-
-	if(sd[0]!=NULL && (flag&0x0f)==0){
-		sd[0]->guild_alliance=0;
-		sd[0]->guild_alliance_account=0;
-	}
-
-	if(flag&0x70){	// ���s
-		for(i=0;i<2-(flag&1);i++)
-			if( sd[i]!=NULL )
-				clif_guild_allianceack(sd[i],((flag>>4)==i+1)?3:4);
-		return 0;
-	}
-//	if(battle_config.etc_log)
-//		printf("guild alliance_ack %d %d %d %d %d %s %s\n",guild_id1,guild_id2,account_id1,account_id2,flag,name1,name2);
-
-	if(!(flag&0x08)){	// �֌W�lj�
-		for(i=0;i<2-(flag&1);i++)
-			if(g[i]!=NULL)
-				for(j=0;j<MAX_GUILDALLIANCE;j++)
-					if(g[i]->alliance[j].guild_id==0){
-						g[i]->alliance[j].guild_id=guild_id[1-i];
-						memcpy(g[i]->alliance[j].name,guild_name[1-i],24);
-						g[i]->alliance[j].opposition=flag&1;
-						break;
-					}
-	}else{				// �֌W����
-		for(i=0;i<2-(flag&1);i++){
-			if(g[i]!=NULL)
-				for(j=0;j<MAX_GUILDALLIANCE;j++)
-					if(	g[i]->alliance[j].guild_id==guild_id[1-i] &&
-						g[i]->alliance[j].opposition==(flag&1)){
-						g[i]->alliance[j].guild_id=0;
-						break;
-					}
-			if( sd[i]!=NULL )	// �����ʒm
-				clif_guild_delalliance(sd[i],guild_id[1-i],(flag&1));
-		}
-	}
-
-	if((flag&0x0f)==0){			// �����ʒm
-		if( sd[1]!=NULL )
-			clif_guild_allianceack(sd[1],2);
-	}else if((flag&0x0f)==1){	// �G�Βʒm
-		if( sd[0]!=NULL )
-			clif_guild_oppositionack(sd[0],0);
-	}
-
-
-	for(i=0;i<2-(flag&1);i++){	// ����/�G�΃��X�g�̍đ��M
-		struct map_session_data *sd;
-		if(g[i]!=NULL)
-			for(j=0;j<g[i]->max_member;j++)
-				if((sd=g[i]->member[j].sd)!=NULL)
-					clif_guild_allianceinfo(sd);
-	}
-	return 0;
-}
-// �M���h���U�ʒm�p
-int guild_broken_sub(void *key,void *data,va_list ap)
-{
-	struct guild *g=(struct guild *)data;
-	int guild_id=va_arg(ap,int);
-	int i,j;
-	struct map_session_data *sd=NULL;
-
-	nullpo_retr(0, g);
-
-	for(i=0;i<MAX_GUILDALLIANCE;i++){	// �֌W��j��
-		if(g->alliance[i].guild_id==guild_id){
-			for(j=0;j<g->max_member;j++)
-				if( (sd=g->member[j].sd)!=NULL )
-					clif_guild_delalliance(sd,guild_id,g->alliance[i].opposition);
-			g->alliance[i].guild_id=0;
-		}
-	}
-	return 0;
-}
-// �M���h���U�ʒm
-int guild_broken(int guild_id,int flag)
-{
-	struct guild *g=guild_search(guild_id);
-	struct map_session_data *sd;
-	int i;
-	if(flag!=0 || g==NULL)
-		return 0;
-
-	for(i=0;i<g->max_member;i++){	// �M���h���U��ʒm
-		if((sd=g->member[i].sd)!=NULL){
-			if(sd->state.storage_flag)
-				storage_guild_storage_quit(sd,1);
-			sd->status.guild_id=0;
-			sd->guild_sended=0;
-			clif_guild_broken(g->member[i].sd,0);
-		}
-	}
-
-	numdb_foreach(guild_db,guild_broken_sub,guild_id);
-	numdb_erase(guild_db,guild_id);
-	guild_storage_delete(guild_id);
-	free(g);
-	return 0;
-}
-
-// �M���h���U
-int guild_break(struct map_session_data *sd,char *name)
-{
-	struct guild *g;
-	int i;
-
-	nullpo_retr(0, sd);
-
-	if( (g=guild_search(sd->status.guild_id))==NULL )
-		return 0;
-	if(strcmp(g->name,name)!=0)
-		return 0;
-	if(strcmp(sd->status.name,g->master)!=0)
-		return 0;
-	for(i=0;i<g->max_member;i++){
-		if(	g->member[i].account_id>0 && (
-			g->member[i].account_id!=sd->status.account_id ||
-			g->member[i].char_id!=sd->status.char_id ))
-			break;
-	}
-	if(i<g->max_member){
-		clif_guild_broken(sd,2);
-		return 0;
-	}
-
-	intif_guild_break(g->guild_id);
-	return 0;
-}
-
-// �M���h��f�[�^�v��
-int guild_castledataload(int castle_id,int index)
-{
-	return intif_guild_castle_dataload(castle_id,index);
-}
-// �M���h���񏊓����C�x���g�lj�
-int guild_addcastleinfoevent(int castle_id,int index,const char *name)
-{
-	struct eventlist *ev;
-	int code=castle_id|(index<<16);
-
-	if( name==NULL || *name==0 )
-		return 0;
-
-	ev=(struct eventlist *)aCalloc(1,sizeof(struct eventlist));
-	memcpy(ev->name,name,sizeof(ev->name));
-	ev->next=numdb_search(guild_castleinfoevent_db,code);
-	numdb_insert(guild_castleinfoevent_db,code,ev);
-	return 0;
-}
-
-// �M���h��f�[�^�v���ԐM
-int guild_castledataloadack(int castle_id,int index,int value)
-{
-	struct guild_castle *gc=guild_castle_search(castle_id);
-	int code=castle_id|(index<<16);
-	struct eventlist *ev,*ev2;
-
-	if(gc==NULL){
-		return 0;
-	}
-	switch(index){
-	case 1: gc->guild_id = value; break;
-	case 2: gc->economy = value; break;
-	case 3: gc->defense = value; break;
-	case 4: gc->triggerE = value; break;
-	case 5: gc->triggerD = value; break;
-	case 6: gc->nextTime = value; break;
-	case 7: gc->payTime = value; break;
-	case 8: gc->createTime = value; break;
-	case 9: gc->visibleC = value; break;
-	case 10: gc->visibleG0 = value; break;
-	case 11: gc->visibleG1 = value; break;
-	case 12: gc->visibleG2 = value; break;
-	case 13: gc->visibleG3 = value; break;
-	case 14: gc->visibleG4 = value; break;
-	case 15: gc->visibleG5 = value; break;
-	case 16: gc->visibleG6 = value; break;
-	case 17: gc->visibleG7 = value; break;
-	case 18: gc->Ghp0 = value; break;	// guardian HP [Valaris]
-	case 19: gc->Ghp1 = value; break;
-	case 20: gc->Ghp2 = value; break;
-	case 21: gc->Ghp3 = value; break;
-	case 22: gc->Ghp4 = value; break;
-	case 23: gc->Ghp5 = value; break;
-	case 24: gc->Ghp6 = value; break;
-	case 25: gc->Ghp7 = value; break;	// end additions [Valaris]
-	default:
-		printf("guild_castledataloadack ERROR!! (Not found index=%d)\n", index);
-		return 0;
-	}
-	if( (ev=numdb_search(guild_castleinfoevent_db,code))!=NULL ){
-		numdb_erase(guild_castleinfoevent_db,code);
-		for(;ev;ev2=ev->next,free(ev),ev=ev2){
-			npc_event_do(ev->name);
-		}
-	}
-	return 1;
-}
-// �M���h��f�[�^�ύX�v��
-int guild_castledatasave(int castle_id,int index,int value)
-{
-	return intif_guild_castle_datasave(castle_id,index,value);
-}
-
-// �M���h��f�[�^�ύX�ʒm
-int guild_castledatasaveack(int castle_id,int index,int value)
-{
-	struct guild_castle *gc=guild_castle_search(castle_id);
-	if(gc==NULL){
-		return 0;
-	}
-	switch(index){
-	case 1: gc->guild_id = value; break;
-	case 2: gc->economy = value; break;
-	case 3: gc->defense = value; break;
-	case 4: gc->triggerE = value; break;
-	case 5: gc->triggerD = value; break;
-	case 6: gc->nextTime = value; break;
-	case 7: gc->payTime = value; break;
-	case 8: gc->createTime = value; break;
-	case 9: gc->visibleC = value; break;
-	case 10: gc->visibleG0 = value; break;
-	case 11: gc->visibleG1 = value; break;
-	case 12: gc->visibleG2 = value; break;
-	case 13: gc->visibleG3 = value; break;
-	case 14: gc->visibleG4 = value; break;
-	case 15: gc->visibleG5 = value; break;
-	case 16: gc->visibleG6 = value; break;
-	case 17: gc->visibleG7 = value; break;
-	case 18: gc->Ghp0 = value; break;	// guardian HP [Valaris]
-	case 19: gc->Ghp1 = value; break;
-	case 20: gc->Ghp2 = value; break;
-	case 21: gc->Ghp3 = value; break;
-	case 22: gc->Ghp4 = value; break;
-	case 23: gc->Ghp5 = value; break;
-	case 24: gc->Ghp6 = value; break;
-	case 25: gc->Ghp7 = value; break;	// end additions [Valaris]
-	default:
-		printf("guild_castledatasaveack ERROR!! (Not found index=%d)\n", index);
-		return 0;
-	}
-	return 1;
-}
-
-// �M���h�f�[�^�ꊇ��M�i���������j
-int guild_castlealldataload(int len,struct guild_castle *gc)
-{
-	int i;
-	int n = (len-4) / sizeof(struct guild_castle), ev = -1;
-
-	nullpo_retr(0, gc);
-
-	// �C�x���g�t���ŗv������f�[�^�ʒu��T��(�Ō�̐苒�f�[�^)
-	for(i = 0; i < n; i++) {
-		if ((gc + i)->guild_id)
-			ev = i;
-	}
-
-	// ��f�[�^�i�[�ƃM���h���v��
-	for(i = 0; i < n; i++, gc++) {
-		struct guild_castle *c = guild_castle_search(gc->castle_id);
-		if (!c) {
-			printf("guild_castlealldataload ??\n");
-			continue;
-		}
-		memcpy(&c->guild_id,&gc->guild_id,
-			sizeof(struct guild_castle) - ((int)&c->guild_id - (int)c) );
-		if( c->guild_id ){
-			if(i!=ev)
-				guild_request_info(c->guild_id);
-			else
-				guild_npc_request_info(c->guild_id, "::OnAgitInit");
-		}
-	}
-	if (ev == -1)
-		npc_event_doall("OnAgitInit");
-	return 0;
-}
-
-int guild_agit_start(void)
-{	// Run All NPC_Event[OnAgitStart]
-	int c = npc_event_doall("OnAgitStart");
-	printf("NPC_Event:[OnAgitStart] Run (%d) Events by @AgitStart.\n",c);
-	return 0;
-}
-
-int guild_agit_end(void)
-{	// Run All NPC_Event[OnAgitEnd]
-	int c = npc_event_doall("OnAgitEnd");
-	printf("NPC_Event:[OnAgitEnd] Run (%d) Events by @AgitEnd.\n",c);
-	return 0;
-}
-
-int guild_gvg_eliminate_timer(int tid,unsigned int tick,int id,int data)
-{	// Run One NPC_Event[OnAgitEliminate]
-	size_t len = strlen((const char*)data);
-	char *evname=(char*)aCalloc(len + 4,sizeof(char));
-	int c=0;
-
-	if(!agit_flag) return 0;	// Agit already End
-	memcpy(evname,(const char *)data,len - 5);
-	strcpy(evname + len - 5,"Eliminate");
-	c = npc_event_do(evname);
-	printf("NPC_Event:[%s] Run (%d) Events.\n",evname,c);
-	return 0;
-}
-
-int guild_agit_break(struct mob_data *md)
-{	// Run One NPC_Event[OnAgitBreak]
-	char *evname;
-
-	nullpo_retr(0, md);
-
-	evname=(char *)aCalloc(strlen(md->npc_event) + 1, sizeof(char));
-
-	strcpy(evname,md->npc_event);
-// Now By User to Run [OnAgitBreak] NPC Event...
-// It's a little impossible to null point with player disconnect in this!
-// But Script will be stop, so nothing...
-// Maybe will be changed in the futher..
-//      int c = npc_event_do(evname);
-	if(!agit_flag) return 0;	// Agit already End
-	add_timer(gettick()+battle_config.gvg_eliminate_time,guild_gvg_eliminate_timer,md->bl.m,(int)evname);
-	return 0;
-}
-
-// [MouseJstr]
-//   How many castles does this guild have?
-int guild_checkcastles(struct guild *g) {
-	int i,nb_cas=0, id,cas_id=0;
-	struct guild_castle *gc;
-		id=g->guild_id;
-	for(i=0;i<MAX_GUILDCASTLE;i++){
-		gc=guild_castle_search(i);
-		cas_id=gc->guild_id;
-		if(g->guild_id==cas_id) 
-			nb_cas=nb_cas+1;
-		} //end for
-	return nb_cas;
-}
-
-// [MouseJstr]
-//    is this guild allied with this castle?
-int guild_isallied(struct guild *g, struct guild_castle *gc)
-{
-	int i;
-
-	nullpo_retr(0, g);
-
-	if(g->guild_id == gc->guild_id)
-		return 1;
-
-	if (gc->guild_id == 0)
-		return 0;
-
-
-	for(i=0;i<MAX_GUILDALLIANCE;i++)
-		if(g->alliance[i].guild_id == gc->guild_id) {
-			if(g->alliance[i].opposition == 0)
-				return 1;
-			else
-				return 0;
-		}
-
-	return 0;
-}
-  
-static int guild_db_final(void *key,void *data,va_list ap)
-{
-	struct guild *g=data;
-
-	free(g);
-
-	return 0;
-}
-static int castle_db_final(void *key,void *data,va_list ap)
-{
-	struct guild_castle *gc=data;
-
-	free(gc);
-
-	return 0;
-}
-static int guild_expcache_db_final(void *key,void *data,va_list ap)
-{
-	struct guild_expcache *c=data;
-
-	free(c);
-
-	return 0;
-}
-static int guild_infoevent_db_final(void *key,void *data,va_list ap)
-{
-	struct eventlist *ev=data;
-
-	free(ev);
-
-	return 0;
-}
-void do_final_guild(void)
-{
-	if(guild_db)
-		numdb_final(guild_db,guild_db_final);
-	if(castle_db)
-		numdb_final(castle_db,castle_db_final);
-	if(guild_expcache_db)
-		numdb_final(guild_expcache_db,guild_expcache_db_final);
-	if(guild_infoevent_db)
-		numdb_final(guild_infoevent_db,guild_infoevent_db_final);
-	if(guild_castleinfoevent_db)
-		numdb_final(guild_castleinfoevent_db,guild_infoevent_db_final);
-}
diff --git a/misc/src/map/guild.h b/misc/src/map/guild.h
deleted file mode 100644
index 53e91f0..0000000
--- a/misc/src/map/guild.h
+++ /dev/null
@@ -1,87 +0,0 @@
-// $Id: guild.h,v 1.4 2004/09/25 05:32:18 MouseJstr Exp $
-#ifndef _GUILD_H_
-#define _GUILD_H_
-
-struct map_session_data;
-struct mob_data;
-struct guild;
-struct guild_member;
-struct guild_position;
-struct guild_castle;
-
-int guild_skill_get_inf(int id);
-int guild_skill_get_sp(int id,int lv);
-int guild_skill_get_range(int id);
-int guild_skill_get_max(int id);
-
-int guild_checkskill(struct guild *g,int id);
-int guild_checkcastles(struct guild *g); // [MouseJstr]
-int guild_isallied(struct guild *g, struct guild_castle *gc);
-
-void do_init_guild(void);
-struct guild *guild_search(int guild_id);
-struct guild *guild_searchname(char *str);
-struct guild_castle *guild_castle_search(int gcid);
-
-struct guild_castle *guild_mapname2gc(char *mapname);
-
-struct map_session_data *guild_getavailablesd(struct guild *g);
-int guild_getindex(struct guild *g,int account_id,int char_id);
-int guild_getposition(struct map_session_data *sd,struct guild *g);
-int guild_payexp(struct map_session_data *sd,int exp);
-
-int guild_create(struct map_session_data *sd,char *name);
-int guild_created(int account_id,int guild_id);
-int guild_request_info(int guild_id);
-int guild_recv_noinfo(int guild_id);
-int guild_recv_info(struct guild *sg);
-int guild_npc_request_info(int guild_id,const char *ev);
-int guild_invite(struct map_session_data *sd,int account_id);
-int guild_reply_invite(struct map_session_data *sd,int guild_id,int flag);
-int guild_member_added(int guild_id,int account_id,int char_id,int flag);
-int guild_leave(struct map_session_data *sd,int guild_id,
-	int account_id,int char_id,const char *mes);
-int guild_member_leaved(int guild_id,int account_id,int char_id,int flag,
-	const char *name,const char *mes);
-int guild_explusion(struct map_session_data *sd,int guild_id,
-	int account_id,int char_id,const char *mes);
-int guild_skillup(struct map_session_data *sd,int skill_num);
-int guild_reqalliance(struct map_session_data *sd,int account_id);
-int guild_reply_reqalliance(struct map_session_data *sd,int account_id,int flag);
-int guild_alliance(int guild_id1,int guild_id2,int account_id1,int account_id2);
-int guild_allianceack(int guild_id1,int guild_id2,int account_id1,int account_id2,
-	int flag,const char *name1,const char *name2);
-int guild_delalliance(struct map_session_data *sd,int guild_id,int flag);
-int guild_opposition(struct map_session_data *sd,int char_id);
-
-int guild_send_memberinfoshort(struct map_session_data *sd,int online);
-int guild_recv_memberinfoshort(int guild_id,int account_id,int char_id,int online,int lv,int class);
-int guild_change_memberposition(int guild_id,int account_id,int char_id,int idx);
-int guild_memberposition_changed(struct guild *g,int idx,int pos);
-int guild_change_position(struct map_session_data *sd,int idx,
-	int mode,int exp_mode,const char *name);
-int guild_position_changed(int guild_id,int idx,struct guild_position *p);
-int guild_change_notice(struct map_session_data *sd,int guild_id,const char *mes1,const char *mes2);
-int guild_notice_changed(int guild_id,const char *mes1,const char *mes2);
-int guild_change_emblem(struct map_session_data *sd,int len,const char *data);
-int guild_emblem_changed(int len,int guild_id,int emblem_id,const char *data);
-int guild_send_message(struct map_session_data *sd,char *mes,int len);
-int guild_recv_message(int guild_id,int account_id,char *mes,int len);
-int guild_skillupack(int guild_id,int skill_num,int account_id);
-int guild_break(struct map_session_data *sd,char *name);
-int guild_broken(int guild_id,int flag);
-
-int guild_addcastleinfoevent(int castle_id,int index,const char *name);
-int guild_castledataload(int castle_id,int index);
-int guild_castledataloadack(int castle_id,int index,int value);
-int guild_castledatasave(int castle_id,int index,int value);
-int guild_castledatasaveack(int castle_id,int index,int value);
-int guild_castlealldataload(int len,struct guild_castle *gc);
-
-int guild_agit_start(void);
-int guild_agit_end(void);
-int guild_agit_break(struct mob_data *md);
-
-void do_final_guild(void);
-
-#endif
diff --git a/misc/src/map/intif.c b/misc/src/map/intif.c
deleted file mode 100644
index ace0187..0000000
--- a/misc/src/map/intif.c
+++ /dev/null
@@ -1,1042 +0,0 @@
-// $Id: intif.c,v 1.2 2004/09/25 05:32:18 MouseJstr Exp $
-#include <sys/types.h>
-#ifdef LCCWIN32
-#include <winsock.h>
-#else
-#include <sys/socket.h>
-#include <netinet/in.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#ifndef LCCWIN32
-#include <sys/time.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-#include <arpa/inet.h>
-#endif
-#include <signal.h>
-#include <fcntl.h>
-#include <string.h>
-
-#include "socket.h"
-#include "timer.h"
-#include "map.h"
-#include "battle.h"
-#include "chrif.h"
-#include "clif.h"
-#include "pc.h"
-#include "intif.h"
-#include "storage.h"
-#include "party.h"
-#include "guild.h"
-#include "pet.h"
-#include "nullpo.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-static const int packet_len_table[]={
-	-1,-1,27,-1, -1, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	-1, 7, 0, 0,  0, 0, 0, 0, -1,11, 0, 0,  0, 0,  0, 0,
-	35,-1,11,15, 34,29, 7,-1,  0, 0, 0, 0,  0, 0,  0, 0,
-	10,-1,15, 0, 79,19, 7,-1,  0,-1,-1,-1, 14,67,186,-1,
-	 9, 9,-1, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	 0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	 0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	 0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-	11,-1, 7, 3,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0,  0, 0,
-};
-
-extern int char_fd;		// inter server��fd��char_fd���g��
-#define inter_fd (char_fd)	// �G�C���A�X
-
-//-----------------------------------------------------------------
-// inter server�ւ̑��M
-
-// pet
-int intif_create_pet(int account_id,int char_id,short pet_class,short pet_lv,short pet_egg_id,
-	short pet_equip,short intimate,short hungry,char rename_flag,char incuvate,char *pet_name)
-{
-	WFIFOW(inter_fd,0) = 0x3080;
-	WFIFOL(inter_fd,2) = account_id;
-	WFIFOL(inter_fd,6) = char_id;
-	WFIFOW(inter_fd,10) = pet_class;
-	WFIFOW(inter_fd,12) = pet_lv;
-	WFIFOW(inter_fd,14) = pet_egg_id;
-	WFIFOW(inter_fd,16) = pet_equip;
-	WFIFOW(inter_fd,18) = intimate;
-	WFIFOW(inter_fd,20) = hungry;
-	WFIFOB(inter_fd,22) = rename_flag;
-	WFIFOB(inter_fd,23) = incuvate;
-	memcpy(WFIFOP(inter_fd,24),pet_name,24);
-	WFIFOSET(inter_fd,48);
-
-	return 0;
-}
-
-int intif_request_petdata(int account_id,int char_id,int pet_id)
-{
-	WFIFOW(inter_fd,0) = 0x3081;
-	WFIFOL(inter_fd,2) = account_id;
-	WFIFOL(inter_fd,6) = char_id;
-	WFIFOL(inter_fd,10) = pet_id;
-	WFIFOSET(inter_fd,14);
-
-	return 0;
-}
-
-int intif_save_petdata(int account_id,struct s_pet *p)
-{
-	WFIFOW(inter_fd,0) = 0x3082;
-	WFIFOW(inter_fd,2) = sizeof(struct s_pet) + 8;
-	WFIFOL(inter_fd,4) = account_id;
-	memcpy(WFIFOP(inter_fd,8),p,sizeof(struct s_pet));
-	WFIFOSET(inter_fd,WFIFOW(inter_fd,2));
-
-	return 0;
-}
-
-int intif_delete_petdata(int pet_id)
-{
-	WFIFOW(inter_fd,0) = 0x3083;
-	WFIFOL(inter_fd,2) = pet_id;
-	WFIFOSET(inter_fd,6);
-
-	return 0;
-}
-
-// GM���b�Z�[�W�𑗐M
-int intif_GMmessage(char* mes,int len,int flag)
-{
-	int lp = (flag&0x10) ? 8 : 4;
-	WFIFOW(inter_fd,0) = 0x3000;
-	WFIFOW(inter_fd,2) = lp + len;
-	WFIFOL(inter_fd,4) = 0x65756c62;
-	memcpy(WFIFOP(inter_fd,lp), mes, len);
-	WFIFOSET(inter_fd, WFIFOW(inter_fd,2));
-
-	return 0;
-}
-
-// The transmission of Wisp/Page to inter-server (player not found on this server)
-int intif_wis_message(struct map_session_data *sd, char *nick, char *mes, int mes_len) {
-	nullpo_retr(0, sd);
-
-	WFIFOW(inter_fd,0) = 0x3001;
-	WFIFOW(inter_fd,2) = mes_len + 52;
-	memcpy(WFIFOP(inter_fd,4), sd->status.name, 24);
-	memcpy(WFIFOP(inter_fd,28), nick, 24);
-	memcpy(WFIFOP(inter_fd,52), mes, mes_len);
-	WFIFOSET(inter_fd, WFIFOW(inter_fd,2));
-
-	if (battle_config.etc_log)
-		printf("intif_wis_message from %s to %s (message: '%s')\n", sd->status.name, nick, mes);
-
-	return 0;
-}
-
-// The reply of Wisp/page
-int intif_wis_replay(int id, int flag) {
-	WFIFOW(inter_fd,0) = 0x3002;
-	WFIFOL(inter_fd,2) = id;
-	WFIFOB(inter_fd,6) = flag; // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-	WFIFOSET(inter_fd,7);
-
-	if (battle_config.etc_log)
-		printf("intif_wis_replay: id: %d, flag:%d\n", id, flag);
-
-	return 0;
-}
-
-// The transmission of GM only Wisp/Page from server to inter-server
-int intif_wis_message_to_gm(char *Wisp_name, int min_gm_level, char *mes, int mes_len) {
-	WFIFOW(inter_fd,0) = 0x3003;
-	WFIFOW(inter_fd,2) = mes_len + 30;
-	memcpy(WFIFOP(inter_fd,4), Wisp_name, 24);
-	WFIFOW(inter_fd,28) = (short)min_gm_level;
-	memcpy(WFIFOP(inter_fd,30), mes, mes_len);
-	WFIFOSET(inter_fd, WFIFOW(inter_fd,2));
-
-	if (battle_config.etc_log)
-		printf("intif_wis_message_to_gm: from: '%s', min level: %d, message: '%s'.\n", Wisp_name, min_gm_level, mes);
-
-	return 0;
-}
-
-// �A�J�E���g�ϐ����M
-int intif_saveaccountreg(struct map_session_data *sd) {
-	int j,p;
-
-	nullpo_retr(0, sd);
-
-	WFIFOW(inter_fd,0) = 0x3004;
-	WFIFOL(inter_fd,4) = sd->bl.id;
-	for(j=0,p=8;j<sd->status.account_reg_num;j++,p+=36){
-		memcpy(WFIFOP(inter_fd,p),sd->status.account_reg[j].str,32);
-		WFIFOL(inter_fd,p+32)=sd->status.account_reg[j].value;
-	}
-	WFIFOW(inter_fd,2)=p;
-	WFIFOSET(inter_fd,p);
-	return 0;
-}
-// �A�J�E���g�ϐ��v��
-int intif_request_accountreg(struct map_session_data *sd)
-{
-	nullpo_retr(0, sd);
-
-	WFIFOW(inter_fd,0) = 0x3005;
-	WFIFOL(inter_fd,2) = sd->bl.id;
-	WFIFOSET(inter_fd,6);
-	return 0;
-}
-
-// �q�Ƀf�[�^�v��
-int intif_request_storage(int account_id)
-{
-	WFIFOW(inter_fd,0) = 0x3010;
-	WFIFOL(inter_fd,2) = account_id;
-	WFIFOSET(inter_fd,6);
-	return 0;
-}
-// �q�Ƀf�[�^���M
-int intif_send_storage(struct storage *stor)
-{
-	nullpo_retr(0, stor);
-	WFIFOW(inter_fd,0) = 0x3011;
-	WFIFOW(inter_fd,2) = sizeof(struct storage)+8;
-	WFIFOL(inter_fd,4) = stor->account_id;
-	memcpy( WFIFOP(inter_fd,8),stor, sizeof(struct storage) );
-	WFIFOSET(inter_fd,WFIFOW(inter_fd,2));
-	return 0;
-}
-
-int intif_request_guild_storage(int account_id,int guild_id)
-{
-	WFIFOW(inter_fd,0) = 0x3018;
-	WFIFOL(inter_fd,2) = account_id;
-	WFIFOL(inter_fd,6) = guild_id;
-	WFIFOSET(inter_fd,10);
-	return 0;
-}
-int intif_send_guild_storage(int account_id,struct guild_storage *gstor)
-{
-	WFIFOW(inter_fd,0) = 0x3019;
-	WFIFOW(inter_fd,2) = sizeof(struct guild_storage)+12;
-	WFIFOL(inter_fd,4) = account_id;
-	WFIFOL(inter_fd,8) = gstor->guild_id;
-	memcpy( WFIFOP(inter_fd,12),gstor, sizeof(struct guild_storage) );
-	WFIFOSET(inter_fd,WFIFOW(inter_fd,2));
-	return 0;
-}
-
-// �p�[�e�B�쐬�v��
-int intif_create_party(struct map_session_data *sd,char *name)
-{
-	nullpo_retr(0, sd);
-
-	WFIFOW(inter_fd,0) = 0x3020;
-	WFIFOL(inter_fd,2) = sd->status.account_id;
-	memcpy(WFIFOP(inter_fd, 6),name,24);
-	memcpy(WFIFOP(inter_fd,30),sd->status.name,24);
-	memcpy(WFIFOP(inter_fd,54),map[sd->bl.m].name,16);
-	WFIFOW(inter_fd,70)= sd->status.base_level;
-	WFIFOSET(inter_fd,72);
-//	if(battle_config.etc_log)
-//		printf("intif: create party\n");
-	return 0;
-}
-// �p�[�e�B���v��
-int intif_request_partyinfo(int party_id)
-{
-	WFIFOW(inter_fd,0) = 0x3021;
-	WFIFOL(inter_fd,2) = party_id;
-	WFIFOSET(inter_fd,6);
-//	if(battle_config.etc_log)
-//		printf("intif: request party info\n");
-	return 0;
-}
-// �p�[�e�B�lj��v��
-int intif_party_addmember(int party_id,int account_id)
-{
-	struct map_session_data *sd;
-	sd=map_id2sd(account_id);
-//	if(battle_config.etc_log)
-//		printf("intif: party add member %d %d\n",party_id,account_id);
-	if(sd!=NULL){
-		WFIFOW(inter_fd,0)=0x3022;
-		WFIFOL(inter_fd,2)=party_id;
-		WFIFOL(inter_fd,6)=account_id;
-		memcpy(WFIFOP(inter_fd,10),sd->status.name,24);
-		memcpy(WFIFOP(inter_fd,34),map[sd->bl.m].name,16);
-		WFIFOW(inter_fd,50)=sd->status.base_level;
-		WFIFOSET(inter_fd,52);
-	}
-	return 0;
-}
-// �p�[�e�B�ݒ�ύX
-int intif_party_changeoption(int party_id,int account_id,int exp,int item)
-{
-	WFIFOW(inter_fd,0)=0x3023;
-	WFIFOL(inter_fd,2)=party_id;
-	WFIFOL(inter_fd,6)=account_id;
-	WFIFOW(inter_fd,10)=exp;
-	WFIFOW(inter_fd,12)=item;
-	WFIFOSET(inter_fd,14);
-	return 0;
-}
-// �p�[�e�B�E�ޗv��
-int intif_party_leave(int party_id,int account_id)
-{
-//	if(battle_config.etc_log)
-//		printf("intif: party leave %d %d\n",party_id,account_id);
-	WFIFOW(inter_fd,0)=0x3024;
-	WFIFOL(inter_fd,2)=party_id;
-	WFIFOL(inter_fd,6)=account_id;
-	WFIFOSET(inter_fd,10);
-	return 0;
-}
-// �p�[�e�B�ړ��v��
-int intif_party_changemap(struct map_session_data *sd,int online)
-{
-	if(sd!=NULL){
-	    WFIFOW(inter_fd,0)=0x3025;
-	    WFIFOL(inter_fd,2)=sd->status.party_id;
-	    WFIFOL(inter_fd,6)=sd->status.account_id;
-	    memcpy(WFIFOP(inter_fd,10),map[sd->bl.m].name,16);
-	    WFIFOB(inter_fd,26)=online;
-	    WFIFOW(inter_fd,27)=sd->status.base_level;
-	    WFIFOSET(inter_fd,29);
-	}
-//	if(battle_config.etc_log)
-//		printf("party: change map\n");
-	return 0;
-}
-// �p�[�e�B�[���U�v��
-int intif_break_party(int party_id)
-{
-	WFIFOW(inter_fd,0)=0x3026;
-	WFIFOL(inter_fd,2)=party_id;
-	WFIFOSET(inter_fd,6);
-	return 0;
-}
-// �p�[�e�B��b���M
-int intif_party_message(int party_id,int account_id,char *mes,int len)
-{
-//	if(battle_config.etc_log)
-//		printf("intif_party_message: %s\n",mes);
-	WFIFOW(inter_fd,0)=0x3027;
-	WFIFOW(inter_fd,2)=len+12;
-	WFIFOL(inter_fd,4)=party_id;
-	WFIFOL(inter_fd,8)=account_id;
-	memcpy(WFIFOP(inter_fd,12),mes,len);
-	WFIFOSET(inter_fd,len+12);
-	return 0;
-}
-// �p�[�e�B�����`�F�b�N�v��
-int intif_party_checkconflict(int party_id,int account_id,char *nick)
-{
-	WFIFOW(inter_fd,0)=0x3028;
-	WFIFOL(inter_fd,2)=party_id;
-	WFIFOL(inter_fd,6)=account_id;
-	memcpy(WFIFOP(inter_fd,10),nick,24);
-	WFIFOSET(inter_fd,34);
-	return 0;
-}
-
-// �M���h�쐬�v��
-int intif_guild_create(const char *name,const struct guild_member *master)
-{
-	nullpo_retr(0, master);
-
-	WFIFOW(inter_fd,0)=0x3030;
-	WFIFOW(inter_fd,2)=sizeof(struct guild_member)+32;
-	WFIFOL(inter_fd,4)=master->account_id;
-	memcpy(WFIFOP(inter_fd,8),name,24);
-	memcpy(WFIFOP(inter_fd,32),master,sizeof(struct guild_member));
-	WFIFOSET(inter_fd,WFIFOW(inter_fd,2));
-	return 0;
-}
-// �M���h���v��
-int intif_guild_request_info(int guild_id)
-{
-	WFIFOW(inter_fd,0) = 0x3031;
-	WFIFOL(inter_fd,2) = guild_id;
-	WFIFOSET(inter_fd,6);
-	return 0;
-}
-// �M���h�����o�lj��v��
-int intif_guild_addmember(int guild_id,struct guild_member *m)
-{
-	WFIFOW(inter_fd,0) = 0x3032;
-	WFIFOW(inter_fd,2) = sizeof(struct guild_member)+8;
-	WFIFOL(inter_fd,4) = guild_id;
-	memcpy(WFIFOP(inter_fd,8),m,sizeof(struct guild_member));
-	WFIFOSET(inter_fd,WFIFOW(inter_fd,2));
-	return 0;
-}
-// �M���h�����o�E��/�Ǖ��v��
-int intif_guild_leave(int guild_id,int account_id,int char_id,int flag,const char *mes)
-{
-	WFIFOW(inter_fd, 0) = 0x3034;
-	WFIFOL(inter_fd, 2) = guild_id;
-	WFIFOL(inter_fd, 6) = account_id;
-	WFIFOL(inter_fd,10) = char_id;
-	WFIFOB(inter_fd,14) = flag;
-	memcpy(WFIFOP(inter_fd,15),mes,40);
-	WFIFOSET(inter_fd,55);
-	return 0;
-}
-// �M���h�����o�̃I�����C����/Lv�X�V�v��
-int intif_guild_memberinfoshort(int guild_id,
-	int account_id,int char_id,int online,int lv,int class)
-{
-	WFIFOW(inter_fd, 0) = 0x3035;
-	WFIFOL(inter_fd, 2) = guild_id;
-	WFIFOL(inter_fd, 6) = account_id;
-	WFIFOL(inter_fd,10) = char_id;
-	WFIFOB(inter_fd,14) = online;
-	WFIFOW(inter_fd,15) = lv;
-	WFIFOW(inter_fd,17) = class;
-	WFIFOSET(inter_fd,19);
-	return 0;
-}
-// �M���h���U�ʒm
-int intif_guild_break(int guild_id)
-{
-	WFIFOW(inter_fd, 0) = 0x3036;
-	WFIFOL(inter_fd, 2) = guild_id;
-	WFIFOSET(inter_fd,6);
-	return 0;
-}
-// �M���h��b���M
-int intif_guild_message(int guild_id,int account_id,char *mes,int len)
-{
-	WFIFOW(inter_fd,0)=0x3037;
-	WFIFOW(inter_fd,2)=len+12;
-	WFIFOL(inter_fd,4)=guild_id;
-	WFIFOL(inter_fd,8)=account_id;
-	memcpy(WFIFOP(inter_fd,12),mes,len);
-	WFIFOSET(inter_fd,len+12);
-	return 0;
-}
-// �M���h�����`�F�b�N�v��
-int intif_guild_checkconflict(int guild_id,int account_id,int char_id)
-{
-	WFIFOW(inter_fd, 0)=0x3038;
-	WFIFOL(inter_fd, 2)=guild_id;
-	WFIFOL(inter_fd, 6)=account_id;
-	WFIFOL(inter_fd,10)=char_id;
-	WFIFOSET(inter_fd,14);
-	return 0;
-}
-// �M���h��{���ύX�v��
-int intif_guild_change_basicinfo(int guild_id,int type,const void *data,int len)
-{
-	WFIFOW(inter_fd,0)=0x3039;
-	WFIFOW(inter_fd,2)=len+10;
-	WFIFOL(inter_fd,4)=guild_id;
-	WFIFOW(inter_fd,8)=type;
-	memcpy(WFIFOP(inter_fd,10),data,len);
-	WFIFOSET(inter_fd,len+10);
-	return 0;
-}
-// �M���h�����o���ύX�v��
-int intif_guild_change_memberinfo(int guild_id,int account_id,int char_id,
-	int type,const void *data,int len)
-{
-	WFIFOW(inter_fd, 0)=0x303a;
-	WFIFOW(inter_fd, 2)=len+18;
-	WFIFOL(inter_fd, 4)=guild_id;
-	WFIFOL(inter_fd, 8)=account_id;
-	WFIFOL(inter_fd,12)=char_id;
-	WFIFOW(inter_fd,16)=type;
-	memcpy(WFIFOP(inter_fd,18),data,len);
-	WFIFOSET(inter_fd,len+18);
-	return 0;
-}
-// �M���h��E�ύX�v��
-int intif_guild_position(int guild_id,int idx,struct guild_position *p)
-{
-	WFIFOW(inter_fd,0)=0x303b;
-	WFIFOW(inter_fd,2)=sizeof(struct guild_position)+12;
-	WFIFOL(inter_fd,4)=guild_id;
-	WFIFOL(inter_fd,8)=idx;
-	memcpy(WFIFOP(inter_fd,12),p,sizeof(struct guild_position));
-	WFIFOSET(inter_fd,WFIFOW(inter_fd,2));
-	return 0;
-}
-// �M���h�X�L���A�b�v�v��
-int intif_guild_skillup(int guild_id,int skill_num,int account_id)
-{
-	WFIFOW(inter_fd, 0)=0x303c;
-	WFIFOL(inter_fd, 2)=guild_id;
-	WFIFOL(inter_fd, 6)=skill_num;
-	WFIFOL(inter_fd,10)=account_id;
-	WFIFOSET(inter_fd,14);
-	return 0;
-}
-// �M���h����/�G�Ηv��
-int intif_guild_alliance(int guild_id1,int guild_id2,int account_id1,int account_id2,int flag)
-{
-	WFIFOW(inter_fd, 0)=0x303d;
-	WFIFOL(inter_fd, 2)=guild_id1;
-	WFIFOL(inter_fd, 6)=guild_id2;
-	WFIFOL(inter_fd,10)=account_id1;
-	WFIFOL(inter_fd,14)=account_id2;
-	WFIFOB(inter_fd,18)=flag;
-	WFIFOSET(inter_fd,19);
-	return 0;
-}
-// �M���h���m�ύX�v��
-int intif_guild_notice(int guild_id,const char *mes1,const char *mes2)
-{
-	WFIFOW(inter_fd,0)=0x303e;
-	WFIFOL(inter_fd,2)=guild_id;
-	memcpy(WFIFOP(inter_fd,6),mes1,60);
-	memcpy(WFIFOP(inter_fd,66),mes2,120);
-	WFIFOSET(inter_fd,186);
-	return 0;
-}
-// �M���h�G���u�����ύX�v��
-int intif_guild_emblem(int guild_id,int len,const char *data)
-{
-	if(guild_id<=0 || len<0 || len>2000)
-		return 0;
-	WFIFOW(inter_fd,0)=0x303f;
-	WFIFOW(inter_fd,2)=len+12;
-	WFIFOL(inter_fd,4)=guild_id;
-	WFIFOL(inter_fd,8)=0;
-	memcpy(WFIFOP(inter_fd,12),data,len);
-	WFIFOSET(inter_fd,len+12);
-	return 0;
-}
-//���݂̃M���h���̃M���h�𒲂ׂ�
-int intif_guild_castle_dataload(int castle_id,int index)
-{
-	WFIFOW(inter_fd,0)=0x3040;
-	WFIFOW(inter_fd,2)=castle_id;
-	WFIFOB(inter_fd,4)=index;
-	WFIFOSET(inter_fd,5);
-	return 0;
-}
-
-//�M���h���̃M���h�ύX�v��
-int intif_guild_castle_datasave(int castle_id,int index, int value)
-{
-	WFIFOW(inter_fd,0)=0x3041;
-	WFIFOW(inter_fd,2)=castle_id;
-	WFIFOB(inter_fd,4)=index;
-	WFIFOL(inter_fd,5)=value;
-	WFIFOSET(inter_fd,9);
-	return 0;
-}
-//-----------------------------------------------------------------
-// Packets receive from inter server
-
-// Wisp/Page reception
-int intif_parse_WisMessage(int fd) { // rewritten by [Yor]
-	struct map_session_data* sd;
-	int i;
-	char *wisp_source;
-
-	if (battle_config.etc_log)
-		printf("intif_parse_wismessage: id: %d, from: %s, to: %s, message: '%s'\n", RFIFOL(fd,4), RFIFOP(fd,8), RFIFOP(fd,32), RFIFOP(fd,56));
-	sd = map_nick2sd(RFIFOP(fd,32));	// Searching destination player
-	if (sd != NULL && strcmp(sd->status.name, RFIFOP(fd,32)) == 0) { // exactly same name (inter-server have checked the name before)
-		// if player ignore all
-		if (sd->ignoreAll == 1)
-			intif_wis_replay(RFIFOL(fd,4), 2);	// flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-		else {
-			wisp_source = RFIFOP(fd,8); // speed up
-			// if player ignore the source character
-			for(i = 0; i < (sizeof(sd->ignore) / sizeof(sd->ignore[0])); i++)
-				if (strcmp(sd->ignore[i].name, wisp_source) == 0) {
-					intif_wis_replay(RFIFOL(fd,4), 2);	// flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-					break;
-				}
-			// if source player not found in ignore list
-			if (i == (sizeof(sd->ignore) / sizeof(sd->ignore[0]))) {
-		clif_wis_message(sd->fd,RFIFOP(fd,8),RFIFOP(fd,56),RFIFOW(fd,2)-56);
-		intif_wis_replay(RFIFOL(fd,4), 0);	// flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-		}
-		}
-	} else
-		intif_wis_replay(RFIFOL(fd,4), 1);	// flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-	return 0;
-}
-
-// Wisp/page transmission result reception
-int intif_parse_WisEnd(int fd) {
-	struct map_session_data* sd;
-
-	if (battle_config.etc_log)
-		printf("intif_parse_wisend: player: %s, flag: %d\n", RFIFOP(fd,2), RFIFOB(fd,26)); // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-	sd = map_nick2sd(RFIFOP(fd,2));
-	if (sd != NULL)
-		clif_wis_end(sd->fd, RFIFOB(fd,26));
-
-	return 0;
-}
-
-// Received wisp message from map-server via char-server for ALL gm
-int mapif_parse_WisToGM(int fd) { // 0x3003/0x3803 <packet_len>.w <wispname>.24B <min_gm_level>.w <message>.?B
-	int i, min_gm_level;
-	struct map_session_data *pl_sd;
-	char Wisp_name[24];
-        char mbuf[255];
-	char *message = ((RFIFOW(fd,2) - 30) >= sizeof(mbuf)) ? (char *) malloc((RFIFOW(fd,2) - 30)) : mbuf;
-
-	min_gm_level = (int)RFIFOW(fd,28);
-	memcpy(Wisp_name, RFIFOP(fd,4), 24);
-	Wisp_name[23] = '\0';
-	memcpy(message, RFIFOP(fd,30), RFIFOW(fd,2) - 30);
-	message[sizeof(message) - 1] = '\0';
-	// information is sended to all online GM
-	for (i = 0; i < fd_max; i++)
-		if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth)
-			if (pc_isGM(pl_sd) >= min_gm_level)
-				clif_wis_message(i, Wisp_name, message, strlen(message) + 1);
-
-        if (message != mbuf)
-            free(message);
-
-	return 0;
-}
-
-// �A�J�E���g�ϐ��ʒm
-int intif_parse_AccountReg(int fd) {
-	int j,p;
-	struct map_session_data *sd;
-
-	if( (sd=map_id2sd(RFIFOL(fd,4)))==NULL )
-		return 1;
-	for(p=8,j=0;p<RFIFOW(fd,2) && j<ACCOUNT_REG_NUM;p+=36,j++){
-		memcpy(sd->status.account_reg[j].str,RFIFOP(fd,p),32);
-		sd->status.account_reg[j].value=RFIFOL(fd,p+32);
-	}
-	sd->status.account_reg_num = j;
-//	printf("intif: accountreg\n");
-
-	return 0;
-}
-
-// �q�Ƀf�[�^��M
-int intif_parse_LoadStorage(int fd) {
-	struct storage *stor;
-	struct map_session_data *sd;
-
-	stor = account2storage( RFIFOL(fd,4));
-	if (RFIFOW(fd,2)-8 != sizeof(struct storage)) {
-		if (battle_config.error_log)
-			printf("intif_parse_LoadStorage: data size error %d %d\n", RFIFOW(fd,2)-8, sizeof(struct storage));
-		return 1;
-	}
-	sd=map_id2sd( RFIFOL(fd,4) );
-	if(sd==NULL){
-		if(battle_config.error_log)
-			printf("intif_parse_LoadStorage: user not found %d\n",RFIFOL(fd,4));
-		return 1;
-	}
-	if(battle_config.save_log)
-		printf("intif_openstorage: %d\n",RFIFOL(fd,4) );
-	memcpy(stor,RFIFOP(fd,8),sizeof(struct storage));
-	stor->storage_status=1;
-	sd->state.storage_flag = 0;
-	clif_storageitemlist(sd,stor);
-	clif_storageequiplist(sd,stor);
-	clif_updatestorageamount(sd,stor);
-
-	return 0;
-}
-
-// �q�Ƀf�[�^���M����
-int intif_parse_SaveStorage(int fd)
-{
-	if(battle_config.save_log)
-		printf("intif_savestorage: done %d %d\n",RFIFOL(fd,2),RFIFOB(fd,6) );
-	return 0;
-}
-
-int intif_parse_LoadGuildStorage(int fd)
-{
-	struct guild_storage *gstor;
-	struct map_session_data *sd;
-	int guild_id = RFIFOL(fd,8);
-	if(guild_id > 0) {
-		gstor=guild2storage(guild_id);
-		if(!gstor) {
-			if(battle_config.error_log)
-				printf("intif_parse_LoadGuildStorage: error guild_id %d not exist\n",guild_id);
-			return 1;
-		}
-		if( RFIFOW(fd,2)-12 != sizeof(struct guild_storage) ){
-			gstor->storage_status = 0;
-			if(battle_config.error_log)
-				printf("intif_parse_LoadGuildStorage: data size error %d %d\n",RFIFOW(fd,2)-12 , sizeof(struct guild_storage));
-			return 1;
-		}
-		sd=map_id2sd( RFIFOL(fd,4) );
-		if(sd==NULL){
-			if(battle_config.error_log)
-				printf("intif_parse_LoadGuildStorage: user not found %d\n",RFIFOL(fd,4));
-			return 1;
-		}
-		if(battle_config.save_log)
-			printf("intif_open_guild_storage: %d\n",RFIFOL(fd,4) );
-		memcpy(gstor,RFIFOP(fd,12),sizeof(struct guild_storage));
-		gstor->storage_status = 1;
-		sd->state.storage_flag = 1;
-		clif_guildstorageitemlist(sd,gstor);
-		clif_guildstorageequiplist(sd,gstor);
-		clif_updateguildstorageamount(sd,gstor);
-	}
-	return 0;
-}
-int intif_parse_SaveGuildStorage(int fd)
-{
-	if(battle_config.save_log) {
-		printf("intif_save_guild_storage: done %d %d %d\n",RFIFOL(fd,2),RFIFOL(fd,6),RFIFOB(fd,10) );
-	}
-	return 0;
-}
-
-// �p�[�e�B�쐬�”�
-int intif_parse_PartyCreated(int fd)
-{
-	if(battle_config.etc_log)
-		printf("intif: party created\n");
-	party_created(RFIFOL(fd,2),RFIFOB(fd,6),RFIFOL(fd,7),RFIFOP(fd,11));
-	return 0;
-}
-// �p�[�e�B���
-int intif_parse_PartyInfo(int fd)
-{
-	if( RFIFOW(fd,2)==8){
-		if(battle_config.error_log)
-			printf("intif: party noinfo %d\n",RFIFOL(fd,4));
-		party_recv_noinfo(RFIFOL(fd,4));
-		return 0;
-	}
-
-//	printf("intif: party info %d\n",RFIFOL(fd,4));
-	if( RFIFOW(fd,2)!=sizeof(struct party)+4 ){
-		if(battle_config.error_log)
-			printf("intif: party info : data size error %d %d %d\n",RFIFOL(fd,4),RFIFOW(fd,2),sizeof(struct party)+4);
-	}
-	party_recv_info((struct party *)RFIFOP(fd,4));
-	return 0;
-}
-// �p�[�e�B�lj��ʒm
-int intif_parse_PartyMemberAdded(int fd)
-{
-	if(battle_config.etc_log)
-		printf("intif: party member added %d %d %d\n",RFIFOL(fd,2),RFIFOL(fd,6),RFIFOB(fd,10));
-	party_member_added(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOB(fd,10));
-	return 0;
-}
-// �p�[�e�B�ݒ�ύX�ʒm
-int intif_parse_PartyOptionChanged(int fd)
-{
-	party_optionchanged(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOW(fd,10),RFIFOW(fd,12),RFIFOB(fd,14));
-	return 0;
-}
-// �p�[�e�B�E�ޒʒm
-int intif_parse_PartyMemberLeaved(int fd)
-{
-	if(battle_config.etc_log)
-		printf("intif: party member leaved %d %d %s\n",RFIFOL(fd,2),RFIFOL(fd,6),RFIFOP(fd,10));
-	party_member_leaved(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOP(fd,10));
-	return 0;
-}
-// �p�[�e�B���U�ʒm
-int intif_parse_PartyBroken(int fd)
-{
-	party_broken(RFIFOL(fd,2));
-	return 0;
-}
-// �p�[�e�B�ړ��ʒm
-int intif_parse_PartyMove(int fd)
-{
-//	if(battle_config.etc_log)
-//		printf("intif: party move %d %d %s %d %d\n",RFIFOL(fd,2),RFIFOL(fd,6),RFIFOP(fd,10),RFIFOB(fd,26),RFIFOW(fd,27));
-	party_recv_movemap(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOP(fd,10),RFIFOB(fd,26),RFIFOW(fd,27));
-	return 0;
-}
-// �p�[�e�B���b�Z�[�W
-int intif_parse_PartyMessage(int fd)
-{
-//	if(battle_config.etc_log)
-//		printf("intif_parse_PartyMessage: %s\n",RFIFOP(fd,12));
-	party_recv_message(RFIFOL(fd,4),RFIFOL(fd,8),RFIFOP(fd,12),RFIFOW(fd,2)-12);
-	return 0;
-}
-
-// �M���h�쐬�”�
-int intif_parse_GuildCreated(int fd)
-{
-	guild_created(RFIFOL(fd,2),RFIFOL(fd,6));
-	return 0;
-}
-// �M���h���
-int intif_parse_GuildInfo(int fd)
-{
-	if( RFIFOW(fd,2)==8){
-		if(battle_config.error_log)
-			printf("intif: guild noinfo %d\n",RFIFOL(fd,4));
-		guild_recv_noinfo(RFIFOL(fd,4));
-		return 0;
-	}
-
-//	if(battle_config.etc_log)
-//		printf("intif: guild info %d\n",RFIFOL(fd,4));
-	if( RFIFOW(fd,2)!=sizeof(struct guild)+4 ){
-		if(battle_config.error_log)
-			printf("intif: guild info : data size error\n %d %d %d",RFIFOL(fd,4),RFIFOW(fd,2),sizeof(struct guild)+4);
-	}
-	guild_recv_info((struct guild *)RFIFOP(fd,4));
-	return 0;
-}
-// �M���h�����o�lj��ʒm
-int intif_parse_GuildMemberAdded(int fd)
-{
-	if(battle_config.etc_log)
-		printf("intif: guild member added %d %d %d %d\n",RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14));
-	guild_member_added(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14));
-	return 0;
-}
-// �M���h�����o�E��/�Ǖ��ʒm
-int intif_parse_GuildMemberLeaved(int fd)
-{
-	guild_member_leaved(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),
-		RFIFOP(fd,55),RFIFOP(fd,15));
-	return 0;
-}
-
-// �M���h�����o�I�����C�����/Lv�ύX�ʒm
-int intif_parse_GuildMemberInfoShort(int fd)
-{
-	guild_recv_memberinfoshort(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),RFIFOW(fd,15),RFIFOW(fd,17));
-	return 0;
-}
-// �M���h���U�ʒm
-int intif_parse_GuildBroken(int fd)
-{
-	guild_broken(RFIFOL(fd,2),RFIFOB(fd,6));
-	return 0;
-}
-
-// �M���h��{���ύX�ʒm
-int intif_parse_GuildBasicInfoChanged(int fd)
-{
-	int type=RFIFOW(fd,8),guild_id=RFIFOL(fd,4);
-	void *data=RFIFOP(fd,10);
-	struct guild *g=guild_search(guild_id);
-	short dw=*((short *)data);
-	int dd=*((int *)data);
-	if( g==NULL )
-		return 0;
-	switch(type){
-	case GBI_EXP:			g->exp=dd; break;
-	case GBI_GUILDLV:		g->guild_lv=dw; break;
-	case GBI_SKILLPOINT:	g->skill_point=dd; break;
-	}
-	return 0;
-}
-// �M���h�����o���ύX�ʒm
-int intif_parse_GuildMemberInfoChanged(int fd)
-{
-	int type=RFIFOW(fd,16),guild_id=RFIFOL(fd,4);
-	int account_id=RFIFOL(fd,8),char_id=RFIFOL(fd,12);
-	void *data=RFIFOP(fd,18);
-	struct guild *g=guild_search(guild_id);
-	int idx,dd=*((int *)data);
-	if( g==NULL )
-		return 0;
-	idx=guild_getindex(g,account_id,char_id);
-	switch(type){
-	case GMI_POSITION:
-		g->member[idx].position=dd;
-		guild_memberposition_changed(g,idx,dd);
-		break;
-	case GMI_EXP:
-		g->member[idx].exp=dd;
-		break;
-	}
-	return 0;
-}
-
-// �M���h��E�ύX�ʒm
-int intif_parse_GuildPosition(int fd)
-{
-	if( RFIFOW(fd,2)!=sizeof(struct guild_position)+12 ){
-		if(battle_config.error_log)
-			printf("intif: guild info : data size error\n %d %d %d",RFIFOL(fd,4),RFIFOW(fd,2),sizeof(struct guild_position)+12);
-	}
-	guild_position_changed(RFIFOL(fd,4),RFIFOL(fd,8),(struct guild_position *)RFIFOP(fd,12));
-	return 0;
-}
-// �M���h�X�L������U��ʒm
-int intif_parse_GuildSkillUp(int fd)
-{
-	guild_skillupack(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10));
-	return 0;
-}
-// �M���h����/�G�Βʒm
-int intif_parse_GuildAlliance(int fd)
-{
-	guild_allianceack(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOL(fd,14),
-		RFIFOB(fd,18),RFIFOP(fd,19),RFIFOP(fd,43));
-	return 0;
-}
-// �M���h���m�ύX�ʒm
-int intif_parse_GuildNotice(int fd)
-{
-	guild_notice_changed(RFIFOL(fd,2),RFIFOP(fd,6),RFIFOP(fd,66));
-	return 0;
-}
-// �M���h�G���u�����ύX�ʒm
-int intif_parse_GuildEmblem(int fd)
-{
-	guild_emblem_changed(RFIFOW(fd,2)-12,RFIFOL(fd,4),RFIFOL(fd,8),RFIFOP(fd,12));
-	return 0;
-}
-// �M���h��b��M
-int intif_parse_GuildMessage(int fd)
-{
-	guild_recv_message(RFIFOL(fd,4),RFIFOL(fd,8),RFIFOP(fd,12),RFIFOW(fd,2)-12);
-	return 0;
-}
-// �M���h��f�[�^�v���ԐM
-int intif_parse_GuildCastleDataLoad(int fd)
-{
-	return guild_castledataloadack(RFIFOW(fd,2),RFIFOB(fd,4),RFIFOL(fd,5));
-}
-// �M���h��f�[�^�ύX�ʒm
-int intif_parse_GuildCastleDataSave(int fd)
-{
-	return guild_castledatasaveack(RFIFOW(fd,2),RFIFOB(fd,4),RFIFOL(fd,5));
-}
-
-// �M���h��f�[�^�ꊇ��M(��������)
-int intif_parse_GuildCastleAllDataLoad(int fd)
-{
-	return guild_castlealldataload(RFIFOW(fd,2),(struct guild_castle *)RFIFOP(fd,4));
-}
-
-// pet
-int intif_parse_CreatePet(int fd)
-{
-	pet_get_egg(RFIFOL(fd,2),RFIFOL(fd,7),RFIFOB(fd,6));
-
-	return 0;
-}
-
-int intif_parse_RecvPetData(int fd)
-{
-	struct s_pet p;
-	int len=RFIFOW(fd,2);
-	if(sizeof(struct s_pet)!=len-9) {
-		if(battle_config.etc_log)
-			printf("intif: pet data: data size error %d %d\n",sizeof(struct s_pet),len-9);
-	}
-	else{
-		memcpy(&p,RFIFOP(fd,9),sizeof(struct s_pet));
-		pet_recv_petdata(RFIFOL(fd,4),&p,RFIFOB(fd,8));
-	}
-
-	return 0;
-}
-int intif_parse_SavePetOk(int fd)
-{
-	if(RFIFOB(fd,6) == 1) {
-		if(battle_config.error_log)
-			printf("pet data save failure\n");
-	}
-
-	return 0;
-}
-
-int intif_parse_DeletePetOk(int fd)
-{
-	if(RFIFOB(fd,2) == 1) {
-		if(battle_config.error_log)
-			printf("pet data delete failure\n");
-	}
-
-	return 0;
-}
-//-----------------------------------------------------------------
-// inter server����̒ʐM
-// �G���[�������0(false)��Ԃ�����
-// �p�P�b�g�������ł����1,�p�P�b�g��������Ȃ����2��Ԃ�����
-int intif_parse(int fd)
-{
-	int packet_len;
-	int cmd = RFIFOW(fd,0);
-	// �p�P�b�g��ID�m�F
-	if(cmd<0x3800 || cmd>=0x3800+(sizeof(packet_len_table)/sizeof(packet_len_table[0])) ||
-	   packet_len_table[cmd-0x3800]==0){
-	   	return 0;
-	}
-	// �p�P�b�g�̒����m�F
-	packet_len = packet_len_table[cmd-0x3800];
-	if(packet_len==-1){
-		if(RFIFOREST(fd)<4)
-			return 2;
-		packet_len = RFIFOW(fd,2);
-	}
-//	if(battle_config.etc_log)
-//		printf("intif_parse %d %x %d %d\n",fd,cmd,packet_len,RFIFOREST(fd));
-	if(RFIFOREST(fd)<packet_len){
-		return 2;
-	}
-	// ��������
-	switch(cmd){
-	case 0x3800:	clif_GMmessage(NULL,RFIFOP(fd,4),packet_len-4,0); break;
-	case 0x3801:	intif_parse_WisMessage(fd); break;
-	case 0x3802:	intif_parse_WisEnd(fd); break;
-	case 0x3803:	mapif_parse_WisToGM(fd); break;
-	case 0x3804:	intif_parse_AccountReg(fd); break;
-	case 0x3810:	intif_parse_LoadStorage(fd); break;
-	case 0x3811:	intif_parse_SaveStorage(fd); break;
-	case 0x3818:	intif_parse_LoadGuildStorage(fd); break;
-	case 0x3819:	intif_parse_SaveGuildStorage(fd); break;
-	case 0x3820:	intif_parse_PartyCreated(fd); break;
-	case 0x3821:	intif_parse_PartyInfo(fd); break;
-	case 0x3822:	intif_parse_PartyMemberAdded(fd); break;
-	case 0x3823:	intif_parse_PartyOptionChanged(fd); break;
-	case 0x3824:	intif_parse_PartyMemberLeaved(fd); break;
-	case 0x3825:	intif_parse_PartyMove(fd); break;
-	case 0x3826:	intif_parse_PartyBroken(fd); break;
-	case 0x3827:	intif_parse_PartyMessage(fd); break;
-	case 0x3830:	intif_parse_GuildCreated(fd); break;
-	case 0x3831:	intif_parse_GuildInfo(fd); break;
-	case 0x3832:	intif_parse_GuildMemberAdded(fd); break;
-	case 0x3834:	intif_parse_GuildMemberLeaved(fd); break;
-	case 0x3835:	intif_parse_GuildMemberInfoShort(fd); break;
-	case 0x3836:	intif_parse_GuildBroken(fd); break;
-	case 0x3837:	intif_parse_GuildMessage(fd); break;
-	case 0x3839:	intif_parse_GuildBasicInfoChanged(fd); break;
-	case 0x383a:	intif_parse_GuildMemberInfoChanged(fd); break;
-	case 0x383b:	intif_parse_GuildPosition(fd); break;
-	case 0x383c:	intif_parse_GuildSkillUp(fd); break;
-	case 0x383d:	intif_parse_GuildAlliance(fd); break;
-	case 0x383e:	intif_parse_GuildNotice(fd); break;
-	case 0x383f:	intif_parse_GuildEmblem(fd); break;
-	case 0x3840:	intif_parse_GuildCastleDataLoad(fd); break;
-	case 0x3841:	intif_parse_GuildCastleDataSave(fd); break;
-	case 0x3842:	intif_parse_GuildCastleAllDataLoad(fd); break;
-	case 0x3880:	intif_parse_CreatePet(fd); break;
-	case 0x3881:	intif_parse_RecvPetData(fd); break;
-	case 0x3882:	intif_parse_SavePetOk(fd); break;
-	case 0x3883:	intif_parse_DeletePetOk(fd); break;
-	default:
-		if(battle_config.error_log)
-			printf("intif_parse : unknown packet %d %x\n",fd,RFIFOW(fd,0));
-		return 0;
-	}
-	// �p�P�b�g�ǂݔ�΂�
-	RFIFOSKIP(fd,packet_len);
-	return 1;
-}
diff --git a/misc/src/map/intif.h b/misc/src/map/intif.h
deleted file mode 100644
index 85e1914..0000000
--- a/misc/src/map/intif.h
+++ /dev/null
@@ -1,56 +0,0 @@
-// $Id: intif.h,v 1.2 2004/09/25 05:32:18 MouseJstr Exp $
-#ifndef _INTIF_H_
-#define _INFIF_H_
-
-int intif_parse(int fd);
-
-int intif_GMmessage(char* mes,int len,int flag);
-
-int intif_wis_message(struct map_session_data *sd,char *nick,char *mes,int mes_len);
-int intif_wis_message_to_gm(char *Wisp_name, int min_gm_level, char *mes, int mes_len);
-
-int intif_saveaccountreg(struct map_session_data *sd);
-int intif_request_accountreg(struct map_session_data *sd);
-
-int intif_request_storage(int account_id);
-int intif_send_storage(struct storage *stor);
-int intif_request_guild_storage(int account_id, int guild_id);
-int intif_send_guild_storage(int account_id, struct guild_storage *gstor);
-
-
-int intif_create_party(struct map_session_data *sd,char *name);
-int intif_request_partyinfo(int party_id);
-int intif_party_addmember(int party_id, int account_id);
-int intif_party_changeoption(int party_id, int account_id, int exp, int item);
-int intif_party_leave(int party_id, int accound_id);
-int intif_party_changemap(struct map_session_data *sd, int online);
-int intif_break_party(int party_id);
-int intif_party_message(int party_id, int account_id, char *mes,int len);
-int intif_party_checkconflict(int party_id, int account_id, char *nick);
-
-
-int intif_guild_create(const char *name, const struct guild_member *master);
-int intif_guild_request_info(int guild_id);
-int intif_guild_addmember(int guild_id, struct guild_member *m);
-int intif_guild_leave(int guild_id, int account_id, int char_id, int flag, const char *mes);
-int intif_guild_memberinfoshort(int guild_id, int account_id, int char_id, int online, int lv, int class);
-int intif_guild_break(int guild_id);
-int intif_guild_message(int guild_id, int account_id, char *mes, int len);
-int intif_guild_checkconflict(int guild_id, int account_id, int char_id);
-int intif_guild_change_basicinfo(int guild_id, int type, const void *data, int len);
-int intif_guild_change_memberinfo(int guild_id, int account_id, int char_id, int type, const void *data, int len);
-int intif_guild_position(int guild_id, int idx, struct guild_position *p);
-int intif_guild_skillup(int guild_id, int skill_num, int account_id);
-int intif_guild_alliance(int guild_id1, int guild_id2, int account_id1, int account_id2, int flag);
-int intif_guild_notice(int guild_id, const char *mes1, const char *mes2);
-int intif_guild_emblem(int guild_id, int len, const char *data);
-int intif_guild_castle_dataload(int castle_id, int index);
-int intif_guild_castle_datasave(int castle_id, int index, int value);
-
-int intif_create_pet(int account_id, int char_id, short pet_type, short pet_lv, short pet_egg_id,
-                     short pet_equip, short intimate, short hungry, char rename_flag, char incuvate, char *pet_name);
-int intif_request_petdata(int account_id, int char_id, int pet_id);
-int intif_save_petdata(int account_id, struct s_pet *p);
-int intif_delete_petdata(int pet_id);
-
-#endif
diff --git a/misc/src/map/itemdb.c b/misc/src/map/itemdb.c
deleted file mode 100644
index a225cff..0000000
--- a/misc/src/map/itemdb.c
+++ /dev/null
@@ -1,882 +0,0 @@
-// $Id: itemdb.c,v 1.3 2004/09/25 05:32:18 MouseJstr Exp $
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "db.h"
-#include "grfio.h"
-#include "nullpo.h"
-#include "malloc.h"
-#include "map.h"
-#include "battle.h"
-#include "itemdb.h"
-#include "script.h"
-#include "pc.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-#define MAX_RANDITEM	2000
-
-// ** ITEMDB_OVERRIDE_NAME_VERBOSE **
-//   ��`����ƁAitemdb.txt��grf�Ŗ��O���قȂ�ꍇ�A�\�����܂�.
-//#define ITEMDB_OVERRIDE_NAME_VERBOSE	1
-
-static struct dbt* item_db;
-
-static struct random_item_data blue_box[MAX_RANDITEM],violet_box[MAX_RANDITEM],card_album[MAX_RANDITEM],gift_box[MAX_RANDITEM],scroll[MAX_RANDITEM];
-static int blue_box_count=0,violet_box_count=0,card_album_count=0,gift_box_count=0,scroll_count=0;
-static int blue_box_default=0,violet_box_default=0,card_album_default=0,gift_box_default=0,scroll_default=0;
-
-// Function declarations
-
-static void itemdb_read(void);
-static int itemdb_readdb(void);
-#ifndef TXT_ONLY
-static int itemdb_read_sqldb(void);
-#endif /* not TXT_ONLY */
-static int itemdb_read_randomitem();
-static int itemdb_read_itemavail(void);
-static int itemdb_read_itemnametable(void);
-static int itemdb_read_noequip(void);
-void itemdb_reload(void);
-
-/*==========================================
- * ���O�Ō����p
- *------------------------------------------
- */
-// name = item alias, so we should find items aliases first. if not found then look for "jname" (full name)
-int itemdb_searchname_sub(void *key,void *data,va_list ap)
-{
-	struct item_data *item=(struct item_data *)data,**dst;
-	char *str;
-	str=va_arg(ap,char *);
-	dst=va_arg(ap,struct item_data **);
-//	if( strcmpi(item->name,str)==0 || strcmp(item->jname,str)==0 ||
-//		memcmp(item->name,str,24)==0 || memcmp(item->jname,str,24)==0 )
-	if( strcmpi(item->name,str)==0 ) //by lupus
-		*dst=item;
-	return 0;
-}
-
-/*==========================================
- * ���O�Ō����p
- *------------------------------------------
- */
-int itemdb_searchjname_sub(void *key,void *data,va_list ap)
-{
-	struct item_data *item=(struct item_data *)data,**dst;
-	char *str;
-	str=va_arg(ap,char *);
-	dst=va_arg(ap,struct item_data **);
-	if( strcmpi(item->jname,str)==0 )
-		*dst=item;
-	return 0;
-}
-/*==========================================
- * ���O�Ō���
- *------------------------------------------
- */
-struct item_data* itemdb_searchname(const char *str)
-{
-	struct item_data *item=NULL;
-	numdb_foreach(item_db,itemdb_searchname_sub,str,&item);
-	return item;
-}
-
-/*==========================================
- * ���n�A�C�e������
- *------------------------------------------
- */
-int itemdb_searchrandomid(int flags)
-{
-	int nameid=0,i,index,count;
-	struct random_item_data *list=NULL;
-
-	struct {
-		int nameid,count;
-		struct random_item_data *list;
-	} data[] ={
-		{ 0,0,NULL },
-		{ blue_box_default	,blue_box_count		,blue_box	 },
-		{ violet_box_default,violet_box_count	,violet_box	 },
-		{ card_album_default,card_album_count	,card_album	 },
-		{ gift_box_default	,gift_box_count		,gift_box	 },
-		{ scroll_default	,scroll_count		,scroll		 },
-	};
-
-	if(flags>=1 && flags<=5){
-		nameid=data[flags].nameid;
-		count=data[flags].count;
-		list=data[flags].list;
-
-		if(count > 0) {
-			for(i=0;i<1000;i++) {
-				index = rand()%count;
-				if(	rand()%1000000 < list[index].per) {
-					nameid = list[index].nameid;
-					break;
-				}
-			}
-		}
-	}
-	return nameid;
-}
-
-/*==========================================
- * DB�̑��݊m�F
- *------------------------------------------
- */
-struct item_data* itemdb_exists(int nameid)
-{
-	return numdb_search(item_db,nameid);
-}
-/*==========================================
- * DB�̌���
- *------------------------------------------
- */
-struct item_data* itemdb_search(int nameid)
-{
-	struct item_data *id;
-
-	id=numdb_search(item_db,nameid);
-	if(id) return id;
-
-	id=(struct item_data *)aCalloc(1,sizeof(struct item_data));
-	numdb_insert(item_db,nameid,id);
-
-	id->nameid=nameid;
-	id->value_buy=10;
-	id->value_sell=id->value_buy/2;
-	id->weight=10;
-	id->sex=2;
-	id->elv=0;
-	id->class=0xffffffff;
-	id->flag.available=0;
-	id->flag.value_notdc=0;  //�ꉞ�E�E�E
-	id->flag.value_notoc=0;
-	id->flag.no_equip=0;
-	id->view_id=0;
-
-	if(nameid>500 && nameid<600)
-		id->type=0;   //heal item
-	else if(nameid>600 && nameid<700)
-		id->type=2;   //use item
-	else if((nameid>700 && nameid<1100) ||
-			(nameid>7000 && nameid<8000))
-		id->type=3;   //correction
-	else if(nameid>=1750 && nameid<1771)
-		id->type=10;  //arrow
-	else if(nameid>1100 && nameid<2000)
-		id->type=4;   //weapon
-	else if((nameid>2100 && nameid<3000) ||
-			(nameid>5000 && nameid<6000))
-		id->type=5;   //armor
-	else if(nameid>4000 && nameid<5000)
-		id->type=6;   //card
-	else if(nameid>9000 && nameid<10000)
-		id->type=7;   //egg
-	else if(nameid>10000)
-		id->type=8;   //petequip
-
-	return id;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int itemdb_isequip(int nameid)
-{
-	int type=itemdb_type(nameid);
-	if(type==0 || type==2 || type==3 || type==6 || type==10)
-		return 0;
-	return 1;
-}
-/*==========================================
- *
- *------------------------------------------
- */
-int itemdb_isequip2(struct item_data *data)
-{
-	if(data) {
-		int type=data->type;
-		if(type==0 || type==2 || type==3 || type==6 || type==10)
-			return 0;
-		else
-			return 1;
-	}
-	return 0;
-}
-/*==========================================
- *
- *------------------------------------------
- */
-int itemdb_isequip3(int nameid)
-{
-	int type=itemdb_type(nameid);
-	if(type==4 || type==5 || type == 8)
-		return 1;
-	return 0;
-}
-
-/*==========================================
- * �̂Ă���A�C�e����1�A�����łȂ��A�C�e����0
- *------------------------------------------
- */
-int itemdb_isdropable(int nameid)
-{
-	//�����w�ւ͎̂Ă��Ȃ�
-	switch(nameid){
-	case 2634: //�����w��
-	case 2635: //�����w��
-		return 0;
-	}
-
-	return 1;
-}
-
-//
-// ������
-//
-/*==========================================
- *
- *------------------------------------------
- */
-static int itemdb_read_itemslottable(void)
-{
-	char *buf,*p;
-	int s;
-
-	buf=grfio_read("data\\itemslottable.txt");
-	if(buf==NULL)
-		return -1;
-	s=grfio_size("data\\itemslottable.txt");
-	buf[s]=0;
-	for(p=buf;p-buf<s;){
-		int nameid,equip;
-		sscanf(p,"%d#%d#",&nameid,&equip);
-		itemdb_search(nameid)->equip=equip;
-		p=strchr(p,10);
-		if(!p) break;
-		p++;
-		p=strchr(p,10);
-		if(!p) break;
-		p++;
-	}
-	free(buf);
-
-	return 0;
-}
-
-#ifndef TXT_ONLY
-/*====================================
- * Removed item_value_db, don't re-add
- *------------------------------------
- */
-static void itemdb_read(void)
-{
-	itemdb_read_itemslottable();
-
-	if (db_use_sqldbs)
-	{
-		itemdb_read_sqldb();
-    }
-    else
-    {
-		itemdb_readdb();
-    }
-
-	itemdb_read_randomitem();
-	itemdb_read_itemavail();
-	itemdb_read_noequip();
-
-	if (!battle_config.item_name_override_grffile)
-		itemdb_read_itemnametable();
-}
-
-#endif /* not TXT_ONLY */
-/*==========================================
- * �A�C�e���f�[�^�x�[�X�̓ǂݍ���
- *------------------------------------------
- */
-static int itemdb_readdb(void)
-{
-	FILE *fp;
-	char line[1024];
-	int ln=0,lines=0;
-	int nameid,j;
-	char *str[32],*p,*np;
-	struct item_data *id;
-	int i=0;
-	char *filename[]={ "db/item_db.txt","db/item_db2.txt" };
-
-	for(i=0;i<2;i++){
-
-		fp=fopen(filename[i],"r");
-		if(fp==NULL){
-			if(i>0)
-				continue;
-			printf("can't read %s\n",filename[i]);
-			exit(1);
-		}
-
-		lines=0;
-		while(fgets(line,1020,fp)){
-			lines++;
-			if(line[0]=='/' && line[1]=='/')
-				continue;
-			memset(str,0,sizeof(str));
-			for(j=0,np=p=line;j<17 && p;j++){
-				str[j]=p;
-				p=strchr(p,',');
-				if(p){ *p++=0; np=p; }
-			}
-			if(str[0]==NULL)
-				continue;
-
-			nameid=atoi(str[0]);
-			if(nameid<=0 || nameid>=20000)
-				continue;
-			ln++;
-
-			//ID,Name,Jname,Type,Price,Sell,Weight,ATK,DEF,Range,Slot,Job,Gender,Loc,wLV,eLV,View
-			id=itemdb_search(nameid);
-			memcpy(id->name,str[1],24);
-			memcpy(id->jname,str[2],24);
-			id->type=atoi(str[3]);
-			// buy��sell*2 �� item_value_db.txt �Ŏw�肵�Ă��������B
-			if (atoi(str[5])) {		// sell�l��D��Ƃ���
-				id->value_buy=atoi(str[5])*2;
-				id->value_sell=atoi(str[5]);
-			} else {
-				id->value_buy=atoi(str[4]);
-				id->value_sell=atoi(str[4])/2;
-			}
-			id->weight=atoi(str[6]);
-			id->atk=atoi(str[7]);
-			id->def=atoi(str[8]);
-			id->range=atoi(str[9]);
-			id->slot=atoi(str[10]);
-			id->class=atoi(str[11]);
-			id->sex=atoi(str[12]);
-			if(id->equip != atoi(str[13])){
-				id->equip=atoi(str[13]);
-			}
-			id->wlv=atoi(str[14]);
-			id->elv=atoi(str[15]);
-			id->look=atoi(str[16]);
-			id->flag.available=1;
-			id->flag.value_notdc=0;
-			id->flag.value_notoc=0;
-			id->view_id=0;
-
-			id->use_script=NULL;
-			id->equip_script=NULL;
-
-			if((p=strchr(np,'{'))==NULL)
-				continue;
-			id->use_script = parse_script(p,lines);
-			if((p=strchr(p+1,'{'))==NULL)
-				continue;
-			id->equip_script = parse_script(p,lines);
-		}
-		fclose(fp);
-		printf("read %s done (count=%d)\n",filename[i],ln);
-	}
-	return 0;
-}
-
-// Removed item_value_db, don't re-add!
-
-/*==========================================
- * �����_���A�C�e���o���f�[�^�̓ǂݍ���
- *------------------------------------------
- */
-static int itemdb_read_randomitem()
-{
-	FILE *fp;
-	char line[1024];
-	int ln=0;
-	int nameid,i,j;
-	char *str[10],*p;
-
-	const struct {
-		char filename[64];
-		struct random_item_data *pdata;
-		int *pcount,*pdefault;
-	} data[] = {
-		{"db/item_bluebox.txt",		blue_box,	&blue_box_count, &blue_box_default		},
-		{"db/item_violetbox.txt",	violet_box,	&violet_box_count, &violet_box_default	},
-		{"db/item_cardalbum.txt",	card_album,	&card_album_count, &card_album_default	},
-		{"db/item_giftbox.txt",	gift_box,	&gift_box_count, &gift_box_default	},
-		{"db/item_scroll.txt",	scroll,	&scroll_count, &scroll_default	},
-	};
-
-	for(i=0;i<sizeof(data)/sizeof(data[0]);i++){
-		struct random_item_data *pd=data[i].pdata;
-		int *pc=data[i].pcount;
-		int *pdefault=data[i].pdefault;
-		char *fn=data[i].filename;
-
-		*pdefault = 0;
-		if( (fp=fopen(fn,"r"))==NULL ){
-			printf("can't read %s\n",fn);
-			continue;
-		}
-
-		while(fgets(line,1020,fp)){
-			if(line[0]=='/' && line[1]=='/')
-				continue;
-			memset(str,0,sizeof(str));
-			for(j=0,p=line;j<3 && p;j++){
-				str[j]=p;
-				p=strchr(p,',');
-				if(p) *p++=0;
-			}
-
-			if(str[0]==NULL)
-				continue;
-
-			nameid=atoi(str[0]);
-			if(nameid<0 || nameid>=20000)
-				continue;
-			if(nameid == 0) {
-				if(str[2])
-					*pdefault = atoi(str[2]);
-				continue;
-			}
-
-			if(str[2]){
-				pd[ *pc   ].nameid = nameid;
-				pd[(*pc)++].per = atoi(str[2]);
-			}
-
-			if(ln >= MAX_RANDITEM)
-				break;
-			ln++;
-		}
-		fclose(fp);
-		printf("read %s done (count=%d)\n",fn,*pc);
-	}
-
-	return 0;
-}
-/*==========================================
- * �A�C�e���g�p�”\�t���O�̃I�[�o�[���C�h
- *------------------------------------------
- */
-static int itemdb_read_itemavail(void)
-{
-	FILE *fp;
-	char line[1024];
-	int ln=0;
-	int nameid,j,k;
-	char *str[10],*p;
-
-	if( (fp=fopen("db/item_avail.txt","r"))==NULL ){
-		printf("can't read db/item_avail.txt\n");
-		return -1;
-	}
-
-	while(fgets(line,1020,fp)){
-		struct item_data *id;
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		memset(str,0,sizeof(str));
-		for(j=0,p=line;j<2 && p;j++){
-			str[j]=p;
-			p=strchr(p,',');
-			if(p) *p++=0;
-		}
-
-		if(str[0]==NULL)
-			continue;
-
-		nameid=atoi(str[0]);
-		if(nameid<0 || nameid>=20000 || !(id=itemdb_exists(nameid)) )
-			continue;
-		k=atoi(str[1]);
-		if(k > 0) {
-			id->flag.available = 1;
-			id->view_id = k;
-		}
-		else
-			id->flag.available = 0;
-		ln++;
-	}
-	fclose(fp);
-	printf("read db/item_avail.txt done (count=%d)\n",ln);
-	return 0;
-}
-
-/*==========================================
- * �A�C�e���̖��O�e�[�u����ǂݍ���
- *------------------------------------------
- */
-static int itemdb_read_itemnametable(void)
-{
-	char *buf,*p;
-	int s;
-
-	buf=grfio_reads("data\\idnum2itemdisplaynametable.txt",&s);
-
-	if(buf==NULL)
-		return -1;
-
-	buf[s]=0;
-	for(p=buf;p-buf<s;){
-		int nameid;
-		char buf2[64];
-
-		if(	sscanf(p,"%d#%[^#]#",&nameid,buf2)==2 ){
-
-#ifdef ITEMDB_OVERRIDE_NAME_VERBOSE
-			if( itemdb_exists(nameid) &&
-				strncmp(itemdb_search(nameid)->jname,buf2,24)!=0 ){
-				printf("[override] %d %s => %s\n",nameid
-					,itemdb_search(nameid)->jname,buf2);
-			}
-#endif
-
-			memcpy(itemdb_search(nameid)->jname,buf2,24);
-		}
-
-		p=strchr(p,10);
-		if(!p) break;
-		p++;
-	}
-	free(buf);
-	printf("read data\\idnum2itemdisplaynametable.txt done.\n");
-
-	return 0;
-}
-#ifdef TXT_ONLY
-/*==========================================
- * �J�[�h�C���X�g�̃��\�[�X���O�e�[�u����ǂݍ���
- *------------------------------------------
- */
-static int itemdb_read_cardillustnametable(void)
-{
-	char *buf,*p;
-	int s;
-
-	buf=grfio_reads("data\\num2cardillustnametable.txt",&s);
-
-	if(buf==NULL)
-		return -1;
-
-	buf[s]=0;
-	for(p=buf;p-buf<s;){
-		int nameid;
-		char buf2[64];
-
-		if(	sscanf(p,"%d#%[^#]#",&nameid,buf2)==2 ){
-			strcat(buf2,".bmp");
-			memcpy(itemdb_search(nameid)->cardillustname,buf2,64);
-//			printf("%d %s\n",nameid,itemdb_search(nameid)->cardillustname);
-		}
-		
-		p=strchr(p,10);
-		if(!p) break;
-		p++;
-	}
-	free(buf);
-	printf("read data\\num2cardillustnametable.txt done.\n");
-
-	return 0;
-}
-#endif /* TXT_ONLY */
-/*==========================================
- * ���������t�@�C���ǂݏo��
- *------------------------------------------
- */
-static int itemdb_read_noequip(void)
-{
-	FILE *fp;
-	char line[1024];
-	int ln=0;
-	int nameid,j;
-	char *str[32],*p;
-	struct item_data *id;
-
-	if( (fp=fopen("db/item_noequip.txt","r"))==NULL ){
-		printf("can't read db/item_noequip.txt\n");
-		return -1;
-	}
-	while(fgets(line,1020,fp)){
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		memset(str,0,sizeof(str));
-		for(j=0,p=line;j<2 && p;j++){
-			str[j]=p;
-			p=strchr(p,',');
-			if(p) *p++=0;
-		}
-		if(str[0]==NULL)
-			continue;
-
-		nameid=atoi(str[0]);
-		if(nameid<=0 || nameid>=20000 || !(id=itemdb_exists(nameid)))
-			continue;
-
-		id->flag.no_equip=atoi(str[1]);
-
-		ln++;
-
-	}
-	fclose(fp);
-	printf("read db/item_noequip.txt done (count=%d)\n",ln);
-	return 0;
-}
-#ifndef TXT_ONLY
-
-/*======================================
-* SQL
-*===================================
-*/
-static int itemdb_read_sqldb(void)
-{
-	unsigned short	nameid;
-	struct			item_data *id;
-	char			script[65535 + 2 + 1]; // Maximum length of MySQL TEXT type (65535) + 2 bytes for curly brackets + 1 byte for terminator
-
-	// ----------
-
-	sprintf(tmp_sql, "SELECT * FROM `%s`", item_db_db);
-
-	// Execute the query; if the query execution succeeded...
-	if (mysql_query(&mmysql_handle, tmp_sql) == 0)
-	{
-		sql_res = mysql_store_result(&mmysql_handle);
-
-		// If the storage of the query result succeeded...
-		if (sql_res)
-		{
-			// Parse each row in the query result into sql_row
-			while ((sql_row = mysql_fetch_row(sql_res)))
-			{
-				/* +----+--------------+---------------+------+-----------+------------+--------+--------+---------+-------+-------+------------+---------------+-----------------+--------------+-------------+------+------------+--------------+
-				   |  0 |            1 |             2 |    3 |         4 |          5 |      6 |      7 |       8 |     9 |    10 |         11 |            12 |              13 |           14 |          15 |   16 |         17 |           18 |
-				   +----+--------------+---------------+------+-----------+------------+--------+--------+---------+-------+-------+------------+---------------+-----------------+--------------+-------------+------+------------+--------------+
-				   | id | name_english | name_japanese | type | price_buy | price_sell | weight | attack | defence | range | slots | equip_jobs | equip_genders | equip_locations | weapon_level | equip_level | view | script_use | script_equip |
-				   +----+--------------+---------------+------+-----------+------------+--------+--------+---------+-------+-------+------------+---------------+-----------------+--------------+-------------+------+------------+--------------+ */
-
-				nameid = atoi(sql_row[0]);
-
-				// If the identifier is not within the valid range, process the next row
-				if (nameid == 0 || nameid >= 20000)
-				{
-					continue;
-				}
-
-				// Insert a new row into the item database
-
-				/*id = calloc(sizeof(struct item_data), 1);
-
-				if (id == NULL)
-				{
-					printf("out of memory : itemdb_read_sqldb\n");
-					exit(1);
-				}
-
-				memset(id, 0, sizeof(struct item_data));
-				numdb_insert(item_db, (int) nameid, id);*/
-
-				// ----------
-				id=itemdb_search(nameid);
-				
-				memcpy(id->name, sql_row[1], 25);
-				memcpy(id->jname, sql_row[2], 25);
-
-				id->type = atoi(sql_row[3]);
-
-				// If price_buy is not NULL and price_sell is not NULL...
-				if ((sql_row[4] != NULL) && (sql_row[5] != NULL))
-				{
-					id->value_buy = atoi(sql_row[4]);
-					id->value_sell = atoi(sql_row[5]);
-				}
-				// If price_buy is not NULL and price_sell is NULL...
-				else if ((sql_row[4] != NULL) && (sql_row[5] == NULL))
-				{
-					id->value_buy = atoi(sql_row[4]);
-					id->value_sell = atoi(sql_row[4]) / 2;
-				}
-				// If price_buy is NULL and price_sell is not NULL...
-				else if ((sql_row[4] == NULL) && (sql_row[5] != NULL))
-				{
-					id->value_buy = atoi(sql_row[5]) * 2;
-					id->value_sell = atoi(sql_row[5]);
-				}
-				// If price_buy is NULL and price_sell is NULL...
-				if ((sql_row[4] == NULL) && (sql_row[5] == NULL))
-				{
-					id->value_buy = 0;
-					id->value_sell = 0;
-				}
-
-				id->weight	= atoi(sql_row[6]);
-
-				id->atk		= (sql_row[7] != NULL)		? atoi(sql_row[7])	: 0;
-				id->def		= (sql_row[8] != NULL)		? atoi(sql_row[8])	: 0;
-				id->range	= (sql_row[9] != NULL)		? atoi(sql_row[9])	: 0;
-				id->slot	= (sql_row[10] != NULL)		? atoi(sql_row[10])	: 0;
-				id->class	= (sql_row[11] != NULL)		? atoi(sql_row[11])	: 0;
-				id->sex		= (sql_row[12] != NULL)		? atoi(sql_row[12])	: 0;
-				id->equip	= (sql_row[13] != NULL)		? atoi(sql_row[13])	: 0;
-				id->wlv		= (sql_row[14] != NULL)		? atoi(sql_row[14])	: 0;
-				id->elv		= (sql_row[15] != NULL)		? atoi(sql_row[15])	: 0;
-				id->look	= (sql_row[16] != NULL)		? atoi(sql_row[16])	: 0;
-
-				id->view_id	= 0;
-
-				// ----------
-
-				if (sql_row[17] != NULL)
-				{
-                                        if (sql_row[17][0] == '{')
-					  id->use_script = parse_script(sql_row[17], 0);
-                                        else {
-					  sprintf(script, "{%s}", sql_row[17]);
-					  id->use_script = parse_script(script, 0);
-                                        }
-				}
-				else
-				{
-					id->use_script = NULL;
-				}
-
-				if (sql_row[18] != NULL)
-				{
-                                        if (sql_row[18][0] == '{')
-					  id->equip_script = parse_script(sql_row[18], 0);
-                                        else {
-					  sprintf(script, "{%s}", sql_row[18]);
-					  id->equip_script = parse_script(script, 0);
-                                        }
-				}
-				else
-				{
-					id->equip_script = NULL;
-				}
-
-				// ----------
-
-				id->flag.available		= 1;
-				id->flag.value_notdc	= 0;
-				id->flag.value_notoc	= 0;
-			}
-
-			// If the retrieval failed, output an error
-			if (mysql_errno(&mmysql_handle))
-			{
-				printf("Database server error (retrieving rows from %s): %s\n", item_db_db, mysql_error(&mmysql_handle));
-			}
-
-			printf("read %s done (count = %lu)\n", item_db_db, (unsigned long) mysql_num_rows(sql_res));
-		}
-		else
-		{
-			printf("MySQL error (storing query result for %s): %s\n", item_db_db, mysql_error(&mmysql_handle));
-		}
-
-		// Free the query result
-		mysql_free_result(sql_res);
-	}
-	else
-	{
-		printf("Database server error (executing query for %s): %s\n", item_db_db, mysql_error(&mmysql_handle));
-	}
-
-	return 0;
-}
-
-#endif /* not TXT_ONLY */
-/*==========================================
- *
- *------------------------------------------
- */
-static int itemdb_final(void *key,void *data,va_list ap)
-{
-	struct item_data *id;
-
-	nullpo_retr(0, id=data);
-
-	if(id->use_script)
-		free(id->use_script);
-	if(id->equip_script)
-		free(id->equip_script);
-	free(id);
-
-	return 0;
-}
-
-void itemdb_reload(void)
-{
-	/*
-
-	<empty item databases>
-	itemdb_read();
-
-	*/
-
-	do_init_itemdb();
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-void do_final_itemdb(void)
-{
-	if(item_db){
-		numdb_final(item_db,itemdb_final);
-		item_db=NULL;
-	}
-}
-
-/*
-static FILE *dfp;
-static int itemdebug(void *key,void *data,va_list ap){
-//	struct item_data *id=(struct item_data *)data;
-	fprintf(dfp,"%6d",(int)key);
-	return 0;
-}
-void itemdebugtxt()
-{
-	dfp=fopen("itemdebug.txt","wt");
-	numdb_foreach(item_db,itemdebug);
-	fclose(dfp);
-}
-*/
-#ifdef TXT_ONLY
-/*====================================
- * Removed item_value_db, don't re-add
- *------------------------------------
- */
-static void itemdb_read(void)
-{
-	itemdb_read_itemslottable();
-	itemdb_readdb();
-	itemdb_read_randomitem();
-	itemdb_read_itemavail();
-	itemdb_read_noequip();
-	itemdb_read_cardillustnametable();
-	if (!battle_config.item_name_override_grffile)
-		itemdb_read_itemnametable();
-}
-#endif /* TXT_ONLY */
-/*==========================================
- *
- *------------------------------------------
- */
-int do_init_itemdb(void)
-{
-	item_db = numdb_init();
-
-	itemdb_read();
-
-	return 0;
-}
diff --git a/misc/src/map/itemdb.h b/misc/src/map/itemdb.h
deleted file mode 100644
index 0edfad2..0000000
--- a/misc/src/map/itemdb.h
+++ /dev/null
@@ -1,84 +0,0 @@
-// $Id: itemdb.h,v 1.3 2004/09/25 05:32:18 MouseJstr Exp $
-#ifndef _ITEMDB_H_
-#define _ITEMDB_H_
-
-#include "map.h"
-
-struct item_data {
-	int nameid;
-	char name[24],jname[24];
-	char prefix[24],suffix[24];
-	char cardillustname[64];
-	int value_buy;
-	int value_sell;
-	int type;
-	int class;
-	int sex;
-	int equip;
-	int weight;
-	int atk;
-	int def;
-	int range;
-	int slot;
-	int look;
-	int elv;
-	int wlv;
-	int refine;
-	char *use_script;	// �񕜂Ƃ����S�����̒��ł�낤���Ȃ�
-	char *equip_script;	// �U��,�h��̑����ݒ�����̒��ʼn”\����?
-	struct {
-		unsigned available : 1;
-		unsigned value_notdc : 1;
-		unsigned value_notoc : 1;
-		unsigned no_equip : 3;
-		unsigned no_drop : 1;
-		unsigned no_use : 1;
-	} flag;
-	int view_id;
-};
-
-struct random_item_data {
-	int nameid;
-	int per;
-};
-
-struct item_data* itemdb_searchname(const char *name);
-struct item_data* itemdb_search(int nameid);
-struct item_data* itemdb_exists(int nameid);
-#define itemdb_type(n) itemdb_search(n)->type
-#define itemdb_atk(n) itemdb_search(n)->atk
-#define itemdb_def(n) itemdb_search(n)->def
-#define itemdb_look(n) itemdb_search(n)->look
-#define itemdb_weight(n) itemdb_search(n)->weight
-#define itemdb_equip(n) itemdb_search(n)->equip
-#define itemdb_usescript(n) itemdb_search(n)->use_script
-#define itemdb_equipscript(n) itemdb_search(n)->equip_script
-#define itemdb_wlv(n) itemdb_search(n)->wlv
-#define itemdb_range(n) itemdb_search(n)->range
-#define itemdb_slot(n) itemdb_search(n)->slot
-#define	itemdb_available(n) (itemdb_exists(n) && itemdb_search(n)->flag.available)
-#define	itemdb_viewid(n) (itemdb_search(n)->view_id)
-
-int itemdb_searchrandomid(int flags);
-
-#define itemdb_value_buy(n) itemdb_search(n)->value_buy
-#define itemdb_value_sell(n) itemdb_search(n)->value_sell
-#define itemdb_value_notdc(n) itemdb_search(n)->flag.value_notdc
-#define itemdb_value_notoc(n) itemdb_search(n)->flag.value_notoc
-
-int itemdb_isequip(int);
-int itemdb_isequip2(struct item_data *);
-int itemdb_isequip3(int);
-int itemdb_isdropable(int nameid);
-
-// itemdb_equip�}�N����itemdb_equippoint�Ƃ̈Ⴂ��
-// �O�҂��I��db�Œ�`���ꂽ�l���̂��̂�Ԃ��̂ɑ΂�
-// ��҂�sessiondata���l�������Ƒ��ł̑����”\�ꏊ
-// ���ׂĂ̑g�ݍ��킹��Ԃ�
-
-void itemdb_reload(void);
-
-void do_final_itemdb(void);
-int do_init_itemdb(void);
-
-#endif
diff --git a/misc/src/map/mail.c b/misc/src/map/mail.c
deleted file mode 100644
index e50b1ba..0000000
--- a/misc/src/map/mail.c
+++ /dev/null
@@ -1,324 +0,0 @@
-// Mail System for eAthena SQL
-// Created by Valaris
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "socket.h"
-#include "timer.h"
-#include "nullpo.h"
-
-#include "map.h"
-#include "clif.h"
-#include "chrif.h"
-#include "intif.h"
-#include "pc.h"
-#include "mail.h"
-
-char mail_db[32] = "mail";
-
-int MAIL_CHECK_TIME = 120000;
-int mail_timer;
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-int mail_check(struct map_session_data *sd,int type)
-{
-	int i=0,new=0,priority=0;
-	char message[50];
-
-	if(sd==NULL)
-		return 0;
-	
-	sprintf(tmp_msql,"SELECT `message_id`,`to_account_id`,`from_char_name`,`read_flag`,`priority`,`check_flag` FROM `%s` WHERE `to_account_id` = \"%d\" ORDER by `message_id`", mail_db, sd->status.account_id);
-
-	if (mysql_query(&mail_handle, tmp_msql)) {
-		printf("Database server error (executing query for %s): %s\n", mail_db, mysql_error(&mail_handle));
-		return 0;
-   	}
-
-   	mail_res = mysql_store_result(&mail_handle);
-	if(mail_res) {
-	        if (mysql_num_rows(mail_res) == 0) {
-			clif_displaymessage(sd->fd,"You have no messages.");
-		        mysql_free_result(mail_res);
-		        return 0;
-	        }
-
-	        while ((mail_row = mysql_fetch_row(mail_res))) {
-				i++;
-
-				if(!atoi(mail_row[5])) {
-				sprintf(tmp_msql,"UPDATE `%s` SET `check_flag`='1' WHERE `message_id`= \"%d\"", mail_db, atoi(mail_row[0]));
-				        if(mysql_query(&mail_handle, tmp_msql) ) {
-						printf("DB server Error (update Read `%s`)- %s\n", mail_db, mysql_error(&mail_handle) );
-				        }
-				}
-
-				if(!atoi(mail_row[3])) {
-					new++;
-					if(atoi(mail_row[4]))
-						priority++;
-					if(type==2 || type==3) {
-						if(atoi(mail_row[4])) {
-							sprintf(message, "%d - From : %s (New - Priority)", i, mail_row[2]);
-							clif_displaymessage(sd->fd, message);
-						}
-
-						else {
-							sprintf(message, "%d - From : %s (New)", i, mail_row[2]);
-							clif_displaymessage(sd->fd, message);
-						}
-					}
-				}
-
-					else if(type==2){
-						sprintf(message, "%d - From : %s", i, mail_row[2]);
-						clif_displaymessage(sd->fd, message);
-					}
-				
-	        }
-    	
-		mysql_free_result(mail_res);
-	
-	} else {
-        	printf("MySQL error (storing query result for %s): %s\n", mail_db, mysql_error(&mail_handle));
-		return 0;
-    	}
-
-	if(i>0 && new>0 && type==1) {
-		sprintf(message, "You have %d new messages.", new);
-		clif_displaymessage(sd->fd, message);
-	}
-	if(i>0 && new>0 && priority>0 && type==1) {
-		sprintf(message, "You have %d unread priority messages.", priority);
-		clif_displaymessage(sd->fd, message);
-	}
-	if(!new) {
-		clif_displaymessage(sd->fd, "You have no new messages.");
-	}
-
-	return 0;
-}
-
-int mail_read(struct map_session_data *sd, int message_id)
-{
-
-	char message[80];
-
-	if(sd==NULL)
-		return 0;
-	
-	sprintf(tmp_msql,"SELECT `message_id`,`to_account_id`,`from_char_name`,`message`,`read_flag`,`priority`,`check_flag` from `%s` WHERE `to_account_id` = \"%d\" ORDER by `message_id` LIMIT %d, 1",mail_db,sd->status.account_id,message_id-1);
-
-	if (mysql_query(&mail_handle, tmp_msql)) {
-		printf("Database server error (executing query for %s): %s\n", mail_db, mysql_error(&mail_handle));
-		return 0;
-   	}
-
-   	mail_res = mysql_store_result(&mail_handle);
-	if(mail_res) {
-	        if (mysql_num_rows(mail_res) == 0) {
-		        mysql_free_result(mail_res);
-			clif_displaymessage(sd->fd, "Message not found.");
-		        return 0;
-	        }
-
-	        if ((mail_row = mysql_fetch_row(mail_res))) {
-
-			if(!atoi(mail_row[6])) {
-				sprintf(tmp_msql,"UPDATE `%s` SET `check_flag`='1' WHERE `message_id`= \"%d\"", mail_db, atoi(mail_row[0]));
-			        if(mysql_query(&mail_handle, tmp_msql) ) {
-						printf("DB server Error (update Read `%s`)- %s\n", mail_db, mysql_error(&mail_handle) );
-				        }
-			}
-
-			sprintf(message, "Reading message from %s", mail_row[2]);
-			clif_displaymessage(sd->fd, message);
-
-			sprintf(message, "%s", mail_row[3]);
-			clif_displaymessage(sd->fd, message);
-
-			sprintf(tmp_msql,"UPDATE `%s` SET `read_flag`='1' WHERE `message_id`= \"%d\"", mail_db, atoi(mail_row[0]));
-		        if(mysql_query(&mail_handle, tmp_msql) ) {
-				printf("DB server Error (update Read `%s`)- %s\n", mail_db, mysql_error(&mail_handle) );
-		        }
-		}
-	
-		mysql_free_result(mail_res);
-	
-	} else {
-        	printf("MySQL error (storing query result for %s): %s\n", mail_db, mysql_error(&mail_handle));
-		return 0;
-    	}
-
-	return 0;
-}
-
-int mail_delete(struct map_session_data *sd, int message_id)
-{
-	if(sd==NULL)
-		return 0;
-	
-	sprintf(tmp_msql,"SELECT `message_id`,`to_account_id`,`read_flag`,`priority`,`check_flag` from `%s` WHERE `to_account_id` = \"%d\" ORDER by `message_id` LIMIT %d, 1",mail_db,sd->status.account_id,message_id-1);
-
-	if (mysql_query(&mail_handle, tmp_msql)) {
-		printf("Database server error (executing query for %s): %s\n", mail_db, mysql_error(&mail_handle));
-		return 0;
-   	}
-
-   	mail_res = mysql_store_result(&mail_handle);
-	if(mail_res) {
-	        if (mysql_num_rows(mail_res) == 0) {
-		        mysql_free_result(mail_res);
-			clif_displaymessage(sd->fd, "Message not found.");
-		        return 0;
-	        }
-
-	        if ((mail_row = mysql_fetch_row(mail_res))) {
-			if(!atoi(mail_row[2]) && atoi(mail_row[3])) {
-				mysql_free_result(mail_res);
-				clif_displaymessage(sd->fd,"Cannot delete unread priority mail.");
-				return 0;
-			}
-			if(!atoi(mail_row[4])) {
-				mysql_free_result(mail_res);
-				clif_displaymessage(sd->fd,"You have recieved new mail, use @listmail before deleting.");
-				return 0;
-			}
-			sprintf(tmp_msql,"DELETE FROM `%s` WHERE `message_id` = \"%d\"", mail_db, atoi(mail_row[0]));
-		        if(mysql_query(&mail_handle, tmp_msql) ) {
-				mysql_free_result(mail_res);
-				printf("DB server Error (update Read `%s`)- %s\n", mail_db, mysql_error(&mail_handle) );
-				return 0;
-		        }
-			else clif_displaymessage(sd->fd,"Message deleted.");
-		}
-	
-		mysql_free_result(mail_res);
-	
-	} else {
-        	printf("MySQL error (delete query result for %s): %s\n", mail_db, mysql_error(&mail_handle));
-		return 0;
-    	}
-
-	return 0;
-}
-
-int mail_send(struct map_session_data *sd, char *name, char *message, int flag)
-{
-	if(sd==NULL)
-		return 0;
-		
-	if(pc_isGM(sd) < 80 && sd->mail_counter > 0) {
-		clif_displaymessage(sd->fd,"You must wait 10 minutes before sending another message");
-		return 0;
-	}
-
-	if(strcmp(name,"*")==0) {
-		if(pc_isGM(sd) < 80) {
-			clif_displaymessage(sd->fd, "Access Denied.");
-			return 0;
-		}
-		else
-			sprintf(tmp_msql,"SELECT DISTINCT `account_id` FROM `%s` WHERE `account_id` <> '%d' ORDER BY `account_id`", char_db, sd->status.account_id);
-	}
-	else
-		sprintf(tmp_msql,"SELECT `account_id`,`name` FROM `%s` WHERE `name` = \"%s\"", char_db, name);
-
-	if (mysql_query(&mail_handle, tmp_msql)) {
-		printf("Database server error (executing query for %s): %s\n", char_db, mysql_error(&mail_handle));
-		return 0;
-   	}	
-	
-   	mail_res = mysql_store_result(&mail_handle);
-	if(mail_res) {
-	        if (mysql_num_rows(mail_res) == 0) {
-			mysql_free_result(mail_res);
-			clif_displaymessage(sd->fd,"Character does not exist.");
-		        return 0;
-	        }
-
-	        while ((mail_row = mysql_fetch_row(mail_res))) {
-			if(strcmp(name,"*")==0) {
-				sprintf(tmp_msql, "INSERT INTO `%s` (`to_account_id`,`from_account_id`,`from_char_name`,`message`,`priority`)"
-					" VALUES ('%d', '%d', '%s', '%s', '%d')",mail_db, atoi(mail_row[0]), sd->status.account_id, sd->status.name, message, flag);			
-			}
-			else {
-				sprintf(tmp_msql, "INSERT INTO `%s` (`to_account_id`,`to_char_name`,`from_account_id`,`from_char_name`,`message`,`priority`)"
-					" VALUES ('%d', '%s', '%d', '%s', '%s', '%d')",mail_db, atoi(mail_row[0]), mail_row[1], sd->status.account_id, sd->status.name, message, flag);
-				if(pc_isGM(sd) < 80)
-					sd->mail_counter=5;
-			}
-	
-			if(mysql_query(&mail_handle, tmp_msql) ) {
-				mysql_free_result(mail_res);
-				printf("DB server Error (insert `mail_db`)- %s\n", mysql_error(&mail_handle) );
-				return 0;
-			}
-
-		}
-	}
-
-	clif_displaymessage(sd->fd,"Mail has been sent.");
-
-	return 0;
-}
-
-int mail_check_timer(int tid,unsigned int tick,int id,int data)
-{
-	if(mail_timer != tid)
-		return 0;
-
-	sprintf(tmp_msql,"SELECT DISTINCT `to_account_id` FROM `%s` WHERE `read_flag` = '0' AND `check_flag` = '0'", mail_db);
-	
-	if (mysql_query(&mail_handle, tmp_msql)) {
-		printf("Database server error (executing query for %s): %s\n", char_db, mysql_error(&mail_handle));
-		mail_timer=add_timer(gettick()+MAIL_CHECK_TIME,mail_check_timer,0,0);
-		return 0;
-   	}	
-
-	struct map_session_data *sd = NULL;
-	int i;		
-
-	mail_res = mysql_store_result(&mail_handle);
-
-	if (mail_res) {
-
-	        if (mysql_num_rows(mail_res) == 0) {
-			mysql_free_result(mail_res);
-			mail_timer=add_timer(gettick()+MAIL_CHECK_TIME,mail_check_timer,0,0);
-		        return 0;
-	       }
-
-	       while ((mail_row = mysql_fetch_row(mail_res))) {
-			for (i = 0; i < fd_max; i++) {
-				if (session[i] && (sd = session[i]->session_data) && sd->state.auth){
-					if(pc_isGM(sd) < 80 && sd->mail_counter > 0)
-						sd->mail_counter--;
-					if(sd->status.account_id==atoi(mail_row[0]))
-						clif_displaymessage(sd->fd, "You have new mail.");						
-				}
-			}
-		}
-	}
-
-	sprintf(tmp_msql,"UPDATE `%s` SET `check_flag`='1' WHERE `check_flag`= '0' ", mail_db);
-        if(mysql_query(&mail_handle, tmp_msql) ) {
-		printf("DB server Error (update Read `%s`)- %s\n", mail_db, mysql_error(&mail_handle) );
-	}
-
-	mail_timer=add_timer(gettick()+MAIL_CHECK_TIME,mail_check_timer,0,0);
-	return 0;
-}
-
-int do_init_mail(void)
-{	
-	add_timer_func_list(mail_check_timer,"mail_check_timer");
-	mail_timer=add_timer(gettick()+MAIL_CHECK_TIME,mail_check_timer,0,0);
-	return 0;
-}
-
diff --git a/misc/src/map/mail.h b/misc/src/map/mail.h
deleted file mode 100644
index 6bd8e51..0000000
--- a/misc/src/map/mail.h
+++ /dev/null
@@ -1,9 +0,0 @@
-// Mail System for eAthena
-// Created by Valaris
-
-int mail_check(struct map_session_data *sd, int type);
-int mail_read(struct map_session_data *sd, int message_id);
-int mail_delete(struct map_session_data *sd, int message_id);
-int mail_send(struct map_session_data *sd, char *name, char *message, int flag);
-
-int do_init_mail(void);
diff --git a/misc/src/map/map.c b/misc/src/map/map.c
deleted file mode 100644
index 040e180..0000000
--- a/misc/src/map/map.c
+++ /dev/null
@@ -1,2009 +0,0 @@
-// $Id: map.c,v 1.6 2004/09/25 17:37:01 MouseJstr Exp $
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#ifdef LCCWIN32
-#include <winsock.h>
-#else
-#include <netdb.h>
-#endif
-
-#include "core.h"
-#include "timer.h"
-#include "db.h"
-#include "grfio.h"
-#include "malloc.h"
-
-#include "map.h"
-#include "chrif.h"
-#include "clif.h"
-#include "intif.h"
-#include "npc.h"
-#include "pc.h"
-#include "mob.h"
-#include "chat.h"
-#include "itemdb.h"
-#include "storage.h"
-#include "skill.h"
-#include "trade.h"
-#include "party.h"
-#include "battle.h"
-#include "script.h"
-#include "guild.h"
-#include "pet.h"
-#include "atcommand.h"
-#include "nullpo.h"
-#include "socket.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-#ifndef TXT_ONLY
-
-#include "mail.h" // mail system [Valaris]
-
-MYSQL mmysql_handle;
-MYSQL_RES* 	sql_res ;
-MYSQL_ROW	sql_row ;
-char tmp_sql[65535]="";
-
-MYSQL lmysql_handle;
-MYSQL_RES* lsql_res ;
-MYSQL_ROW  lsql_row ;
-char tmp_lsql[65535]="";
-
-MYSQL mail_handle; // mail system [Valaris]
-MYSQL_RES* 	mail_res ;
-MYSQL_ROW	mail_row ;
-char tmp_msql[65535]="";
-
-int map_server_port = 3306;
-char map_server_ip[16] = "127.0.0.1";
-char map_server_id[32] = "ragnarok";
-char map_server_pw[32] = "ragnarok";
-char map_server_db[32] = "ragnarok";
-int db_use_sqldbs = 0;
-
-int login_server_port = 3306;
-char login_server_ip[16] = "127.0.0.1";
-char login_server_id[32] = "ragnarok";
-char login_server_pw[32] = "ragnarok";
-char login_server_db[32] = "ragnarok";
-
-char item_db_db[32] = "item_db";
-char mob_db_db[32] = "mob_db";
-char login_db[32] = "login";
-char login_db_level[32] = "level";
-char login_db_account_id[32] = "account_id";
-
-int lowest_gm_level = 1;
-int read_gm_interval = 600000;
-
-char char_db[32] = "char";
-
-static int online_timer(int,unsigned int,int,int);
-
-int CHECK_INTERVAL = 3600000; // [Valaris]
-int check_online_timer=0; // [Valaris]
-
-#endif /* not TXT_ONLY */
-// �ɗ� static�Ń��[�J���Ɏ��߂�
-static struct dbt * id_db=NULL;
-static struct dbt * map_db=NULL;
-static struct dbt * nick_db=NULL;
-static struct dbt * charid_db=NULL;
-
-static int users=0;
-static struct block_list *object[MAX_FLOORITEM];
-static int first_free_object_id=0,last_object_id=0;
-
-#define block_free_max 1048576
-static void *block_free[block_free_max];
-static int block_free_count = 0, block_free_lock = 0;
-
-#define BL_LIST_MAX 1048576
-static struct block_list *bl_list[BL_LIST_MAX];
-static int bl_list_count = 0;
-
-struct map_data map[MAX_MAP_PER_SERVER];
-int map_num = 0;
-
-int map_port=0;
-
-int autosave_interval = DEFAULT_AUTOSAVE_INTERVAL;
-int agit_flag = 0;
-int night_flag = 0; // 0=day, 1=night [Yor]
-
-struct charid2nick {
-	char nick[24];
-	int req_id;
-};
-
-char motd_txt[256] = "conf/motd.txt";
-char help_txt[256] = "conf/help.txt";
-
-char wisp_server_name[24] = "Server"; // can be modified in char-server configuration file
-
-
-/*==========================================
- * �Smap�I���v�ł̐ڑ����ݒ�
- * (char�I���瑗���Ă���)
- *------------------------------------------
- */
-void map_setusers(int n) {
-	users = n;
-}
-
-/*==========================================
- * �Smap�I���v�ł̐ڑ����擾 (/w�ւ̉����p)
- *------------------------------------------
- */
-int map_getusers(void) {
-	return users;
-}
-
-//
-// block�폜�̈��S���m�ۏ���
-//
-
-/*==========================================
- * block��free����Ƃ�free�̕ς��ɌĂ�
- * ���b�N����Ă���Ƃ��̓o�b�t�@�ɂ��߂�
- *------------------------------------------
- */
-int map_freeblock( void *bl )
-{
-	if(block_free_lock==0){
-		free(bl);
-		bl = NULL;
-	}
-	else{
-		if( block_free_count>=block_free_max ) {
-			if(battle_config.error_log)
-				printf("map_freeblock: *WARNING* too many free block! %d %d\n",
-			block_free_count,block_free_lock);
-		}
-		else
-			block_free[block_free_count++]=bl;
-	}
-	return block_free_lock;
-}
-/*==========================================
- * block��free���ꎞ�I�ɋ֎~����
- *------------------------------------------
- */
-int map_freeblock_lock(void) {
-	return ++block_free_lock;
-}
-
-/*==========================================
- * block��free�̃��b�N����������
- * ���̂Ƃ��A���b�N�����S�ɂȂ��Ȃ��
- * �o�b�t�@�ɂ��܂��Ă���block��S���폜
- *------------------------------------------
- */
-int map_freeblock_unlock(void) {
-	if ((--block_free_lock) == 0) {
-		int i;
-//		if(block_free_count>0) {
-//			if(battle_config.error_log)
-//				printf("map_freeblock_unlock: free %d object\n",block_free_count);
-//		}
-		for(i=0;i<block_free_count;i++){
-			free(block_free[i]);
-			block_free[i] = NULL;
-		}
-		block_free_count=0;
-	}else if(block_free_lock<0){
-		if(battle_config.error_log)
-			printf("map_freeblock_unlock: lock count < 0 !\n");
-	}
-	return block_free_lock;
-}
-
-
-//
-// block������
-//
-/*==========================================
- * map[]��block_list����q�����Ă���ꍇ��
- * bl->prev��bl_head�̃A�h���X�����Ă���
- *------------------------------------------
- */
-static struct block_list bl_head;
-
-/*==========================================
- * map[]��block_list�ɒlj�
- * mob�͐��������̂ŕʃ��X�g
- *
- * ����link�ς݂��̊m�F�������B�댯����
- *------------------------------------------
- */
-int map_addblock(struct block_list *bl)
-{
-	int m,x,y;
-
-	nullpo_retr(0, bl);
-
-	if(bl->prev != NULL){
-			if(battle_config.error_log)
-				printf("map_addblock error : bl->prev!=NULL\n");
-		return 0;
-	}
-
-	m=bl->m;
-	x=bl->x;
-	y=bl->y;
-	if(m<0 || m>=map_num ||
-	   x<0 || x>=map[m].xs ||
-	   y<0 || y>=map[m].ys)
-		return 1;
-
-	if(bl->type==BL_MOB){
-		bl->next = map[m].block_mob[x/BLOCK_SIZE+(y/BLOCK_SIZE)*map[m].bxs];
-		bl->prev = &bl_head;
-		if(bl->next) bl->next->prev = bl;
-		map[m].block_mob[x/BLOCK_SIZE+(y/BLOCK_SIZE)*map[m].bxs] = bl;
-		map[m].block_mob_count[x/BLOCK_SIZE+(y/BLOCK_SIZE)*map[m].bxs]++;
-	} else {
-		bl->next = map[m].block[x/BLOCK_SIZE+(y/BLOCK_SIZE)*map[m].bxs];
-		bl->prev = &bl_head;
-		if(bl->next) bl->next->prev = bl;
-		map[m].block[x/BLOCK_SIZE+(y/BLOCK_SIZE)*map[m].bxs] = bl;
-		map[m].block_count[x/BLOCK_SIZE+(y/BLOCK_SIZE)*map[m].bxs]++;
-		if(bl->type==BL_PC)
-			map[m].users++;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * map[]��block_list����O��
- * prev��NULL�̏ꍇlist�Ɍq�����ĂȂ�
- *------------------------------------------
- */
-int map_delblock(struct block_list *bl)
-{
-	int b;
-	nullpo_retr(0, bl);
-
-	// ����blocklist���甲���Ă���
-	if(bl->prev==NULL){
-		if(bl->next!=NULL){
-			// prev��NULL��next��NULL�łȂ��̂͗L���Ă͂Ȃ�Ȃ�
-			if(battle_config.error_log)
-				printf("map_delblock error : bl->next!=NULL\n");
-		}
-		return 0;
-	}
-
-	b = bl->x/BLOCK_SIZE+(bl->y/BLOCK_SIZE)*map[bl->m].bxs;
-
-	if(bl->type==BL_PC)
-		map[bl->m].users--;
-	if(bl->next) bl->next->prev = bl->prev;
-	if(bl->prev==&bl_head){
-		// ���X�g�̓��Ȃ̂ŁAmap[]��block_list���X�V����
-		if(bl->type==BL_MOB){
-			map[bl->m].block_mob[b] = bl->next;
-			if((map[bl->m].block_mob_count[b]--) < 0)
-				map[bl->m].block_mob_count[b] = 0;
-		} else {
-			map[bl->m].block[b] = bl->next;
-			if((map[bl->m].block_count[b]--) < 0)
-				map[bl->m].block_count[b] = 0;
-		}
-	} else {
-		bl->prev->next = bl->next;
-	}
-	bl->next = NULL;
-	bl->prev = NULL;
-
-	return 0;
-}
-
-/*==========================================
- * ���͂�PC�l���𐔂��� (���ݖ��g�p)
- *------------------------------------------
- */
-int map_countnearpc(int m, int x, int y) {
-	int bx,by,c=0;
-	struct block_list *bl=NULL;
-
-	if(map[m].users==0)
-		return 0;
-	for(by=y/BLOCK_SIZE-AREA_SIZE/BLOCK_SIZE-1;by<=y/BLOCK_SIZE+AREA_SIZE/BLOCK_SIZE+1;by++){
-		if(by<0 || by>=map[m].bys)
-			continue;
-		for(bx=x/BLOCK_SIZE-AREA_SIZE/BLOCK_SIZE-1;bx<=x/BLOCK_SIZE+AREA_SIZE/BLOCK_SIZE+1;bx++){
-			if(bx<0 || bx>=map[m].bxs)
-				continue;
-			bl = map[m].block[bx+by*map[m].bxs];
-			for(;bl;bl=bl->next){
-				if(bl->type==BL_PC)
-					c++;
-			}
-		}
-	}
-	return c;
-}
-
-/*==========================================
- * �Z�����PC��MOB�̐��𐔂��� (�O�����h�N���X�p)
- *------------------------------------------
- */
-int map_count_oncell(int m, int x, int y) {
-	int bx,by;
-	struct block_list *bl=NULL;
-	int i,c;
-	int count = 0;
-
-	if (x < 0 || y < 0 || (x >= map[m].xs) || (y >= map[m].ys))
-		return 1;
-	bx = x/BLOCK_SIZE;
-	by = y/BLOCK_SIZE;
-
-	bl = map[m].block[bx+by*map[m].bxs];
-	c = map[m].block_count[bx+by*map[m].bxs];
-	for(i=0;i<c && bl;i++,bl=bl->next){
-		if(bl->x == x && bl->y == y && bl->type == BL_PC) count++;
-	}
-	bl = map[m].block_mob[bx+by*map[m].bxs];
-	c = map[m].block_mob_count[bx+by*map[m].bxs];
-	for(i=0;i<c && bl;i++,bl=bl->next){
-		if(bl->x == x && bl->y == y) count++;
-	}
-	if(!count) count = 1;
-	return count;
-}
-
-
-/*==========================================
- * map m (x0,y0)-(x1,y1)���̑Sobj�ɑ΂���
- * func����
- * type!=0 �Ȃ炻�̎�ނ̂�
- *------------------------------------------
- */
-void map_foreachinarea(int (*func)(struct block_list*,va_list),int m,int x0,int y0,int x1,int y1,int type,...) {
-	int bx,by;
-	struct block_list *bl=NULL;
-	va_list ap=NULL;
-	int blockcount=bl_list_count,i,c;
-
-	if(m < 0)
-		return;
-	va_start(ap,type);
-	if (x0 < 0) x0 = 0;
-	if (y0 < 0) y0 = 0;
-	if (x1 >= map[m].xs) x1 = map[m].xs-1;
-	if (y1 >= map[m].ys) y1 = map[m].ys-1;
-	if (type == 0 || type != BL_MOB)
-		for (by = y0 / BLOCK_SIZE; by <= y1 / BLOCK_SIZE; by++) {
-			for(bx=x0/BLOCK_SIZE;bx<=x1/BLOCK_SIZE;bx++){
-				bl = map[m].block[bx+by*map[m].bxs];
-				c = map[m].block_count[bx+by*map[m].bxs];
-				for(i=0;i<c && bl;i++,bl=bl->next){
-					if(bl && type && bl->type!=type)
-						continue;
-					if(bl && bl->x>=x0 && bl->x<=x1 && bl->y>=y0 && bl->y<=y1 && bl_list_count<BL_LIST_MAX)
-						bl_list[bl_list_count++]=bl;
-				}
-			}
-		}
-	if(type==0 || type==BL_MOB)
-		for(by=y0/BLOCK_SIZE;by<=y1/BLOCK_SIZE;by++){
-			for(bx=x0/BLOCK_SIZE;bx<=x1/BLOCK_SIZE;bx++){
-				bl = map[m].block_mob[bx+by*map[m].bxs];
-				c = map[m].block_mob_count[bx+by*map[m].bxs];
-				for(i=0;i<c && bl;i++,bl=bl->next){
-					if(bl && bl->x>=x0 && bl->x<=x1 && bl->y>=y0 && bl->y<=y1 && bl_list_count<BL_LIST_MAX)
-						bl_list[bl_list_count++]=bl;
-				}
-			}
-		}
-	
-	if(bl_list_count>=BL_LIST_MAX) {
-		if(battle_config.error_log)
-			printf("map_foreachinarea: *WARNING* block count too many!\n");
-	}
-
-	map_freeblock_lock();	// ����������̉�����֎~����
-		
-	for(i=blockcount;i<bl_list_count;i++)
-		if(bl_list[i]->prev)	// �L�����ǂ����`�F�b�N
-			func(bl_list[i],ap);
-
-	map_freeblock_unlock();	// ��������‚���
-
-	va_end(ap);
-	bl_list_count = blockcount;
-}
-
-/*==========================================
- * ��`(x0,y0)-(x1,y1)��(dx,dy)�ړ���������
- * �̈�O�ɂȂ�̈�(��`��L���`)����obj��
- * �΂���func���Ă�
- *
- * dx,dy��-1,0,1�݂̂Ƃ���i�ǂ�Ȓl�ł��������ۂ��H�j
- *------------------------------------------
- */
-void map_foreachinmovearea(int (*func)(struct block_list*,va_list),int m,int x0,int y0,int x1,int y1,int dx,int dy,int type,...) {
-	int bx,by;
-	struct block_list *bl=NULL;
-	va_list ap=NULL;
-	int blockcount=bl_list_count,i,c;
-
-	va_start(ap,type);
-	if(dx==0 || dy==0){
-		// ��`�̈�̏ꍇ
-		if(dx==0){
-			if(dy<0){
-				y0=y1+dy+1;
-			} else {
-				y1=y0+dy-1;
-			}
-		} else if(dy==0){
-			if(dx<0){
-				x0=x1+dx+1;
-			} else {
-				x1=x0+dx-1;
-			}
-		}
-		if(x0<0) x0=0;
-		if(y0<0) y0=0;
-		if(x1>=map[m].xs) x1=map[m].xs-1;
-		if(y1>=map[m].ys) y1=map[m].ys-1;
-		for(by=y0/BLOCK_SIZE;by<=y1/BLOCK_SIZE;by++){
-			for(bx=x0/BLOCK_SIZE;bx<=x1/BLOCK_SIZE;bx++){
-				bl = map[m].block[bx+by*map[m].bxs];
-				c = map[m].block_count[bx+by*map[m].bxs];
-				for(i=0;i<c && bl;i++,bl=bl->next){
-					if(bl && type && bl->type!=type)
-						continue;
-					if(bl && bl->x>=x0 && bl->x<=x1 && bl->y>=y0 && bl->y<=y1 && bl_list_count<BL_LIST_MAX)
-						bl_list[bl_list_count++]=bl;
-				}
-				bl = map[m].block_mob[bx+by*map[m].bxs];
-				c = map[m].block_mob_count[bx+by*map[m].bxs];
-				for(i=0;i<c && bl;i++,bl=bl->next){
-					if(bl && type && bl->type!=type)
-						continue;
-					if(bl && bl->x>=x0 && bl->x<=x1 && bl->y>=y0 && bl->y<=y1 && bl_list_count<BL_LIST_MAX)
-						bl_list[bl_list_count++]=bl;
-				}
-			}
-		}
-	}else{
-		// L���̈�̏ꍇ
-
-		if(x0<0) x0=0;
-		if(y0<0) y0=0;
-		if(x1>=map[m].xs) x1=map[m].xs-1;
-		if(y1>=map[m].ys) y1=map[m].ys-1;
-		for(by=y0/BLOCK_SIZE;by<=y1/BLOCK_SIZE;by++){
-			for(bx=x0/BLOCK_SIZE;bx<=x1/BLOCK_SIZE;bx++){
-				bl = map[m].block[bx+by*map[m].bxs];
-				c = map[m].block_count[bx+by*map[m].bxs];
-				for(i=0;i<c && bl;i++,bl=bl->next){
-					if(bl && type && bl->type!=type)
-						continue;
-					if((bl) && !(bl->x>=x0 && bl->x<=x1 && bl->y>=y0 && bl->y<=y1))
-						continue;
-					if((bl) && ((dx>0 && bl->x<x0+dx) || (dx<0 && bl->x>x1+dx) ||
-						(dy>0 && bl->y<y0+dy) || (dy<0 && bl->y>y1+dy)) &&
-						bl_list_count<BL_LIST_MAX)
-							bl_list[bl_list_count++]=bl;
-				}
-				bl = map[m].block_mob[bx+by*map[m].bxs];
-				c = map[m].block_mob_count[bx+by*map[m].bxs];
-				for(i=0;i<c && bl;i++,bl=bl->next){
-					if(bl && type && bl->type!=type)
-						continue;
-					if((bl) && !(bl->x>=x0 && bl->x<=x1 && bl->y>=y0 && bl->y<=y1))
-						continue;
-					if((bl) && ((dx>0 && bl->x<x0+dx) || (dx<0 && bl->x>x1+dx) ||
-						(dy>0 && bl->y<y0+dy) || (dy<0 && bl->y>y1+dy)) &&
-						bl_list_count<BL_LIST_MAX)
-							bl_list[bl_list_count++]=bl;
-				}
-			}
-		}
-
-	}
-
-	if(bl_list_count>=BL_LIST_MAX) {
-		if(battle_config.error_log)
-			printf("map_foreachinarea: *WARNING* block count too many!\n");
-	}
-
-	map_freeblock_lock();	// ����������̉�����֎~����
-		
-	for(i=blockcount;i<bl_list_count;i++)
-		if(bl_list[i]->prev)	// �L�����ǂ����`�F�b�N
-			func(bl_list[i],ap);
-
-	map_freeblock_unlock();	// ��������‚���
-
-	va_end(ap);
-	bl_list_count = blockcount;
-}
-
-// -- moonsoul	(added map_foreachincell which is a rework of map_foreachinarea but
-//			 which only checks the exact single x/y passed to it rather than an
-//			 area radius - may be more useful in some instances)
-//
-void map_foreachincell(int (*func)(struct block_list*,va_list),int m,int x,int y,int type,...) {
-	int bx,by;
-	struct block_list *bl=NULL;
-	va_list ap=NULL;
-	int blockcount=bl_list_count,i,c;
-
-	va_start(ap,type);
-
-	by=y/BLOCK_SIZE;
-	bx=x/BLOCK_SIZE;
-
-	if(type==0 || type!=BL_MOB)
-	{
-		bl = map[m].block[bx+by*map[m].bxs];
-		c = map[m].block_count[bx+by*map[m].bxs];
-		for(i=0;i<c && bl;i++,bl=bl->next)
-		{
-			if(type && bl && bl->type!=type)
-				continue;
-			if(bl && bl->x==x && bl->y==y && bl_list_count<BL_LIST_MAX)
-				bl_list[bl_list_count++]=bl;
-		}
-	}
-
-	if(type==0 || type==BL_MOB)
-	{
-		bl = map[m].block_mob[bx+by*map[m].bxs];
-		c = map[m].block_mob_count[bx+by*map[m].bxs];
-		for(i=0;i<c && bl;i++,bl=bl->next)
-		{
-			if(bl && bl->x==x && bl->y==y && bl_list_count<BL_LIST_MAX)
-				bl_list[bl_list_count++]=bl;
-		}
-	}	
-
-	if(bl_list_count>=BL_LIST_MAX) {
-		if(battle_config.error_log)
-			printf("map_foreachincell: *WARNING* block count too many!\n");
-	}
-
-	map_freeblock_lock();	// ����������̉�����֎~����
-		
-	for(i=blockcount;i<bl_list_count;i++)
-		if(bl_list[i]->prev)	// �L�����ǂ����`�F�b�N
-			func(bl_list[i],ap);
-
-	map_freeblock_unlock();	// ��������‚���
-
-	va_end(ap);
-	bl_list_count = blockcount;
-}
-
-/*==========================================
- * ���A�C�e����G�t�F�N�g�p�̈ꎞobj���蓖��
- * object[]�ւ̕ۑ���id_db�o�^�܂�
- *
- * bl->id�����̒��Őݒ肵�Ė�薳��?
- *------------------------------------------
- */
-int map_addobject(struct block_list *bl) {
-	int i;
-	if( bl == NULL ){
-		printf("map_addobject nullpo?\n");
-		return 0;
-	}
-	if(first_free_object_id<2 || first_free_object_id>=MAX_FLOORITEM)
-		first_free_object_id=2;
-	for(i=first_free_object_id;i<MAX_FLOORITEM;i++)
-		if(object[i]==NULL)
-			break;
-	if(i>=MAX_FLOORITEM){
-		if(battle_config.error_log)
-			printf("no free object id\n");
-		return 0;
-	}
-	first_free_object_id=i;
-	if(last_object_id<i)
-		last_object_id=i;
-	object[i]=bl;
-	numdb_insert(id_db,i,bl);
-	return i;
-}
-
-/*==========================================
- * �ꎞobject�̉��
- *	map_delobject��free���Ȃ��o�[�W����
- *------------------------------------------
- */
-int map_delobjectnofree(int id) {
-	if(object[id]==NULL)
-		return 0;
-
-	map_delblock(object[id]);
-	numdb_erase(id_db,id);
-//	map_freeblock(object[id]);
-	object[id]=NULL;
-
-	if(first_free_object_id>id)
-		first_free_object_id=id;
-
-	while(last_object_id>2 && object[last_object_id]==NULL)
-		last_object_id--;
-
-	return 0;
-}
-
-/*==========================================
- * �ꎞobject�̉��
- * block_list����̍폜�Aid_db����̍폜
- * object data��free�Aobject[]�ւ�NULL���
- *
- * add�Ƃ̑Ώ̐��������̂��C�ɂȂ�
- *------------------------------------------
- */
-int map_delobject(int id) {
-	struct block_list *obj = object[id];
-
-	if(obj==NULL)
-		return 0;
-
-	map_delobjectnofree(id);	
-	map_freeblock(obj);
-
-	return 0;
-}
-
-/*==========================================
- * �S�ꎞobj�����func���Ă�
- *
- *------------------------------------------
- */
-void map_foreachobject(int (*func)(struct block_list*,va_list),int type,...) {
-	int i;
-	int blockcount=bl_list_count;
-	va_list ap=NULL;
-
-	va_start(ap,type);
-
-	for(i=2;i<=last_object_id;i++){
-		if(object[i]){
-			if(type && object[i]->type!=type)
-				continue;
-			if(bl_list_count>=BL_LIST_MAX) {
-				if(battle_config.error_log)
-					printf("map_foreachobject: too many block !\n");
-			}
-			else
-				bl_list[bl_list_count++]=object[i];
-		}
-	}
-
-	map_freeblock_lock();
-
-	for(i=blockcount;i<bl_list_count;i++)
-		if( bl_list[i]->prev || bl_list[i]->next )
-			func(bl_list[i],ap);
-
-	map_freeblock_unlock();
-
-	va_end(ap);
-	bl_list_count = blockcount;
-}
-
-/*==========================================
- * ���A�C�e��������
- *
- * data==0�̎���timer�ŏ�������
- * data!=0�̎��͏E�����ŏ��������Ƃ��ē���
- *
- * ��҂́Amap_clearflooritem(id)��
- * map.h����#define������
- *------------------------------------------
- */
-int map_clearflooritem_timer(int tid,unsigned int tick,int id,int data) {
-	struct flooritem_data *fitem=NULL;
-
-	fitem = (struct flooritem_data *)object[id];
-	if(fitem==NULL || fitem->bl.type!=BL_ITEM || (!data && fitem->cleartimer != tid)){
-		if(battle_config.error_log)
-			printf("map_clearflooritem_timer : error\n");
-		return 1;
-	}
-	if(data)
-		delete_timer(fitem->cleartimer,map_clearflooritem_timer);
-	else if(fitem->item_data.card[0] == (short)0xff00)
-		intif_delete_petdata(*((long *)(&fitem->item_data.card[1])));
-	clif_clearflooritem(fitem,0);
-	map_delobject(fitem->bl.id);
-
-	return 0;
-}
-
-/*==========================================
- * (m,x,y)�̎���range�}�X���̋�(=�N���”\)cell��
- * ������K���ȃ}�X�ڂ̍��W��x+(y<<16)�ŕԂ�
- *
- * ����range=1�ŃA�C�e���h���b�v�p�r�̂�
- *------------------------------------------
- */
-int map_searchrandfreecell(int m,int x,int y,int range) {
-	int free_cell,i,j,c;
-
-	for(free_cell=0,i=-range;i<=range;i++){
-		if(i+y<0 || i+y>=map[m].ys)
-			continue;
-		for(j=-range;j<=range;j++){
-			if(j+x<0 || j+x>=map[m].xs)
-				continue;
-			if((c=read_gat(m,j+x,i+y))==1 || c==5)
-				continue;
-			free_cell++;
-		}
-	}
-	if(free_cell==0)
-		return -1;
-	free_cell=rand()%free_cell;
-	for(i=-range;i<=range;i++){
-		if(i+y<0 || i+y>=map[m].ys)
-			continue;
-		for(j=-range;j<=range;j++){
-			if(j+x<0 || j+x>=map[m].xs)
-				continue;
-			if((c=read_gat(m,j+x,i+y))==1 || c==5)
-				continue;
-			if(free_cell==0){
-				x+=j;
-				y+=i;
-				i=range+1;
-				break;
-			}
-			free_cell--;
-		}
-	}
-
-	return x+(y<<16);
-}
-
-/*==========================================
- * (m,x,y)�𒆐S��3x3�ȓ��ɏ��A�C�e���ݒu
- *
- * item_data��amount�ȊO��copy����
- *------------------------------------------
- */
-int map_addflooritem(struct item *item_data,int amount,int m,int x,int y,struct map_session_data *first_sd,
-    struct map_session_data *second_sd,struct map_session_data *third_sd,int type) {
-	int xy,r;
-	unsigned int tick;
-	struct flooritem_data *fitem=NULL;
-
-	nullpo_retr(0, item_data);
-
-	if((xy=map_searchrandfreecell(m,x,y,1))<0)
-		return 0;
-	r=rand();
-
-	fitem = (struct flooritem_data *)aCalloc(1,sizeof(*fitem));
-	fitem->bl.type=BL_ITEM;
-	fitem->bl.prev = fitem->bl.next = NULL;
-	fitem->bl.m=m;
-	fitem->bl.x=xy&0xffff;
-	fitem->bl.y=(xy>>16)&0xffff;
-	fitem->first_get_id = 0;
-	fitem->first_get_tick = 0;
-	fitem->second_get_id = 0;
-	fitem->second_get_tick = 0;
-	fitem->third_get_id = 0;
-	fitem->third_get_tick = 0;
-
-	fitem->bl.id = map_addobject(&fitem->bl);
-	if(fitem->bl.id==0){
-		free(fitem);
-		return 0;
-	}
-
-	tick = gettick();
-	if(first_sd) {
-		fitem->first_get_id = first_sd->bl.id;
-		if(type)
-			fitem->first_get_tick = tick + battle_config.mvp_item_first_get_time;
-		else
-			fitem->first_get_tick = tick + battle_config.item_first_get_time;
-	}
-	if(second_sd) {
-		fitem->second_get_id = second_sd->bl.id;
-		if(type)
-			fitem->second_get_tick = tick + battle_config.mvp_item_first_get_time + battle_config.mvp_item_second_get_time;
-		else
-			fitem->second_get_tick = tick + battle_config.item_first_get_time + battle_config.item_second_get_time;
-	}
-	if(third_sd) {
-		fitem->third_get_id = third_sd->bl.id;
-		if(type)
-			fitem->third_get_tick = tick + battle_config.mvp_item_first_get_time + battle_config.mvp_item_second_get_time + battle_config.mvp_item_third_get_time;
-		else
-			fitem->third_get_tick = tick + battle_config.item_first_get_time + battle_config.item_second_get_time + battle_config.item_third_get_time;
-	}
-
-	memcpy(&fitem->item_data,item_data,sizeof(*item_data));
-	fitem->item_data.amount=amount;
-	fitem->subx=(r&3)*3+3;
-	fitem->suby=((r>>2)&3)*3+3;
-	fitem->cleartimer=add_timer(gettick()+battle_config.flooritem_lifetime,map_clearflooritem_timer,fitem->bl.id,0);
-
-	map_addblock(&fitem->bl);
-	clif_dropflooritem(fitem);
-
-	return fitem->bl.id;
-}
-
-/*==========================================
- * charid_db�֒lj�(�ԐM�҂�������ΕԐM)
- *------------------------------------------
- */
-void map_addchariddb(int charid, char *name) {
-	struct charid2nick *p=NULL;
-	int req=0;
-
-	p=numdb_search(charid_db,charid);
-	if(p==NULL){	// �f�[�^�x�[�X�ɂȂ�
-		p = (struct charid2nick *)aCalloc(1,sizeof(struct charid2nick));
-		p->req_id=0;
-	}else
-		numdb_erase(charid_db,charid);
-
-	req=p->req_id;
-	memcpy(p->nick,name,24);
-	p->req_id=0;
-	numdb_insert(charid_db,charid,p);
-	if(req){	// �ԐM�҂�������ΕԐM
-		struct map_session_data *sd = map_id2sd(req);
-		if(sd!=NULL)
-			clif_solved_charname(sd,charid);
-	}
-}
-
-/*==========================================
- * charid_db�֒lj��i�ԐM�v���̂݁j
- *------------------------------------------
- */
-int map_reqchariddb(struct map_session_data * sd,int charid) {
-	struct charid2nick *p=NULL;
-
-	nullpo_retr(0, sd);
-
-	p=numdb_search(charid_db,charid);
-	if(p!=NULL)	// �f�[�^�x�[�X�ɂ��łɂ���
-		return 0;
-	p = (struct charid2nick *)aCalloc(1,sizeof(struct charid2nick));
-	p->req_id=sd->bl.id;
-	numdb_insert(charid_db,charid,p);
-	return 0;
-}
-
-/*==========================================
- * id_db��bl��lj�
- *------------------------------------------
- */
-void map_addiddb(struct block_list *bl) {
-	nullpo_retv(bl);
-
-	numdb_insert(id_db,bl->id,bl);
-}
-
-/*==========================================
- * id_db����bl���폜
- *------------------------------------------
- */
-void map_deliddb(struct block_list *bl) {
-	nullpo_retv(bl);
-
-	numdb_erase(id_db,bl->id);
-}
-
-/*==========================================
- * nick_db��sd��lj�
- *------------------------------------------
- */
-void map_addnickdb(struct map_session_data *sd) {
-	nullpo_retv(sd);
-
-	strdb_insert(nick_db,sd->status.name,sd);
-}
-
-/*==========================================
- * PC��quit���� map.c����
- *
- * quit�����̎�̂��Ⴄ�悤�ȋC�����Ă���
- *------------------------------------------
- */
-int map_quit(struct map_session_data *sd) {
-	int i;
-
-	nullpo_retr(0, sd);
-
-	if(sd->chatID)	// �`���b�g����o��
-		chat_leavechat(sd);
-		
-	if(sd->trade_partner)	// ����𒆒f����
-		trade_tradecancel(sd);
-
-	if(sd->party_invite>0)	// �p�[�e�B���U�����ۂ���
-		party_reply_invite(sd,sd->party_invite_account,0);
-
-	if(sd->guild_invite>0)	// �M���h���U�����ۂ���
-		guild_reply_invite(sd,sd->guild_invite,0);
-	if(sd->guild_alliance>0)	// �M���h�������U�����ۂ���
-		guild_reply_reqalliance(sd,sd->guild_alliance_account,0);
-
-	party_send_logout(sd);	// �p�[�e�B�̃��O�A�E�g���b�Z�[�W���M
-
-	guild_send_memberinfoshort(sd,0);	// �M���h�̃��O�A�E�g���b�Z�[�W���M
-
-	pc_cleareventtimer(sd);	// �C�x���g�^�C�}��j������
-
-	if(sd->state.storage_flag)
-		storage_guild_storage_quit(sd,0);
-	else
-		storage_storage_quit(sd);	// �q�ɂ��J���Ă�Ȃ�ۑ�����
-
-	skill_castcancel(&sd->bl,0);	// �r���𒆒f����
-	skill_stop_dancing(&sd->bl,1);// �_���X/���t���f
-
-	if(sd->sc_data && sd->sc_data[SC_BERSERK].timer!=-1) //�o�[�T�[�N���̏I����HP��100��
-		sd->status.hp = 100;
-
-	skill_status_change_clear(&sd->bl,1);	// �X�e�[�^�X�ُ����������
-	skill_clear_unitgroup(&sd->bl);	// �X�L�����j�b�g�O���[�v�̍폜
-	skill_cleartimerskill(&sd->bl);
-	pc_stop_walking(sd,0);
-	pc_stopattack(sd);
-	pc_delinvincibletimer(sd);
-	pc_delspiritball(sd,sd->spiritball,1);
-	skill_gangsterparadise(sd,0);
-
-	pc_calcstatus(sd,4);
-
-	clif_clearchar_area(&sd->bl,2);
-
-	if(sd->status.pet_id && sd->pd) {
-		pet_lootitem_drop(sd->pd,sd);
-		pet_remove_map(sd);
-		if(sd->pet.intimate <= 0) {
-			intif_delete_petdata(sd->status.pet_id);
-			sd->status.pet_id = 0;
-			sd->pd = NULL;
-			sd->petDB = NULL;
-		}
-		else
-			intif_save_petdata(sd->status.account_id,&sd->pet);
-	}
-
-	if(pc_isdead(sd))
-		pc_setrestartvalue(sd,2);
-	pc_makesavestatus(sd);
-	//�N���[���X�L���Ŋo�����X�L���͏���
-	for(i=0;i<MAX_SKILL;i++){
-		if(sd->status.skill[i].flag == 13){
-			sd->status.skill[i].id=0;
-			sd->status.skill[i].lv=0;
-			sd->status.skill[i].flag=0;
-		}
-	}
-	chrif_save(sd);
-	storage_storage_save(sd);
-
-	if( sd->npc_stackbuf && sd->npc_stackbuf != NULL)
-		free( sd->npc_stackbuf );
-
-	map_delblock(&sd->bl);
-
-#ifndef TXT_ONLY
-	chrif_char_offline(sd);
-#endif
-
-	numdb_erase(id_db,sd->bl.id);
-	strdb_erase(nick_db,sd->status.name);
-	numdb_erase(charid_db,sd->status.char_id);
-
-	return 0;
-}
-
-/*==========================================
- * id�ԍ���PC��T���B���Ȃ����NULL
- *------------------------------------------
- */
-struct map_session_data * map_id2sd(int id) {
-// remove search from db, because:
-// 1 - all players, npc, items and mob are in this db (to search, it's not speed, and search in session is more sure)
-// 2 - DB seems not always correct. Sometimes, when a player disconnects, its id (account value) is not removed and structure
-//     point to a memory area that is not more a session_data and value are incorrect (or out of available memory) -> crash
-// replaced by searching in all session.
-// by searching in session, we are sure that fd, session, and account exist.
-/*
-	struct block_list *bl;
-
-	bl=numdb_search(id_db,id);
-	if(bl && bl->type==BL_PC)
-		return (struct map_session_data*)bl;
-	return NULL;
-*/
-	int i;
-	struct map_session_data *sd=NULL;
-
-	for(i = 0; i < fd_max; i++)
-		if (session[i] && (sd = session[i]->session_data) && sd->bl.id == id)
-			return sd;
-
-	return NULL;
-}
-
-/*==========================================
- * char_id�ԍ��̖��O��T��
- *------------------------------------------
- */
-char * map_charid2nick(int id) {
-	struct charid2nick *p=numdb_search(charid_db,id);
-
-	if(p==NULL)
-		return NULL;
-	if(p->req_id!=0)
-		return NULL;
-	return p->nick;
-}
-
-
-/*==========================================
- * Search session data from a nick name
- * (without sensitive case if necessary)
- * return map_session_data pointer or NULL
- *------------------------------------------
- */
-struct map_session_data * map_nick2sd(char *nick) {
-	int i, quantity=0, nicklen;
-	struct map_session_data *sd = NULL;
-	struct map_session_data *pl_sd = NULL;
-
-	if (nick == NULL)
-		return NULL;
-
-    nicklen = strlen(nick);
-
-	for (i = 0; i < fd_max; i++) {
-		if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth)
-			// Without case sensitive check (increase the number of similar character names found)
-			if (strnicmp(pl_sd->status.name, nick, nicklen) == 0) {
-				// Strict comparison (if found, we finish the function immediatly with correct value)
-				if (strcmp(pl_sd->status.name, nick) == 0)
-					return pl_sd;
-				quantity++;
-				sd = pl_sd;
-			}
-	}
-	// Here, the exact character name is not found
-	// We return the found index of a similar account ONLY if there is 1 similar character
-	if (quantity == 1)
-		return sd;
-
-	// Exact character name is not found and 0 or more than 1 similar characters have been found ==> we say not found
-	return NULL;
-}
-
-/*==========================================
- * id�ԍ��̕���T��
- * �ꎞobject�̏ꍇ�͔z��������̂�
- *------------------------------------------
- */
-struct block_list * map_id2bl(int id)
-{
-	struct block_list *bl=NULL;
-	if(id<sizeof(object)/sizeof(object[0]))
-		bl = object[id];
-	else
-		bl = numdb_search(id_db,id);
-
-	return bl;
-}
-
-/*==========================================
- * id_db���̑S�Ă�func�����s
- *------------------------------------------
- */
-int map_foreachiddb(int (*func)(void*,void*,va_list),...) {
-	va_list ap=NULL;
-
-	va_start(ap,func);
-	numdb_foreach(id_db,func,ap);
-	va_end(ap);
-	return 0;
-}
-
-/*==========================================
- * map.npc�֒lj� (warp���̗̈掝���̂�)
- *------------------------------------------
- */
-int map_addnpc(int m,struct npc_data *nd) {
-	int i;
-	if(m<0 || m>=map_num)
-		return -1;
-	for(i=0;i<map[m].npc_num && i<MAX_NPC_PER_MAP;i++)
-		if(map[m].npc[i]==NULL)
-			break;
-	if(i==MAX_NPC_PER_MAP){
-		if(battle_config.error_log)
-			printf("too many NPCs in one map %s\n",map[m].name);
-		return -1;
-	}
-	if(i==map[m].npc_num){
-		map[m].npc_num++;
-	}
-
-	nullpo_retr(0, nd);
-
-	map[m].npc[i]=nd;
-	nd->n = i;
-	numdb_insert(id_db,nd->bl.id,nd);
-
-	return i;
-}
-
-void map_removenpc(void) {
-    int i,m,n=0;
-    
-    for(m=0;m<map_num;m++) {
-        for(i=0;i<map[m].npc_num && i<MAX_NPC_PER_MAP;i++) {
-            if(map[m].npc[i]!=NULL) {
-                clif_clearchar_area(&map[m].npc[i]->bl,2);
-                map_delblock(&map[m].npc[i]->bl);
-                numdb_erase(id_db,map[m].npc[i]->bl.id);
-                if(map[m].npc[i]->bl.subtype==SCRIPT) {
-//                    free(map[m].npc[i]->u.scr.script);
-//                    free(map[m].npc[i]->u.scr.label_list);
-                }
-                free(map[m].npc[i]);
-                map[m].npc[i] = NULL;
-                n++;
-            }
-        }
-    }
-    printf("%d NPCs removed.\n",n);
-}
-
-/*==========================================
- * map������map�ԍ��֕ϊ�
- *------------------------------------------
- */
-int map_mapname2mapid(char *name) {
-	struct map_data *md=NULL;
-
-	md=strdb_search(map_db,name);
-	if(md==NULL || md->gat==NULL)
-		return -1;
-	return md->m;
-}
-
-/*==========================================
- * ���Imap������ip,port�ϊ�
- *------------------------------------------
- */
-int map_mapname2ipport(char *name,int *ip,int *port) {
-	struct map_data_other_server *mdos=NULL;
-
-	mdos=strdb_search(map_db,name);
-	if(mdos==NULL || mdos->gat)
-		return -1;
-	*ip=mdos->ip;
-	*port=mdos->port;
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int map_check_dir(int s_dir,int t_dir) {
-	if(s_dir == t_dir)
-		return 0;
-	switch(s_dir) {
-		case 0:
-			if(t_dir == 7 || t_dir == 1 || t_dir == 0)
-				return 0;
-			break;
-		case 1:
-			if(t_dir == 0 || t_dir == 2 || t_dir == 1)
-				return 0;
-			break;
-		case 2:
-			if(t_dir == 1 || t_dir == 3 || t_dir == 2)
-				return 0;
-			break;
-		case 3:
-			if(t_dir == 2 || t_dir == 4 || t_dir == 3)
-				return 0;
-			break;
-		case 4:
-			if(t_dir == 3 || t_dir == 5 || t_dir == 4)
-				return 0;
-			break;
-		case 5:
-			if(t_dir == 4 || t_dir == 6 || t_dir == 5)
-				return 0;
-			break;
-		case 6:
-			if(t_dir == 5 || t_dir == 7 || t_dir == 6)
-				return 0;
-			break;
-		case 7:
-			if(t_dir == 6 || t_dir == 0 || t_dir == 7)
-				return 0;
-			break;
-	}
-	return 1;
-}
-
-/*==========================================
- * �މ�̕������v�Z
- *------------------------------------------
- */
-int map_calc_dir( struct block_list *src,int x,int y) {
-	int dir=0;
-	int dx,dy;
-
-	nullpo_retr(0, src);
-
-	dx=x-src->x;
-	dy=y-src->y;
-	if( dx==0 && dy==0 ){	// �މ�̏ꏊ��v
-		dir=0;	// ��
-	}else if( dx>=0 && dy>=0 ){	// �����I�ɉE��
-		dir=7;						// �E��
-		if( dx*3-1<dy ) dir=0;		// ��
-		if( dx>dy*3 ) dir=6;		// �E
-	}else if( dx>=0 && dy<=0 ){	// �����I�ɉE��
-		dir=5;						// �E��
-		if( dx*3-1<-dy ) dir=4;		// ��
-		if( dx>-dy*3 ) dir=6;		// �E
-	}else if( dx<=0 && dy<=0 ){ // �����I�ɍ���
-		dir=3;						// ����
-		if( dx*3+1>dy ) dir=4;		// ��
-		if( dx<dy*3 ) dir=2;		// ��
-	}else{						// �����I�ɍ���
-		dir=1;						// ����
-		if( -dx*3-1<dy ) dir=0;		// ��
-		if( -dx>dy*3 ) dir=2;		// ��
-	}
-	return dir;
-}
-
-// gat�n
-/*==========================================
- * (m,x,y)�̏�Ԃ𒲂ׂ�
- *------------------------------------------
- */
-int map_getcell(int m,int x,int y) {
-	if(x<0 || x>=map[m].xs-1 || y<0 || y>=map[m].ys-1)
-		return 1;
-	return map[m].gat[x+y*map[m].xs];
-}
-
-/*==========================================
- * (m,x,y)�̏�Ԃ�t�ɂ���
- *------------------------------------------
- */
-int map_setcell(int m,int x,int y,int t) {
-	if(x<0 || x>=map[m].xs || y<0 || y>=map[m].ys)
-		return t;
-	return map[m].gat[x+y*map[m].xs]=t;
-}
-
-/*==========================================
- * ���I�Ǘ��̃}�b�v��db�ɒlj�
- *------------------------------------------
- */
-int map_setipport(char *name,unsigned long ip,int port) {
-	struct map_data *md=NULL;
-	struct map_data_other_server *mdos=NULL;
-
-	md=strdb_search(map_db,name);
-	if(md==NULL){ // not exist -> add new data
-		mdos=(struct map_data_other_server *)aCalloc(1,sizeof(struct map_data_other_server));
-		memcpy(mdos->name,name,24);
-		mdos->gat  = NULL;
-		mdos->ip   = ip;
-		mdos->port = port;
-		strdb_insert(map_db,mdos->name,mdos);
-	} else {
-		if(md->gat){ // local -> check data
-			if(ip!=clif_getip() || port!=clif_getport()){
-				printf("from char server : %s -> %08lx:%d\n",name,ip,port);
-				return 1;
-			}
-		} else { // update
-			mdos=(struct map_data_other_server *)md;
-			mdos->ip   = ip;
-			mdos->port = port;
-		}
-	}
-	return 0;
-}
-
-// ����������
-/*==========================================
- * ���ꍂ���ݒ�
- *------------------------------------------
- */
-static struct {
-	char mapname[24];
-	int waterheight;
-} *waterlist=NULL;
-
-#define NO_WATER 1000000
-
-static int map_waterheight(char *mapname) {
-	if(waterlist){
-		int i;
-		for(i=0;waterlist[i].mapname[0] && i < MAX_MAP_PER_SERVER;i++)
-			if(strcmp(waterlist[i].mapname,mapname)==0)
-				return waterlist[i].waterheight;
-	}
-	return NO_WATER;
-}
-
-static void map_readwater(char *watertxt) {
-	char line[1024],w1[1024];
-	FILE *fp=NULL;
-	int n=0;
-
-	fp=fopen(watertxt,"r");
-	if(fp==NULL){
-		printf("file not found: %s\n",watertxt);
-		return;
-	}
-	if(waterlist==NULL)
-		waterlist=aCalloc(MAX_MAP_PER_SERVER,sizeof(*waterlist));
-	while(fgets(line,1020,fp) && n < MAX_MAP_PER_SERVER){
-		int wh,count;
-		if(line[0] == '/' && line[1] == '/')
-			continue;
-		if((count=sscanf(line,"%s%d",w1,&wh)) < 1){
-			continue;
-		}
-		strcpy(waterlist[n].mapname,w1);
-		if(count >= 2)
-			waterlist[n].waterheight = wh;
-		else
-			waterlist[n].waterheight = 3;
-		n++;
-	}
-	fclose(fp);
-}
-
-/*==========================================
- * �}�b�v1���ǂݍ���
- *------------------------------------------
- */
-static int map_readmap(int m,char *fn, char *alias) {
-    unsigned char *gat = "";
-	int s;
-	int x,y,xs,ys;
-	struct gat_1cell {char type;} *p;
-	int wh;
-	size_t size;
-
-	// read & convert fn
-	gat=grfio_read(fn);
-	if(gat==NULL)
-		return -1;
-	
-	printf("\rLoading Maps [%d/%d]: %-50s  ",m,map_num,fn);
-	fflush(stdout);
-
-	map[m].m=m;
-	xs=map[m].xs=*(short*)(gat);
-	ys=map[m].ys=*(short*)(gat+2);
-	printf("\n%i %i\n", xs, ys);
-	map[m].gat = calloc(s = map[m].xs * map[m].ys, 1);
-	if(map[m].gat==NULL){
-		printf("out of memory : map_readmap gat\n");
-		exit(1);
-	}
-
-	map[m].npc_num=0;
-	map[m].users=0;
-	memset(&map[m].flag,0,sizeof(map[m].flag));
-	if(battle_config.pk_mode) map[m].flag.pvp = 1; // make all maps pvp for pk_mode [Valaris]
-	wh=map_waterheight(map[m].name);
-	for(y=0;y<ys;y++){
-		p=(struct gat_1cell*)(gat+y*xs+4);
-		for(x=0;x<xs;x++){
-			/*if(wh!=NO_WATER && p->type==0){
-				// ���ꔻ��
-				map[m].gat[x+y*xs]=(p->high[0]>wh || p->high[1]>wh || p->high[2]>wh || p->high[3]>wh) ? 3 : 0;
-			} else {*/
-				map[m].gat[x+y*xs]=p->type;
-			//}
-			p++;
-		}
-	}
-	free(gat);
-
-	map[m].bxs=(xs+BLOCK_SIZE-1)/BLOCK_SIZE;
-	map[m].bys=(ys+BLOCK_SIZE-1)/BLOCK_SIZE;
-	size = map[m].bxs * map[m].bys * sizeof(struct block_list*);
-
-	map[m].block = calloc(size, 1);
-	if(map[m].block == NULL){
-		printf("out of memory : map_readmap block\n");
-		exit(1);
-	}
-
-	map[m].block_mob = calloc(size, 1);
-	if (map[m].block_mob == NULL) {
-		printf("out of memory : map_readmap block_mob\n");
-		exit(1);
-	}
-
-	size = map[m].bxs*map[m].bys*sizeof(int);
-
-	map[m].block_count = calloc(size, 1);
-	if(map[m].block_count==NULL){
-		printf("out of memory : map_readmap block\n");
-		exit(1);
-	}
-	memset(map[m].block_count,0,size);
-
-	map[m].block_mob_count=calloc(size, 1);
-	if(map[m].block_mob_count==NULL){
-		printf("out of memory : map_readmap block_mob\n");
-		exit(1);
-	}
-	memset(map[m].block_mob_count,0,size);
-
-	strdb_insert(map_db,map[m].name,&map[m]);
-
-//	printf("%s read done\n",fn);
-
-	return 0;
-}
-
-/*==========================================
- * �S�Ă�map�f�[�^��ǂݍ���
- *------------------------------------------
- */
-int map_readallmap(void) {
-	int i,maps_removed=0;
-	char fn[256]="";
-
-	// ��ɑS���̃�b�v�̑��݂��m�F
-	for(i=0;i<map_num;i++){
-		if(strstr(map[i].name,".gat")==NULL)
-			continue;
-		sprintf(fn,"data\\%s",map[i].name);
-		if(grfio_size(fn) == -1) {
-		    map_delmap(map[i].name);
-                    maps_removed++;
-	        }
-        }
-	for(i=0;i<map_num;i++){
-		if(strstr(map[i].name,".gat")!=NULL) {
-                      char *p = strstr(map[i].name, ">"); // [MouseJstr]
-                      if (p != NULL) {
-                         char alias[64];
-                         *p = '\0';
-                         strcpy(alias, map[i].name);
-                         strcpy(map[i].name, p + 1);
-                         sprintf(fn,"data\\%s",map[i].name);
-                         if(map_readmap(i,fn, alias) == -1) {
-                            map_delmap(map[i].name);
-                            maps_removed++;
-                         }
-                      } else {
-                         sprintf(fn,"data\\%s",map[i].name);
-                         if(map_readmap(i,fn, NULL) == -1) {
-                            map_delmap(map[i].name);
-                            maps_removed++;
-                         }
-                      }
-	    }
-	}
-
-	free(waterlist);
-	printf("\rMaps Loaded: %d %60s\n",map_num,"");
-	printf("\rMaps Removed: %d \n",maps_removed);
-	return 0;
-}
-
-/*==========================================
- * �ǂݍ���map��lj�����
- *------------------------------------------
- */
-int map_addmap(char *mapname) {
-	if (strcmpi(mapname,"clear")==0) {
-		map_num=0;
-		return 0;
-	}
-
-	if (map_num >= MAX_MAP_PER_SERVER - 1) {
-		printf("too many map\n");
-		return 1;
-	}
-	memcpy(map[map_num].name, mapname, 24);
-	map_num++;
-	return 0;
-}
-
-/*==========================================
- * �ǂݍ���map���폜����
- *------------------------------------------
- */
-int map_delmap(char *mapname) {
-	int i;
-	
-	if (strcmpi(mapname, "all") == 0) {
-		map_num = 0;
-		return 0;
-	}
-	
-	for(i = 0; i < map_num; i++) {
-		if (strcmp(map[i].name, mapname) == 0) {
-		    printf("Removing map [ %s ] from maplist\n",map[i].name);
-			memmove(map+i, map+i+1, sizeof(map[0])*(map_num-i-1));
-			map_num--;
-		}
-	}
-	return 0;
-}
-
-/*==========================================
- * �ݒ�t�@�C����ǂݍ���
- *------------------------------------------
- */
-int map_config_read(char *cfgName) {
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp;
-	struct hostent *h = NULL;
-
-	fp = fopen(cfgName,"r");
-	if (fp == NULL) {
-		printf("Map configuration file not found at: %s\n", cfgName);
-		exit(1);
-	}
-	while(fgets(line, sizeof(line) -1, fp)) {
-		if (line[0] == '/' && line[1] == '/')
-			continue;
-		if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) == 2) {
-			if (strcmpi(w1, "userid")==0){
-				chrif_setuserid(w2);
-			} else if (strcmpi(w1, "passwd") == 0) {
-				chrif_setpasswd(w2);
-			} else if (strcmpi(w1, "char_ip") == 0) {
-				h = gethostbyname (w2);
-				if(h != NULL) { 
-					printf("Character server IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-					sprintf(w2,"%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				}
-				chrif_setip(w2);
-			} else if (strcmpi(w1, "char_port") == 0) {
-				chrif_setport(atoi(w2));
-			} else if (strcmpi(w1, "map_ip") == 0) {
-				h = gethostbyname (w2);
-				if (h != NULL) { 
-					printf("Map server IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-					sprintf(w2, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				}
-				clif_setip(w2);
-			} else if (strcmpi(w1, "map_port") == 0) {
-				clif_setport(atoi(w2));
-				map_port = (atoi(w2));
-			} else if (strcmpi(w1, "water_height") == 0) {
-				map_readwater(w2);
-			} else if (strcmpi(w1, "map") == 0) {
-				map_addmap(w2);
-			} else if (strcmpi(w1, "delmap") == 0) {
-				map_delmap(w2);
-			} else if (strcmpi(w1, "npc") == 0) {
-				npc_addsrcfile(w2);
-			} else if (strcmpi(w1, "delnpc") == 0) {
-				npc_delsrcfile(w2);
-			} else if (strcmpi(w1, "data_grf") == 0) {
-				grfio_setdatafile(w2);
-			} else if (strcmpi(w1, "sdata_grf") == 0) {
-				grfio_setsdatafile(w2);
-			} else if (strcmpi(w1, "adata_grf") == 0) {
-				grfio_setadatafile(w2);
-			} else if (strcmpi(w1, "autosave_time") == 0) {
-				autosave_interval = atoi(w2) * 1000;
-				if (autosave_interval <= 0)
-					autosave_interval = DEFAULT_AUTOSAVE_INTERVAL;
-			} else if (strcmpi(w1, "motd_txt") == 0) {
-				strcpy(motd_txt, w2);
-			} else if (strcmpi(w1, "help_txt") == 0) {
-				strcpy(help_txt, w2);
-			} else if (strcmpi(w1, "mapreg_txt") == 0) {
-				strcpy(mapreg_txt, w2);
-			} else if (strcmpi(w1, "import") == 0) {
-				map_config_read(w2);
-			}
-		}
-	}
-	fclose(fp);
-
-	return 0;
-}
-
-#ifndef TXT_ONLY
-/*=======================================
- *  MySQL Init
- *---------------------------------------
- */
-
-int map_sql_init(void){
-
-    mysql_init(&mmysql_handle);
-
-	//DB connection start
-	printf("Connect Map DB Server....\n");
-	if(!mysql_real_connect(&mmysql_handle, map_server_ip, map_server_id, map_server_pw,
-		map_server_db ,map_server_port, (char *)NULL, 0)) {
-			//pointer check
-			printf("%s\n",mysql_error(&mmysql_handle));
-			exit(1);
-	}
-	else {
-		printf ("connect success! (Map Server Connection)\n");
-	}
-	
-    mysql_init(&lmysql_handle);
-    
-    //DB connection start
-    printf("Connect Login DB Server....\n");
-    if(!mysql_real_connect(&lmysql_handle, login_server_ip, login_server_id, login_server_pw,
-        login_server_db ,login_server_port, (char *)NULL, 0)) {
-	        //pointer check
-			printf("%s\n",mysql_error(&lmysql_handle));
-			exit(1);
-	}
-	 else {
-		printf ("connect success! (Login Server Connection)\n");
-	 }
-	
-	if(battle_config.mail_system) { // mail system [Valaris]
-		mysql_init(&mail_handle);
-		if(!mysql_real_connect(&mail_handle, map_server_ip, map_server_id, map_server_pw,
-			map_server_db ,map_server_port, (char *)NULL, 0)) {
-				printf("%s\n",mysql_error(&mail_handle));
-				exit(1);
-		}
-	}
-
-	return 0;
-}
-
-int map_sql_close(void){
-	mysql_close(&mmysql_handle);
-	printf("Close Map DB Connection....\n");
-
-	mysql_close(&lmysql_handle);
-	printf("Close Login DB Connection....\n");
-	return 0;
-}
-
-int sql_config_read(char *cfgName)
-{
-	int i;
-	char line[1024],w1[1024],w2[1024];
-	FILE *fp;
-
-	fp=fopen(cfgName,"r");
-	if(fp==NULL){
-		printf("file not found: %s\n",cfgName);
-		return 1;
-	}
-	while(fgets(line,1020,fp)){
-		if(line[0] == '/' && line[1] == '/')
-			continue;
-		i=sscanf(line,"%[^:]: %[^\r\n]",w1,w2);
-		if(i!=2)
-			continue;
-		if(strcmpi(w1,"item_db_db")==0){
-			strcpy(item_db_db,w2);
-		} else if(strcmpi(w1,"mob_db_db")==0){
-			strcpy(mob_db_db,w2);
-		} else if(strcmpi(w1,"login_db_level")==0){
-			strcpy(login_db_level,w2);
-		} else if(strcmpi(w1,"login_db_account_id")==0){
-		    strcpy(login_db_account_id,w2);
-		} else if(strcmpi(w1,"login_db")==0){
-			strcpy(login_db,w2);
-		} else if (strcmpi(w1, "char_db") == 0) {
-			strcpy(char_db, w2); 
-		//Map Server SQL DB
-		} else if(strcmpi(w1,"map_server_ip")==0){
-			strcpy(map_server_ip, w2);
-			printf ("set map_server_ip : %s\n",w2);
-		} else if(strcmpi(w1,"map_server_port")==0){
-			map_server_port=atoi(w2);
-			printf ("set map_server_port : %s\n",w2);
-		} else if(strcmpi(w1,"map_server_id")==0){
-			strcpy(map_server_id, w2);
-			printf ("set map_server_id : %s\n",w2);
-		} else if(strcmpi(w1,"map_server_pw")==0){
-			strcpy(map_server_pw, w2);
-			printf ("set map_server_pw : %s\n",w2);
-		} else if(strcmpi(w1,"map_server_db")==0){
-			strcpy(map_server_db, w2);
-			printf ("set map_server_db : %s\n",w2);
-		//Map server option to use SQL db or not
-		} else if(strcmpi(w1,"use_sql_db")==0){
-			if (strcmpi(w2,"yes")){db_use_sqldbs=0;} else if (strcmpi(w2,"no")){db_use_sqldbs=1;}
-			printf ("Using SQL dbs: %s\n",w2);
-		//Login Server SQL DB
-		} else if(strcmpi(w1,"login_server_ip")==0){
-			strcpy(login_server_ip, w2);
-			printf ("set login_server_ip : %s\n",w2);
-        	} else if(strcmpi(w1,"login_server_port")==0){
-			login_server_port = atoi(w2);
-			printf ("set login_server_port : %s\n",w2);
-		} else if(strcmpi(w1,"login_server_id")==0){
-			strcpy(login_server_id, w2);
-			printf ("set login_server_id : %s\n",w2);
-		} else if(strcmpi(w1,"login_server_pw")==0){
-			strcpy(login_server_pw, w2);
-			printf ("set login_server_pw : %s\n",w2);
-		} else if(strcmpi(w1,"login_server_db")==0){
-			strcpy(login_server_db, w2);
-			printf ("set login_server_db : %s\n",w2);
-		} else if(strcmpi(w1,"lowest_gm_level")==0){
-			lowest_gm_level = atoi(w2);
-			printf ("set lowest_gm_level : %s\n",w2);
-		} else if(strcmpi(w1,"read_gm_interval")==0){
-			read_gm_interval = ( atoi(w2) * 60 * 1000 ); // Minutes multiplied by 60 secs per min by 1000 milliseconds per second
-			printf ("set read_gm_interval : %s\n",w2);
-		}
-	}
-	fclose(fp);
-
-	return 0;
-}
-
-// sql online status checking [Valaris]
-void char_offline(struct map_session_data *sd)
-{
-	if(sd && sd->status.char_id) {
-		sprintf(tmp_sql,"UPDATE `%s` SET `online`='0' WHERE `char_id`='%d'", char_db, sd->status.char_id);
-	        if(mysql_query(&mmysql_handle, tmp_sql) ) {
-			printf("DB server Error (update online `%s`)- %s\n", char_db, mysql_error(&mmysql_handle) );
-	        }
-	}
-}
-
-void do_reset_online(void)
-{
-	sprintf(tmp_sql,"UPDATE `%s` SET `online`='0' WHERE `online`='1'", char_db);
-	if(mysql_query(&mmysql_handle, tmp_sql) ) {
-		printf("DB server Error (reset_online `%s`)- %s\n", char_db, mysql_error(&mmysql_handle) );
-	}
-}
-
-int online_timer(int tid,unsigned int tick,int id,int data)
-{
-	if(check_online_timer != tid)
-		return 0;
-
-	char_online_check();
-
-	check_online_timer=add_timer(gettick()+CHECK_INTERVAL,online_timer,0,0);	
-
-	return 0;
-}
-
-void char_online_check(void)
-{
-	int i;
-	struct map_session_data *sd=NULL;
-
-	do_reset_online();
-
-	for(i=0;i<fd_max;i++){
-		if (session[i] && (sd = session[i]->session_data) && sd && sd->state.auth && 
-		 !(battle_config.hide_GM_session && pc_isGM(sd)))
-			if(sd->status.char_id) {
-				sprintf(tmp_sql,"UPDATE `%s` SET `online`='1' WHERE `char_id`='%d'", char_db, sd->status.char_id);
-			        if(mysql_query(&mmysql_handle, tmp_sql) ) {
-					printf("DB server Error (update online `%s`)- %s\n", char_db, mysql_error(&mmysql_handle) );
-				}
-			}
-	}
-
-	
-	if(check_online_timer && check_online_timer != -1) {
-		delete_timer(check_online_timer,online_timer);
-		add_timer(gettick()+CHECK_INTERVAL,online_timer,0,0);
-	}
-
-}
-
-#endif /* not TXT_ONLY */
-
-int id_db_final(void *k,void *d,va_list ap){ return 0; }
-int map_db_final(void *k,void *d,va_list ap){ return 0; }
-int nick_db_final(void *k,void *d,va_list ap){ return 0; }
-int charid_db_final(void *k,void *d,va_list ap){ return 0; }
-
-static int cleanup_sub(struct block_list *bl, va_list ap) {
-	nullpo_retr(0, bl);
-
-        switch(bl->type) {
-        case BL_PC:
-            map_delblock(bl); // There is something better...
-            break;
-        case BL_NPC:
-            npc_delete((struct npc_data *)bl);
-            break;
-        case BL_MOB:
-            mob_delete((struct mob_data *)bl);
-            break;
-        case BL_PET:
-            pet_remove_map((struct map_session_data *)bl);
-            break;
-        case BL_ITEM:
-            map_clearflooritem(bl->id);
-            break;
-        case BL_SKILL:
-            skill_delunit((struct skill_unit *) bl);
-            break;
-        }
-
-	return 0;
-}
-
-/*==========================================
- * map�I�I��������
- *------------------------------------------
- */
-void do_final(void) {
-    int map_id, i;
-
-    for (map_id = 0; map_id < map_num;map_id++) {
-	if(map[map_id].m)
-		map_foreachinarea(cleanup_sub, map_id, 0, 0, map[map_id].xs, map[map_id].ys, 0, 0);
-    }
-
-    for (i = 0; i < fd_max; i++) 
-        delete_session(i);
-
-    map_removenpc();
-    timer_final();
-
-    numdb_final(id_db, id_db_final);
-    strdb_final(map_db, map_db_final);
-    strdb_final(nick_db, nick_db_final);
-    numdb_final(charid_db, charid_db_final);
-
-	for(i=0;i<=map_num;i++){
-		if(map[i].gat) free(map[i].gat);
-		if(map[i].block) free(map[i].block);
-		if(map[i].block_mob) free(map[i].block_mob);
-		if(map[i].block_count) free(map[i].block_count);
-		if(map[i].block_mob_count) free(map[i].block_mob_count);
-	}
-	do_final_script();
-	do_final_itemdb();
-	do_final_storage();
-        do_final_guild();
-#ifndef TXT_ONLY
-	do_reset_online();
-    map_sql_close();
-#endif /* not TXT_ONLY */
-}
-
-void map_helpscreen() {
-	exit(1);
-}
-
-/*======================================================
- * Map-Server Init and Command-line Arguments [Valaris]
- *------------------------------------------------------
- */
-int do_init(int argc, char *argv[]) {
-	int i;
-
-#ifndef TXT_ONLY
-	unsigned char *SQL_CONF_NAME="conf/inter_athena.conf";
-#endif
-	unsigned char *MAP_CONF_NAME = "conf/map_athena.conf";
-	unsigned char *BATTLE_CONF_FILENAME = "conf/battle_athena.conf";
-	unsigned char *ATCOMMAND_CONF_FILENAME = "conf/atcommand_athena.conf";
-	unsigned char *SCRIPT_CONF_NAME = "conf/script_athena.conf";
-	unsigned char *MSG_CONF_NAME = "conf/msg_athena.conf";
-	unsigned char *GRF_PATH_FILENAME = "conf/grf-files.txt";
-
-	srand(gettick());
-
-	for (i = 1; i < argc ; i++) {
-
-		if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "--h") == 0 || strcmp(argv[i], "--?") == 0 || strcmp(argv[i], "/?") == 0)
-			map_helpscreen();
-		else if (strcmp(argv[i], "--map_config") == 0)
-			MAP_CONF_NAME=argv[i+1];
-		else if (strcmp(argv[i],"--battle_config") == 0)
-			BATTLE_CONF_FILENAME = argv[i+1];
-		else if (strcmp(argv[i],"--atcommand_config") == 0)
-			ATCOMMAND_CONF_FILENAME = argv[i+1];
-		else if (strcmp(argv[i],"--script_config") == 0)
-			SCRIPT_CONF_NAME = argv[i+1];
-		else if (strcmp(argv[i],"--msg_config") == 0)
-			MSG_CONF_NAME = argv[i+1];
-		else if (strcmp(argv[i],"--grf_path_file") == 0)
-			GRF_PATH_FILENAME = argv[i+1];
-#ifndef TXT_ONLY
-		else if (strcmp(argv[i],"--sql_config") == 0)
-		    SQL_CONF_NAME = argv[i+1];
-#endif /* not TXT_ONLY */
-	}
-
-	map_config_read(MAP_CONF_NAME);
-	battle_config_read(BATTLE_CONF_FILENAME);
-	atcommand_config_read(ATCOMMAND_CONF_FILENAME);
-	script_config_read(SCRIPT_CONF_NAME);
-	msg_config_read(MSG_CONF_NAME);
-#ifndef TXT_ONLY
-	sql_config_read(SQL_CONF_NAME);
-#endif /* not TXT_ONLY */
-
-	atexit(do_final);
-
-	id_db = numdb_init();
-	map_db = strdb_init(16);
-	nick_db = strdb_init(24);
-	charid_db = numdb_init();
-#ifndef TXT_ONLY
-	map_sql_init();
-#endif /* not TXT_ONLY */
-
-	grfio_init(GRF_PATH_FILENAME);
-
-	map_readallmap();
-
-	add_timer_func_list(map_clearflooritem_timer, "map_clearflooritem_timer");
-
-#ifndef TXT_ONLY // online status timer, checks every hour [Valaris]
-	add_timer_func_list(online_timer, "online_timer");
-	check_online_timer=add_timer(gettick()+CHECK_INTERVAL,online_timer,0,0);	
-#endif /* not TXT_ONLY */
-
-	do_init_chrif();
-	do_init_clif();
-	do_init_itemdb();
-	do_init_mob();	// npc�̏�����������mob_spawn���āAmob_db���Q�Ƃ���̂�init_npc����
-	do_init_script();
-	do_init_npc();
-	do_init_pc();
-	do_init_party();
-	do_init_guild();
-	do_init_storage();
-	do_init_skill();
-	do_init_pet();
-
-#ifndef TXT_ONLY /* mail system [Valaris] */
-	if(battle_config.mail_system)	
-		do_init_mail();
-#endif /* not TXT_ONLY */
-
-	npc_event_do_oninit();	// npc��OnInit�C�x���g���s
-
-	if (battle_config.pk_mode == 1)
-		printf("The server is running in \033[1;31mPK Mode\033[0m.\n");
-
-	printf("The map-server is \033[1;32mready\033[0m (Server is listening on the port %d).\n\n", map_port);
-
-	return 0;
-}
-
diff --git a/misc/src/map/map.h b/misc/src/map/map.h
deleted file mode 100644
index 703bbb6..0000000
--- a/misc/src/map/map.h
+++ /dev/null
@@ -1,705 +0,0 @@
-// $Id: map.h,v 1.8 2004/09/25 11:39:17 MouseJstr Exp $
-#ifndef _MAP_H_
-#define _MAP_H_
-
-#include <stdarg.h>
-#include "mmo.h"
-
-#define MAX_PC_CLASS (1+6+6+1+6+1+1+1+1+4023)
-#define PC_CLASS_BASE 0
-#define PC_CLASS_BASE2 (PC_CLASS_BASE + 4001)
-#define PC_CLASS_BASE3 (PC_CLASS_BASE2 + 22)
-#define MAX_NPC_PER_MAP 512
-#define BLOCK_SIZE 8
-#define AREA_SIZE battle_config.area_size
-#define LOCAL_REG_NUM 16
-#define LIFETIME_FLOORITEM 60
-#define DAMAGELOG_SIZE 30
-#define LOOTITEM_SIZE 10
-#define MAX_SKILL_LEVEL 100
-#define MAX_STATUSCHANGE 200
-#define MAX_SKILLUNITGROUP 32
-#define MAX_MOBSKILLUNITGROUP 8
-#define MAX_SKILLUNITGROUPTICKSET 128
-#define MAX_SKILLTIMERSKILL 32
-#define MAX_MOBSKILLTIMERSKILL 10
-#define MAX_MOBSKILL 32
-#define MAX_EVENTQUEUE 2
-#define MAX_EVENTTIMER 32
-#define NATURAL_HEAL_INTERVAL 500
-#define MAX_FLOORITEM 500000
-#define MAX_LEVEL 255
-#define MAX_WALKPATH 48
-#define MAX_DROP_PER_MAP 48
-
-#define DEFAULT_AUTOSAVE_INTERVAL 60*1000
-
-#define OPTION_HIDE 0x40
-
-enum { BL_NUL, BL_PC, BL_NPC, BL_MOB, BL_ITEM, BL_CHAT, BL_SKILL , BL_PET };
-enum { WARP, SHOP, SCRIPT, MONS };
-struct block_list {
-	struct block_list *next,*prev;
-	int id;
-	short m,x,y;
-	unsigned char type;
-	unsigned char subtype;
-};
-
-struct walkpath_data {
-	unsigned char path_len,path_pos,path_half;
-	unsigned char path[MAX_WALKPATH];
-};
-struct script_reg {
-	int index;
-	int data;
-};
-struct script_regstr {
-	int index;
-	char data[256];
-};
-struct status_change {
-	int timer;
-	int val1,val2,val3,val4;
-};
-struct vending {
-	short index;
-	short amount;
-	int value;
-};
-
-struct skill_unit_group;
-struct skill_unit {
-	struct block_list bl;
-
-	struct skill_unit_group *group;
-
-	int limit;
-	int val1,val2;
-	short alive,range;
-};
-struct skill_unit_group {
-	int src_id;
-	int party_id;
-	int guild_id;
-	int map,range;
-	int target_flag;
-	unsigned int tick;
-	int limit,interval;
-
-	int skill_id,skill_lv;
-	int val1,val2;
-	char *valstr;
-	int unit_id;
-	int group_id;
-	int unit_count,alive_count;
-	struct skill_unit *unit;
-};
-struct skill_unit_group_tickset {
-	unsigned int tick;
-	int group_id;
-};
-struct skill_timerskill {
-	int timer;
-	int src_id;
-	int target_id;
-	int map;
-	short x,y;
-	short skill_id,skill_lv;
-	int type;
-	int flag;
-};
-
-struct npc_data;
-struct pet_db;
-struct item_data;
-struct square;
-
-struct map_session_data {
-	struct block_list bl;
-	struct {
-		unsigned auth : 1;
-		unsigned change_walk_target : 1;
-		unsigned attack_continue : 1;
-		unsigned menu_or_input : 1;
-		unsigned dead_sit : 2;
-		unsigned skillcastcancel : 1;
-		unsigned waitingdisconnect : 1;
-		unsigned lr_flag : 2;
-		unsigned connect_new : 1;
-		unsigned arrow_atk : 1;
-		unsigned attack_type : 3;
-		unsigned skill_flag : 1;
-		unsigned gangsterparadise : 1;
-		unsigned produce_flag : 1;
-		unsigned make_arrow_flag : 1;
-		unsigned potionpitcher_flag : 1;
-		unsigned storage_flag : 1;
-	} state;
-	struct {
-		unsigned killer : 1;
-		unsigned killable : 1;
-		unsigned restart_full_recover : 1;
-		unsigned no_castcancel : 1;
-		unsigned no_castcancel2 : 1;
-		unsigned no_sizefix : 1;
-		unsigned no_magic_damage : 1;
-		unsigned no_weapon_damage : 1;
-		unsigned no_gemstone : 1;
-		unsigned infinite_endure : 1;
-		unsigned unbreakable_weapon : 1;
-		unsigned unbreakable_armor : 1;
-		unsigned infinite_autospell : 1;
-	} special_state;
-	int char_id, login_id1, login_id2, sex;
-	int packet_ver; // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04 (by [Yor])
-	struct mmo_charstatus status;
-	struct item_data *inventory_data[MAX_INVENTORY];
-	short equip_index[11];
-	int weight,max_weight;
-	int cart_weight,cart_max_weight,cart_num,cart_max_num;
-	char mapname[24];
-	int fd,new_fd;
-	short to_x,to_y;
-	short speed,prev_speed;
-	short opt1,opt2,opt3;
-	char dir,head_dir;
-	unsigned int client_tick,server_tick;
-	struct walkpath_data walkpath;
-	int walktimer;
-	int npc_id,areanpc_id,npc_shopid;
-	int npc_pos;
-	int npc_menu;
-	int npc_amount;
-	int npc_stack,npc_stackmax;
-	char *npc_script,*npc_scriptroot;
-	char *npc_stackbuf;
-	char npc_str[256];
-	unsigned int chatID;
-
-	int attacktimer;
-	int attacktarget;
-	short attacktarget_lv;
-	unsigned int attackabletime;
-
-        int followtimer; // [MouseJstr]
-        int followtarget;
-
-	short attackrange,attackrange_;
-	int skilltimer;
-	int skilltarget;
-	short skillx,skilly;
-	short skillid,skilllv;
-	short skillitem,skillitemlv;
-	short skillid_old,skilllv_old;
-	short skillid_dance,skilllv_dance;
-	struct skill_unit_group skillunit[MAX_SKILLUNITGROUP];
-	struct skill_unit_group_tickset skillunittick[MAX_SKILLUNITGROUPTICKSET];
-	struct skill_timerskill skilltimerskill[MAX_SKILLTIMERSKILL];
-	int cloneskill_id,cloneskill_lv;
-	int potion_hp,potion_sp,potion_per_hp,potion_per_sp;
-
-	int invincible_timer;
-	unsigned int canact_tick;
-	unsigned int canmove_tick;
-	unsigned int canlog_tick;
-	int hp_sub,sp_sub;
-	int inchealhptick,inchealsptick,inchealspirithptick,inchealspiritsptick;
-// -- moonsoul (new tick for berserk self-damage)
-	int berserkdamagetick;
-	int fame;
-
-	short view_class;
-	short weapontype1,weapontype2;
-	short disguiseflag,disguise; // [Valaris]
-	int paramb[6],paramc[6],parame[6],paramcard[6];
-	int hit,flee,flee2,aspd,amotion,dmotion;
-	int watk,watk2,atkmods[3];
-	int def,def2,mdef,mdef2,critical,matk1,matk2;
-	int atk_ele,def_ele,star,overrefine;
-	int castrate,hprate,sprate,dsprate;
-	int addele[10],addrace[12],addsize[3],subele[10],subrace[12];
-	int addeff[10],addeff2[10],reseff[10];
-	int watk_,watk_2,atkmods_[3],addele_[10],addrace_[12],addsize_[3];	//�񓁗��̂��߂ɒlj�
-	int atk_ele_,star_,overrefine_;				//�񓁗��̂��߂ɒlj�
-	int base_atk,atk_rate;
-	int arrow_atk,arrow_ele,arrow_cri,arrow_hit,arrow_range;
-	int arrow_addele[10],arrow_addrace[12],arrow_addsize[3],arrow_addeff[10],arrow_addeff2[10];
-	int nhealhp,nhealsp,nshealhp,nshealsp,nsshealhp,nsshealsp;
-	int aspd_rate,speed_rate,hprecov_rate,sprecov_rate,critical_def,double_rate;
-	int near_attack_def_rate,long_attack_def_rate,magic_def_rate,misc_def_rate;
-	int matk_rate,ignore_def_ele,ignore_def_race,ignore_def_ele_,ignore_def_race_;
-	int ignore_mdef_ele,ignore_mdef_race;
-	int magic_addele[10],magic_addrace[12],magic_subrace[12];
-	int perfect_hit,get_zeny_num;
-	int critical_rate,hit_rate,flee_rate,flee2_rate,def_rate,def2_rate,mdef_rate,mdef2_rate;
-	int def_ratio_atk_ele,def_ratio_atk_ele_,def_ratio_atk_race,def_ratio_atk_race_;
-	int add_damage_class_count,add_damage_class_count_,add_magic_damage_class_count;
-	short add_damage_classid[10],add_damage_classid_[10],add_magic_damage_classid[10];
-	int add_damage_classrate[10],add_damage_classrate_[10],add_magic_damage_classrate[10];
-	short add_def_class_count,add_mdef_class_count;
-	short add_def_classid[10],add_mdef_classid[10];
-	int add_def_classrate[10],add_mdef_classrate[10];
-	short monster_drop_item_count;
-	short monster_drop_itemid[10];
-	int monster_drop_race[10],monster_drop_itemrate[10];
-	int double_add_rate,speed_add_rate,aspd_add_rate,perfect_hit_add, get_zeny_add_num;
-	short splash_range,splash_add_range;
-	short autospell_id,autospell_lv,autospell_rate;
-	short hp_drain_rate,hp_drain_per,sp_drain_rate,sp_drain_per;
-	short hp_drain_rate_,hp_drain_per_,sp_drain_rate_,sp_drain_per_;
-	int short_weapon_damage_return,long_weapon_damage_return;
-	int weapon_coma_ele[10],weapon_coma_race[12];
-	short break_weapon_rate,break_armor_rate;
-	short add_steal_rate;
-
-	short spiritball, spiritball_old;
-	int spirit_timer[MAX_SKILL_LEVEL];
-	int magic_damage_return; // AppleGirl Was Here
-	int random_attack_increase_add,random_attack_increase_per; // [Valaris]
-	int perfect_hiding; // [Valaris]
-	int unbreakable;
-
-	int die_counter;
-	short doridori_counter;
-
-	int reg_num;
-	struct script_reg *reg;
-	int regstr_num;
-	struct script_regstr *regstr;
-
-	struct status_change sc_data[MAX_STATUSCHANGE];
-	short sc_count;
-	struct square dev;
-
-	int trade_partner;
-	int deal_item_index[10];
-	int deal_item_amount[10];
-	int deal_zeny;
-	short deal_locked;
-
-	int party_sended,party_invite,party_invite_account;
-	int party_hp,party_x,party_y;
-
-	int guild_sended,guild_invite,guild_invite_account;
-	int guild_emblem_id,guild_alliance,guild_alliance_account;
-	int guildspy; // [Syrus22]
-	int partyspy; // [Syrus22]
-
-	int vender_id;
-	int vend_num;
-	char message[80];
-	struct vending vending[12];
-
-	int catch_target_class;
-	struct s_pet pet;
-	struct pet_db *petDB;
-	struct pet_data *pd;
-	int pet_hungry_timer;
-
-	int pvp_point,pvp_rank,pvp_timer,pvp_lastusers;
-
-	char eventqueue[MAX_EVENTQUEUE][50];
-	int eventtimer[MAX_EVENTTIMER];
-
-	int last_skillid,last_skilllv;		// Added by RoVeRT
-	struct{
-		char name[24];
-	} ignore[80];
-	int ignoreAll;
-	short sg_count;
-	
-#ifndef TXT_ONLY
-	int mail_counter;	// mail counter for mail system [Valaris]
-#endif
-
-};
-
-struct npc_timerevent_list {
-	int timer,pos;
-};
-struct npc_label_list {
-	char name[24];
-	int pos;
-};
-struct npc_item_list {
-	int nameid,value;
-};
-struct npc_data {
-	struct block_list bl;
-	short n;
-	short class,dir;
-	short speed;
-	char name[24];
-	char exname[24];
-	int chat_id;
-	short opt1,opt2,opt3,option;
-	short flag;
-	union {
-		struct {
-			char *script;
-			short xs,ys;
-			int guild_id;
-			int timer,timerid,timeramount,nexttimer;
-			unsigned int timertick;
-			struct npc_timerevent_list *timer_event;
-			int label_list_num;
-			struct npc_label_list *label_list;
-			int src_id;
-		} scr;
-		struct npc_item_list shop_item[1];
-		struct {
-			short xs,ys;
-			short x,y;
-			char name[16];
-		} warp;
-	} u;
-	// �����Ƀ����o��lj����Ă͂Ȃ�Ȃ�(shop_item���•ϒ��̈�)
-
-	char eventqueue[MAX_EVENTQUEUE][50];
-	int eventtimer[MAX_EVENTTIMER];
-	short arenaflag;
-};
-struct mob_data {
-	struct block_list bl;
-	short n;
-	short base_class,class,dir,mode;
-	short m,x0,y0,xs,ys;
-	char name[24];
-	int spawndelay1,spawndelay2;
-	struct {
-		unsigned state : 8;
-		unsigned skillstate : 8;
-		unsigned targettype : 1;
-		unsigned steal_flag : 1;
-		unsigned steal_coin_flag : 1;
-		unsigned skillcastcancel : 1;
-		unsigned master_check : 1;
-		unsigned change_walk_target : 1;
-		unsigned walk_easy : 1;
-		unsigned special_mob_ai : 3;
-	} state;
-	int timer;
-	short to_x,to_y;
-	short speed;
-	int hp;
-	int target_id,attacked_id;
-	short target_lv;
-	struct walkpath_data walkpath;
-	unsigned int next_walktime;
-	unsigned int attackabletime;
-	unsigned int last_deadtime,last_spawntime,last_thinktime;
-	unsigned int canmove_tick;
-	short move_fail_count;
-	struct {
-		int id;
-		int dmg;
-	} dmglog[DAMAGELOG_SIZE];
-	struct item *lootitem;
-	short lootitem_count;
-
-	struct status_change sc_data[MAX_STATUSCHANGE];
-	short sc_count;
-	short opt1,opt2,opt3,option;
-	short min_chase;
-	short sg_count;
-	int guild_id;
-	int deletetimer;
-
-	int skilltimer;
-	int skilltarget;
-	short skillx,skilly;
-	short skillid,skilllv,skillidx;
-	unsigned int skilldelay[MAX_MOBSKILL];
-	int def_ele;
-	int master_id,master_dist;
-	int exclusion_src,exclusion_party,exclusion_guild;
-	struct skill_timerskill skilltimerskill[MAX_MOBSKILLTIMERSKILL];
-	struct skill_unit_group skillunit[MAX_MOBSKILLUNITGROUP];
-	struct skill_unit_group_tickset skillunittick[MAX_SKILLUNITGROUPTICKSET];
-	char npc_event[50];
-	short size;
-};
-struct pet_data {
-	struct block_list bl;
-	short n;
-	short class,dir;
-	short speed;
-	char name[24];
-	struct {
-		unsigned state : 8 ;
-		unsigned skillstate : 8 ;
-		unsigned change_walk_target : 1 ;
-	} state;
-	int timer;
-	short to_x,to_y;
-	short equip;
-	struct walkpath_data walkpath;
-	int target_id;
-	short target_lv;
-	int move_fail_count;
-	unsigned int attackabletime,next_walktime,last_thinktime;
-	int skilltype,skillval,skilltimer,skillduration; // [Valaris]
-	int skillbonustype,skillbonusval,skillbonustimer,skillbonusduration; // [Valaris]
-	struct item *lootitem;
-	short loot; // [Valaris]
-	short lootmax; // [Valaris]
-	short lootitem_count;
-	short lootitem_weight;
-	int lootitem_timer;
-	struct skill_timerskill skilltimerskill[MAX_MOBSKILLTIMERSKILL]; // [Valaris]
-	struct skill_unit_group skillunit[MAX_MOBSKILLUNITGROUP]; // [Valaris]
-	struct skill_unit_group_tickset skillunittick[MAX_SKILLUNITGROUPTICKSET]; // [Valaris]
-	struct map_session_data *msd;
-};
-
-enum { MS_IDLE,MS_WALK,MS_ATTACK,MS_DEAD,MS_DELAY };
-
-enum { NONE_ATTACKABLE,ATTACKABLE };
-
-enum { ATK_LUCKY=1,ATK_FLEE,ATK_DEF};	// �͂܂�y�i���e�B�v�Z�p
-
-struct map_data {
-	char name[24];
-	char alias[24]; // [MouseJstr]
-	unsigned char *gat;	// NULL�Ȃ牺��map_data_other_server�Ƃ��Ĉ���
-	struct block_list **block;
-	struct block_list **block_mob;
-	int *block_count,*block_mob_count;
-	int m;
-	short xs,ys;
-	short bxs,bys;
-	int npc_num;
-	int users;
-	struct {
-		unsigned alias : 1;
-		unsigned nomemo : 1;
-		unsigned noteleport : 1;
-		unsigned noreturn : 1;
-		unsigned monster_noteleport : 1;
-		unsigned nosave : 1;
-		unsigned nobranch : 1;
-		unsigned nopenalty : 1;
-		unsigned pvp : 1;
-		unsigned pvp_noparty : 1;
-		unsigned pvp_noguild : 1;
-		unsigned pvp_nightmaredrop :1;
-		unsigned pvp_nocalcrank : 1;
-		unsigned gvg : 1;
-		unsigned gvg_noparty : 1;
-		unsigned nozenypenalty : 1;
-		unsigned notrade : 1;
-		unsigned noskill : 1;
-		unsigned nowarp : 1;
-		unsigned nowarpto : 1;
-		unsigned nopvp : 1; // [Valaris]
-		unsigned noicewall : 1; // [Valaris]
-		unsigned snow : 1; // [Valaris]
-		unsigned fog : 1; // [Valaris]
-		unsigned sakura : 1; // [Valaris]
-		unsigned leaves : 1; // [Valaris]
-		unsigned rain : 1; // [Valaris]
-	} flag;
-	struct point save;
-	struct npc_data *npc[MAX_NPC_PER_MAP];
-	struct {
-		int drop_id;
-		int drop_type;
-		int drop_per;
-	} drop_list[MAX_DROP_PER_MAP];
-};
-struct map_data_other_server {
-	char name[24];
-	unsigned char *gat;	// NULL�Œ�ɂ��Ĕ��f
-	unsigned long ip;
-	unsigned int port;
-};
-#define read_gat(m,x,y) (map[m].gat[(x)+(y)*map[m].xs])
-#define read_gatp(m,x,y) (m->gat[(x)+(y)*m->xs])
-
-struct flooritem_data {
-	struct block_list bl;
-	short subx,suby;
-	int cleartimer;
-	int first_get_id,second_get_id,third_get_id;
-	unsigned int first_get_tick,second_get_tick,third_get_tick;
-	struct item item_data;
-};
-
-enum {
-	SP_SPEED,SP_BASEEXP,SP_JOBEXP,SP_KARMA,SP_MANNER,SP_HP,SP_MAXHP,SP_SP,	// 0-7
-	SP_MAXSP,SP_STATUSPOINT,SP_0a,SP_BASELEVEL,SP_SKILLPOINT,SP_STR,SP_AGI,SP_VIT,	// 8-15
-	SP_INT,SP_DEX,SP_LUK,SP_CLASS,SP_ZENY,SP_SEX,SP_NEXTBASEEXP,SP_NEXTJOBEXP,	// 16-23
-	SP_WEIGHT,SP_MAXWEIGHT,SP_1a,SP_1b,SP_1c,SP_1d,SP_1e,SP_1f,	// 24-31
-	SP_USTR,SP_UAGI,SP_UVIT,SP_UINT,SP_UDEX,SP_ULUK,SP_26,SP_27,	// 32-39
-	SP_28,SP_ATK1,SP_ATK2,SP_MATK1,SP_MATK2,SP_DEF1,SP_DEF2,SP_MDEF1,	// 40-47
-	SP_MDEF2,SP_HIT,SP_FLEE1,SP_FLEE2,SP_CRITICAL,SP_ASPD,SP_36,SP_JOBLEVEL,	// 48-55
-	SP_UPPER,SP_PARTNER,SP_CART,SP_FAME,SP_UNBREAKABLE,	//56-58
-	SP_CARTINFO=99,	// 99
-
-	// original 1000-
-	SP_ATTACKRANGE=1000,	SP_ATKELE,SP_DEFELE,	// 1000-1002
-	SP_CASTRATE, SP_MAXHPRATE, SP_MAXSPRATE, SP_SPRATE, // 1003-1006
-	SP_ADDELE, SP_ADDRACE, SP_ADDSIZE, SP_SUBELE, SP_SUBRACE, // 1007-1011
-	SP_ADDEFF, SP_RESEFF,	// 1012-1013
-	SP_BASE_ATK,SP_ASPD_RATE,SP_HP_RECOV_RATE,SP_SP_RECOV_RATE,SP_SPEED_RATE, // 1014-1018
-	SP_CRITICAL_DEF,SP_NEAR_ATK_DEF,SP_LONG_ATK_DEF, // 1019-1021
-	SP_DOUBLE_RATE, SP_DOUBLE_ADD_RATE, SP_MATK, SP_MATK_RATE, // 1022-1025
-	SP_IGNORE_DEF_ELE,SP_IGNORE_DEF_RACE, // 1026-1027
-	SP_ATK_RATE,SP_SPEED_ADDRATE,SP_ASPD_ADDRATE, // 1028-1030
-	SP_MAGIC_ATK_DEF,SP_MISC_ATK_DEF, // 1031-1032
-	SP_IGNORE_MDEF_ELE,SP_IGNORE_MDEF_RACE, // 1033-1034
-	SP_MAGIC_ADDELE,SP_MAGIC_ADDRACE,SP_MAGIC_SUBRACE, // 1035-1037
-	SP_PERFECT_HIT_RATE,SP_PERFECT_HIT_ADD_RATE,SP_CRITICAL_RATE,SP_GET_ZENY_NUM,SP_ADD_GET_ZENY_NUM, // 1038-1042
-	SP_ADD_DAMAGE_CLASS,SP_ADD_MAGIC_DAMAGE_CLASS,SP_ADD_DEF_CLASS,SP_ADD_MDEF_CLASS, // 1043-1046
-	SP_ADD_MONSTER_DROP_ITEM,SP_DEF_RATIO_ATK_ELE,SP_DEF_RATIO_ATK_RACE,SP_ADD_SPEED, // 1047-1050
-	SP_HIT_RATE,SP_FLEE_RATE,SP_FLEE2_RATE,SP_DEF_RATE,SP_DEF2_RATE,SP_MDEF_RATE,SP_MDEF2_RATE, // 1051-1057
-	SP_SPLASH_RANGE,SP_SPLASH_ADD_RANGE,SP_AUTOSPELL,SP_HP_DRAIN_RATE,SP_SP_DRAIN_RATE, // 1058-1062
-	SP_SHORT_WEAPON_DAMAGE_RETURN,SP_LONG_WEAPON_DAMAGE_RETURN,SP_WEAPON_COMA_ELE,SP_WEAPON_COMA_RACE, // 1063-1066
-	SP_ADDEFF2,SP_BREAK_WEAPON_RATE,SP_BREAK_ARMOR_RATE,SP_ADD_STEAL_RATE, // 1067-1070
-	SP_MAGIC_DAMAGE_RETURN,SP_RANDOM_ATTACK_INCREASE,SP_ALL_STATS,SP_AGI_VIT,SP_AGI_DEX_STR,SP_PERFECT_HIDE, // 1071-1077
-	SP_DISGUISE, // 1077
-
-	SP_RESTART_FULL_RECORVER=2000,SP_NO_CASTCANCEL,SP_NO_SIZEFIX,SP_NO_MAGIC_DAMAGE,SP_NO_WEAPON_DAMAGE,SP_NO_GEMSTONE, // 2000-2005
-	SP_NO_CASTCANCEL2,SP_INFINITE_ENDURE,SP_UNBREAKABLE_WEAPON,SP_UNBREAKABLE_ARMOR // 2006-2009
-};
-
-enum {
-	LOOK_BASE,LOOK_HAIR,LOOK_WEAPON,LOOK_HEAD_BOTTOM,LOOK_HEAD_TOP,LOOK_HEAD_MID,LOOK_HAIR_COLOR,LOOK_CLOTHES_COLOR,LOOK_SHIELD,LOOK_SHOES
-};
-
-struct chat_data {
-	struct block_list bl;
-
-	unsigned char pass[8];   /* password */
-	unsigned char title[61]; /* room title MAX 60 */
-	unsigned char limit;     /* join limit */
-	unsigned char trigger;
-	unsigned char users;     /* current users */
-	unsigned char pub;       /* room attribute */
-	struct map_session_data *usersd[20];
-	struct block_list *owner_;
-	struct block_list **owner;
-	char npc_event[50];
-};
-
-extern struct map_data map[];
-extern int map_num;
-extern int autosave_interval;
-extern int agit_flag;
-extern int night_flag; // 0=day, 1=night [Yor]
-
-extern char motd_txt[];
-extern char help_txt[];
-
-extern char talkie_mes[];
-
-extern char wisp_server_name[];
-
-// �I�S�̏��
-void map_setusers(int);
-int map_getusers(void);
-// block�폜�֘A
-int map_freeblock( void *bl );
-int map_freeblock_lock(void);
-int map_freeblock_unlock(void);
-// block�֘A
-int map_addblock(struct block_list *);
-int map_delblock(struct block_list *);
-void map_foreachinarea(int (*)(struct block_list*,va_list),int,int,int,int,int,int,...);
-// -- moonsoul (added map_foreachincell)
-void map_foreachincell(int (*)(struct block_list*,va_list),int,int,int,int,...);
-void map_foreachinmovearea(int (*)(struct block_list*,va_list),int,int,int,int,int,int,int,int,...);
-int map_countnearpc(int,int,int);
-//block�֘A�ɒlj�
-int map_count_oncell(int m,int x,int y);
-// �ꎞ�Iobject�֘A
-int map_addobject(struct block_list *);
-int map_delobject(int);
-int map_delobjectnofree(int id);
-void map_foreachobject(int (*)(struct block_list*,va_list),int,...);
-//
-int map_quit(struct map_session_data *);
-// npc
-int map_addnpc(int,struct npc_data *);
-
-// ���A�C�e���֘A
-int map_clearflooritem_timer(int,unsigned int,int,int);
-#define map_clearflooritem(id) map_clearflooritem_timer(0,0,id,1)
-int map_addflooritem(struct item *,int,int,int,int,struct map_session_data *,struct map_session_data *,struct map_session_data *,int);
-int map_searchrandfreecell(int,int,int,int);
-
-// �L����id�����L������ �ϊ��֘A
-void map_addchariddb(int charid,char *name);
-void map_delchariddb(int charid);
-int map_reqchariddb(struct map_session_data * sd,int charid);
-char * map_charid2nick(int);
-
-struct map_session_data * map_id2sd(int);
-struct block_list * map_id2bl(int);
-int map_mapname2mapid(char*);
-int map_mapname2ipport(char*,int*,int*);
-int map_setipport(char *name,unsigned long ip,int port);
-int map_eraseipport(char *name,unsigned long ip,int port);
-void map_addiddb(struct block_list *);
-void map_deliddb(struct block_list *bl);
-int map_foreachiddb(int (*)(void*,void*,va_list),...);
-void map_addnickdb(struct map_session_data *);
-struct map_session_data * map_nick2sd(char*);
-
-// gat�֘A
-int map_getcell(int,int,int);
-int map_setcell(int,int,int,int);
-
-// ���̑�
-int map_check_dir(int s_dir,int t_dir);
-int map_calc_dir( struct block_list *src,int x,int y);
-
-// path.c���
-int path_search(struct walkpath_data*,int,int,int,int,int,int);
-int path_blownpos(int m,int x0,int y0,int dx,int dy,int count);
-
-int map_who(int fd);
-
-void map_helpscreen(); // [Valaris]
-int map_delmap(char *mapname);
-
-#ifndef TXT_ONLY
-
-// MySQL
-#include <mysql.h>
-
-void char_online_check(void); // [Valaris]
-void char_offline(struct map_session_data *sd);
-
-extern MYSQL mmysql_handle;
-extern char tmp_sql[65535];
-extern MYSQL_RES* sql_res ;
-extern MYSQL_ROW	sql_row ;
-
-extern MYSQL lmysql_handle;
-extern char tmp_lsql[65535];
-extern MYSQL_RES* lsql_res ;
-extern MYSQL_ROW	lsql_row ;
-
-extern MYSQL mail_handle;
-extern MYSQL_RES* 	mail_res ;
-extern MYSQL_ROW	mail_row ;
-extern char tmp_msql[65535];
-
-extern int db_use_sqldbs;
-
-extern char item_db_db[32];
-extern char mob_db_db[32];
-extern char login_db[32];
-
-extern char login_db_level[32];
-extern char login_db_account_id[32];
-
-extern int lowest_gm_level;
-extern int read_gm_interval;
-
-extern char char_db[32];
-#endif /* not TXT_ONLY */
-
-#endif
diff --git a/misc/src/map/mob.c b/misc/src/map/mob.c
deleted file mode 100644
index 969eed2..0000000
--- a/misc/src/map/mob.c
+++ /dev/null
@@ -1,4216 +0,0 @@
-// $Id: mob.c,v 1.7 2004/09/25 05:32:18 MouseJstr Exp $
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-
-#include "timer.h"
-#include "socket.h"
-#include "db.h"
-#include "nullpo.h"
-#include "malloc.h"
-#include "map.h"
-#include "clif.h"
-#include "intif.h"
-#include "pc.h"
-#include "mob.h"
-#include "guild.h"
-#include "itemdb.h"
-#include "skill.h"
-#include "battle.h"
-#include "party.h"
-#include "npc.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-#define MIN_MOBTHINKTIME 100
-
-#define MOB_LAZYMOVEPERC 50	// Move probability in the negligent mode MOB (rate of 1000 minute)
-#define MOB_LAZYWARPPERC 20	// Warp probability in the negligent mode MOB (rate of 1000 minute)
-
-struct mob_db mob_db[2001];
-
-/*==========================================
- * Local prototype declaration   (only required thing)
- *------------------------------------------
- */
-static int distance(int,int,int,int);
-static int mob_makedummymobdb(int);
-static int mob_timer(int,unsigned int,int,int);
-int mobskill_use(struct mob_data *md,unsigned int tick,int event);
-int mobskill_deltimer(struct mob_data *md );
-int mob_skillid2skillidx(int class,int skillid);
-int mobskill_use_id(struct mob_data *md,struct block_list *target,int skill_idx);
-static int mob_unlocktarget(struct mob_data *md,int tick);
-
-/*==========================================
- * Mob is searched with a name.
- *------------------------------------------
- */
-int mobdb_searchname(const char *str) 
-{
-	int i;
-
-	for(i = 0; i < sizeof(mob_db) / sizeof(mob_db[0]); i++) {
-		if (strcmpi(mob_db[i].name, str) == 0 || strcmp(mob_db[i].jname, str) == 0 ||
-		    memcmp(mob_db[i].name, str, 24) == 0 || memcmp(mob_db[i].jname, str, 24) == 0)
-			return i;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * Id Mob is checked.
- *------------------------------------------
- */
-int mobdb_checkid(const int id) 
-{
-	if (id <= 0 || id >= (sizeof(mob_db) / sizeof(mob_db[0])) || mob_db[id].name[0] == '\0')
-		return 0;
-
-	return id;
-}
-
-/*==========================================
- * The minimum data set for MOB spawning
- *------------------------------------------
- */
-int mob_spawn_dataset(struct mob_data *md,const char *mobname,int class)
-{
-	nullpo_retr(0, md);
-
-	md->bl.prev=NULL;
-	md->bl.next=NULL;
-	if(strcmp(mobname,"--en--")==0)
-		memcpy(md->name,mob_db[class].name,24);
-	else if(strcmp(mobname,"--ja--")==0)
-		memcpy(md->name,mob_db[class].jname,24);
-	else
-		memcpy(md->name,mobname,24);
-
-	md->n = 0;
-	md->base_class = md->class = class;
-	md->bl.id= npc_get_new_npc_id();
-
-	memset(&md->state,0,sizeof(md->state));
-	md->timer = -1;
-	md->target_id=0;
-	md->attacked_id=0;
-	md->speed=mob_db[class].speed;
-
-	return 0;
-}
-
-
-/*==========================================
- * The MOB appearance for one time (for scripts)
- *------------------------------------------
- */
-int mob_once_spawn(struct map_session_data *sd,char *mapname,
-	int x,int y,const char *mobname,int class,int amount,const char *event)
-{
-	struct mob_data *md=NULL;
-	int m,count,lv=255,r=class;
-
-	if( sd )
-		lv=sd->status.base_level;
-
-	if( sd && strcmp(mapname,"this")==0)
-		m=sd->bl.m;
-	else
-		m=map_mapname2mapid(mapname);
-
-	if(m<0 || amount<=0 || (class>=0 && class<=1000) || class>2000)	// �l���ُ�Ȃ珢�����~�߂�
-		return 0;
-
-	if(class<0){	// �����_���ɏ���
-		int i=0;
-		int j=-class-1;
-		int k;
-		if(j>=0 && j<MAX_RANDOMMONSTER){
-			do{
-				class=rand()%1000+1001;
-				k=rand()%1000000;
-			}while((mob_db[class].max_hp <= 0 || mob_db[class].summonper[j] <= k ||
-				 (lv<mob_db[class].lv && battle_config.random_monster_checklv==1)) && (i++) < 2000);
-			if(i>=2000){
-				class=mob_db[0].summonper[j];
-			}
-		}else{
-			return 0;
-		}
-//		if(battle_config.etc_log==1)
-//			printf("mobclass=%d try=%d\n",class,i);
-	}
-	if(sd){
-		if(x<=0) x=sd->bl.x;
-		if(y<=0) y=sd->bl.y;
-	}else if(x<=0 || y<=0){
-		printf("mob_once_spawn: ??\n");
-	}
-
-	for(count=0;count<amount;count++){
-		md=(struct mob_data *)aCalloc(1,sizeof(struct mob_data));
-		memset(md, '\0', sizeof *md);
-		if(mob_db[class].mode&0x02)
-			md->lootitem=(struct item *)aCalloc(LOOTITEM_SIZE,sizeof(struct item));
-		else
-			md->lootitem=NULL;
-
-		mob_spawn_dataset(md,mobname,class);
-		md->bl.m=m;
-		md->bl.x=x;
-		md->bl.y=y;
-		if(r<0&&battle_config.dead_branch_active==1) md->mode=0x1+0x4+0x80; //�ړ����ăA�N�e�B�u�Ŕ�������
-		md->m =m;
-		md->x0=x;
-		md->y0=y;
-		md->xs=0;
-		md->ys=0;
-		md->spawndelay1=-1;	// Only once is a flag.
-		md->spawndelay2=-1;	// Only once is a flag.
-
-		memcpy(md->npc_event,event,sizeof(md->npc_event));
-
-		md->bl.type=BL_MOB;
-		map_addiddb(&md->bl);
-		mob_spawn(md->bl.id);
-		
-		if(class==1288) {	// emperium hp based on defense level [Valaris]
-			struct guild_castle *gc=guild_mapname2gc(map[md->bl.m].name);
-			if(gc)	{
-				mob_db[class].max_hp+=2000*gc->defense;
-				md->hp=mob_db[class].max_hp;
-			}
-		}	// end addition [Valaris]
-		
-
-	}
-	return (amount>0)?md->bl.id:0;
-}
-/*==========================================
- * The MOB appearance for one time (& area specification for scripts)
- *------------------------------------------
- */
-int mob_once_spawn_area(struct map_session_data *sd,char *mapname,
-	int x0,int y0,int x1,int y1,
-	const char *mobname,int class,int amount,const char *event)
-{
-	int x,y,i,c,max,lx=-1,ly=-1,id=0;
-	int m;
-
-	if(strcmp(mapname,"this")==0)
-		m=sd->bl.m;
-	else
-		m=map_mapname2mapid(mapname);
-
-	max=(y1-y0+1)*(x1-x0+1)*3;
-	if(max>1000)max=1000;
-
-	if(m<0 || amount<=0 || (class>=0 && class<=1000) || class>2000)	// A summon is stopped if a value is unusual
-		return 0;
-
-	for(i=0;i<amount;i++){
-		int j=0;
-		do{
-			x=rand()%(x1-x0+1)+x0;
-			y=rand()%(y1-y0+1)+y0;
-		}while( ( (c=map_getcell(m,x,y))==1 || c==5)&& (++j)<max );
-		if(j>=max){
-			if(lx>=0){	// Since reference went wrong, the place which boiled before is used.
-				x=lx;
-				y=ly;
-			}else
-				return 0;	// Since reference of the place which boils first went wrong, it stops.
-		}
-		id=mob_once_spawn(sd,mapname,x,y,mobname,class,1,event);
-		lx=x;
-		ly=y;
-	}
-	return id;
-}
-
-/*==========================================
- * Summoning Guardians [Valaris]
- *------------------------------------------
- */
-int mob_spawn_guardian(struct map_session_data *sd,char *mapname,
-	int x,int y,const char *mobname,int class,int amount,const char *event,int guardian)
-{
-	struct mob_data *md=NULL;
-	int m,count=1,lv=255;
-
-	if( sd )
-		lv=sd->status.base_level;
-
-	if( sd && strcmp(mapname,"this")==0)
-		m=sd->bl.m;
-	else
-		m=map_mapname2mapid(mapname);
-
-	if(m<0 || amount<=0 || (class>=0 && class<=1000) || class>2000)	// �l���ُ�Ȃ珢�����~�߂�
-		return 0;
-
-	if(class<0)
-		return 0;
-		
-	if(sd){
-		if(x<=0) x=sd->bl.x;
-		if(y<=0) y=sd->bl.y;
-	}
-	
-	else if(x<=0 || y<=0)
-		printf("mob_spawn_guardian: ??\n");
-	
-
-	for(count=0;count<amount;count++){
-		struct guild_castle *gc;
-		md=calloc(sizeof(struct mob_data), 1);
-		if(md==NULL){
-			printf("mob_spawn_guardian: out of memory !\n");
-			exit(1);
-		}
-		memset(md, '\0', sizeof *md);
-	
-	
-
-		mob_spawn_dataset(md,mobname,class);
-		md->bl.m=m;
-		md->bl.x=x;
-		md->bl.y=y;
-		md->m =m;
-		md->x0=x;
-		md->y0=y;
-		md->xs=0;
-		md->ys=0;
-		md->spawndelay1=-1;	// Only once is a flag.
-		md->spawndelay2=-1;	// Only once is a flag.
-
-		memcpy(md->npc_event,event,sizeof(md->npc_event));
-
-		md->bl.type=BL_MOB;
-		map_addiddb(&md->bl);
-		mob_spawn(md->bl.id);
-
-		gc=guild_mapname2gc(map[md->bl.m].name);
-		if(gc)	{
-			mob_db[class].max_hp+=2000*gc->defense;
-			if(guardian==0) { md->hp=gc->Ghp0; gc->GID0=md->bl.id; }
-			if(guardian==1) { md->hp=gc->Ghp1; gc->GID1=md->bl.id; }
-			if(guardian==2) { md->hp=gc->Ghp2; gc->GID2=md->bl.id; }
-			if(guardian==3) { md->hp=gc->Ghp3; gc->GID3=md->bl.id; }
-			if(guardian==4) { md->hp=gc->Ghp4; gc->GID4=md->bl.id; }
-			if(guardian==5) { md->hp=gc->Ghp5; gc->GID5=md->bl.id; }
-			if(guardian==6) { md->hp=gc->Ghp6; gc->GID6=md->bl.id; }
-			if(guardian==7) { md->hp=gc->Ghp7; gc->GID7=md->bl.id; }
-		
-		}
-	}
-
-	return (amount>0)?md->bl.id:0;
-}
-
-
-/*==========================================
- * Appearance income of mob
- *------------------------------------------
- */
-int mob_get_viewclass(int class)
-{
-	return mob_db[class].view_class;
-}
-int mob_get_sex(int class)
-{
-	return mob_db[class].sex;
-}
-short mob_get_hair(int class)
-{
-	return mob_db[class].hair;
-}
-short mob_get_hair_color(int class)
-{
-	return mob_db[class].hair_color;
-}
-short mob_get_weapon(int class)
-{
-	return mob_db[class].weapon;
-}
-short mob_get_shield(int class)
-{
-	return mob_db[class].shield;
-}
-short mob_get_head_top(int class)
-{
-	return mob_db[class].head_top;
-}
-short mob_get_head_mid(int class)
-{
-	return mob_db[class].head_mid;
-}
-short mob_get_head_buttom(int class)
-{
-	return mob_db[class].head_buttom;
-}
-short mob_get_clothes_color(int class) // Add for player monster dye - Valaris
-{
-	return mob_db[class].clothes_color;  // End
-}
-int mob_get_equip(int class) // mob equip [Valaris]
-{
-	return mob_db[class].equip;
-}
-/*==========================================
- * Is MOB in the state in which the present movement is possible or not?
- *------------------------------------------
- */
-int mob_can_move(struct mob_data *md)
-{
-	nullpo_retr(0, md);
-
-	if(md->canmove_tick > gettick() || (md->opt1 > 0 && md->opt1 != 6) || md->option&2)
-		return 0;
-	// �A���N�����œ����Ȃ��Ƃ�
-	if( md->sc_data[SC_ANKLE].timer != -1 || //�A���N���X�l�A
-		md->sc_data[SC_AUTOCOUNTER].timer != -1 || //�I�[�g�J�E���^�[
-		md->sc_data[SC_BLADESTOP].timer != -1 || //���n���
-		md->sc_data[SC_SPIDERWEB].timer != -1  //�X�p�C�_�[�E�F�b�u
-		)
-		return 0;
-
-	return 1;
-}
-
-/*==========================================
- * Time calculation concerning one step next to mob
- *------------------------------------------
- */
-static int calc_next_walk_step(struct mob_data *md)
-{
-	nullpo_retr(0, md);
-
-	if(md->walkpath.path_pos>=md->walkpath.path_len)
-		return -1;
-	if(md->walkpath.path[md->walkpath.path_pos]&1)
-		return battle_get_speed(&md->bl)*14/10;
-	return battle_get_speed(&md->bl);
-}
-
-static int mob_walktoxy_sub(struct mob_data *md);
-
-/*==========================================
- * Mob Walk processing
- *------------------------------------------
- */
-static int mob_walk(struct mob_data *md,unsigned int tick,int data)
-{
-	int moveblock;
-	int i,ctype;
-	static int dirx[8]={0,-1,-1,-1,0,1,1,1};
-	static int diry[8]={1,1,0,-1,-1,-1,0,1};
-	int x,y,dx,dy;
-
-	nullpo_retr(0, md);
-
-	md->state.state=MS_IDLE;
-	if(md->walkpath.path_pos>=md->walkpath.path_len || md->walkpath.path_pos!=data)
-		return 0;
-
-	md->walkpath.path_half ^= 1;
-	if(md->walkpath.path_half==0){
-		md->walkpath.path_pos++;
-		if(md->state.change_walk_target){
-			mob_walktoxy_sub(md);
-			return 0;
-		}
-	}
-	else {
-		if(md->walkpath.path[md->walkpath.path_pos]>=8)
-			return 1;
-
-		x = md->bl.x;
-		y = md->bl.y;
-		ctype = map_getcell(md->bl.m,x,y);
-		if(ctype == 1 || ctype == 5) {
-			mob_stop_walking(md,1);
-			return 0;
-		}
-		md->dir=md->walkpath.path[md->walkpath.path_pos];
-		dx = dirx[md->dir];
-		dy = diry[md->dir];
-
-		ctype = map_getcell(md->bl.m,x+dx,y+dy);
-		if(ctype == 1 || ctype == 5) {
-			mob_walktoxy_sub(md);
-			return 0;
-		}
-
-		moveblock = ( x/BLOCK_SIZE != (x+dx)/BLOCK_SIZE || y/BLOCK_SIZE != (y+dy)/BLOCK_SIZE);
-
-		md->state.state=MS_WALK;
-		map_foreachinmovearea(clif_moboutsight,md->bl.m,x-AREA_SIZE,y-AREA_SIZE,x+AREA_SIZE,y+AREA_SIZE,dx,dy,BL_PC,md);
-
-		x += dx;
-		y += dy;
-		if(md->min_chase>13)
-			md->min_chase--;
-
-		if(moveblock) map_delblock(&md->bl);
-		md->bl.x = x;
-		md->bl.y = y;
-		if(moveblock) map_addblock(&md->bl);
-
-		map_foreachinmovearea(clif_mobinsight,md->bl.m,x-AREA_SIZE,y-AREA_SIZE,x+AREA_SIZE,y+AREA_SIZE,-dx,-dy,BL_PC,md);
-		md->state.state=MS_IDLE;
-
-		if(md->option&4)
-			skill_check_cloaking(&md->bl);
-
-		skill_unit_move(&md->bl,tick,1);	// Inspection of a skill unit
-	}
-	if((i=calc_next_walk_step(md))>0){
-		i = i>>1;
-		if(i < 1 && md->walkpath.path_half == 0)
-			i = 1;
-		md->timer=add_timer(tick+i,mob_timer,md->bl.id,md->walkpath.path_pos);
-		md->state.state=MS_WALK;
-
-		if(md->walkpath.path_pos>=md->walkpath.path_len)
-			clif_fixmobpos(md);	// When mob stops, retransmission current of a position.
-	}
-	return 0;
-}
-
-/*==========================================
- * Attack processing of mob
- *------------------------------------------
- */
-static int mob_attack(struct mob_data *md,unsigned int tick,int data)
-{
-	struct block_list *tbl=NULL;
-	struct map_session_data *tsd=NULL;
-	struct mob_data *tmd=NULL;
-
-	int mode,race,range;
-
-	nullpo_retr(0, md);
-
-	md->min_chase=13;
-	md->state.state=MS_IDLE;
-	md->state.skillstate=MSS_IDLE;
-
-	if( md->skilltimer!=-1 )	// �X�L���g�p��
-		return 0;
-
-	if(md->opt1>0 || md->option&2)
-		return 0;
-
-	if(md->sc_data[SC_AUTOCOUNTER].timer != -1)
-		return 0;
-
-	if(md->sc_data[SC_BLADESTOP].timer != -1)
-		return 0;
-
-	if((tbl=map_id2bl(md->target_id))==NULL){
-		md->target_id=0;
-		md->state.targettype = NONE_ATTACKABLE;
-		return 0;
-	}
-
-	if(tbl->type==BL_PC)
-		tsd=(struct map_session_data *)tbl;
-	else if(tbl->type==BL_MOB)
-		tmd=(struct mob_data *)tbl;
-	else
-		return 0;
-
-	if(tsd){
-		if( pc_isdead(tsd) || tsd->invincible_timer != -1 ||  pc_isinvisible(tsd) || md->bl.m != tbl->m || tbl->prev == NULL || distance(md->bl.x,md->bl.y,tbl->x,tbl->y)>=13 ){
-		md->target_id=0;
-		md->state.targettype = NONE_ATTACKABLE;
-		return 0;
-	}
-	}
-	if(tmd){
-		if(md->bl.m != tbl->m || tbl->prev == NULL || distance(md->bl.x,md->bl.y,tbl->x,tbl->y)>=13){
-			md->target_id=0;
-			md->state.targettype = NONE_ATTACKABLE;
-			return 0;
-		}
-	}
-
-
-	if(!md->mode)
-	mode=mob_db[md->class].mode;
-	else
-		mode=md->mode;
-
-	race=mob_db[md->class].race;
-	if(!(mode&0x80)){
-		md->target_id=0;
-		md->state.targettype = NONE_ATTACKABLE;
-		return 0;
-	}
-	if(tsd && !(mode&0x20) && (tsd->sc_data[SC_TRICKDEAD].timer != -1 ||
-		 ((pc_ishiding(tsd) || tsd->state.gangsterparadise) && race!=4 && race!=6) ) ) {
-		md->target_id=0;
-		md->state.targettype = NONE_ATTACKABLE;
-		return 0;
-	}
-
-	range = mob_db[md->class].range;
-	if(mode&1)
-		range++;
-	if(distance(md->bl.x,md->bl.y,tbl->x,tbl->y) > range)
-		return 0;
-	if(battle_config.monster_attack_direction_change)
-		md->dir=map_calc_dir(&md->bl, tbl->x,tbl->y );	// �����ݒ�
-
-	//clif_fixmobpos(md);
-
-	md->state.skillstate=MSS_ATTACK;
-	if( mobskill_use(md,tick,-2) )	// �X�L���g�p
-		return 0;
-
-	md->target_lv = battle_weapon_attack(&md->bl,tbl,tick,0);
-
-	if(!(battle_config.monster_cloak_check_type&2) && md->sc_data[SC_CLOAKING].timer != -1)
-		skill_status_change_end(&md->bl,SC_CLOAKING,-1);
-
-	md->attackabletime = tick + battle_get_adelay(&md->bl);
-
-	md->timer=add_timer(md->attackabletime,mob_timer,md->bl.id,0);
-	md->state.state=MS_ATTACK;
-
-	return 0;
-}
-
-
-/*==========================================
- * The attack of PC which is attacking id is stopped.
- * The callback function of clif_foreachclient
- *------------------------------------------
- */
-int mob_stopattacked(struct map_session_data *sd,va_list ap)
-{
-	int id;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, ap);
-
-	id=va_arg(ap,int);
-	if(sd->attacktarget==id)
-		pc_stopattack(sd);
-	return 0;
-}
-/*==========================================
- * The timer in which the mob's states changes
- *------------------------------------------
- */
-int mob_changestate(struct mob_data *md,int state,int type)
-{
-	unsigned int tick;
-	int i;
-
-	nullpo_retr(0, md);
-
-	if(md->timer != -1)
-		delete_timer(md->timer,mob_timer);
-	md->timer=-1;
-	md->state.state=state;
-
-	switch(state){
-	case MS_WALK:
-		if((i=calc_next_walk_step(md))>0){
-			i = i>>2;
-			md->timer=add_timer(gettick()+i,mob_timer,md->bl.id,0);
-		}
-		else
-			md->state.state=MS_IDLE;
-		break;
-	case MS_ATTACK:
-		tick = gettick();
-		i=DIFF_TICK(md->attackabletime,tick);
-		if(i>0 && i<2000)
-			md->timer=add_timer(md->attackabletime,mob_timer,md->bl.id,0);
-		else if(type) {
-			md->attackabletime = tick + battle_get_amotion(&md->bl);
-			md->timer=add_timer(md->attackabletime,mob_timer,md->bl.id,0);
-		}
-		else {
-			md->attackabletime = tick + 1;
-			md->timer=add_timer(md->attackabletime,mob_timer,md->bl.id,0);
-		}
-		break;
-	case MS_DELAY:
-		md->timer=add_timer(gettick()+type,mob_timer,md->bl.id,0);
-		break;
-	case MS_DEAD:
-		skill_castcancel(&md->bl,0);
-//		mobskill_deltimer(md);
-		md->state.skillstate=MSS_DEAD;
-		md->last_deadtime=gettick();
-		// Since it died, all aggressors' attack to this mob is stopped.
-		clif_foreachclient(mob_stopattacked,md->bl.id);
-		skill_unit_out_all(&md->bl,gettick(),1);
-		skill_status_change_clear(&md->bl,2);	// The abnormalities in status are canceled.
-		skill_clear_unitgroup(&md->bl);	// All skill unit groups are deleted.
-		skill_cleartimerskill(&md->bl);
-		if(md->deletetimer!=-1)
-			delete_timer(md->deletetimer,mob_timer_delete);
-		md->deletetimer=-1;
-		md->hp=md->target_id=md->attacked_id=0;
-		md->state.targettype = NONE_ATTACKABLE;
-		break;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * timer processing of mob (timer function)
- * It branches to a walk and an attack.
- *------------------------------------------
- */
-static int mob_timer(int tid,unsigned int tick,int id,int data)
-{
-	struct mob_data *md;
-	struct block_list *bl;
-
-	if( (bl=map_id2bl(id)) == NULL ){ //�U�����Ă����G���������Ȃ��̂͐���̂悤��
-		return 1;
-	}
-	
-	if(!bl || !bl->type || bl->type!=BL_MOB)
-		return 1;
-
-	nullpo_retr(1, md=(struct mob_data*)bl);
-	
-	if(!md->bl.type || md->bl.type!=BL_MOB)
-		return 1;
-
-	if(md->timer != tid){
-		if(battle_config.error_log==1)
-			printf("mob_timer %d != %d\n",md->timer,tid);
-		return 0;
-	}
-	md->timer=-1;
-	if(md->bl.prev == NULL || md->state.state == MS_DEAD)
-		return 1;
-
-	map_freeblock_lock();
-	switch(md->state.state){
-	case MS_WALK:
-		mob_walk(md,tick,data);
-		break;
-	case MS_ATTACK:
-		mob_attack(md,tick,data);
-		break;
-	case MS_DELAY:
-		mob_changestate(md,MS_IDLE,0);
-		break;
-	default:
-		if(battle_config.error_log==1)
-			printf("mob_timer : %d ?\n",md->state.state);
-		break;
-	}
-	map_freeblock_unlock();
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-static int mob_walktoxy_sub(struct mob_data *md)
-{
-	struct walkpath_data wpd;
-
-	nullpo_retr(0, md);
-
-	if(path_search(&wpd,md->bl.m,md->bl.x,md->bl.y,md->to_x,md->to_y,md->state.walk_easy))
-		return 1;
-	memcpy(&md->walkpath,&wpd,sizeof(wpd));
-
-	md->state.change_walk_target=0;
-	mob_changestate(md,MS_WALK,0);
-	clif_movemob(md);
-
-	return 0;
-}
-
-/*==========================================
- * mob move start
- *------------------------------------------
- */
-int mob_walktoxy(struct mob_data *md,int x,int y,int easy)
-{
-	struct walkpath_data wpd;
-
-	nullpo_retr(0, md);
-
-	if(md->state.state == MS_WALK && path_search(&wpd,md->bl.m,md->bl.x,md->bl.y,x,y,easy) )
-		return 1;
-
-	md->state.walk_easy = easy;
-	md->to_x=x;
-	md->to_y=y;
-	if(md->state.state == MS_WALK) {
-		md->state.change_walk_target=1;
-	} else {
-		return mob_walktoxy_sub(md);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * mob spawn with delay (timer function)
- *------------------------------------------
- */
-static int mob_delayspawn(int tid,unsigned int tick,int m,int n)
-{
-	mob_spawn(m);
-	return 0;
-}
-
-/*==========================================
- * spawn timing calculation
- *------------------------------------------
- */
-int mob_setdelayspawn(int id)
-{
-	unsigned int spawntime,spawntime1,spawntime2,spawntime3;
-	struct mob_data *md;
-	struct block_list *bl;
-
-	if((bl=map_id2bl(id)) == NULL)
-		return -1;
-
-	if(!bl || !bl->type || bl->type!=BL_MOB)
-		return -1;
-
-	nullpo_retr(-1, md=(struct mob_data*)bl);
-
-	if(!md || md->bl.type!=BL_MOB)
-		return -1;
-
-	// Processing of MOB which is not revitalized
-	if(md->spawndelay1==-1 && md->spawndelay2==-1 && md->n==0){
-		map_deliddb(&md->bl);
-		if(md->lootitem) {
-			map_freeblock(md->lootitem);
-			md->lootitem=NULL;
-		}
-		map_freeblock(md);	// Instead of [ of free ]
-		return 0;
-	}
-
-	spawntime1=md->last_spawntime+md->spawndelay1;
-	spawntime2=md->last_deadtime+md->spawndelay2;
-	spawntime3=gettick()+5000;
-	// spawntime = max(spawntime1,spawntime2,spawntime3);
-	if(DIFF_TICK(spawntime1,spawntime2)>0){
-		spawntime=spawntime1;
-	} else {
-		spawntime=spawntime2;
-	}
-	if(DIFF_TICK(spawntime3,spawntime)>0){
-		spawntime=spawntime3;
-	}
-
-	add_timer(spawntime,mob_delayspawn,id,0);
-	return 0;
-}
-
-/*==========================================
- * Mob spawning. Initialization is also variously here.
- *------------------------------------------
- */
-int mob_spawn(int id)
-{
-	int x=0,y=0,i=0,c;
-	unsigned int tick = gettick();
-	struct mob_data *md;
-	struct block_list *bl;
-
-	nullpo_retr(-1, bl=map_id2bl(id));
-
-	if(!bl || !bl->type || bl->type!=BL_MOB)
-		return -1;
-
-	nullpo_retr(-1, md=(struct mob_data*)bl);
-
-	if(!md || !md->bl.type || md->bl.type!=BL_MOB)
-		return -1;
-		
-	md->last_spawntime=tick;
-	if( md->bl.prev!=NULL ){
-//		clif_clearchar_area(&md->bl,3);
-		skill_unit_out_all(&md->bl,gettick(),1);
-		map_delblock(&md->bl);
-	}
-	else
-		md->class = md->base_class;
-
-	md->bl.m =md->m;
-	do {
-		if(md->x0==0 && md->y0==0){
-			x=rand()%(map[md->bl.m].xs-2)+1;
-			y=rand()%(map[md->bl.m].ys-2)+1;
-		} else {
-			x=md->x0+rand()%(md->xs+1)-md->xs/2;
-			y=md->y0+rand()%(md->ys+1)-md->ys/2;
-		}
-		i++;
-	} while(((c=map_getcell(md->bl.m,x,y))==1 || c==5) && i<50);
-
-	if(i>=50){
-//		if(battle_config.error_log==1)
-//			printf("MOB spawn error %d @ %s\n",id,map[md->bl.m].name);
-		add_timer(tick+5000,mob_delayspawn,id,0);
-		return 1;
-	}
-
-	md->to_x=md->bl.x=x;
-	md->to_y=md->bl.y=y;
-	md->dir=0;
-
-	map_addblock(&md->bl);
-
-	memset(&md->state,0,sizeof(md->state));
-	md->attacked_id = 0;
-	md->target_id = 0;
-	md->move_fail_count = 0;
-
-	if(!md->speed)
-	md->speed = mob_db[md->class].speed;
-	md->def_ele = mob_db[md->class].element;
-	md->master_id=0;
-	md->master_dist=0;
-
-	md->state.state = MS_IDLE;
-	md->state.skillstate = MSS_IDLE;
-	md->timer = -1;
-	md->last_thinktime = tick;
-	md->next_walktime = tick+rand()%50+5000;
-	md->attackabletime = tick;
-	md->canmove_tick = tick;
-	
-	md->sg_count=0;
-	md->deletetimer=-1;
-
-	md->skilltimer=-1;
-	for(i=0,c=tick-1000*3600*10;i<MAX_MOBSKILL;i++)
-		md->skilldelay[i] = c;
-	md->skillid=0;
-	md->skilllv=0;
-
-	memset(md->dmglog,0,sizeof(md->dmglog));
-	if(md->lootitem)
-		memset(md->lootitem,0,sizeof(md->lootitem));
-	md->lootitem_count = 0;
-
-	for(i=0;i<MAX_MOBSKILLTIMERSKILL;i++)
-		md->skilltimerskill[i].timer = -1;
-
-	for(i=0;i<MAX_STATUSCHANGE;i++) {
-		md->sc_data[i].timer=-1;
-		md->sc_data[i].val1 = md->sc_data[i].val2 = md->sc_data[i].val3 = md->sc_data[i].val4 =0;
-	}
-	md->sc_count=0;
-	md->opt1=md->opt2=md->opt3=md->option=0;
-
-	memset(md->skillunit,0,sizeof(md->skillunit));
-	memset(md->skillunittick,0,sizeof(md->skillunittick));
-
-	md->hp = battle_get_max_hp(&md->bl);
-	if(md->hp<=0){
-		mob_makedummymobdb(md->class);
-		md->hp = battle_get_max_hp(&md->bl);
-	}
-
-	clif_spawnmob(md);
-
-	return 0;
-}
-
-/*==========================================
- * Distance calculation between two points
- *------------------------------------------
- */
-static int distance(int x0,int y0,int x1,int y1)
-{
-	int dx,dy;
-
-	dx=abs(x0-x1);
-	dy=abs(y0-y1);
-	return dx>dy ? dx : dy;
-}
-
-/*==========================================
- * The stop of MOB's attack
- *------------------------------------------
- */
-int mob_stopattack(struct mob_data *md)
-{
-	md->target_id=0;
-	md->state.targettype = NONE_ATTACKABLE;
-	md->attacked_id=0;
-	return 0;
-}
-/*==========================================
- * The stop of MOB's walking
- *------------------------------------------
- */
-int mob_stop_walking(struct mob_data *md,int type)
-{
-	nullpo_retr(0, md);
-
-
-	if(md->state.state == MS_WALK || md->state.state == MS_IDLE) {
-		int dx=0,dy=0;
-		
-		md->walkpath.path_len=0;
-		if(type&4){
-			dx=md->to_x-md->bl.x;
-			if(dx<0)
-				dx=-1;
-			else if(dx>0)
-				dx=1;
-			dy=md->to_y-md->bl.y;
-			if(dy<0)
-				dy=-1;
-			else if(dy>0)
-				dy=1;
-		}
-		md->to_x=md->bl.x+dx;
-		md->to_y=md->bl.y+dy;
-		if(dx!=0 || dy!=0){
-			mob_walktoxy_sub(md);
-			return 0;
-		}
-		mob_changestate(md,MS_IDLE,0);
-	}
-	if(type&0x01)
-		clif_fixmobpos(md);
-	if(type&0x02) {
-		int delay=battle_get_dmotion(&md->bl);
-		unsigned int tick = gettick();
-		if(md->canmove_tick < tick)
-			md->canmove_tick = tick + delay;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * Reachability to a Specification ID existence place
- *------------------------------------------
- */
-int mob_can_reach(struct mob_data *md,struct block_list *bl,int range)
-{
-	int dx,dy;
-	struct walkpath_data wpd;
-	int i;
-
-	nullpo_retr(0, md);
-	nullpo_retr(0, bl);
-
-	dx=abs(bl->x - md->bl.x);
-	dy=abs(bl->y - md->bl.y);
-
-	//=========== guildcastle guardian no search start===========
-	//when players are the guild castle member not attack them !
-	if(md->class == 1285 || md->class == 1286 || md->class == 1287){
-		struct map_session_data *sd;
-		struct guild *g=NULL;
-		struct guild_castle *gc=guild_mapname2gc(map[bl->m].name);
-
-		if(gc && agit_flag==0)	// Guardians will not attack during non-woe time [Valaris]
-			return 0;  // end addition [Valaris]
-	
-		if(bl && bl->type == BL_PC){
-			if((sd=(struct map_session_data *)bl) == NULL){
-				printf("mob_can_reach nullpo\n");
-				return 0;
-			}
-				
-			if(gc && sd && sd->status.guild_id && sd->status.guild_id>0) {
-			g=guild_search(sd->status.guild_id);	// don't attack guild members [Valaris]
-				if(g && g->guild_id > 0 && g->guild_id == gc->guild_id)
-						return 0;
-				if(g && gc && guild_isallied(g,gc))
-						return 0;
-
-			}
-		}
-	}
-	//========== guildcastle guardian no search eof==============
-
-	if(bl && bl->type == BL_PC && battle_config.monsters_ignore_gm==1) {	 // option to have monsters ignore GMs [Valaris]
-		struct map_session_data *sd;
-		if((sd=(struct map_session_data *)bl) != NULL && pc_isGM(sd))
-			return 0;
-  	}
-
-	if( md->bl.m != bl->m)	// �Ⴄ��b�v
-		return 0;
-
-	if( range>0 && range < ((dx>dy)?dx:dy) )	// ��������
-		return 0;
-
-	if( md->bl.x==bl->x && md->bl.y==bl->y )	// ������X
-		return 1;
-
-	// Obstacle judging
-	wpd.path_len=0;
-	wpd.path_pos=0;
-	wpd.path_half=0;
-	if(path_search(&wpd,md->bl.m,md->bl.x,md->bl.y,bl->x,bl->y,0)!=-1)
-		return 1;
-
-	if(bl->type!=BL_PC && bl->type!=BL_MOB)
-		return 0;
-
-	// It judges whether it can adjoin or not.
-	dx=(dx>0)?1:((dx<0)?-1:0);
-	dy=(dy>0)?1:((dy<0)?-1:0);
-	if(path_search(&wpd,md->bl.m,md->bl.x,md->bl.y,bl->x-dx,bl->y-dy,0)!=-1)
-		return 1;
-	for(i=0;i<9;i++){
-		if(path_search(&wpd,md->bl.m,md->bl.x,md->bl.y,bl->x-1+i/3,bl->y-1+i%3,0)!=-1)
-			return 1;
-	}
-	return 0;
-}
-
-/*==========================================
- * Determination for an attack of a monster
- *------------------------------------------
- */
-int mob_target(struct mob_data *md,struct block_list *bl,int dist)
-{
-	struct map_session_data *sd;
-	struct status_change *sc_data;
-	short *option;
-	int mode,race;
-
-	nullpo_retr(0, md);
-	nullpo_retr(0, bl);
-
-	sc_data = battle_get_sc_data(bl);
-	option = battle_get_option(bl);
-	race=mob_db[md->class].race;
-
-	if(!md->mode){
-		mode=mob_db[md->class].mode;
-	}else{
-		mode=md->mode;
-	}
-	if(!(mode&0x80)) {
-		md->target_id = 0;
-		return 0;
-	}
-	// Nothing will be carried out if there is no mind of changing TAGE by TAGE ending.
-	if( (md->target_id > 0 && md->state.targettype == ATTACKABLE) && ( !(mode&0x04) || rand()%100>25) )
-		return 0;
-
-	if(mode&0x20 ||	// Coercion is exerted if it is MVPMOB.
-		(sc_data && sc_data[SC_TRICKDEAD].timer == -1 &&
-		 ( (option && !(*option&0x06) ) || race==4 || race==6) ) ){
-		if(bl->type == BL_PC) {
-			nullpo_retr(0, sd = (struct map_session_data *)bl);
-			if(sd->invincible_timer != -1 || pc_isinvisible(sd))
-				return 0;
-			if(!(mode&0x20) && race!=4 && race!=6 && sd->state.gangsterparadise)
-				return 0;
-		}
-
-		md->target_id=bl->id;	// Since there was no disturbance, it locks on to target.
-		if(bl->type == BL_PC || bl->type == BL_MOB)
-			md->state.targettype = ATTACKABLE;
-		else
-			md->state.targettype = NONE_ATTACKABLE;
-		md->min_chase=dist+13;
-		if(md->min_chase>26)
-			md->min_chase=26;
-	}
-	return 0;
-}
-
-/*==========================================
- * The ?? routine of an active monster
- *------------------------------------------
- */
-static int mob_ai_sub_hard_activesearch(struct block_list *bl,va_list ap)
-{
-	struct map_session_data *tsd=NULL;
-	struct mob_data *smd,*tmd=NULL;
-	int mode,race,dist,*pcc;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, smd=va_arg(ap,struct mob_data *));
-	nullpo_retr(0, pcc=va_arg(ap,int *));
-
-	if(bl->type==BL_PC)
-		tsd=(struct map_session_data *)bl;
-	else if(bl->type==BL_MOB)
-		tmd=(struct mob_data *)bl;
-	else
-		return 0;
-
-	//�G��������
-	if(battle_check_target(&smd->bl,bl,BCT_ENEMY)==0)
-		return 0;
-
-	if(!smd->mode)
-		mode=mob_db[smd->class].mode;
-	else
-		mode=smd->mode;
-
-	// �A�N�e�B�u�Ń^�[�Q�b�g�˒����ɂ���Ȃ�A���b�N����
-	if( mode&0x04 ){
-		race=mob_db[smd->class].race;
-		//�Ώۂ�PC�̏ꍇ
-		if(tsd &&
-				!pc_isdead(tsd) && 
-				tsd->bl.m == smd->bl.m && 
-				tsd->invincible_timer == -1 && 
-				!pc_isinvisible(tsd) &&
-				(dist=distance(smd->bl.x,smd->bl.y,tsd->bl.x,tsd->bl.y))<9
-			)
-		{
-			if(mode&0x20 ||
-				(tsd->sc_data[SC_TRICKDEAD].timer == -1 &&
-				((!pc_ishiding(tsd) && !tsd->state.gangsterparadise) || race==4 || race==6))){	// �W�Q���Ȃ�������
-				if( mob_can_reach(smd,bl,12) && 		// ���B�”\������
-					rand()%1000<1000/(++(*pcc)) ){	// �͈͓�PC�œ��m���ɂ���
-					smd->target_id=tsd->bl.id;
-					smd->state.targettype = ATTACKABLE;
-					smd->min_chase=13;
-				}
-			}
-		}
-		//�Ώۂ�Mob�̏ꍇ
-		else if(tmd &&
-				tmd->bl.m == smd->bl.m &&
-				(dist=distance(smd->bl.x,smd->bl.y,tmd->bl.x,tmd->bl.y))<9
-			)
-		{
-			if( mob_can_reach(smd,bl,12) && 		// ���B�”\������
-				rand()%1000<1000/(++(*pcc)) ){	// �͈͓��œ��m���ɂ���
-				smd->target_id=bl->id;
-				smd->state.targettype = ATTACKABLE;
-				smd->min_chase=13;
-			}
-		}
-	}
-	return 0;
-}
-
-/*==========================================
- * loot monster item search
- *------------------------------------------
- */
-static int mob_ai_sub_hard_lootsearch(struct block_list *bl,va_list ap)
-{
-	struct mob_data* md;
-	int mode,dist,*itc;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, md=va_arg(ap,struct mob_data *));
-	nullpo_retr(0, itc=va_arg(ap,int *));
-
-	if(!md->mode){
-	mode=mob_db[md->class].mode;
-	}else{
-		mode=md->mode;
-	}
-
-	if( !md->target_id && mode&0x02){
-		if(!md->lootitem || (battle_config.monster_loot_type == 1 && md->lootitem_count >= LOOTITEM_SIZE) )
-			return 0;
-		if(bl->m == md->bl.m && (dist=distance(md->bl.x,md->bl.y,bl->x,bl->y))<9){
-			if( mob_can_reach(md,bl,12) && 		// Reachability judging
-				rand()%1000<1000/(++(*itc)) ){	// It is made a probability, such as within the limits PC.
-				md->target_id=bl->id;
-				md->state.targettype = NONE_ATTACKABLE;
-				md->min_chase=13;
-			}
-		}
-	}
-	return 0;
-}
-
-/*==========================================
- * The ?? routine of a link monster
- *------------------------------------------
- */
-static int mob_ai_sub_hard_linksearch(struct block_list *bl,va_list ap)
-{
-	struct mob_data *tmd;
-	struct mob_data* md;
-	struct block_list *target;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, tmd=(struct mob_data *)bl);
-	nullpo_retr(0, md=va_arg(ap,struct mob_data *));
-	nullpo_retr(0, target=va_arg(ap,struct block_list *));
-
-	// same family free in a range at a link monster -- it will be made to lock if MOB is
-/*	if( (md->target_id > 0 && md->state.targettype == ATTACKABLE) && mob_db[md->class].mode&0x08){
-		if( tmd->class==md->class && (!tmd->target_id || md->state.targettype == NONE_ATTACKABLE) && tmd->bl.m == md->bl.m){
-			if( mob_can_reach(tmd,target,12) ){	// Reachability judging
-				tmd->target_id=md->target_id;
-				tmd->state.targettype = ATTACKABLE;
-				tmd->min_chase=13;
-			}
-		}
-	}*/
-	if( md->attacked_id > 0 && mob_db[md->class].mode&0x08){
-		if( tmd->class==md->class && tmd->bl.m == md->bl.m && (!tmd->target_id || md->state.targettype == NONE_ATTACKABLE)){
-			if( mob_can_reach(tmd,target,12) ){	// Reachability judging
-				tmd->target_id=md->attacked_id;
-				tmd->state.targettype = ATTACKABLE;
-				tmd->min_chase=13;
-			}
-		}
-	}
-
-	return 0;
-}
-/*==========================================
- * Processing of slave monsters
- *------------------------------------------
- */
-static int mob_ai_sub_hard_slavemob(struct mob_data *md,unsigned int tick)
-{
-	struct mob_data *mmd=NULL;
-	struct block_list *bl;
-	int mode,race,old_dist;
-
-	nullpo_retr(0, md);
-
-	if((bl=map_id2bl(md->master_id)) != NULL )
-		mmd=(struct mob_data *)bl;
-
-	mode=mob_db[md->class].mode;
-
-	// It is not main monster/leader.
-	if(!mmd || mmd->bl.type!=BL_MOB || mmd->bl.id!=md->master_id)
-		return 0;
-
-	// Since it is in the map on which the master is not, teleport is carried out and it pursues.
-	if( mmd->bl.m != md->bl.m ){
-		mob_warp(md,mmd->bl.m,mmd->bl.x,mmd->bl.y,3);
-		md->state.master_check = 1;
-		return 0;
-	}
-
-	// Distance with between slave and master is measured.
-	old_dist=md->master_dist;
-	md->master_dist=distance(md->bl.x,md->bl.y,mmd->bl.x,mmd->bl.y);
-
-	// Since the master was in near immediately before, teleport is carried out and it pursues.
-	if( old_dist<10 && md->master_dist>18){
-		mob_warp(md,-1,mmd->bl.x,mmd->bl.y,3);
-		md->state.master_check = 1;
-		return 0;
-	}
-
-	// Although there is the master, since it is somewhat far, it approaches.
-	if((!md->target_id || md->state.targettype == NONE_ATTACKABLE) && mob_can_move(md) &&
-		(md->walkpath.path_pos>=md->walkpath.path_len || md->walkpath.path_len==0) && md->master_dist<15){
-		int i=0,dx,dy,ret;
-		if(md->master_dist>4) {
-			do {
-				if(i<=5){
-					dx=mmd->bl.x - md->bl.x;
-					dy=mmd->bl.y - md->bl.y;
-					if(dx<0) dx+=(rand()%( (dx<-3)?3:-dx )+1);
-					else if(dx>0) dx-=(rand()%( (dx>3)?3:dx )+1);
-					if(dy<0) dy+=(rand()%( (dy<-3)?3:-dy )+1);
-					else if(dy>0) dy-=(rand()%( (dy>3)?3:dy )+1);
-				}else{
-					dx=mmd->bl.x - md->bl.x + rand()%7 - 3;
-					dy=mmd->bl.y - md->bl.y + rand()%7 - 3;
-				}
-
-				ret=mob_walktoxy(md,md->bl.x+dx,md->bl.y+dy,0);
-				i++;
-			} while(ret && i<10);
-		}
-		else {
-			do {
-				dx = rand()%9 - 5;
-				dy = rand()%9 - 5;
-				if( dx == 0 && dy == 0) {
-					dx = (rand()%1)? 1:-1;
-					dy = (rand()%1)? 1:-1;
-				}
-				dx += mmd->bl.x;
-				dy += mmd->bl.y;
-
-				ret=mob_walktoxy(md,mmd->bl.x+dx,mmd->bl.y+dy,0);
-				i++;
-			} while(ret && i<10);
-		}
-
-		md->next_walktime=tick+500;
-		md->state.master_check = 1;
-	}
-
-	// There is the master, the master locks a target and he does not lock.
-	if( (mmd->target_id>0 && mmd->state.targettype == ATTACKABLE) && (!md->target_id || md->state.targettype == NONE_ATTACKABLE) ){
-		struct map_session_data *sd=map_id2sd(mmd->target_id);
-		if(sd!=NULL && !pc_isdead(sd) && sd->invincible_timer == -1 && !pc_isinvisible(sd)){
-
-			race=mob_db[md->class].race;
-			if(mode&0x20 ||
-				(sd->sc_data[SC_TRICKDEAD].timer == -1 &&
-				( (!pc_ishiding(sd) && !sd->state.gangsterparadise) || race==4 || race==6) ) ){	// �W�Q���Ȃ�������
-
-				md->target_id=sd->bl.id;
-				md->state.targettype = ATTACKABLE;
-				md->min_chase=5+distance(md->bl.x,md->bl.y,sd->bl.x,sd->bl.y);
-				md->state.master_check = 1;
-			}
-		}
-	}
-
-	// There is the master, the master locks a target and he does not lock.
-/*	if( (md->target_id>0 && mmd->state.targettype == ATTACKABLE) && (!mmd->target_id || mmd->state.targettype == NONE_ATTACKABLE) ){
-		struct map_session_data *sd=map_id2sd(md->target_id);
-		if(sd!=NULL && !pc_isdead(sd) && sd->invincible_timer == -1 && !pc_isinvisible(sd)){
-
-			race=mob_db[mmd->class].race;
-			if(mode&0x20 ||
-				(sd->sc_data[SC_TRICKDEAD].timer == -1 &&
-				(!(sd->status.option&0x06) || race==4 || race==6)
-				) ){	// It judges whether there is any disturbance.
-
-				mmd->target_id=sd->bl.id;
-				mmd->state.targettype = ATTACKABLE;
-				mmd->min_chase=5+distance(mmd->bl.x,mmd->bl.y,sd->bl.x,sd->bl.y);
-			}
-		}
-	}*/
-
-	return 0;
-}
-
-/*==========================================
- * A lock of target is stopped and mob moves to a standby state.
- *------------------------------------------
- */
-static int mob_unlocktarget(struct mob_data *md,int tick)
-{
-	nullpo_retr(0, md);
-
-	md->target_id=0;
-	md->state.targettype = NONE_ATTACKABLE;
-	md->state.skillstate=MSS_IDLE;
-	md->next_walktime=tick+rand()%3000+3000;
-	return 0;
-}
-/*==========================================
- * Random walk
- *------------------------------------------
- */
-static int mob_randomwalk(struct mob_data *md,int tick)
-{
-	const int retrycount=20;
-	int speed;
-
-	nullpo_retr(0, md);
-
-	speed=battle_get_speed(&md->bl);
-	if(DIFF_TICK(md->next_walktime,tick)<0){
-		int i,x,y,c,d=12-md->move_fail_count;
-		if(d<5) d=5;
-		for(i=0;i<retrycount;i++){	// Search of a movable place
-			int r=rand();
-			x=md->bl.x+r%(d*2+1)-d;
-			y=md->bl.y+r/(d*2+1)%(d*2+1)-d;
-			if((c=map_getcell(md->bl.m,x,y))!=1 && c!=5 && mob_walktoxy(md,x,y,1)==0){
-				md->move_fail_count=0;
-				break;
-			}
-			if(i+1>=retrycount){
-				md->move_fail_count++;
-				if(md->move_fail_count>1000){
-					if(battle_config.error_log==1)
-						printf("MOB cant move. random spawn %d, class = %d\n",md->bl.id,md->class);
-					md->move_fail_count=0;
-					mob_spawn(md->bl.id);
-				}
-			}
-		}
-		for(i=c=0;i<md->walkpath.path_len;i++){	// The next walk start time is calculated.
-			if(md->walkpath.path[i]&1)
-				c+=speed*14/10;
-			else
-				c+=speed;
-		}
-		md->next_walktime = tick+rand()%3000+3000+c;
-		md->state.skillstate=MSS_WALK;
-		return 1;
-	}
-	return 0;
-}
-
-/*==========================================
- * AI of MOB whose is near a Player
- *------------------------------------------
- */
-static int mob_ai_sub_hard(struct block_list *bl,va_list ap)
-{
-	struct mob_data *md,*tmd=NULL;
-	struct map_session_data *tsd=NULL;
-	struct block_list *tbl=NULL;
-	struct flooritem_data *fitem;
-	unsigned int tick;
-	int i,dx,dy,ret,dist;
-	int attack_type=0;
-	int mode,race;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, md=(struct mob_data*)bl);
-
-	tick=va_arg(ap,unsigned int);
-
-
-	if(DIFF_TICK(tick,md->last_thinktime)<MIN_MOBTHINKTIME)
-		return 0;
-	md->last_thinktime=tick;
-
-	if( md->skilltimer!=-1 || md->bl.prev==NULL ){	// Under a skill aria and death
-		if(DIFF_TICK(tick,md->next_walktime)>MIN_MOBTHINKTIME)
-			md->next_walktime=tick;
-		return 0;
-	}
-
-	if(!md->mode)
-	mode=mob_db[md->class].mode;
-	else
-		mode=md->mode;
-
-	race=mob_db[md->class].race;
-
-	// Abnormalities
-	if((md->opt1 > 0 && md->opt1 != 6) || md->state.state==MS_DELAY || md->sc_data[SC_BLADESTOP].timer != -1)
-		return 0;
-
-	if(!(mode&0x80) && md->target_id > 0)
-		md->target_id = 0;
-
-	if(md->attacked_id > 0 && mode&0x08){	// Link monster
-		struct map_session_data *asd=map_id2sd(md->attacked_id);
-		if(asd){
-			if(asd->invincible_timer == -1 && !pc_isinvisible(asd)){
-				map_foreachinarea(mob_ai_sub_hard_linksearch,md->bl.m,
-					md->bl.x-13,md->bl.y-13,
-					md->bl.x+13,md->bl.y+13,
-					BL_MOB,md,&asd->bl);
-			}
-		}
-	}
-
-	// It checks to see it was attacked first (if active, it is target change at 25% of probability).
-	if( mode>0 && md->attacked_id>0 && (!md->target_id || md->state.targettype == NONE_ATTACKABLE
-		|| (mode&0x04 && rand()%100<25 ) ) ){
-		struct block_list *abl=map_id2bl(md->attacked_id);
-		struct map_session_data *asd=NULL;
-		if(abl){
-			if(abl->type==BL_PC)
-				asd=(struct map_session_data *)abl;
-			if(asd==NULL || md->bl.m != abl->m || abl->prev == NULL || asd->invincible_timer != -1 || pc_isinvisible(asd) ||
-				(dist=distance(md->bl.x,md->bl.y,abl->x,abl->y))>=32 || battle_check_target(bl,abl,BCT_ENEMY)==0)
-			md->attacked_id=0;
-		else {
-			md->target_id=md->attacked_id; // set target
-			md->state.targettype = ATTACKABLE;
-			attack_type = 1;
-			md->attacked_id=0;
-			md->min_chase=dist+13;
-			if(md->min_chase>26)
-				md->min_chase=26;
-		}
-	}
-	}
-
-	md->state.master_check = 0;
-	// Processing of slave monster
-	if( md->master_id > 0 && md->state.special_mob_ai==0)
-		mob_ai_sub_hard_slavemob(md,tick);
-
-	// �A�N�e�B�������X�^�[�̍��G (?? of a bitter taste TIVU monster)
-	if( (!md->target_id || md->state.targettype == NONE_ATTACKABLE) && mode&0x04 && !md->state.master_check &&
-		battle_config.monster_active_enable==1){
-		i=0;
-		if(md->state.special_mob_ai){
-			map_foreachinarea(mob_ai_sub_hard_activesearch,md->bl.m,
-							  md->bl.x-AREA_SIZE*2,md->bl.y-AREA_SIZE*2,
-							  md->bl.x+AREA_SIZE*2,md->bl.y+AREA_SIZE*2,
-							  0,md,&i);
-		}else{
-		map_foreachinarea(mob_ai_sub_hard_activesearch,md->bl.m,
-						  md->bl.x-AREA_SIZE*2,md->bl.y-AREA_SIZE*2,
-						  md->bl.x+AREA_SIZE*2,md->bl.y+AREA_SIZE*2,
-						  BL_PC,md,&i);
-	}
-	}
-
-	// The item search of a route monster
-	if( !md->target_id && mode&0x02 && !md->state.master_check){
-		i=0;
-		map_foreachinarea(mob_ai_sub_hard_lootsearch,md->bl.m,
-						  md->bl.x-AREA_SIZE*2,md->bl.y-AREA_SIZE*2,
-						  md->bl.x+AREA_SIZE*2,md->bl.y+AREA_SIZE*2,
-						  BL_ITEM,md,&i);
-	}
-
-	// It will attack, if the candidate for an attack is.
-	if(md->target_id > 0){
-		if((tbl=map_id2bl(md->target_id))){
-			if(tbl->type==BL_PC)
-				tsd=(struct map_session_data *)tbl;
-			else if(tbl->type==BL_MOB)
-				tmd=(struct mob_data *)tbl;
-			if(tsd || tmd) {
-				if(tbl->m != md->bl.m || tbl->prev == NULL || (dist=distance(md->bl.x,md->bl.y,tbl->x,tbl->y))>=md->min_chase)
-					mob_unlocktarget(md,tick);	// �ʃ}�b�v���A���E�O
-				else if( tsd && !(mode&0x20) && (tsd->sc_data[SC_TRICKDEAD].timer != -1 || ((pc_ishiding(tsd) || tsd->state.gangsterparadise) && race!=4 && race!=6)) )
-					mob_unlocktarget(md,tick);	// �X�L���Ȃǂɂ����G�W�Q
-				else if(!battle_check_range(&md->bl,tbl,mob_db[md->class].range)){
-					// �U���͈͊O�Ȃ̂ňړ�
-					if(!(mode&1)){	// �ړ����Ȃ����[�h
-					mob_unlocktarget(md,tick);
-					return 0;
-				}
-					if( !mob_can_move(md) )	// �����Ȃ���Ԃɂ���
-					return 0;
-					md->state.skillstate=MSS_CHASE;	// �ˌ����X�L��
-				mobskill_use(md,tick,-1);
-//					if(md->timer != -1 && (DIFF_TICK(md->next_walktime,tick)<0 || distance(md->to_x,md->to_y,tsd->bl.x,tsd->bl.y)<2) )
-					if(md->timer != -1 && md->state.state!=MS_ATTACK && (DIFF_TICK(md->next_walktime,tick)<0 || distance(md->to_x,md->to_y,tbl->x,tbl->y)<2) )
-						return 0; // ���Ɉړ���
-					if( !mob_can_reach(md,tbl,(md->min_chase>13)?md->min_chase:13) )
-						mob_unlocktarget(md,tick);	// �ړ��ł��Ȃ��̂Ń^�Q�����iIW�Ƃ��H�j
-					else{
-					// �ǐ�
-					md->next_walktime=tick+500;
-					i=0;
-					do {
-							if(i==0){	// �ŏ���AEGIS�Ɠ������@�Ō���
-								dx=tbl->x - md->bl.x;
-								dy=tbl->y - md->bl.y;
-							if(dx<0) dx++;
-							else if(dx>0) dx--;
-							if(dy<0) dy++;
-							else if(dy>0) dy--;
-							}else{	// ���߂Ȃ�Athena��(�����_��)
-								dx=tbl->x - md->bl.x + rand()%3 - 1;
-								dy=tbl->y - md->bl.y + rand()%3 - 1;
-							}
-	/*						if(path_search(&md->walkpath,md->bl.m,md->bl.x,md->bl.y,md->bl.x+dx,md->bl.y+dy,0)){
-								dx=tsd->bl.x - md->bl.x;
-								dy=tsd->bl.y - md->bl.y;
-							if(dx<0) dx--;
-							else if(dx>0) dx++;
-							if(dy<0) dy--;
-							else if(dy>0) dy++;
-						}*/
-						ret=mob_walktoxy(md,md->bl.x+dx,md->bl.y+dy,0);
-						i++;
-					} while(ret && i<5);
-
-						if(ret){ // �ړ��s�”\�ȏ�����̍U���Ȃ�2������
-						if(dx<0) dx=2;
-						else if(dx>0) dx=-2;
-						if(dy<0) dy=2;
-						else if(dy>0) dy=-2;
-						mob_walktoxy(md,md->bl.x+dx,md->bl.y+dy,0);
-					}
-				}
-				} else { // �U���˒��͈͓�
-				md->state.skillstate=MSS_ATTACK;
-					if(md->state.state==MS_WALK)
-						mob_stop_walking(md,1);	// ���s���Ȃ��~
-				if(md->state.state==MS_ATTACK)
-						return 0; // ���ɍU����
-				mob_changestate(md,MS_ATTACK,attack_type);
-
-/*					if(mode&0x08){	// �����N�����X�^�[
-					map_foreachinarea(mob_ai_sub_hard_linksearch,md->bl.m,
-						md->bl.x-13,md->bl.y-13,
-						md->bl.x+13,md->bl.y+13,
-							BL_MOB,md,&tsd->bl);
-				}*/
-			}
-			return 0;
-			}else{	// ���[�g�����X�^�[����
-				if(tbl == NULL || tbl->type != BL_ITEM ||tbl->m != md->bl.m ||
-					 (dist=distance(md->bl.x,md->bl.y,tbl->x,tbl->y))>=md->min_chase || !md->lootitem){
-					 // �������邩�A�C�e�����Ȃ��Ȃ���
-					mob_unlocktarget(md,tick);
-					if(md->state.state==MS_WALK)
-						mob_stop_walking(md,1);	// ���s���Ȃ��~
-				}else if(dist){
-					if(!(mode&1)){	// �ړ����Ȃ����[�h
-					mob_unlocktarget(md,tick);
-					return 0;
-				}
-					if( !mob_can_move(md) )	// �����Ȃ���Ԃɂ���
-					return 0;
-					md->state.skillstate=MSS_LOOT;	// ���[�g���X�L���g�p
-				mobskill_use(md,tick,-1);
-//					if(md->timer != -1 && (DIFF_TICK(md->next_walktime,tick)<0 || distance(md->to_x,md->to_y,tbl->x,tbl->y)<2) )
-					if(md->timer != -1 && md->state.state!=MS_ATTACK && (DIFF_TICK(md->next_walktime,tick)<0 || distance(md->to_x,md->to_y,tbl->x,tbl->y) <= 0))
-						return 0; // ���Ɉړ���
-				md->next_walktime=tick+500;
-					dx=tbl->x - md->bl.x;
-					dy=tbl->y - md->bl.y;
-/*				if(path_search(&md->walkpath,md->bl.m,md->bl.x,md->bl.y,md->bl.x+dx,md->bl.y+dy,0)){
-						dx=tbl->x - md->bl.x;
-						dy=tbl->y - md->bl.y;
-				}*/
-				ret=mob_walktoxy(md,md->bl.x+dx,md->bl.y+dy,0);
-					if(ret)
-						mob_unlocktarget(md,tick);// �ړ��ł��Ȃ��̂Ń^�Q�����iIW�Ƃ��H�j
-				}else{	// �A�C�e���܂ł��ǂ蒅����
-				if(md->state.state==MS_ATTACK)
-					return 0; // �U����
-					if(md->state.state==MS_WALK)
-						mob_stop_walking(md,1);	// ���s���Ȃ��~
-					fitem = (struct flooritem_data *)tbl;
-				if(md->lootitem_count < LOOTITEM_SIZE)
-					memcpy(&md->lootitem[md->lootitem_count++],&fitem->item_data,sizeof(md->lootitem[0]));
-				else if(battle_config.monster_loot_type == 1 && md->lootitem_count >= LOOTITEM_SIZE) {
-					mob_unlocktarget(md,tick);
-					return 0;
-				}
-				else {
-					if(md->lootitem[0].card[0] == (short)0xff00)
-						intif_delete_petdata(*((long *)(&md->lootitem[0].card[1])));
-					for(i=0;i<LOOTITEM_SIZE-1;i++)
-						memcpy(&md->lootitem[i],&md->lootitem[i+1],sizeof(md->lootitem[0]));
-					memcpy(&md->lootitem[LOOTITEM_SIZE-1],&fitem->item_data,sizeof(md->lootitem[0]));
-				}
-					map_clearflooritem(tbl->id);
-				mob_unlocktarget(md,tick);
-			}
-			return 0;
-		}
-		}else{
-			mob_unlocktarget(md,tick);
-			if(md->state.state==MS_WALK)
-				mob_stop_walking(md,4);	// ���s���Ȃ��~
-			return 0;
-		}
-	}
-
-	// It is skill use at the time of /standby at the time of a walk.
-	if( mobskill_use(md,tick,-1) )
-		return 0;
-
-	// ���s����
-	if( mode&1 && mob_can_move(md) &&	// �ړ��”\MOB&�������Ԃɂ���
-		(md->master_id==0 || md->state.special_mob_ai || md->master_dist>10) ){	//��芪��MOB����Ȃ�
-
-		if( DIFF_TICK(md->next_walktime,tick) > + 7000 &&
-			(md->walkpath.path_len==0 || md->walkpath.path_pos>=md->walkpath.path_len) ){
-			md->next_walktime = tick + 3000*rand()%2000;
-		}
-
-		// Random movement
-		if( mob_randomwalk(md,tick) )
-			return 0;
-	}
-
-	// Since he has finished walking, it stands by.
-	if( md->walkpath.path_len==0 || md->walkpath.path_pos>=md->walkpath.path_len )
-		md->state.skillstate=MSS_IDLE;
-	return 0;
-}
-
-/*==========================================
- * Serious processing for mob in PC field of view (foreachclient)
- *------------------------------------------
- */
-static int mob_ai_sub_foreachclient(struct map_session_data *sd,va_list ap)
-{
-	unsigned int tick;
-	nullpo_retr(0, sd);
-	nullpo_retr(0, ap);
-
-	tick=va_arg(ap,unsigned int);
-	map_foreachinarea(mob_ai_sub_hard,sd->bl.m,
-					  sd->bl.x-AREA_SIZE*2,sd->bl.y-AREA_SIZE*2,
-					  sd->bl.x+AREA_SIZE*2,sd->bl.y+AREA_SIZE*2,
-					  BL_MOB,tick);
-
-	return 0;
-}
-
-/*==========================================
- * Serious processing for mob in PC field of view   (interval timer function)
- *------------------------------------------
- */
-static int mob_ai_hard(int tid,unsigned int tick,int id,int data)
-{
-	clif_foreachclient(mob_ai_sub_foreachclient,tick);
-
-	return 0;
-}
-
-/*==========================================
- * Negligent mode MOB AI (PC is not in near)
- *------------------------------------------
- */
-static int mob_ai_sub_lazy(void * key,void * data,va_list app)
-{
-	struct mob_data *md=data;
-	unsigned int tick;
-	va_list ap;
-
-	nullpo_retr(0, md);
-	nullpo_retr(0, app);
-	nullpo_retr(0, ap=va_arg(app,va_list));
-
-	if(md==NULL)
-		return 0;
-
-	if(!md->bl.type || md->bl.type!=BL_MOB)
-		return 0;
-
-	tick=va_arg(ap,unsigned int);
-
-	if(DIFF_TICK(tick,md->last_thinktime)<MIN_MOBTHINKTIME*10)
-		return 0;
-	md->last_thinktime=tick;
-
-	if(md->bl.prev==NULL || md->skilltimer!=-1){
-		if(DIFF_TICK(tick,md->next_walktime)>MIN_MOBTHINKTIME*10)
-			md->next_walktime=tick;
-		return 0;
-	}
-
-	if(DIFF_TICK(md->next_walktime,tick)<0 &&
-		(mob_db[md->class].mode&1) && mob_can_move(md) ){
-
-		if( map[md->bl.m].users>0 ){
-			// Since PC is in the same map, somewhat better negligent processing is carried out.
-
-			// It sometimes moves.
-			if(rand()%1000<MOB_LAZYMOVEPERC)
-				mob_randomwalk(md,tick);
-
-			// MOB which is not not the summons MOB but BOSS, either sometimes reboils.
-			else if( rand()%1000<MOB_LAZYWARPPERC && md->x0<=0 && md->master_id!=0 &&
-				mob_db[md->class].mexp <= 0 && !(mob_db[md->class].mode & 0x20))
-				mob_spawn(md->bl.id);
-
-		}else{
-			// Since PC is not even in the same map, suitable processing is carried out even if it takes.
-
-			// MOB which is not BOSS which is not Summons MOB, either -- a case -- sometimes -- leaping
-			if( rand()%1000<MOB_LAZYWARPPERC && md->x0<=0 && md->master_id!=0 &&
-				mob_db[md->class].mexp <= 0 && !(mob_db[md->class].mode & 0x20))
-				mob_warp(md,-1,-1,-1,-1);
-		}
-
-		md->next_walktime = tick+rand()%10000+5000;
-	}
-	return 0;
-}
-
-/*==========================================
- * Negligent processing for mob outside PC field of view   (interval timer function)
- *------------------------------------------
- */
-static int mob_ai_lazy(int tid,unsigned int tick,int id,int data)
-{
-	map_foreachiddb(mob_ai_sub_lazy,tick);
-
-	return 0;
-}
-
-
-/*==========================================
- * The structure object for item drop with delay
- * Since it is only two being able to pass [ int ] a timer function
- * Data is put in and passed to this structure object.
- *------------------------------------------
- */
-struct delay_item_drop {
-	int m,x,y;
-	int nameid,amount;
-	struct map_session_data *first_sd,*second_sd,*third_sd;
-};
-
-struct delay_item_drop2 {
-	int m,x,y;
-	struct item item_data;
-	struct map_session_data *first_sd,*second_sd,*third_sd;
-};
-
-/*==========================================
- * item drop with delay (timer function)
- *------------------------------------------
- */
-static int mob_delay_item_drop(int tid,unsigned int tick,int id,int data)
-{
-	struct delay_item_drop *ditem;
-	struct item temp_item;
-	int flag;
-
-	nullpo_retr(0, ditem=(struct delay_item_drop *)id);
-
-	memset(&temp_item,0,sizeof(temp_item));
-	temp_item.nameid = ditem->nameid;
-	temp_item.amount = ditem->amount;
-	temp_item.identify = !itemdb_isequip3(temp_item.nameid);
-
-	if(battle_config.item_auto_get==1){
-		if(ditem->first_sd && (flag = pc_additem(ditem->first_sd,&temp_item,ditem->amount))){
-			clif_additem(ditem->first_sd,0,0,flag);
-			map_addflooritem(&temp_item,1,ditem->m,ditem->x,ditem->y,ditem->first_sd,ditem->second_sd,ditem->third_sd,0);
-		}
-		free(ditem);
-		return 0;
-	}
-
-	map_addflooritem(&temp_item,1,ditem->m,ditem->x,ditem->y,ditem->first_sd,ditem->second_sd,ditem->third_sd,0);
-
-	free(ditem);
-	return 0;
-}
-
-/*==========================================
- * item drop (timer function)-lootitem with delay
- *------------------------------------------
- */
-static int mob_delay_item_drop2(int tid,unsigned int tick,int id,int data)
-{
-	struct delay_item_drop2 *ditem;
-	int flag;
-
-	nullpo_retr(0, ditem=(struct delay_item_drop2 *)id);
-
-	if(battle_config.item_auto_get==1){
-		if(ditem->first_sd && (flag = pc_additem(ditem->first_sd,&ditem->item_data,ditem->item_data.amount))){
-			clif_additem(ditem->first_sd,0,0,flag);
-			map_addflooritem(&ditem->item_data,ditem->item_data.amount,ditem->m,ditem->x,ditem->y,ditem->first_sd,ditem->second_sd,ditem->third_sd,0);
-		}
-		free(ditem);
-		return 0;
-	}
-
-	map_addflooritem(&ditem->item_data,ditem->item_data.amount,ditem->m,ditem->x,ditem->y,ditem->first_sd,ditem->second_sd,ditem->third_sd,0);
-
-	free(ditem);
-	return 0;
-}
-
-/*==========================================
- * mob data is erased.
- *------------------------------------------
- */
-int mob_delete(struct mob_data *md)
-{
-	nullpo_retr(1, md);
-
-	if(md->bl.prev == NULL)
-		return 1;
-	mob_changestate(md,MS_DEAD,0);
-	clif_clearchar_area(&md->bl,1);
-	map_delblock(&md->bl);
-	if(mob_get_viewclass(md->class) <= 1000)
-		clif_clearchar_delay(gettick()+3000,&md->bl,0);
-	mob_deleteslave(md);
-	mob_setdelayspawn(md->bl.id);
-	return 0;
-}
-
-int mob_catch_delete(struct mob_data *md,int type)
-{
-	nullpo_retr(1, md);
-
-	if(md->bl.prev == NULL)
-		return 1;
-	mob_changestate(md,MS_DEAD,0);
-	clif_clearchar_area(&md->bl,type);
-	map_delblock(&md->bl);
-	mob_setdelayspawn(md->bl.id);
-	return 0;
-}
-
-int mob_timer_delete(int tid, unsigned int tick, int id, int data)
-{
-	struct block_list *bl=map_id2bl(id);
-	struct mob_data *md;
-
-	nullpo_retr(0, bl);
-
-	md = (struct mob_data *)bl;
-	mob_catch_delete(md,3);
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int mob_deleteslave_sub(struct block_list *bl,va_list ap)
-{
-	struct mob_data *md;
-	int id;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, md = (struct mob_data *)bl);
-
-	id=va_arg(ap,int);
-	if(md->master_id > 0 && md->master_id == id )
-		mob_damage(NULL,md,md->hp,1);
-	return 0;
-}
-/*==========================================
- *
- *------------------------------------------
- */
-int mob_deleteslave(struct mob_data *md)
-{
-	nullpo_retr(0, md);
-
-	map_foreachinarea(mob_deleteslave_sub, md->bl.m,
-		0,0,map[md->bl.m].xs,map[md->bl.m].ys,
-		BL_MOB,md->bl.id);
-	return 0;
-}
-
-/*==========================================
- * It is the damage of sd to damage to md.
- *------------------------------------------
- */
-int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
-{
-	int i,count,minpos,mindmg;
-	struct map_session_data *sd = NULL,*tmpsd[DAMAGELOG_SIZE];
-	struct {
-		struct party *p;
-		int id,base_exp,job_exp;
-	} pt[DAMAGELOG_SIZE];
-	int pnum=0;
-	int mvp_damage,max_hp;
-	unsigned int tick = gettick();
-	struct map_session_data *mvp_sd = NULL, *second_sd = NULL,*third_sd = NULL;
-	double dmg_rate,tdmg,temp;
-	struct item item;
-	int ret;
-	int drop_rate;
-	int skill,sp;
-
-	nullpo_retr(0, md); //src��NULL�ŌĂ΂��ꍇ������̂ŁA���Ń`�F�b�N
-
-	max_hp = battle_get_max_hp(&md->bl);
-
-	if(src && src->type == BL_PC) {
-		sd = (struct map_session_data *)src;
-		mvp_sd = sd;
-	}
-
-//	if(battle_config.battle_log)
-//		printf("mob_damage %d %d %d\n",md->hp,max_hp,damage);
-	if(md->bl.prev==NULL){
-		if(battle_config.error_log==1)
-			printf("mob_damage : BlockError!!\n");
-		return 0;
-	}
-
-	if(md->state.state==MS_DEAD || md->hp<=0) {
-		if(md->bl.prev != NULL) {
-			mob_changestate(md,MS_DEAD,0);
-			mobskill_use(md,tick,-1);	// It is skill at the time of death.
-			clif_clearchar_area(&md->bl,1);
-			map_delblock(&md->bl);
-			mob_setdelayspawn(md->bl.id);
-		}
-		return 0;
-	}
-
-	if(md->sc_data[SC_ENDURE].timer == -1)
-		mob_stop_walking(md,3);
-	if(damage > max_hp>>2)
-		skill_stop_dancing(&md->bl,0);
-
-	if(md->hp > max_hp)
-		md->hp = max_hp;
-
-	// The amount of overkill rounds to hp.
-	if(damage>md->hp)
-		damage=md->hp;
-
-	if(!(type&2)) {
-		if(sd!=NULL){
-			for(i=0,minpos=0,mindmg=0x7fffffff;i<DAMAGELOG_SIZE;i++){
-				if(md->dmglog[i].id==sd->bl.id)
-					break;
-				if(md->dmglog[i].id==0){
-					minpos=i;
-					mindmg=0;
-				}
-				else if(md->dmglog[i].dmg<mindmg){
-					minpos=i;
-					mindmg=md->dmglog[i].dmg;
-				}
-			}
-			if(i<DAMAGELOG_SIZE)
-				md->dmglog[i].dmg+=damage;
-			else {
-				md->dmglog[minpos].id=sd->bl.id;
-				md->dmglog[minpos].dmg=damage;
-			}
-
-			if(md->attacked_id <= 0 && md->state.special_mob_ai==0)
-				md->attacked_id = sd->bl.id;
-		}
-		if(src && src->type == BL_PET && battle_config.pet_attack_exp_to_master==1) {
-			struct pet_data *pd = (struct pet_data *)src;
-			nullpo_retr(0, pd);
-			for(i=0,minpos=0,mindmg=0x7fffffff;i<DAMAGELOG_SIZE;i++){
-				if(md->dmglog[i].id==pd->msd->bl.id)
-					break;
-				if(md->dmglog[i].id==0){
-					minpos=i;
-					mindmg=0;
-				}
-				else if(md->dmglog[i].dmg<mindmg){
-					minpos=i;
-					mindmg=md->dmglog[i].dmg;
-				}
-			}
-			if(i<DAMAGELOG_SIZE)
-				md->dmglog[i].dmg+=(damage*battle_config.pet_attack_exp_rate)/100;
-			else {
-				md->dmglog[minpos].id=pd->msd->bl.id;
-				md->dmglog[minpos].dmg=(damage*battle_config.pet_attack_exp_rate)/100;
-			}
-		}
-		if(src && src->type == BL_MOB && ((struct mob_data*)src)->state.special_mob_ai){
-			struct mob_data *md2 = (struct mob_data *)src;
-			nullpo_retr(0, md2);
-			for(i=0,minpos=0,mindmg=0x7fffffff;i<DAMAGELOG_SIZE;i++){
-				if(md->dmglog[i].id==md2->master_id)
-					break;
-				if(md->dmglog[i].id==0){
-					minpos=i;
-					mindmg=0;
-				}
-				else if(md->dmglog[i].dmg<mindmg){
-					minpos=i;
-					mindmg=md->dmglog[i].dmg;
-				}
-			}
-			if(i<DAMAGELOG_SIZE)
-				md->dmglog[i].dmg+=damage;
-			else {
-				md->dmglog[minpos].id=md2->master_id;
-				md->dmglog[minpos].dmg=damage;
-
-			if(md->attacked_id <= 0 && md->state.special_mob_ai==0)
-				md->attacked_id = md2->master_id;
-			}
-		}
-
-	}
-
-	md->hp-=damage;
-	
-	if(md->class >= 1285 && md->class <=1287) {	// guardian hp update [Valaris]
-		struct guild_castle *gc=guild_mapname2gc(map[md->bl.m].name);
-		if(gc) {
-
-				if(md->bl.id==gc->GID0) { 
-					gc->Ghp0=md->hp;
-					if(gc->Ghp0<=0) {
-					        guild_castledatasave(gc->castle_id,10,0);
-						guild_castledatasave(gc->castle_id,18,0);
-					}
-				}	
-				if(md->bl.id==gc->GID1) { 
-					gc->Ghp1=md->hp;
-					if(gc->Ghp1<=0) {
-					        guild_castledatasave(gc->castle_id,11,0);
-						guild_castledatasave(gc->castle_id,19,0);
-					}
-				}
-				if(md->bl.id==gc->GID2) { 
-					gc->Ghp2=md->hp;
-					if(gc->Ghp2<=0) {
-					        guild_castledatasave(gc->castle_id,12,0);
-						guild_castledatasave(gc->castle_id,20,0);
-					}
-				}
-				if(md->bl.id==gc->GID3) { 
-					gc->Ghp3=md->hp;
-					if(gc->Ghp3<=0) {
-					        guild_castledatasave(gc->castle_id,13,0);
-						guild_castledatasave(gc->castle_id,21,0);
-					}
-				}
-				if(md->bl.id==gc->GID4) { 
-					gc->Ghp4=md->hp;
-					if(gc->Ghp4<=0) {
-					        guild_castledatasave(gc->castle_id,14,0);
-						guild_castledatasave(gc->castle_id,22,0);
-					}
-				}
-				if(md->bl.id==gc->GID5) { 
-					gc->Ghp5=md->hp;
-					if(gc->Ghp5<=0) {
-					        guild_castledatasave(gc->castle_id,15,0);
-						guild_castledatasave(gc->castle_id,23,0);
-					}
-				}
-				if(md->bl.id==gc->GID6) { 
-					gc->Ghp6=md->hp;
-					if(gc->Ghp6<=0) {
-					        guild_castledatasave(gc->castle_id,16,0);
-						guild_castledatasave(gc->castle_id,24,0);
-					}
-				}
-				if(md->bl.id==gc->GID7) { 
-					gc->Ghp7=md->hp;
-					if(gc->Ghp7<=0) {
-					        guild_castledatasave(gc->castle_id,17,0);
-						guild_castledatasave(gc->castle_id,25,0);
-					
-					}
-				}
-		}
-	}	// end addition [Valaris]
-	
-	if(md->option&2 )
-		skill_status_change_end(&md->bl, SC_HIDING, -1);
-	if(md->option&4 )
-		skill_status_change_end(&md->bl, SC_CLOAKING, -1);
-
-	if(md->state.special_mob_ai == 2){//�X�t�B�A�[�}�C��
-		int skillidx=0;
-		
-		if((skillidx=mob_skillid2skillidx(md->class,NPC_SELFDESTRUCTION2))>=0){
-			md->mode |= 0x1;
-			md->next_walktime=tick;
-			mobskill_use_id(md,&md->bl,skillidx);//�����r���J�n
-		md->state.special_mob_ai++;
-		}
-	}
-
-	if(md->hp>0){
-		return 0;
-	}
-
-	// ----- �������玀�S���� -----
-
-	map_freeblock_lock();
-	mob_changestate(md,MS_DEAD,0);
-	mobskill_use(md,tick,-1);	// ���S���X�L��
-
-	memset(tmpsd,0,sizeof(tmpsd));
-	memset(pt,0,sizeof(pt));
-
-	max_hp = battle_get_max_hp(&md->bl);
-
-	if(src && src->type == BL_MOB)
-		mob_unlocktarget((struct mob_data *)src,tick);
-
-	/* �\�E���h���C�� */
-	if(sd && (skill=pc_checkskill(sd,HW_SOULDRAIN))>0){
-		clif_skill_nodamage(src,&md->bl,HW_SOULDRAIN,skill,1);
-		sp = (battle_get_lv(&md->bl))*(65+15*skill)/100;
-		if(sd->status.sp + sp > sd->status.max_sp)
-			sp = sd->status.max_sp - sd->status.sp;
-		sd->status.sp += sp;
-		clif_heal(sd->fd,SP_SP,sp);
-	}
-
-	// map�O�ɏ������l�͌v�Z���珜���̂�
-	// overkill���͖�������sum��max_hp�Ƃ͈Ⴄ
-
-	tdmg = 0;
-	for(i=0,count=0,mvp_damage=0;i<DAMAGELOG_SIZE;i++){
-		if(md->dmglog[i].id==0)
-			continue;
-		tmpsd[i] = map_id2sd(md->dmglog[i].id);
-		if(tmpsd[i] == NULL)
-			continue;
-		count++;
-		if(tmpsd[i]->bl.m != md->bl.m || pc_isdead(tmpsd[i]))
-			continue;
-
-		tdmg += (double)md->dmglog[i].dmg;
-		if(mvp_damage<md->dmglog[i].dmg){
-			third_sd = second_sd;
-			second_sd = mvp_sd;
-			mvp_sd=tmpsd[i];
-			mvp_damage=md->dmglog[i].dmg;
-		}
-	}
-
-        // [MouseJstr]
-        if((map[md->bl.m].flag.pvp == 0) || (battle_config.pvp_exp == 1)) {
-
-	if((double)max_hp < tdmg)
-		dmg_rate = ((double)max_hp) / tdmg;
-	else dmg_rate = 1;
-
-	// �o���l�̕��z
-	for(i=0;i<DAMAGELOG_SIZE;i++){
-		int pid,base_exp,job_exp,flag=1;
-		double per;
-		struct party *p;
-		if(tmpsd[i]==NULL || tmpsd[i]->bl.m != md->bl.m)
-			continue;
-/* jAthena's exp formula
-		per = ((double)md->dmglog[i].dmg)*(9.+(double)((count > 6)? 6:count))/10./((double)max_hp) * dmg_rate;
-		temp = ((double)mob_db[md->class].base_exp * (double)battle_config.base_exp_rate / 100. * per);
-		base_exp = (temp > 2147483647.)? 0x7fffffff:(int)temp;
-		if(mob_db[md->class].base_exp > 0 && base_exp < 1) base_exp = 1;
-		if(base_exp < 0) base_exp = 0;
-		temp = ((double)mob_db[md->class].job_exp * (double)battle_config.job_exp_rate / 100. * per);
-		job_exp = (temp > 2147483647.)? 0x7fffffff:(int)temp;
-		if(mob_db[md->class].job_exp > 0 && job_exp < 1) job_exp = 1;
-		if(job_exp < 0) job_exp = 0;
-*/
-//eAthena's exp formula rather than jAthena's
-		per=(double)md->dmglog[i].dmg*256*(9+(double)((count > 6)? 6:count))/10/(double)max_hp;
-		if(per>512) per=512;
-		if(per<1) per=1;
-		base_exp=mob_db[md->class].base_exp*per/256;
-		if(base_exp < 1) base_exp = 1;
-		if(sd && md && battle_config.pk_mode==1 && (mob_db[md->class].lv - sd->status.base_level >= 20)) {
-			base_exp*=1.15; // pk_mode additional exp if monster >20 levels [Valaris]
-		}
-		if(md->state.special_mob_ai >= 1 && battle_config.alchemist_summon_reward != 1) base_exp = 0;	// Added [Valaris]
-		job_exp=mob_db[md->class].job_exp*per/256;
-		if(job_exp < 1) job_exp = 1;
-		if(sd && md && battle_config.pk_mode==1 && (mob_db[md->class].lv - sd->status.base_level >= 20)) {
-			job_exp*=1.15; // pk_mode additional exp if monster >20 levels [Valaris]
-		}
-		if(md->state.special_mob_ai >= 1 && battle_config.alchemist_summon_reward != 1) job_exp = 0;	// Added [Valaris]
-
-		if((pid=tmpsd[i]->status.party_id)>0){	// �p�[�e�B�ɓ����Ă���
-			int j=0;
-			for(j=0;j<pnum;j++)	// �����p�[�e�B���X�g�ɂ��邩�ǂ���
-				if(pt[j].id==pid)
-					break;
-			if(j==pnum){	// ���Ȃ��Ƃ��͌������ǂ����m�F
-				if((p=party_search(pid))!=NULL && p->exp!=0){
-					pt[pnum].id=pid;
-					pt[pnum].p=p;
-					pt[pnum].base_exp=base_exp;
-					pt[pnum].job_exp=job_exp;
-					pnum++;
-					flag=0;
-				}
-			}else{	// ����Ƃ��͌���
-				pt[j].base_exp+=base_exp;
-				pt[j].job_exp+=job_exp;
-				flag=0;
-			}
-		}
-		if(flag)	// �e������
-			pc_gainexp(tmpsd[i],base_exp,job_exp);
-	}
-	// �������z
-	for(i=0;i<pnum;i++)
-		party_exp_share(pt[i].p,md->bl.m,pt[i].base_exp,pt[i].job_exp);
-
-	// item drop
-	if(!(type&1)) {
-		for(i=0;i<8;i++){
-			struct delay_item_drop *ditem;
-			int drop_rate;
-
-			if(md->state.special_mob_ai >= 1 && battle_config.alchemist_summon_reward != 1)	// Added [Valaris]
-				break;	// End
-
-			if(mob_db[md->class].dropitem[i].nameid <= 0)
-				continue;
-			drop_rate = mob_db[md->class].dropitem[i].p;
-			if(drop_rate <= 0 && battle_config.drop_rate0item==1)
-				drop_rate = 1;
-			if(battle_config.drops_by_luk>0 && sd && md) drop_rate+=(sd->status.luk*battle_config.drops_by_luk)/100;	// drops affected by luk [Valaris]
-			if(sd && md && battle_config.pk_mode==1 && (mob_db[md->class].lv - sd->status.base_level >= 20)) drop_rate*=1.25; // pk_mode increase drops if 20 level difference [Valaris]
-			if(drop_rate <= rand()%10000)
-				continue;
-
-			ditem=(struct delay_item_drop *)aCalloc(1,sizeof(struct delay_item_drop));
-			ditem->nameid = mob_db[md->class].dropitem[i].nameid;
-			ditem->amount = 1;
-			ditem->m = md->bl.m;
-			ditem->x = md->bl.x;
-			ditem->y = md->bl.y;
-			ditem->first_sd = mvp_sd;
-			ditem->second_sd = second_sd;
-			ditem->third_sd = third_sd;
-			add_timer(tick+500+i,mob_delay_item_drop,(int)ditem,0);
-		}
-		if(sd && sd->state.attack_type == BF_WEAPON) {
-			for(i=0;i<sd->monster_drop_item_count;i++) {
-				struct delay_item_drop *ditem;
-				int race = battle_get_race(&md->bl);
-				if(sd->monster_drop_itemid[i] <= 0)
-					continue;
-				if(sd->monster_drop_race[i] & (1<<race) ||
-					(mob_db[md->class].mode & 0x20 && sd->monster_drop_race[i] & 1<<10) ||
-					(!(mob_db[md->class].mode & 0x20) && sd->monster_drop_race[i] & 1<<11) ) {
-					if(sd->monster_drop_itemrate[i] <= rand()%10000)
-						continue;
-
-					ditem=(struct delay_item_drop *)aCalloc(1,sizeof(struct delay_item_drop));
-					ditem->nameid = sd->monster_drop_itemid[i];
-					ditem->amount = 1;
-					ditem->m = md->bl.m;
-					ditem->x = md->bl.x;
-					ditem->y = md->bl.y;
-					ditem->first_sd = mvp_sd;
-					ditem->second_sd = second_sd;
-					ditem->third_sd = third_sd;
-					add_timer(tick+520+i,mob_delay_item_drop,(int)ditem,0);
-				}
-			}
-			if(sd->get_zeny_num > 0)
-				pc_getzeny(sd,mob_db[md->class].lv*10 + rand()%(sd->get_zeny_num+1));
-		}
-		if(md->lootitem) {
-			for(i=0;i<md->lootitem_count;i++) {
-				struct delay_item_drop2 *ditem;
-
-				ditem=(struct delay_item_drop2 *)aCalloc(1,sizeof(struct delay_item_drop2));
-				memcpy(&ditem->item_data,&md->lootitem[i],sizeof(md->lootitem[0]));
-				ditem->m = md->bl.m;
-				ditem->x = md->bl.x;
-				ditem->y = md->bl.y;
-				ditem->first_sd = mvp_sd;
-				ditem->second_sd = second_sd;
-				ditem->third_sd = third_sd;
-				add_timer(tick+540+i,mob_delay_item_drop2,(int)ditem,0);
-			}
-		}
-	}
-
-	// mvp����
-	if(mvp_sd && mob_db[md->class].mexp > 0 ){
-		int j;
-		int mexp;
-		temp = ((double)mob_db[md->class].mexp * (double)battle_config.mvp_exp_rate * (9.+(double)count)/1000.);
-		mexp = (temp > 2147483647.)? 0x7fffffff:(int)temp;
-		if(mexp < 1) mexp = 1;
-		clif_mvp_effect(mvp_sd);					// �G�t�F�N�g
-		clif_mvp_exp(mvp_sd,mexp);
-		pc_gainexp(mvp_sd,mexp,0);
-		for(j=0;j<3;j++){
-			i = rand() % 3;
-			if(mob_db[md->class].mvpitem[i].nameid <= 0)
-				continue;
-			drop_rate = mob_db[md->class].mvpitem[i].p;
-			if(drop_rate <= 0 && battle_config.drop_rate0item==1)
-				drop_rate = 1;
-			if(drop_rate < battle_config.item_drop_mvp_min)
-				drop_rate = battle_config.item_drop_mvp_min;
-			if(drop_rate > battle_config.item_drop_mvp_max)
-				drop_rate = battle_config.item_drop_mvp_max;
-			if(drop_rate <= rand()%10000)
-				continue;
-			memset(&item,0,sizeof(item));
-			item.nameid=mob_db[md->class].mvpitem[i].nameid;
-			item.identify=!itemdb_isequip3(item.nameid);
-			clif_mvp_item(mvp_sd,item.nameid);
-			if(mvp_sd->weight*2 > mvp_sd->max_weight)
-				map_addflooritem(&item,1,mvp_sd->bl.m,mvp_sd->bl.x,mvp_sd->bl.y,mvp_sd,second_sd,third_sd,1);
-			else if((ret = pc_additem(mvp_sd,&item,1))) {
-				clif_additem(sd,0,0,ret);
-				map_addflooritem(&item,1,mvp_sd->bl.m,mvp_sd->bl.x,mvp_sd->bl.y,mvp_sd,second_sd,third_sd,1);
-			}
-			break;
-		}
-	}
-
-        } // [MouseJstr]
-
-	// <Agit> NPC Event [OnAgitBreak]
-	if(md->npc_event[0] && strcmp(((md->npc_event)+strlen(md->npc_event)-13),"::OnAgitBreak") == 0) {
-		printf("MOB.C: Run NPC_Event[OnAgitBreak].\n");
-		if (agit_flag == 1) //Call to Run NPC_Event[OnAgitBreak]
-			guild_agit_break(md);
-	}
-
-		// SCRIPT���s
-	if(md->npc_event[0]){
-//		if(battle_config.battle_log==1)
-//			printf("mob_damage : run event : %s\n",md->npc_event);
-		if(src && src->type == BL_PET)
-			sd = ((struct pet_data *)src)->msd;
-		if(sd == NULL) {
-			if(mvp_sd != NULL)
-				sd = mvp_sd;
-			else {
-				struct map_session_data *tmpsd;
-				int i;
-				for(i=0;i<fd_max;i++){
-					if(session[i] && (tmpsd=session[i]->session_data) && tmpsd->state.auth) {
-						if(md->bl.m == tmpsd->bl.m) {
-							sd = tmpsd;
-							break;
-						}
-					}
-				}
-			}
-		}
-		if(sd)
-			npc_event(sd,md->npc_event,0);
-	}
-
-	clif_clearchar_area(&md->bl,1);
-	map_delblock(&md->bl);
-	if(mob_get_viewclass(md->class) <= 1000)
-		clif_clearchar_delay(tick+3000,&md->bl,0);
-	mob_deleteslave(md);
-	mob_setdelayspawn(md->bl.id);
-	map_freeblock_unlock();
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int mob_class_change(struct mob_data *md,int *value)
-{
-	unsigned int tick = gettick();
-	int i,c,hp_rate,max_hp,class,count = 0;
-
-	nullpo_retr(0, md);
-	nullpo_retr(0, value);
-
-	if(value[0]<=1000 || value[0]>2000)
-		return 0;
-	if(md->bl.prev == NULL) return 0;
-
-	while(count < 5 && value[count] > 1000 && value[count] <= 2000) count++;
-	if(count < 1) return 0;
-
-	class = value[rand()%count];
-	if(class<=1000 || class>2000) return 0;
-
-	max_hp = battle_get_max_hp(&md->bl);
-	hp_rate = md->hp*100/max_hp;
-	clif_mob_class_change(md,class);
-	md->class = class;
-	max_hp = battle_get_max_hp(&md->bl);
-	if(battle_config.monster_class_change_full_recover==1) {
-		md->hp = max_hp;
-		memset(md->dmglog,0,sizeof(md->dmglog));
-	}
-	else
-		md->hp = max_hp*hp_rate/100;
-	if(md->hp > max_hp) md->hp = max_hp;
-	else if(md->hp < 1) md->hp = 1;
-
-	memcpy(md->name,mob_db[class].jname,24);
-	memset(&md->state,0,sizeof(md->state));
-	md->attacked_id = 0;
-	md->target_id = 0;
-	md->move_fail_count = 0;
-
-	md->speed = mob_db[md->class].speed;
-	md->def_ele = mob_db[md->class].element;
-
-	mob_changestate(md,MS_IDLE,0);
-	skill_castcancel(&md->bl,0);
-	md->state.skillstate = MSS_IDLE;
-	md->last_thinktime = tick;
-	md->next_walktime = tick+rand()%50+5000;
-	md->attackabletime = tick;
-	md->canmove_tick = tick;
-	md->sg_count=0;
-
-	for(i=0,c=tick-1000*3600*10;i<MAX_MOBSKILL;i++)
-		md->skilldelay[i] = c;
-	md->skillid=0;
-	md->skilllv=0;
-
-	if(md->lootitem == NULL && mob_db[class].mode&0x02)
-		md->lootitem=(struct item *)aCalloc(LOOTITEM_SIZE,sizeof(struct item));
-
-	skill_clear_unitgroup(&md->bl);
-	skill_cleartimerskill(&md->bl);
-
-	clif_clearchar_area(&md->bl,0);
-	clif_spawnmob(md);
-
-	return 0;
-}
-
-/*==========================================
- * mob��
- *------------------------------------------
- */
-int mob_heal(struct mob_data *md,int heal)
-{
-	int max_hp = battle_get_max_hp(&md->bl);
-
-	nullpo_retr(0, md);
-
-	md->hp += heal;
-	if( max_hp < md->hp )
-		md->hp = max_hp;
-
-	if(md->class >= 1285 && md->class <=1287) {	// guardian hp update [Valaris]
-		struct guild_castle *gc=guild_mapname2gc(map[md->bl.m].name);
-		if(gc) {
-			if(md->bl.id==gc->GID0) gc->Ghp0=md->hp;
-			if(md->bl.id==gc->GID1) gc->Ghp1=md->hp;
-			if(md->bl.id==gc->GID2) gc->Ghp2=md->hp;
-			if(md->bl.id==gc->GID3) gc->Ghp3=md->hp;
-			if(md->bl.id==gc->GID4) gc->Ghp4=md->hp;
-			if(md->bl.id==gc->GID5) gc->Ghp5=md->hp;
-			if(md->bl.id==gc->GID6) gc->Ghp6=md->hp;
-			if(md->bl.id==gc->GID7) gc->Ghp7=md->hp;
-		}
-	}	// end addition [Valaris]
-
-	return 0;
-}
-
-
-/*==========================================
- * Added by RoVeRT
- *------------------------------------------
- */
-int mob_warpslave_sub(struct block_list *bl,va_list ap)
-{
-	struct mob_data *md=(struct mob_data *)bl;
-	int id,x,y;
-	id=va_arg(ap,int);
-	x=va_arg(ap,int);
-	y=va_arg(ap,int);
-	if( md->master_id==id ) {
-		mob_warp(md,-1,x,y,2);
-	}
-	return 0;
-}
-
-/*==========================================
- * Added by RoVeRT
- *------------------------------------------
- */
-int mob_warpslave(struct mob_data *md,int x, int y)
-{
-//printf("warp slave\n");
-	map_foreachinarea(mob_warpslave_sub, md->bl.m,
-		x-AREA_SIZE,y-AREA_SIZE,
-		x+AREA_SIZE,y+AREA_SIZE,BL_MOB,
-		md->bl.id, md->bl.x, md->bl.y );
-	return 0;
-}
-
-/*==========================================
- * mob���[�v
- *------------------------------------------
- */
-int mob_warp(struct mob_data *md,int m,int x,int y,int type)
-{
-	int i=0,c,xs=0,ys=0,bx=x,by=y;
-
-	nullpo_retr(0, md);
-
-	if( md->bl.prev==NULL )
-		return 0;
-
-	if( m<0 ) m=md->bl.m;
-
-	if(type >= 0) {
-		if(map[md->bl.m].flag.monster_noteleport)
-			return 0;
-		clif_clearchar_area(&md->bl,type);
-	}
-	skill_unit_out_all(&md->bl,gettick(),1);
-	map_delblock(&md->bl);
-
-	if(bx>0 && by>0){	// �ʒu�w��̏ꍇ���͂X�Z����T��
-		xs=ys=9;
-	}
-
-	while( ( x<0 || y<0 || ((c=read_gat(m,x,y))==1 || c==5) ) && (i++)<1000 ){
-		if( xs>0 && ys>0 && i<250 ){	// �w��ʒu�t�߂̒T��
-			x=bx+rand()%xs-xs/2;
-			y=by+rand()%ys-ys/2;
-		}else{			// ���S�����_���T��
-			x=rand()%(map[m].xs-2)+1;
-			y=rand()%(map[m].ys-2)+1;
-		}
-	}
-	md->dir=0;
-	if(i<1000){
-		md->bl.x=md->to_x=x;
-		md->bl.y=md->to_y=y;
-		md->bl.m=m;
-	}else {
-		m=md->bl.m;
-		if(battle_config.error_log==1)
-			printf("MOB %d warp failed, class = %d\n",md->bl.id,md->class);
-	}
-
-	md->target_id=0;	// �^�Q����������
-	md->state.targettype=NONE_ATTACKABLE;
-	md->attacked_id=0;
-	md->state.skillstate=MSS_IDLE;
-	mob_changestate(md,MS_IDLE,0);
-
-	if(type>0 && i==1000) {
-		if(battle_config.battle_log==1)
-			printf("MOB %d warp to (%d,%d), class = %d\n",md->bl.id,x,y,md->class);
-	}
-
-	map_addblock(&md->bl);
-	if(type>0) {
-		clif_spawnmob(md);
-		mob_warpslave(md,md->bl.x,md->bl.y);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * ��ʓ��̎�芪���̐��v�Z�p(foreachinarea)
- *------------------------------------------
- */
-int mob_countslave_sub(struct block_list *bl,va_list ap)
-{
-	int id,*c;
-	struct mob_data *md;
-
-	id=va_arg(ap,int);
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, c=va_arg(ap,int *));
-	nullpo_retr(0, md = (struct mob_data *)bl);
-
-
-	if( md->master_id==id )
-		(*c)++;
-	return 0;
-}
-/*==========================================
- * ��ʓ��̎�芪���̐��v�Z
- *------------------------------------------
- */
-int mob_countslave(struct mob_data *md)
-{
-	int c=0;
-
-	nullpo_retr(0, md);
-
-	map_foreachinarea(mob_countslave_sub, md->bl.m,
-		0,0,map[md->bl.m].xs-1,map[md->bl.m].ys-1,
-		BL_MOB,md->bl.id,&c);
-	return c;
-}
-/*==========================================
- * �艺MOB����
- *------------------------------------------
- */
-int mob_summonslave(struct mob_data *md2,int *value,int amount,int flag)
-{
-	struct mob_data *md;
-	int bx,by,m,count = 0,class,k,a = amount;
-
-	nullpo_retr(0, md2);
-	nullpo_retr(0, value);
-
-	bx=md2->bl.x;
-	by=md2->bl.y;
-	m=md2->bl.m;
-
-	if(value[0]<=1000 || value[0]>2000)	// �l���ُ�Ȃ珢�����~�߂�
-		return 0;
-	while(count < 5 && value[count] > 1000 && value[count] <= 2000) count++;
-	if(count < 1) return 0;
-
-	for(k=0;k<count;k++) {
-		amount = a;
-		class = value[k];
-		if(class<=1000 || class>2000) continue;
-		for(;amount>0;amount--){
-			int x=0,y=0,c=0,i=0;
-			md=(struct mob_data *)aCalloc(1,sizeof(struct mob_data));
-			if(mob_db[class].mode&0x02)
-				md->lootitem=(struct item *)aCalloc(LOOTITEM_SIZE,sizeof(struct item));
-			else
-				md->lootitem=NULL;
-
-			while((x<=0 || y<=0 || (c=map_getcell(m,x,y))==1 || c==5 ) && (i++)<100){
-				x=rand()%9-4+bx;
-				y=rand()%9-4+by;
-			}
-			if(i>=100){
-				x=bx;
-				y=by;
-			}
-
-			mob_spawn_dataset(md,"--ja--",class);
-			md->bl.m=m;
-			md->bl.x=x;
-			md->bl.y=y;
-
-			md->m =m;
-			md->x0=x;
-			md->y0=y;
-			md->xs=0;
-			md->ys=0;
-			md->speed=md2->speed;
-			md->spawndelay1=-1;	// ��x�̂݃t���O
-			md->spawndelay2=-1;	// ��x�̂݃t���O
-
-			memset(md->npc_event,0,sizeof(md->npc_event));
-			md->bl.type=BL_MOB;
-			map_addiddb(&md->bl);
-			mob_spawn(md->bl.id);
-			clif_skill_nodamage(&md->bl,&md->bl,(flag)? NPC_SUMMONSLAVE:NPC_SUMMONMONSTER,a,1);
-
-			if(flag)
-				md->master_id=md2->bl.id;
-		}
-	}
-	return 0;
-}
-
-/*==========================================
- * ���������b�N���Ă���PC�̐��𐔂���(foreachclient)
- *------------------------------------------
- */
-static int mob_counttargeted_sub(struct block_list *bl,va_list ap)
-{
-	int id,*c,target_lv;
-	struct block_list *src;
-
-	id=va_arg(ap,int);
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, c=va_arg(ap,int *));
-
-	src=va_arg(ap,struct block_list *);
-	target_lv=va_arg(ap,int);
-	if(id == bl->id || (src && id == src->id)) return 0;
-	if(bl->type == BL_PC) {
-		struct map_session_data *sd = (struct map_session_data *)bl;
-		if(sd && sd->attacktarget == id && sd->attacktimer != -1 && sd->attacktarget_lv >= target_lv)
-			(*c)++;
-	}
-	else if(bl->type == BL_MOB) {
-		struct mob_data *md = (struct mob_data *)bl;
-		if(md && md->target_id == id && md->timer != -1 && md->state.state == MS_ATTACK && md->target_lv >= target_lv)
-			(*c)++;
-	}
-	else if(bl->type == BL_PET) {
-		struct pet_data *pd = (struct pet_data *)bl;
-		if(pd->target_id == id && pd->timer != -1 && pd->state.state == MS_ATTACK && pd->target_lv >= target_lv)
-			(*c)++;
-	}
-	return 0;
-}
-/*==========================================
- * ���������b�N���Ă���PC�̐��𐔂���
- *------------------------------------------
- */
-int mob_counttargeted(struct mob_data *md,struct block_list *src,int target_lv)
-{
-	int c=0;
-
-	nullpo_retr(0, md);
-
-	map_foreachinarea(mob_counttargeted_sub, md->bl.m,
-		md->bl.x-AREA_SIZE,md->bl.y-AREA_SIZE,
-		md->bl.x+AREA_SIZE,md->bl.y+AREA_SIZE,0,md->bl.id,&c,src,target_lv);
-	return c;
-}
-
-/*==========================================
- *MOBskill����Y��skillid��skillidx��Ԃ�
- *------------------------------------------
- */
-int mob_skillid2skillidx(int class,int skillid)
-{
-	int i;
-	struct mob_skill *ms=mob_db[class].skill;
-	
-	if(ms==NULL)
-		return -1;
-
-	for(i=0;i<mob_db[class].maxskill;i++){
-		if(ms[i].skill_id == skillid)
-			return i;
-	}
-	return -1;
-
-}
-
-//
-// MOB�X�L��
-//
-
-/*==========================================
- * �X�L���g�p�i�r�������AID�w��j
- *------------------------------------------
- */
-int mobskill_castend_id( int tid, unsigned int tick, int id,int data )
-{
-	struct mob_data* md=NULL;
-	struct block_list *bl;
-	struct block_list *mbl;
-	int range;
-
-	if((mbl = map_id2bl(id)) == NULL ) //�r������Mob���������Ȃ��Ƃ����̂͗ǂ����鐳�폈��
-		return 0;
-	if((md=(struct mob_data *)mbl) == NULL ){
-		printf("mobskill_castend_id nullpo mbl->id:%d\n",mbl->id);
-		return 0;
-	}
-
-	if( md->bl.type!=BL_MOB || md->bl.prev==NULL )
-		return 0;
-
-	if( md->skilltimer != tid )	// �^�C�}ID�̊m�F
-		return 0;
-
-	md->skilltimer=-1;
-	//���ق��Ԉُ�Ȃ�
-	if(md->sc_data){
-		if(md->opt1>0 || md->sc_data[SC_DIVINA].timer != -1 || md->sc_data[SC_ROKISWEIL].timer != -1 || md->sc_data[SC_STEELBODY].timer != -1)
-			return 0;
-		if(md->sc_data[SC_AUTOCOUNTER].timer != -1 && md->skillid != KN_AUTOCOUNTER) //�I�[�g�J�E���^�[
-		return 0;
-		if(md->sc_data[SC_BLADESTOP].timer != -1) //���n���
-			return 0;
-		if(md->sc_data[SC_BERSERK].timer != -1) //�o�[�T�[�N
-		return 0;
-	}
-	if(md->skillid != NPC_EMOTION)
-		md->last_thinktime=tick + battle_get_adelay(&md->bl);
-
-	if((bl = map_id2bl(md->skilltarget)) == NULL || bl->prev==NULL){ //�X�L���^�[�Q�b�g�����݂��Ȃ�
-		//printf("mobskill_castend_id nullpo\n");//�^�[�Q�b�g�����Ȃ��Ƃ���nullpo����Ȃ��ĕ��ʂɏI��
-		return 0;
-	}
-	if(md->bl.m != bl->m)
-		return 0;
-
-	if(md->skillid == PR_LEXAETERNA) {
-		struct status_change *sc_data = battle_get_sc_data(bl);
-		if(sc_data && (sc_data[SC_FREEZE].timer != -1 || (sc_data[SC_STONE].timer != -1 && sc_data[SC_STONE].val2 == 0)))
-			return 0;
-	}
-	else if(md->skillid == RG_BACKSTAP) {
-		int dir = map_calc_dir(&md->bl,bl->x,bl->y),t_dir = battle_get_dir(bl);
-		int dist = distance(md->bl.x,md->bl.y,bl->x,bl->y);
-		if(bl->type != BL_SKILL && (dist == 0 || map_check_dir(dir,t_dir)))
-			return 0;
-	}
-	if( ( (skill_get_inf(md->skillid)&1) || (skill_get_inf2(md->skillid)&4) ) &&	// �މ�G�Ί֌W�`�F�b�N
-		battle_check_target(&md->bl,bl, BCT_ENEMY)<=0 )
-		return 0;
-	range = skill_get_range(md->skillid,md->skilllv);
-	if(range < 0)
-		range = battle_get_range(&md->bl) - (range + 1);
-	if(range + battle_config.mob_skill_add_range < distance(md->bl.x,md->bl.y,bl->x,bl->y))
-		return 0;
-
-	md->skilldelay[md->skillidx]=tick;
-
-	if(battle_config.mob_skill_log==1)
-		printf("MOB skill castend skill=%d, class = %d\n",md->skillid,md->class);
-	mob_stop_walking(md,0);
-
-	switch( skill_get_nk(md->skillid) )
-	{
-	// �U���n/������΂��n
-	case 0:	case 2:
-		skill_castend_damage_id(&md->bl,bl,md->skillid,md->skilllv,tick,0);
-		break;
-	case 1:// �x���n
-		if(!mob_db[md->class].skill[md->skillidx].val[0] &&
-			(md->skillid==AL_HEAL || (md->skillid==ALL_RESURRECTION && bl->type != BL_PC)) && battle_check_undead(battle_get_race(bl),battle_get_elem_type(bl)) )
-			skill_castend_damage_id(&md->bl,bl,md->skillid,md->skilllv,tick,0);
-		else
-			skill_castend_nodamage_id(&md->bl,bl,md->skillid,md->skilllv,tick,0);
-		break;
-	}
-
-
-	return 0;
-}
-
-/*==========================================
- * �X�L���g�p�i�r�������A�ꏊ�w��j
- *------------------------------------------
- */
-int mobskill_castend_pos( int tid, unsigned int tick, int id,int data )
-{
-	struct mob_data* md=NULL;
-	struct block_list *bl;
-	int range,maxcount;
-
-	//mobskill_castend_id���l�r������Mob���r���������ɂ������Ȃ��Ƃ����̂͂��肻���Ȃ̂�nullpo���珜�O
-	if((bl=map_id2bl(id))==NULL)
-		return 0;
-
-	nullpo_retr(0, md=(struct mob_data *)bl);
-	
-	if( md->bl.type!=BL_MOB || md->bl.prev==NULL )
-		return 0;
-
-	if( md->skilltimer != tid )	// �^�C�}ID�̊m�F
-		return 0;
-
-	md->skilltimer=-1;
-	if(md->sc_data){
-		if(md->opt1>0 || md->sc_data[SC_DIVINA].timer != -1 || md->sc_data[SC_ROKISWEIL].timer != -1 || md->sc_data[SC_STEELBODY].timer != -1)
-			return 0;
-		if(md->sc_data[SC_AUTOCOUNTER].timer != -1 && md->skillid != KN_AUTOCOUNTER) //�I�[�g�J�E���^�[
-		return 0;
-		if(md->sc_data[SC_BLADESTOP].timer != -1) //���n���
-			return 0;
-		if(md->sc_data[SC_BERSERK].timer != -1) //�o�[�T�[�N
-			return 0;
-	}
-
-	if(battle_config.monster_skill_reiteration == 0) {
-		range = -1;
-		switch(md->skillid) {
-			case MG_SAFETYWALL:
-			case WZ_FIREPILLAR:
-			case HT_SKIDTRAP:
-			case HT_LANDMINE:
-			case HT_ANKLESNARE:
-			case HT_SHOCKWAVE:
-			case HT_SANDMAN:
-			case HT_FLASHER:
-			case HT_FREEZINGTRAP:
-			case HT_BLASTMINE:
-			case HT_CLAYMORETRAP:
-			case PF_SPIDERWEB:		/* �X�p�C�_�[�E�F�b�u */
-				range = 0;
-				break;
-			case AL_PNEUMA:
-			case AL_WARP:
-				range = 1;
-				break;
-		}
-		if(range >= 0) {
-			if(skill_check_unit_range(md->bl.m,md->skillx,md->skilly,range,md->skillid) > 0)
-				return 0;
-		}
-	}
-	if(battle_config.monster_skill_nofootset==1) {
-		range = -1;
-		switch(md->skillid) {
-			case WZ_FIREPILLAR:
-			case HT_SKIDTRAP:
-			case HT_LANDMINE:
-			case HT_ANKLESNARE:
-			case HT_SHOCKWAVE:
-			case HT_SANDMAN:
-			case HT_FLASHER:
-			case HT_FREEZINGTRAP:
-			case HT_BLASTMINE:
-			case HT_CLAYMORETRAP:
-			case AM_DEMONSTRATION:
-			case PF_SPIDERWEB:		/* �X�p�C�_�[�E�F�b�u */
-				range = 1;
-				break;
-			case AL_WARP:
-				range = 0;
-				break;
-		}
-		if(range >= 0) {
-			if(skill_check_unit_range2(md->bl.m,md->skillx,md->skilly,range) > 0)
-				return 0;
-		}
-	}
-
-	if(battle_config.monster_land_skill_limit==1) {
-		maxcount = skill_get_maxcount(md->skillid);
-		if(maxcount > 0) {
-			int i,c;
-			for(i=c=0;i<MAX_MOBSKILLUNITGROUP;i++) {
-				if(md->skillunit[i].alive_count > 0 && md->skillunit[i].skill_id == md->skillid)
-					c++;
-			}
-			if(c >= maxcount)
-				return 0;
-		}
-	}
-
-	range = skill_get_range(md->skillid,md->skilllv);
-	if(range < 0)
-		range = battle_get_range(&md->bl) - (range + 1);
-	if(range + battle_config.mob_skill_add_range < distance(md->bl.x,md->bl.y,md->skillx,md->skilly))
-		return 0;
-	md->skilldelay[md->skillidx]=tick;
-
-	if(battle_config.mob_skill_log==1)
-		printf("MOB skill castend skill=%d, class = %d\n",md->skillid,md->class);
-	mob_stop_walking(md,0);
-
-	skill_castend_pos2(&md->bl,md->skillx,md->skilly,md->skillid,md->skilllv,tick,0);
-
-	return 0;
-}
-
-
-/*==========================================
- * Skill use (an aria start, ID specification)
- *------------------------------------------
- */
-int mobskill_use_id(struct mob_data *md,struct block_list *target,int skill_idx)
-{
-	int casttime,range;
-	struct mob_skill *ms;
-	int skill_id, skill_lv, forcecast = 0;
-
-	nullpo_retr(0, md);
-	nullpo_retr(0, ms=&mob_db[md->class].skill[skill_idx]);
-	
-	if( target==NULL && (target=map_id2bl(md->target_id))==NULL )
-		return 0;
-
-	if( target->prev==NULL || md->bl.prev==NULL )
-		return 0;
-
-	skill_id=ms->skill_id;
-	skill_lv=ms->skill_lv;
-
-	// ���ق�ُ�
-	if(md->sc_data){
-		if(md->opt1>0 || md->sc_data[SC_DIVINA].timer != -1 || md->sc_data[SC_ROKISWEIL].timer != -1 || md->sc_data[SC_STEELBODY].timer != -1)
-		return 0;
-		if(md->sc_data[SC_AUTOCOUNTER].timer != -1 && md->skillid != KN_AUTOCOUNTER) //�I�[�g�J�E���^�[
-			return 0;
-		if(md->sc_data[SC_BLADESTOP].timer != -1) //���n���
-			return 0;
-		if(md->sc_data[SC_BERSERK].timer != -1) //�o�[�T�[�N
-			return 0;
-	}
-
-	if(md->option&4 && skill_id==TF_HIDING)
-		return 0;
-	if(md->option&2 && skill_id!=TF_HIDING && skill_id!=AS_GRIMTOOTH && skill_id!=RG_BACKSTAP && skill_id!=RG_RAID)
-		return 0;
-
-	if(map[md->bl.m].flag.gvg && (skill_id == SM_ENDURE || skill_id == AL_TELEPORT || skill_id == AL_WARP ||
-		skill_id == WZ_ICEWALL || skill_id == TF_BACKSLIDING))
-		return 0;
-
-	if(skill_get_inf2(skill_id)&0x200 && md->bl.id == target->id)
-		return 0;
-
-	// �˒��Ə�Q���`�F�b�N
-	range = skill_get_range(skill_id,skill_lv);
-	if(range < 0)
-		range = battle_get_range(&md->bl) - (range + 1);
-	if(!battle_check_range(&md->bl,target,range))
-		return 0;
-
-//	delay=skill_delayfix(&md->bl, skill_get_delay( skill_id,skill_lv) );
-
-	casttime=skill_castfix(&md->bl,ms->casttime);
-	md->state.skillcastcancel=ms->cancel;
-	md->skilldelay[skill_idx]=gettick();
-
-	switch(skill_id){	/* ��������ȏ������K�v */
-	case ALL_RESURRECTION:	/* ���U���N�V���� */
-		if(target->type != BL_PC && battle_check_undead(battle_get_race(target),battle_get_elem_type(target))){	/* �G���A���f�b�h�Ȃ� */
-			forcecast=1;	/* �^�[���A���f�b�g�Ɠ����r������ */
-			casttime=skill_castfix(&md->bl, skill_get_cast(PR_TURNUNDEAD,skill_lv) );
-		}
-		break;
-	case MO_EXTREMITYFIST:	/*���C���e�P��*/
-	case SA_MAGICROD:
-	case SA_SPELLBREAKER:
-		forcecast=1;
-		break;
-	}
-
-	if(battle_config.mob_skill_log==1)
-		printf("MOB skill use target_id=%d skill=%d lv=%d cast=%d, class = %d\n",target->id,skill_id,skill_lv,casttime,md->class);
-
-	if(casttime>0 || forcecast){ 	// �r�����K�v
-//		struct mob_data *md2;
-		clif_skillcasting( &md->bl,
-			md->bl.id, target->id, 0,0, skill_id,casttime);
-
-		// �r�����������X�^�[
-/*		if( target->type==BL_MOB && mob_db[(md2=(struct mob_data *)target)->class].mode&0x10 &&
-			md2->state.state!=MS_ATTACK){
-				md2->target_id=md->bl.id;
-				md->state.targettype = ATTACKABLE;
-				md2->min_chase=13;
-		}*/
-	}
-
-	if( casttime<=0 )	// �r���̖������̂̓L�����Z������Ȃ�
-		md->state.skillcastcancel=0;
-
-	md->skilltarget	= target->id;
-	md->skillx		= 0;
-	md->skilly		= 0;
-	md->skillid		= skill_id;
-	md->skilllv		= skill_lv;
-	md->skillidx	= skill_idx;
-
-	if(!(battle_config.monster_cloak_check_type&2) && md->sc_data[SC_CLOAKING].timer != -1 && md->skillid != AS_CLOAKING)
-		skill_status_change_end(&md->bl,SC_CLOAKING,-1);
-
-	if( casttime>0 ){
-		md->skilltimer =
-			add_timer( gettick()+casttime, mobskill_castend_id, md->bl.id, 0 );
-	}else{
-		md->skilltimer = -1;
-		mobskill_castend_id(md->skilltimer,gettick(),md->bl.id, 0);
-	}
-
-	return 1;
-}
-/*==========================================
- * �X�L���g�p�i�ꏊ�w��j
- *------------------------------------------
- */
-int mobskill_use_pos( struct mob_data *md,
-	int skill_x, int skill_y, int skill_idx)
-{
-	int casttime=0,range;
-	struct mob_skill *ms;
-	struct block_list bl;
-	int skill_id, skill_lv;
-
-	nullpo_retr(0, md);
-	nullpo_retr(0, ms=&mob_db[md->class].skill[skill_idx]);
-
-	if( md->bl.prev==NULL )
-		return 0;
-
-	skill_id=ms->skill_id;
-	skill_lv=ms->skill_lv;
-
-	//���ق��Ԉُ�Ȃ�
-	if(md->sc_data){
-		if(md->opt1>0 || md->sc_data[SC_DIVINA].timer != -1 || md->sc_data[SC_ROKISWEIL].timer != -1 || md->sc_data[SC_STEELBODY].timer != -1)
-			return 0;
-		if(md->sc_data[SC_AUTOCOUNTER].timer != -1 && md->skillid != KN_AUTOCOUNTER) //�I�[�g�J�E���^�[
-			return 0;
-		if(md->sc_data[SC_BLADESTOP].timer != -1) //���n���
-			return 0;
-		if(md->sc_data[SC_BERSERK].timer != -1) //�o�[�T�[�N
-			return 0;
-	}
-
-	if(md->option&2)
-		return 0;
-
-	if(map[md->bl.m].flag.gvg && (skill_id == SM_ENDURE || skill_id == AL_TELEPORT || skill_id == AL_WARP ||
-		skill_id == WZ_ICEWALL || skill_id == TF_BACKSLIDING))
-		return 0;
-
-	// �˒��Ə�Q���`�F�b�N
-	bl.type = BL_NUL;
-	bl.m = md->bl.m;
-	bl.x = skill_x;
-	bl.y = skill_y;
-	range = skill_get_range(skill_id,skill_lv);
-	if(range < 0)
-		range = battle_get_range(&md->bl) - (range + 1);
-	if(!battle_check_range(&md->bl,&bl,range))
-		return 0;
-
-//	delay=skill_delayfix(&sd->bl, skill_get_delay( skill_id,skill_lv) );
-	casttime=skill_castfix(&md->bl,ms->casttime);
-	md->skilldelay[skill_idx]=gettick();
-	md->state.skillcastcancel=ms->cancel;
-
-	if(battle_config.mob_skill_log==1)
-		printf("MOB skill use target_pos=(%d,%d) skill=%d lv=%d cast=%d, class = %d\n",
-			skill_x,skill_y,skill_id,skill_lv,casttime,md->class);
-
-	if( casttime>0 )	// A cast time is required.
-		clif_skillcasting( &md->bl,
-			md->bl.id, 0, skill_x,skill_y, skill_id,casttime);
-
-	if( casttime<=0 )	// A skill without a cast time wont be cancelled.
-		md->state.skillcastcancel=0;
-
-
-	md->skillx		= skill_x;
-	md->skilly		= skill_y;
-	md->skilltarget	= 0;
-	md->skillid		= skill_id;
-	md->skilllv		= skill_lv;
-	md->skillidx	= skill_idx;
-	if(!(battle_config.monster_cloak_check_type&2) && md->sc_data[SC_CLOAKING].timer != -1)
-		skill_status_change_end(&md->bl,SC_CLOAKING,-1);
-	if( casttime>0 ){
-		md->skilltimer =
-			add_timer( gettick()+casttime, mobskill_castend_pos, md->bl.id, 0 );
-	}else{
-		md->skilltimer = -1;
-		mobskill_castend_pos(md->skilltimer,gettick(),md->bl.id, 0);
-	}
-
-	return 1;
-}
-
-
-/*==========================================
- * Friendly Mob whose HP is decreasing by a nearby MOB is looked for.
- *------------------------------------------
- */
-int mob_getfriendhpltmaxrate_sub(struct block_list *bl,va_list ap)
-{
-	int rate;
-	struct mob_data **fr, *md, *mmd;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, mmd=va_arg(ap,struct mob_data *));
-
-	md=(struct mob_data *)bl;
-
-	if( mmd->bl.id == bl->id )
-		return 0;
-	rate=va_arg(ap,int);
-	fr=va_arg(ap,struct mob_data **);
-	if( md->hp < mob_db[md->class].max_hp*rate/100 )
-		(*fr)=md;
-	return 0;
-}
-struct mob_data *mob_getfriendhpltmaxrate(struct mob_data *md,int rate)
-{
-	struct mob_data *fr=NULL;
-	const int r=8;
-
-	nullpo_retr(NULL, md);
-
-	map_foreachinarea(mob_getfriendhpltmaxrate_sub, md->bl.m,
-		md->bl.x-r ,md->bl.y-r, md->bl.x+r, md->bl.y+r,
-		BL_MOB,md,rate,&fr);
-	return fr;
-}
-/*==========================================
- * What a status state suits by nearby MOB is looked for.
- *------------------------------------------
- */
-int mob_getfriendstatus_sub(struct block_list *bl,va_list ap)
-{
-	int cond1,cond2;
-	struct mob_data **fr, *md, *mmd;
-	int flag=0;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, md=(struct mob_data *)bl);
-	nullpo_retr(0, mmd=va_arg(ap,struct mob_data *));
-
-	if( mmd->bl.id == bl->id )
-		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_STONE;j<=SC_BLIND && !flag;j++){
-			flag=(md->sc_data[j].timer!=-1 );
-		}
-	}else
-		flag=( md->sc_data[cond2].timer!=-1 );
-	if( flag^( cond1==MSC_FRIENDSTATUSOFF ) )
-		(*fr)=md;
-
-	return 0;
-}
-struct mob_data *mob_getfriendstatus(struct mob_data *md,int cond1,int cond2)
-{
-	struct mob_data *fr=NULL;
-	const int r=8;
-
-	nullpo_retr(0, md);
-
-	map_foreachinarea(mob_getfriendstatus_sub, md->bl.m,
-		md->bl.x-r ,md->bl.y-r, md->bl.x+r, md->bl.y+r,
-		BL_MOB,md,cond1,cond2,&fr);
-	return fr;
-}
-
-/*==========================================
- * Skill use judging
- *------------------------------------------
- */
-int mobskill_use(struct mob_data *md,unsigned int tick,int event)
-{
-	struct mob_skill *ms;
-//	struct block_list *target=NULL;
-	int i,max_hp;
-
-	nullpo_retr(0, md);
-	nullpo_retr(0, ms = mob_db[md->class].skill);
-
-	max_hp = battle_get_max_hp(&md->bl);
-
-	if(battle_config.mob_skill_use == 0 || md->skilltimer != -1)
-		return 0;
-
-	if(md->state.special_mob_ai)
-		return 0;
-
-	if(md->sc_data[SC_SELFDESTRUCTION].timer!=-1)	//�������̓X�L�����g��Ȃ�
-		return 0;
-
-	for(i=0;i<mob_db[md->class].maxskill;i++){
-		int c2=ms[i].cond2,flag=0;
-		struct mob_data *fmd=NULL;
-
-		// �f�B���C��
-		if( DIFF_TICK(tick,md->skilldelay[i])<ms[i].delay )
-			continue;
-
-		// ��Ԕ���
-		if( ms[i].state>=0 && ms[i].state!=md->state.skillstate )
-			continue;
-
-		// ��������
-		flag=(event==ms[i].cond1);
-		if(!flag){
-			switch( ms[i].cond1 ){
-			case MSC_ALWAYS:
-				flag=1; break;
-			case MSC_MYHPLTMAXRATE:		// HP< maxhp%
-				flag=( md->hp < max_hp*c2/100 ); break;
-			case MSC_MYSTATUSON:		// status[num] on
-			case MSC_MYSTATUSOFF:		// status[num] off
-				if( ms[i].cond2==-1 ){
-					int j;
-					for(j=SC_STONE;j<=SC_BLIND && !flag;j++){
-						flag=(md->sc_data[j].timer!=-1 );
-					}
-				}else
-					flag=( md->sc_data[ms[i].cond2].timer!=-1 );
-				flag^=( ms[i].cond1==MSC_MYSTATUSOFF ); break;
-			case MSC_FRIENDHPLTMAXRATE:	// friend HP < maxhp%
-				flag=(( fmd=mob_getfriendhpltmaxrate(md,ms[i].cond2) )!=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) < c2 ); break;
-			case MSC_ATTACKPCGT:	// attack pc > num
-				flag=( mob_counttargeted(md,NULL,0) > c2 ); break;
-			case MSC_SLAVELE:		// slave <= num
-				flag=( mob_countslave(md) <= c2 ); break;
-			case MSC_ATTACKPCGE:	// attack pc >= num
-				flag=( mob_counttargeted(md,NULL,0) >= c2 ); break;
-			case MSC_SKILLUSED:		// specificated skill used
-				flag=( (event&0xffff)==MSC_SKILLUSED && ((event>>16)==c2 || c2==0)); break;
-			}
-		}
-
-		// �m������
-		if( flag && rand()%10000 < ms[i].permillage ){
-
-			if( skill_get_inf(ms[i].skill_id)&2 ){
-				// �ꏊ�w��
-				struct block_list *bl = NULL;
-				int x=0,y=0;
-				if( ms[i].target<=MST_AROUND ){
-					bl= ((ms[i].target==MST_TARGET || ms[i].target==MST_AROUND5)? map_id2bl(md->target_id):
-						 (ms[i].target==MST_FRIEND)? &fmd->bl : &md->bl);
-					if(bl!=NULL){
-						x=bl->x; y=bl->y;
-					}
-				}
-				if( x<=0 || y<=0 )
-					continue;
-				// �����̎���
-				if( ms[i].target>=MST_AROUND1 ){
-					int bx=x, by=y, i=0, c, m=bl->m, r=ms[i].target-MST_AROUND1;
-					do{
-						bx=x + rand()%(r*2+3) - r;
-						by=y + rand()%(r*2+3) - r;
-					}while( ( bx<=0 || by<=0 || bx>=map[m].xs || by>=map[m].ys ||
-						((c=read_gat(m,bx,by))==1 || c==5) ) && (i++)<1000);
-					if(i<1000){
-						x=bx; y=by;
-					}
-				}
-				// ����̎���
-				if( ms[i].target>=MST_AROUND5 ){
-					int bx=x, by=y, i=0, c, m=bl->m, r=(ms[i].target-MST_AROUND5)+1;
-					do{
-						bx=x + rand()%(r*2+1) - r;
-						by=y + rand()%(r*2+1) - r;
-					}while( ( bx<=0 || by<=0 || bx>=map[m].xs || by>=map[m].ys ||
-						((c=read_gat(m,bx,by))==1 || c==5) ) && (i++)<1000);
-					if(i<1000){
-						x=bx; y=by;
-					}
-				}
-				if(!mobskill_use_pos(md,x,y,i))
-					return 0;
-
-			}else{
-				// ID�w��
-				if( ms[i].target<=MST_FRIEND ){
-					struct block_list *bl = NULL;
-					bl= ((ms[i].target==MST_TARGET)? map_id2bl(md->target_id):
-						 (ms[i].target==MST_FRIEND)? &fmd->bl : &md->bl);
-					if(bl && !mobskill_use_id(md,bl,i))
-						return 0;
-				}
-			}
-			if(ms[i].emotion >= 0)
-				clif_emotion(&md->bl,ms[i].emotion);
-			return 1;
-		}
-	}
-
-	return 0;
-}
-/*==========================================
- * Skill use event processing
- *------------------------------------------
- */
-int mobskill_event(struct mob_data *md,int flag)
-{
-	nullpo_retr(0, md);
-
-	if(flag==-1 && mobskill_use(md,gettick(),MSC_CASTTARGETED))
-		return 1;
-	if( (flag&BF_SHORT) && mobskill_use(md,gettick(),MSC_CLOSEDATTACKED))
-		return 1;
-	if( (flag&BF_LONG) && mobskill_use(md,gettick(),MSC_LONGRANGEATTACKED))
-		return 1;
-	return 0;
-}
-/*==========================================
- * Mob���G���y���E���Ȃǂ̏ꍇ�̔���
- *------------------------------------------
- */
-int mob_gvmobcheck(struct map_session_data *sd, struct block_list *bl)
-{
-	struct mob_data *md=NULL;
-	
-	nullpo_retr(0,sd);
-	nullpo_retr(0,bl);
-	
-	if(bl->type==BL_MOB && (md=(struct mob_data *)bl) &&
-		(md->class == 1288 || md->class == 1287 || md->class == 1286 || md->class == 1285))
-	{
-		struct guild_castle *gc=guild_mapname2gc(map[sd->bl.m].name);
-		struct guild *g=guild_search(sd->status.guild_id);
-
-		if(g == NULL && md->class == 1288)
-			return 0;//�M���h�������Ȃ�_���[�W����
-		else if(gc != NULL && !map[sd->bl.m].flag.gvg)
-			return 0;//�ԓ���Gv����Ȃ��Ƃ��̓_���[�W�Ȃ�
-		else if(g && gc != NULL && g->guild_id == gc->guild_id)
-			return 0;//����̃M���h�̃G���y�Ȃ�_���[�W����
-		else if(g && guild_checkskill(g,GD_APPROVAL) <= 0 && md->class == 1288)
-			return 0;//���K�M���h���F���Ȃ��ƃ_���[�W����
-
-	}
-	
-	return 1;
-}
-/*==========================================
- * �X�L���p�^�C�}�[�폜
- *------------------------------------------
- */
-int mobskill_deltimer(struct mob_data *md )
-{
-	nullpo_retr(0, md);
-
-	if( md->skilltimer!=-1 ){
-		if( skill_get_inf( md->skillid )&2 )
-			delete_timer( md->skilltimer, mobskill_castend_pos );
-		else
-			delete_timer( md->skilltimer, mobskill_castend_id );
-		md->skilltimer=-1;
-	}
-	return 0;
-}
-//
-// ������
-//
-/*==========================================
- * Since un-setting [ mob ] up was used, it is an initial provisional value setup.
- *------------------------------------------
- */
-static int mob_makedummymobdb(int class)
-{
-	int i;
-
-	sprintf(mob_db[class].name,"mob%d",class);
-	sprintf(mob_db[class].jname,"mob%d",class);
-	mob_db[class].lv=1;
-	mob_db[class].max_hp=1000;
-	mob_db[class].max_sp=1;
-	mob_db[class].base_exp=2;
-	mob_db[class].job_exp=1;
-	mob_db[class].range=1;
-	mob_db[class].atk1=7;
-	mob_db[class].atk2=10;
-	mob_db[class].def=0;
-	mob_db[class].mdef=0;
-	mob_db[class].str=1;
-	mob_db[class].agi=1;
-	mob_db[class].vit=1;
-	mob_db[class].int_=1;
-	mob_db[class].dex=6;
-	mob_db[class].luk=2;
-	mob_db[class].range2=10;
-	mob_db[class].range3=10;
-	mob_db[class].size=0;
-	mob_db[class].race=0;
-	mob_db[class].element=0;
-	mob_db[class].mode=0;
-	mob_db[class].speed=300;
-	mob_db[class].adelay=1000;
-	mob_db[class].amotion=500;
-	mob_db[class].dmotion=500;
-	mob_db[class].dropitem[0].nameid=909;	// Jellopy
-	mob_db[class].dropitem[0].p=1000;
-	for(i=1;i<8;i++){
-		mob_db[class].dropitem[i].nameid=0;
-		mob_db[class].dropitem[i].p=0;
-	}
-	// Item1,Item2
-	mob_db[class].mexp=0;
-	mob_db[class].mexpper=0;
-	for(i=0;i<3;i++){
-		mob_db[class].mvpitem[i].nameid=0;
-		mob_db[class].mvpitem[i].p=0;
-	}
-	for(i=0;i<MAX_RANDOMMONSTER;i++)
-		mob_db[class].summonper[i]=0;
-	return 0;
-}
-
-/*==========================================
- * db/mob_db.txt reading
- *------------------------------------------
- */
-static int mob_readdb(void)
-{
-	FILE *fp;
-	char line[1024];
-	char *filename[]={ "db/mob_db.txt","db/mob_db2.txt" };
-	int i;
-
-	memset(mob_db,0,sizeof(mob_db));
-
-	for(i=0;i<2;i++){
-
-		fp=fopen(filename[i],"r");
-		if(fp==NULL){
-			if(i>0)
-				continue;
-			return -1;
-		}
-		while(fgets(line,1020,fp)){
-			int class,i;
-			char *str[55],*p,*np;
-
-			if(line[0] == '/' && line[1] == '/')
-				continue;
-
-			for(i=0,p=line;i<55;i++){
-				if((np=strchr(p,','))!=NULL){
-					str[i]=p;
-					*np=0;
-					p=np+1;
-				} else
-					str[i]=p;
-			}
-
-			class=atoi(str[0]);
-			if(class<=1000 || class>2000)
-				continue;
-
-			mob_db[class].view_class=class;
-			memcpy(mob_db[class].name,str[1],24);
-			memcpy(mob_db[class].jname,str[2],24);
-			mob_db[class].lv=atoi(str[3]);
-			mob_db[class].max_hp=atoi(str[4]);
-			mob_db[class].max_sp=atoi(str[5]);
-
-			mob_db[class].base_exp=atoi(str[6]);
-			if(mob_db[class].base_exp < 0)
-				mob_db[class].base_exp = 0;
-			else if(mob_db[class].base_exp > 0 && (mob_db[class].base_exp*battle_config.base_exp_rate/100 > 1000000000 ||
-			    mob_db[class].base_exp*battle_config.base_exp_rate/100 < 0))
-				mob_db[class].base_exp=1000000000;
-			else 
-				mob_db[class].base_exp*= battle_config.base_exp_rate/100;
-			
-			mob_db[class].job_exp=atoi(str[7]);
-			if(mob_db[class].job_exp < 0)
-				mob_db[class].job_exp = 0;
-			else if(mob_db[class].job_exp > 0 && (mob_db[class].job_exp*battle_config.job_exp_rate/100 > 1000000000 ||
-			    mob_db[class].job_exp*battle_config.job_exp_rate/100 < 0))
-				mob_db[class].job_exp=1000000000;
-			else 
-				mob_db[class].job_exp*=battle_config.job_exp_rate/100;
-			
-			mob_db[class].range=atoi(str[8]);
-			mob_db[class].atk1=atoi(str[9]);
-			mob_db[class].atk2=atoi(str[10]);
-			mob_db[class].def=atoi(str[11]);
-			mob_db[class].mdef=atoi(str[12]);
-			mob_db[class].str=atoi(str[13]);
-			mob_db[class].agi=atoi(str[14]);
-			mob_db[class].vit=atoi(str[15]);
-			mob_db[class].int_=atoi(str[16]);
-			mob_db[class].dex=atoi(str[17]);
-			mob_db[class].luk=atoi(str[18]);
-			mob_db[class].range2=atoi(str[19]);
-			mob_db[class].range3=atoi(str[20]);
-			mob_db[class].size=atoi(str[21]);
-			mob_db[class].race=atoi(str[22]);
-			mob_db[class].element=atoi(str[23]);
-			mob_db[class].mode=atoi(str[24]);
-			mob_db[class].speed=atoi(str[25]);
-			mob_db[class].adelay=atoi(str[26]);
-			mob_db[class].amotion=atoi(str[27]);
-			mob_db[class].dmotion=atoi(str[28]);
-
-			for(i=0;i<8;i++){
-				int rate = 0,type,ratemin,ratemax;
-				mob_db[class].dropitem[i].nameid=atoi(str[29+i*2]);
-				type = itemdb_type(mob_db[class].dropitem[i].nameid);
-				if (type == 0) {							// Added [Valaris]
-					rate = battle_config.item_rate_heal;
-					ratemin = battle_config.item_drop_heal_min;
-					ratemax = battle_config.item_drop_heal_max;
-				}
-				else if (type == 2) {
-					rate = battle_config.item_rate_use;
-					ratemin = battle_config.item_drop_use_min;
-					ratemax = battle_config.item_drop_use_max;	// End
-				}
-				else if (type == 4 || type == 5 || type == 8) {		// Changed to include Pet Equip
-					rate = battle_config.item_rate_equip;
-					ratemin = battle_config.item_drop_equip_min;
-					ratemax = battle_config.item_drop_equip_max;
-				}
-				else if (type == 6) {
-					rate = battle_config.item_rate_card;
-					ratemin = battle_config.item_drop_card_min;
-					ratemax = battle_config.item_drop_card_max;
-				}
-				else {
-					rate = battle_config.item_rate_common;
-					ratemin = battle_config.item_drop_common_min;
-					ratemax = battle_config.item_drop_common_max;
-				}
-				rate = (rate / 100) * atoi(str[30+i*2]);
-				rate = (rate < ratemin)? ratemin: (rate > ratemax)? ratemax: rate;
-				mob_db[class].dropitem[i].p = rate;
-			}
-			// Item1,Item2
-			mob_db[class].mexp=atoi(str[45])*battle_config.mvp_exp_rate/100;
-			mob_db[class].mexpper=atoi(str[46]);
-			for(i=0;i<3;i++){
-				mob_db[class].mvpitem[i].nameid=atoi(str[47+i*2]);
-				mob_db[class].mvpitem[i].p=atoi(str[48+i*2])*battle_config.mvp_item_rate/100;
-			}
-			for(i=0;i<MAX_RANDOMMONSTER;i++)
-				mob_db[class].summonper[i]=0;
-			mob_db[class].maxskill=0;
-
-			mob_db[class].sex=0;
-			mob_db[class].hair=0;
-			mob_db[class].hair_color=0;
-			mob_db[class].weapon=0;
-			mob_db[class].shield=0;
-			mob_db[class].head_top=0;
-			mob_db[class].head_mid=0;
-			mob_db[class].head_buttom=0;
-			mob_db[class].clothes_color=0; //Add for player monster dye - Valaris
-		}
-		fclose(fp);
-		printf("read %s done\n",filename[i]);
-	}
-	return 0;
-}
-
-/*==========================================
- * MOB display graphic change data reading
- *------------------------------------------
- */
-static int mob_readdb_mobavail(void)
-{
-	FILE *fp;
-	char line[1024];
-	int ln=0;
-	int class,j,k;
-	char *str[20],*p,*np;
-
-	if( (fp=fopen("db/mob_avail.txt","r"))==NULL ){
-		printf("can't read db/mob_avail.txt\n");
-		return -1;
-	}
-
-	while(fgets(line,1020,fp)){
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		memset(str,0,sizeof(str));
-
-		for(j=0,p=line;j<12;j++){
-			if((np=strchr(p,','))!=NULL){
-				str[j]=p;
-				*np=0;
-				p=np+1;
-			} else
-					str[j]=p;
-			}
-
-		if(str[0]==NULL)
-			continue;
-
-		class=atoi(str[0]);
-
-		if(class<=1000 || class>2000)	// �l���ُ�Ȃ珈�����Ȃ��B
-			continue;
-		k=atoi(str[1]);
-		if(k >= 0)
-			mob_db[class].view_class=k;
-
-		if((mob_db[class].view_class < 24) || (mob_db[class].view_class > 4000)) {
-			mob_db[class].sex=atoi(str[2]);
-			mob_db[class].hair=atoi(str[3]);
-			mob_db[class].hair_color=atoi(str[4]);
-			mob_db[class].weapon=atoi(str[5]);
-			mob_db[class].shield=atoi(str[6]);
-			mob_db[class].head_top=atoi(str[7]);
-			mob_db[class].head_mid=atoi(str[8]);
-			mob_db[class].head_buttom=atoi(str[9]);
-			mob_db[class].option=atoi(str[10])&~0x46;
-			mob_db[class].clothes_color=atoi(str[11]); // Monster player dye option - Valaris
-		}
-
-		else if(atoi(str[2]) > 0) mob_db[class].equip=atoi(str[2]); // mob equipment [Valaris]
-
-		ln++;
-	}
-	fclose(fp);
-	printf("read db/mob_avail.txt done (count=%d)\n",ln);
-	return 0;
-}
-
-/*==========================================
- * Reading of random monster data
- *------------------------------------------
- */
-static int mob_read_randommonster(void)
-{
-	FILE *fp;
-	char line[1024];
-	char *str[10],*p;
-	int i,j;
-
-	const char* mobfile[] = {
-		"db/mob_branch.txt",
-		"db/mob_poring.txt",
-		"db/mob_boss.txt" };
-
-	for(i=0;i<MAX_RANDOMMONSTER;i++){
-		mob_db[0].summonper[i] = 1002;	// �ݒ肵�Y�ꂽ�ꍇ�̓|�������o��悤�ɂ��Ă���
-		fp=fopen(mobfile[i],"r");
-		if(fp==NULL){
-			printf("can't read %s\n",mobfile[i]);
-			return -1;
-		}
-		while(fgets(line,1020,fp)){
-			int class,per;
-			if(line[0] == '/' && line[1] == '/')
-				continue;
-			memset(str,0,sizeof(str));
-			for(j=0,p=line;j<3 && p;j++){
-				str[j]=p;
-				p=strchr(p,',');
-				if(p) *p++=0;
-			}
-
-			if(str[0]==NULL || str[2]==NULL)
-				continue;
-
-			class = atoi(str[0]);
-			per=atoi(str[2]);
-			if((class>1000 && class<=2000) || class==0)
-				mob_db[class].summonper[i]=per;
-		}
-		fclose(fp);
-		printf("read %s done\n",mobfile[i]);
-	}
-	return 0;
-}
-/*==========================================
- * db/mob_skill_db.txt reading
- *------------------------------------------
- */
-static int mob_readskilldb(void)
-{
-	FILE *fp;
-	char line[1024];
-	int i;
-
-	const struct {
-		char str[32];
-		int id;
-	} cond1[] = {
-		{	"always",			MSC_ALWAYS				},
-		{	"myhpltmaxrate",	MSC_MYHPLTMAXRATE		},
-		{	"friendhpltmaxrate",MSC_FRIENDHPLTMAXRATE	},
-		{	"mystatuson",		MSC_MYSTATUSON			},
-		{	"mystatusoff",		MSC_MYSTATUSOFF			},
-		{	"friendstatuson",	MSC_FRIENDSTATUSON		},
-		{	"friendstatusoff",	MSC_FRIENDSTATUSOFF		},
-		{	"attackpcgt",		MSC_ATTACKPCGT			},
-		{	"attackpcge",		MSC_ATTACKPCGE			},
-		{	"slavelt",			MSC_SLAVELT				},
-		{	"slavele",			MSC_SLAVELE				},
-		{	"closedattacked",	MSC_CLOSEDATTACKED		},
-		{	"longrangeattacked",MSC_LONGRANGEATTACKED	},
-		{	"skillused",		MSC_SKILLUSED			},
-		{	"casttargeted",		MSC_CASTTARGETED		},
-	}, cond2[] ={
-		{	"anybad",		-1				},
-		{	"stone",		SC_STONE		},
-		{	"freeze",		SC_FREEZE		},
-		{	"stan",			SC_STAN			},
-		{	"sleep",		SC_SLEEP		},
-		{	"poison",		SC_POISON		},
-		{	"curse",		SC_CURSE		},
-		{	"silence",		SC_SILENCE		},
-		{	"confusion",	SC_CONFUSION	},
-		{	"blind",		SC_BLIND		},
-		{	"hiding",		SC_HIDING		},
-		{	"sight",		SC_SIGHT		},
-	}, state[] = {
-		{	"any",		-1			},
-		{	"idle",		MSS_IDLE	},
-		{	"walk",		MSS_WALK	},
-		{	"attack",	MSS_ATTACK	},
-		{	"dead",		MSS_DEAD	},
-		{	"loot",		MSS_LOOT	},
-		{	"chase",	MSS_CHASE	},
-	}, target[] = {
-		{	"target",	MST_TARGET	},
-		{	"self",		MST_SELF	},
-		{	"friend",	MST_FRIEND	},
-		{	"around5",	MST_AROUND5	},
-		{	"around6",	MST_AROUND6	},
-		{	"around7",	MST_AROUND7	},
-		{	"around8",	MST_AROUND8	},
-		{	"around1",	MST_AROUND1	},
-		{	"around2",	MST_AROUND2	},
-		{	"around3",	MST_AROUND3	},
-		{	"around4",	MST_AROUND4	},
-		{	"around",	MST_AROUND	},
-	};
-
-	int x;
-	char *filename[]={ "db/mob_skill_db.txt","db/mob_skill_db2.txt" };
-
-	for(x=0;x<2;x++){
-
-		fp=fopen(filename[x],"r");
-		if(fp==NULL){
-			if(x==0)
-				printf("can't read %s\n",filename[x]);
-			continue;
-		}
-		while(fgets(line,1020,fp)){
-			char *sp[20],*p;
-			int mob_id;
-			struct mob_skill *ms;
-			int j=0;
-
-			if(line[0] == '/' && line[1] == '/')
-				continue;
-
-			memset(sp,0,sizeof(sp));
-			for(i=0,p=line;i<18 && p;i++){
-				sp[i]=p;
-				if((p=strchr(p,','))!=NULL)
-					*p++=0;
-			}
-			if( (mob_id=atoi(sp[0]))<=0 )
-				continue;
-
-			if( strcmp(sp[1],"clear")==0 ){
-				memset(mob_db[mob_id].skill,0,sizeof(mob_db[mob_id].skill));
-				mob_db[mob_id].maxskill=0;
-				continue;
-			}
-
-			for(i=0;i<MAX_MOBSKILL;i++)
-				if( (ms=&mob_db[mob_id].skill[i])->skill_id == 0)
-					break;
-			if(i==MAX_MOBSKILL){
-				printf("mob_skill: readdb: too many skill ! [%s] in %d[%s]\n",
-					sp[1],mob_id,mob_db[mob_id].jname);
-				continue;
-			}
-
-			ms->state=atoi(sp[2]);
-			for(j=0;j<sizeof(state)/sizeof(state[0]);j++){
-				if( strcmp(sp[2],state[j].str)==0)
-					ms->state=state[j].id;
-			}
-			ms->skill_id=atoi(sp[3]);
-			ms->skill_lv=atoi(sp[4]);
-			ms->permillage=atoi(sp[5]);
-			ms->casttime=atoi(sp[6]);
-			ms->delay=atoi(sp[7]);
-			ms->cancel=atoi(sp[8]);
-			if( strcmp(sp[8],"yes")==0 ) ms->cancel=1;
-			ms->target=atoi(sp[9]);
-			for(j=0;j<sizeof(target)/sizeof(target[0]);j++){
-				if( strcmp(sp[9],target[j].str)==0)
-					ms->target=target[j].id;
-			}
-			ms->cond1=-1;
-			for(j=0;j<sizeof(cond1)/sizeof(cond1[0]);j++){
-				if( strcmp(sp[10],cond1[j].str)==0)
-					ms->cond1=cond1[j].id;
-			}
-			ms->cond2=atoi(sp[11]);
-			for(j=0;j<sizeof(cond2)/sizeof(cond2[0]);j++){
-				if( strcmp(sp[11],cond2[j].str)==0)
-					ms->cond2=cond2[j].id;
-			}
-			ms->val[0]=atoi(sp[12]);
-			ms->val[1]=atoi(sp[13]);
-			ms->val[2]=atoi(sp[14]);
-			ms->val[3]=atoi(sp[15]);
-			ms->val[4]=atoi(sp[16]);
-			if(sp[17] != NULL && strlen(sp[17])>2)
-				ms->emotion=atoi(sp[17]);
-			else
-				ms->emotion=-1;
-			mob_db[mob_id].maxskill=i+1;
-		}
-		fclose(fp);
-		printf("read %s done\n",filename[x]);
-	}
-	return 0;
-}
-
-void mob_reload(void)
-{
-	/*
-
-	<empty monster database>
-	mob_read();
-
-	*/
-
-	do_init_mob();
-}
-
-#ifndef TXT_ONLY
-/*==========================================
- * SQL reading
- *------------------------------------------
- */
-static int mob_read_sqldb(void)
-{
-	char line[1024];
-	int i,class,ln=0;
-	char *str[55],*p,*np;
-	
-	memset(mob_db,0,sizeof(mob_db));
-	
-    sprintf (tmp_sql, "SELECT * FROM `%s`",mob_db_db);
-	if(mysql_query(&mmysql_handle, tmp_sql) ) {
-		printf("DB server Error (select %s to Memory)- %s\n",mob_db_db,mysql_error(&mmysql_handle) );
-	}
-	sql_res = mysql_store_result(&mmysql_handle);
-	if (sql_res) {
-		while((sql_row = mysql_fetch_row(sql_res))){
-            sprintf(line,"%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s",
-                        sql_row[0],sql_row[1],sql_row[2],sql_row[3],sql_row[4],
-                        sql_row[5],sql_row[6],sql_row[7],sql_row[8],sql_row[9],
-                        sql_row[10],sql_row[11],sql_row[12],sql_row[13],sql_row[14],
-                        sql_row[15],sql_row[16],sql_row[17],sql_row[18],sql_row[19],
-                        sql_row[20],sql_row[21],sql_row[22],sql_row[23],sql_row[24],
-                        sql_row[25],sql_row[26],sql_row[27],sql_row[28],sql_row[29],
-                        sql_row[30],sql_row[31],sql_row[32],sql_row[33],sql_row[34],
-                        sql_row[35],sql_row[36],sql_row[37],sql_row[38],sql_row[39],
-                        sql_row[40],sql_row[41],sql_row[42],sql_row[43],sql_row[44],
-                        sql_row[45],sql_row[46],sql_row[47],sql_row[48],sql_row[49],
-                        sql_row[50],sql_row[51],sql_row[52]);
-
-			for(i=0,p=line;i<55;i++){
-				if((np=strchr(p,','))!=NULL){
-					str[i]=p;
-					*np=0;
-					p=np+1;
-				} else
-					str[i]=p;
-			}
-	
-			class=atoi(str[0]);
-			if(class<=1000 || class>2000)
-				continue;
-			
-			ln++;
-			
-			mob_db[class].view_class=class;
-			memcpy(mob_db[class].name,str[1],24);
-			memcpy(mob_db[class].jname,str[2],24);
-			mob_db[class].lv=atoi(str[3]);
-			mob_db[class].max_hp=atoi(str[4]);
-			mob_db[class].max_sp=atoi(str[5]);
-			mob_db[class].base_exp=atoi(str[6])*
-					battle_config.base_exp_rate/100;
-			if(mob_db[class].base_exp <= 0)
-				mob_db[class].base_exp = 1;
-			mob_db[class].job_exp=atoi(str[7])*
-					battle_config.job_exp_rate/100;
-			if(mob_db[class].job_exp <= 0)
-				mob_db[class].job_exp = 1;
-			mob_db[class].range=atoi(str[8]);
-			mob_db[class].atk1=atoi(str[9]);
-			mob_db[class].atk2=atoi(str[10]);
-			mob_db[class].def=atoi(str[11]);
-			mob_db[class].mdef=atoi(str[12]);
-			mob_db[class].str=atoi(str[13]);
-			mob_db[class].agi=atoi(str[14]);
-			mob_db[class].vit=atoi(str[15]);
-			mob_db[class].int_=atoi(str[16]);
-			mob_db[class].dex=atoi(str[17]);
-			mob_db[class].luk=atoi(str[18]);
-			mob_db[class].range2=atoi(str[19]);
-			mob_db[class].range3=atoi(str[20]);
-			mob_db[class].size=atoi(str[21]);
-			mob_db[class].race=atoi(str[22]);
-			mob_db[class].element=atoi(str[23]);
-			mob_db[class].mode=atoi(str[24]);
-			mob_db[class].speed=atoi(str[25]);
-			mob_db[class].adelay=atoi(str[26]);
-			mob_db[class].amotion=atoi(str[27]);
-			mob_db[class].dmotion=atoi(str[28]);
-
-            for(i=0;i<8;i++){
-				int rate = 0,type,ratemin,ratemax;
-				mob_db[class].dropitem[i].nameid=atoi(str[29+i*2]);
-				type = itemdb_type(mob_db[class].dropitem[i].nameid);
-				if (type == 0) {							// Added by Valaris
-					rate = battle_config.item_rate_heal;
-					ratemin = battle_config.item_drop_heal_min;
-					ratemax = battle_config.item_drop_heal_max;
-				}
-				else if (type == 2) {
-					rate = battle_config.item_rate_use;
-					ratemin = battle_config.item_drop_use_min;
-					ratemax = battle_config.item_drop_use_max;	// End
-				}
-				else if (type == 4 || type == 5 || type == 8) {		// Changed to include Pet Equip
-					rate = battle_config.item_rate_equip;
-					ratemin = battle_config.item_drop_equip_min;
-					ratemax = battle_config.item_drop_equip_max;
-				}
-				else if (type == 6) {
-					rate = battle_config.item_rate_card;
-					ratemin = battle_config.item_drop_card_min;
-					ratemax = battle_config.item_drop_card_max;
-				}
-				else {
-					rate = battle_config.item_rate_common;
-					ratemin = battle_config.item_drop_common_min;
-					ratemax = battle_config.item_drop_common_max;
-				}
-				rate = (rate / 100) * atoi(str[30+i*2]);
-				rate = (rate < ratemin)? ratemin: (rate > ratemax)? ratemax: rate;
-				mob_db[class].dropitem[i].p = rate;
-			}
-			
-			mob_db[class].mexp=atoi(str[45])*battle_config.mvp_exp_rate/100;
-			mob_db[class].mexpper=atoi(str[46]);
-			for(i=0;i<3;i++){
-				mob_db[class].mvpitem[i].nameid=atoi(str[47+i*2]);
-				mob_db[class].mvpitem[i].p=atoi(str[48+i*2])*battle_config.mvp_item_rate/100;
-			}
-			for(i=0;i<MAX_RANDOMMONSTER;i++)
-				mob_db[class].summonper[i]=0;
-			mob_db[class].maxskill=0;
-			
-			mob_db[class].sex=0;
-			mob_db[class].hair=0;
-			mob_db[class].hair_color=0;
-			mob_db[class].weapon=0;
-			mob_db[class].shield=0;
-			mob_db[class].head_top=0;
-			mob_db[class].head_mid=0;
-			mob_db[class].head_buttom=0;
-		}
-		mysql_free_result(sql_res);
-		printf("read %s done (count=%d)\n",mob_db_db,ln);
-	}
-	return 0;
-}
-
-#endif /* not TXT_ONLY */
-/*==========================================
- * Circumference initialization of mob
- *------------------------------------------
- */
-int do_init_mob(void)
-{
-#ifndef TXT_ONLY
-    if(db_use_sqldbs)
-        mob_read_sqldb();
-    else 
-#endif /* TXT_ONLY */
-        mob_readdb();
-
-	mob_readdb_mobavail();
-	mob_read_randommonster();
-	mob_readskilldb();
-
-	add_timer_func_list(mob_timer,"mob_timer");
-	add_timer_func_list(mob_delayspawn,"mob_delayspawn");
-	add_timer_func_list(mob_delay_item_drop,"mob_delay_item_drop");
-	add_timer_func_list(mob_delay_item_drop2,"mob_delay_item_drop2");
-	add_timer_func_list(mob_ai_hard,"mob_ai_hard");
-	add_timer_func_list(mob_ai_lazy,"mob_ai_lazy");
-	add_timer_func_list(mobskill_castend_id,"mobskill_castend_id");
-	add_timer_func_list(mobskill_castend_pos,"mobskill_castend_pos");
-	add_timer_func_list(mob_timer_delete,"mob_timer_delete");
-	add_timer_interval(gettick()+MIN_MOBTHINKTIME,mob_ai_hard,0,0,MIN_MOBTHINKTIME);
-	add_timer_interval(gettick()+MIN_MOBTHINKTIME*10,mob_ai_lazy,0,0,MIN_MOBTHINKTIME*10);
-
-	return 0;
-}
diff --git a/misc/src/map/mob.h b/misc/src/map/mob.h
deleted file mode 100644
index 7c1467b..0000000
--- a/misc/src/map/mob.h
+++ /dev/null
@@ -1,137 +0,0 @@
-// $Id: mob.h,v 1.4 2004/09/25 05:32:18 MouseJstr Exp $
-#ifndef _MOB_H_
-#define _MOB_H_
-
-#define MAX_RANDOMMONSTER 3
-
-struct mob_skill {
-	short state;
-	short skill_id,skill_lv;
-	short permillage;
-	int casttime,delay;
-	short cancel;
-	short cond1,cond2;
-	short target;
-	int val[5];
-	short emotion;
-};
-
-struct mob_db {
-	char name[24],jname[24];
-	int lv;
-	int max_hp,max_sp;
-	int base_exp,job_exp;
-	int atk1,atk2;
-	int def,mdef;
-	int str,agi,vit,int_,dex,luk;
-	int range,range2,range3;
-	int size,race,element,mode;
-	int speed,adelay,amotion,dmotion;
-	int mexp,mexpper;
-	struct { int nameid,p; } dropitem[8];
-	struct { int nameid,p; } mvpitem[3];
-	int view_class,sex;
-	short hair,hair_color,weapon,shield,head_top,head_mid,head_buttom,option,clothes_color; // [Valaris]
-	int equip; // [Valaris]
-	int summonper[MAX_RANDOMMONSTER];
-	int maxskill;
-	struct mob_skill skill[MAX_MOBSKILL];
-};
-extern struct mob_db mob_db[];
-
-enum {
-	MST_TARGET			=	0,
-	MST_SELF			=	1,
-	MST_FRIEND			=	2,
-	MST_AROUND5			=	3,
-	MST_AROUND6			=	4,
-	MST_AROUND7			=	5,
-	MST_AROUND8			=	6,
-	MST_AROUND1			=	7,
-	MST_AROUND2			=	8,
-	MST_AROUND3			=	9,
-	MST_AROUND4			=	10,
-	MST_AROUND			=	MST_AROUND4,
-
-	MSC_ALWAYS			=	0x0000,
-	MSC_MYHPLTMAXRATE	=	0x0001,
-	MSC_FRIENDHPLTMAXRATE=	0x0010,
-	MSC_MYSTATUSON		=	0x0020,
-	MSC_MYSTATUSOFF		=	0x0021,
-	MSC_FRIENDSTATUSON	=	0x0030,
-	MSC_FRIENDSTATUSOFF	=	0x0031,
-
-	MSC_ATTACKPCGT		=	0x0100,
-	MSC_ATTACKPCGE		=	0x0101,
-	MSC_SLAVELT			=	0x0110,
-	MSC_SLAVELE			=	0x0111,
-	MSC_CLOSEDATTACKED	=	0x1000,
-	MSC_LONGRANGEATTACKED=	0x1001,
-	MSC_SKILLUSED		=	0x1010,
-	MSC_CASTTARGETED	=	0x1011,
-};
-
-enum {
-	MSS_IDLE,	// �ҋ@
-	MSS_WALK,	// �ړ�
-	MSS_ATTACK,	// �U��
-	MSS_DEAD,	// ���S
-	MSS_LOOT,	// ���[�g
-	MSS_CHASE,	// �ˌ�
-};
-
-int mobdb_searchname(const char *str);
-int mobdb_checkid(const int id);
-int mob_once_spawn(struct map_session_data *sd,char *mapname,
-	int x,int y,const char *mobname,int class,int amount,const char *event);
-int mob_once_spawn_area(struct map_session_data *sd,char *mapname,
-	int x0,int y0,int x1,int y1,
-	const char *mobname,int class,int amount,const char *event);
-
-int mob_spawn_guardian(struct map_session_data *sd,char *mapname,	// Spawning Guardians [Valaris]
-	int x,int y,const char *mobname,int class,int amount,const char *event,int guardian);	// Spawning Guardians [Valaris]
-
-
-int mob_walktoxy(struct mob_data *md,int x,int y,int easy);
-
-int mob_target(struct mob_data *md,struct block_list *bl,int dist);
-int mob_stop_walking(struct mob_data *md,int type);
-int mob_stopattack(struct mob_data *);
-int mob_spawn(int);
-int mob_damage(struct block_list *,struct mob_data*,int,int);
-int mob_changestate(struct mob_data *md,int state,int type);
-int mob_heal(struct mob_data*,int);
-int mob_get_viewclass(int);
-int mob_get_sex(int);
-short mob_get_hair(int);
-short mob_get_hair_color(int);
-short mob_get_weapon(int);
-short mob_get_shield(int);
-short mob_get_head_top(int);
-short mob_get_head_mid(int);
-short mob_get_head_buttom(int);
-short mob_get_clothes_color(int);	//player mob dye [Valaris]
-int mob_get_equip(int); // mob equip [Valaris]
-int do_init_mob(void);
-
-int mob_delete(struct mob_data *md);
-int mob_catch_delete(struct mob_data *md,int type);
-int mob_timer_delete(int tid, unsigned int tick, int id, int data);
-
-int mob_deleteslave(struct mob_data *md);
-
-int mob_counttargeted(struct mob_data *md,struct block_list *src,int target_lv);
-
-int mob_class_change(struct mob_data *md,int *value);
-int mob_warp(struct mob_data *md,int m,int x,int y,int type);
-
-int mobskill_use(struct mob_data *md,unsigned int tick,int event);
-int mobskill_event(struct mob_data *md,int flag);
-int mobskill_castend_id( int tid, unsigned int tick, int id,int data );
-int mobskill_castend_pos( int tid, unsigned int tick, int id,int data );
-int mob_summonslave(struct mob_data *md2,int *value,int amount,int flag);
-
-int mob_gvmobcheck(struct map_session_data *sd, struct block_list *bl);
-void mob_reload(void);
-
-#endif
diff --git a/misc/src/map/npc.c b/misc/src/map/npc.c
deleted file mode 100644
index 05a5dc4..0000000
--- a/misc/src/map/npc.c
+++ /dev/null
@@ -1,2035 +0,0 @@
-// $Id: npc.c,v 1.5 2004/09/25 05:32:18 MouseJstr Exp $
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <string.h>
-#include <math.h>
-#include <time.h>
-
-#include "db.h"
-#include "timer.h"
-#include "nullpo.h"
-#include "malloc.h"
-#include "map.h"
-#include "npc.h"
-#include "clif.h"
-#include "intif.h"
-#include "pc.h"
-#include "itemdb.h"
-#include "script.h"
-#include "mob.h"
-#include "pet.h"
-#include "battle.h"
-#include "skill.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-
-
-struct npc_src_list {
-	struct npc_src_list * next;
-	struct npc_src_list * prev;
-	char name[4];
-} ;
-
-static struct npc_src_list *npc_src_first,*npc_src_last;
-static int npc_id=START_NPC_NUM;
-static int npc_warp,npc_shop,npc_script,npc_mob;
-
-int npc_get_new_npc_id(void){ return npc_id++; }
-
-static struct dbt *ev_db;
-static struct dbt *npcname_db;
-
-struct event_data {
-	struct npc_data *nd;
-	int pos;
-};
-static struct tm ev_tm_b;	// ���v�C�x���g�p
-
-
-/*==========================================
- * NPC�̖�����/�L����
- * npc_enable
- * npc_enable_sub �L������OnTouch�C�x���g�����s
- *------------------------------------------
- */
-int npc_enable_sub( struct block_list *bl, va_list ap )
-{
-	struct map_session_data *sd;
-	struct npc_data *nd;
-	char *name=(char *)aCalloc(50,sizeof(char));
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, nd=va_arg(ap,struct npc_data *));
-	if(bl->type == BL_PC && (sd=(struct map_session_data *)bl)){
-
-		if (nd->flag&1)	// �������������
-			return 1;
-
-		memcpy(name,nd->name,50);
-		if(sd->areanpc_id==nd->bl.id)
-			return 1;
-		sd->areanpc_id=nd->bl.id;
-		npc_event(sd,strcat(name,"::OnTouch"),0);
-	}
-	free(name);
-	return 0;
-}
-int npc_enable(const char *name,int flag)
-{
-	struct npc_data *nd=strdb_search(npcname_db,name);
-	if (nd==NULL)
-		return 0;
-	
-	if (flag&1) {	// �L����
-		nd->flag&=~1;
-		clif_spawnnpc(nd);
-	}else if (flag&2){
-		nd->flag&=~1;
-		nd->option = 0x0000;
-		clif_changeoption(&nd->bl);
-	}else if (flag&4){
-		nd->flag|=1;
-		nd->option = 0x0002;
-		clif_changeoption(&nd->bl);
-	}else{		// ������
-		nd->flag|=1;
-		clif_clearchar(&nd->bl,0);
-	}
-	if(flag&3 && (nd->u.scr.xs > 0 || nd->u.scr.ys >0))
-		map_foreachinarea( npc_enable_sub,nd->bl.m,nd->bl.x-nd->u.scr.xs,nd->bl.y-nd->u.scr.ys,nd->bl.x+nd->u.scr.xs,nd->bl.y+nd->u.scr.ys,BL_PC,nd);
-
-	return 0;
-}
-
-/*==========================================
- * NPC�𖼑O�ŒT��
- *------------------------------------------
- */
-struct npc_data* npc_name2id(const char *name)
-{
-	return strdb_search(npcname_db,name);
-}
-/*==========================================
- * �C�x���g�L���[�̃C�x���g����
- *------------------------------------------
- */
-int npc_event_dequeue(struct map_session_data *sd)
-{
-	nullpo_retr(0, sd);
-
-	sd->npc_id=0;
-	if (sd->eventqueue[0][0]) {	// �L���[�̃C�x���g����
-		char *name=(char *)aCalloc(50,sizeof(char));
-		int i;
-
-		memcpy(name,sd->eventqueue[0],50);
-		for(i=MAX_EVENTQUEUE-2;i>=0;i--)
-			memcpy(sd->eventqueue[i],sd->eventqueue[i+1],50);
-		add_timer(gettick()+100,npc_event_timer,sd->bl.id,(int)name);
-	}
-	return 0;
-}
-
-int npc_delete(struct npc_data *nd)
-{
-    nullpo_retr(1, nd);
-
-    if(nd->bl.prev == NULL)
-        return 1;
-
-    clif_clearchar_area(&nd->bl,1);
-    map_delblock(&nd->bl);
-    return 0;
-}
-
-/*==========================================
- * �C�x���g�̒x�����s
- *------------------------------------------
- */
-int npc_event_timer(int tid,unsigned int tick,int id,int data)
-{
-	struct map_session_data *sd=map_id2sd(id);
-	if (sd==NULL)
-		return 0;
-	
-	npc_event(sd,(const char *)data,0);
-	free((void*)data);
-	return 0;
-}
-
-int npc_timer_event(const char *eventname)	// Added by RoVeRT
-{
-	struct event_data *ev=strdb_search(ev_db,eventname);
-	struct npc_data *nd;
-//	int xs,ys;
-
-	if((ev==NULL || (nd=ev->nd)==NULL)){
-		printf("npc_event: event not found [%s]\n",eventname);
-		return 0;
-	}
-
-	run_script(nd->u.scr.script,ev->pos,nd->bl.id,nd->bl.id);
-
-	return 0;
-}
-/*
-int npc_timer_sub_sub(void *key,void *data,va_list ap)	// Added by RoVeRT
-{
-	char *p=(char *)key;
-	struct event_data *ev=(struct event_data *)data;
-	int *c=va_arg(ap,int *);
-	int tick=0,ctick=gettick();
-	char temp[10];
-	char event[100];
-
-	if(ev->nd->bl.id==(int)*c && (p=strchr(p,':')) && p && strncasecmp("::OnTimer",p,8)==0 ){
-		sscanf(&p[9],"%s",temp);
-		tick=atoi(temp);
-
-		strcpy( event, ev->nd->name);
-		strcat( event, p);
-
-		if (ctick >= ev->nd->lastaction && ctick - ev->nd->timer >= tick) {
-			npc_timer_event(event);
-			ev->nd->lastaction = ctick;
-		}
-	}
-	return 0;
-}
-
-int npc_timer_sub(void *key,void *data,va_list ap)	// Added by RoVeRT
-{
-	struct npc_data *nd=(struct npc_data*)data;
-
-	if(nd->timer == -1)
-		return 0;
-
-	strdb_foreach(ev_db,npc_timer_sub_sub,&nd->bl.id);
-
-	return 0;
-}
-
-int npc_timer(int tid,unsigned int tick,int id,int data)	// Added by RoVeRT
-{
-	strdb_foreach(npcname_db,npc_timer_sub);
-
-	free((void*)data);
-	return 0;
-}*/
-/*==========================================
- * �C�x���g�p���x���̃G�N�X�|�[�g
- * npc_parse_script->strdb_foreach����Ă΂��
- *------------------------------------------
- */
-int npc_event_export(void *key,void *data,va_list ap)
-{
-	char *lname=(char *)key;
-	int pos=(int)data;
-	struct npc_data *nd=va_arg(ap,struct npc_data *);
-	
-	if ((lname[0]=='O' || lname[0]=='o')&&(lname[1]=='N' || lname[1]=='n')) {
-		struct event_data *ev;
-		char *buf;
-		char *p=strchr(lname,':');
-		// �G�N�X�|�[�g�����
-		ev=calloc(sizeof(struct event_data), 1);
-		buf=calloc(50, 1);
-		if (ev==NULL || buf==NULL) {
-			printf("npc_event_export: out of memory !\n");
-			exit(1);
-		}else if (p==NULL || (p-lname)>24) {
-			printf("npc_event_export: label name error !\n");
-			exit(1);
-		}else{
-			ev->nd=nd;
-			ev->pos=pos;
-			*p='\0';
-			sprintf(buf,"%s::%s",nd->exname,lname);
-			*p=':';
-			strdb_insert(ev_db,buf,ev);
-//			if (battle_config.etc_log)
-//				printf("npc_event_export: export [%s]\n",buf);
-		}
-	}
-	return 0;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/*==========================================
- * �S��NPC��On*�C�x���g���s
- *------------------------------------------
- */
-int npc_event_doall_sub(void *key,void *data,va_list ap)
-{
-	char *p=(char *)key;
-	struct event_data *ev;
-	int *c;
-	const char *name;
-
-	nullpo_retr(0, ev=(struct event_data *)data);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, c=va_arg(ap,int *));
-
-	name=va_arg(ap,const char *);
-
-	if( (p=strchr(p,':')) && p && strcasecmp(name,p)==0 ){
-		run_script(ev->nd->u.scr.script,ev->pos,0,ev->nd->bl.id);
-		(*c)++;
-	}
-	
-	return 0;
-}
-int npc_event_doall(const char *name)
-{
-	int c=0;
-	char buf[64]="::";
-	
-	strncpy(buf+2,name,62);
-	strdb_foreach(ev_db,npc_event_doall_sub,&c,buf);
-	return c;	
-}
-
-int npc_event_do_sub(void *key,void *data,va_list ap)
-{
-	char *p=(char *)key;
-	struct event_data *ev;
-	int *c;
-	const char *name;
-
-	nullpo_retr(0, ev=(struct event_data *)data);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, c=va_arg(ap,int *));
-
-	name=va_arg(ap,const char *);
-
-	if (p && strcasecmp(name,p)==0 ) {
-		run_script(ev->nd->u.scr.script,ev->pos,0,ev->nd->bl.id);
-		(*c)++;
-	}
-
-	return 0;
-}
-int npc_event_do(const char *name)
-{
-	int c=0;
-	
-	if (*name==':' && name[1]==':') {
-		return npc_event_doall(name+2);
-	}
-
-	strdb_foreach(ev_db,npc_event_do_sub,&c,name);
-	return c;
-}
-
-/*==========================================
- * ���v�C�x���g���s
- *------------------------------------------
- */
-int npc_event_do_clock(int tid,unsigned int tick,int id,int data)
-{
-	time_t timer;
-	struct tm *t;
-	char buf[64];
-	int c=0;
-	
-	time(&timer);
-	t=localtime(&timer);
-	
-	if (t->tm_min != ev_tm_b.tm_min ) {
-		sprintf(buf,"OnMinute%02d",t->tm_min);
-		c+=npc_event_doall(buf);
-		sprintf(buf,"OnClock%02d%02d",t->tm_hour,t->tm_min);
-		c+=npc_event_doall(buf);
-	}
-	if (t->tm_hour!= ev_tm_b.tm_hour) {
-		sprintf(buf,"OnHour%02d",t->tm_hour);
-		c+=npc_event_doall(buf);
-	}
-	if (t->tm_mday!= ev_tm_b.tm_mday) {
-		sprintf(buf,"OnDay%02d%02d",t->tm_mon+1,t->tm_mday);
-		c+=npc_event_doall(buf);
-	}
-	memcpy(&ev_tm_b,t,sizeof(ev_tm_b));
-	return c;
-}
-/*==========================================
- * OnInit�C�x���g���s(&���v�C�x���g�J�n)
- *------------------------------------------
- */
-int npc_event_do_oninit(void)
-{
-	int c = npc_event_doall("OnInit");
-	printf("npc: OnInit Event done. (%d npc)\n",c);
-
-	add_timer_interval(gettick()+100,
-		npc_event_do_clock,0,0,1000);
-
-	return 0;
-}
-/*==========================================
- * OnTimer NPC event - by RoVeRT
- *------------------------------------------
- */
-int npc_addeventtimer(struct npc_data *nd,int tick,const char *name)
-{
-	int i;
-	for(i=0;i<MAX_EVENTTIMER;i++)
-		if( nd->eventtimer[i]==-1 )
-			break;
-	if(i<MAX_EVENTTIMER){
-		char *evname=malloc(24);
-		if(evname==NULL){
-			printf("npc_addeventtimer: out of memory !\n");exit(1);
-		}
-		memcpy(evname,name,24);
-		nd->eventtimer[i]=add_timer(gettick()+tick,
-			npc_event_timer,nd->bl.id,(int)evname);
-	}else
-		printf("npc_addtimer: event timer is full !\n");
-
-	return 0;
-}
-
-int npc_deleventtimer(struct npc_data *nd,const char *name)
-{
-	int i;
-	for(i=0;i<MAX_EVENTTIMER;i++)
-		if( nd->eventtimer[i]!=-1 && strcmp(
-			(char *)(get_timer(nd->eventtimer[i])->data), name)==0 ){
-				delete_timer(nd->eventtimer[i],npc_event_timer);
-				nd->eventtimer[i]=-1;
-				break;
-		}
-
-	return 0;
-}
-
-int npc_cleareventtimer(struct npc_data *nd)
-{
-	int i;
-	for(i=0;i<MAX_EVENTTIMER;i++)
-		if( nd->eventtimer[i]!=-1 ){
-			delete_timer(nd->eventtimer[i],npc_event_timer);
-			nd->eventtimer[i]=-1;
-		}
-
-	return 0;
-}
-
-int npc_do_ontimer_sub(void *key,void *data,va_list ap)
-{
-	char *p=(char *)key;
-	struct event_data *ev=(struct event_data *)data;
-	int *c=va_arg(ap,int *);
-//	struct map_session_data *sd=va_arg(ap,struct map_session_data *);
-	int option=va_arg(ap,int);
-	int tick=0;
-	char temp[10];
-	char event[50];
-
-	if(ev->nd->bl.id==(int)*c && (p=strchr(p,':')) && p && strncasecmp("::OnTimer",p,8)==0 ){
-		sscanf(&p[9],"%s",temp);
-		tick=atoi(temp);
-
-		strcpy( event, ev->nd->name);
-		strcat( event, p);
-
-		if (option!=0) {
-			npc_addeventtimer(ev->nd,tick,event);
-		} else {
-			npc_deleventtimer(ev->nd,event);
-		}
-	}
-	return 0;
-}
-int npc_do_ontimer(int npc_id, struct map_session_data *sd, int option)
-{
-	strdb_foreach(ev_db,npc_do_ontimer_sub,&npc_id,sd,option);
-	return 0;
-}
-/*==========================================
- * �^�C�}�[�C�x���g�p���x���̎�荞��
- * npc_parse_script->strdb_foreach����Ă΂��
- *------------------------------------------
- */
-int npc_timerevent_import(void *key,void *data,va_list ap)
-{
-	char *lname=(char *)key;
-	int pos=(int)data;
-	struct npc_data *nd=va_arg(ap,struct npc_data *);
-	int t=0,i=0;
-	
-	if(sscanf(lname,"OnTimer%d%n",&t,&i)==1 && lname[i]==':') {
-		// �^�C�}�[�C�x���g
-		struct npc_timerevent_list *te=nd->u.scr.timer_event;
-		int j,i=nd->u.scr.timeramount;
-		if(te==NULL) te=malloc(sizeof(struct npc_timerevent_list));
-		else te=realloc( te, sizeof(struct npc_timerevent_list) * (i+1) );
-		if(te==NULL){
-			printf("npc_timerevent_import: out of memory !\n");
-			exit(1);
-		}
-		for(j=0;j<i;j++){
-			if(te[j].timer>t){
-				memmove(te+j+1,te+j,sizeof(struct npc_timerevent_list)*(i-j));
-				break;
-			}
-		}
-		te[j].timer=t;
-		te[j].pos=pos;
-		nd->u.scr.timer_event=te;
-		nd->u.scr.timeramount=i+1;
-	}
-	return 0;
-}
-/*==========================================
- * �^�C�}�[�C�x���g���s
- *------------------------------------------
- */
-int npc_timerevent(int tid,unsigned int tick,int id,int data)
-{
-	int next,t;
-	struct npc_data* nd=(struct npc_data *)map_id2bl(id);
-	struct npc_timerevent_list *te;
-	if( nd==NULL || nd->u.scr.nexttimer<0 ){
-		printf("npc_timerevent: ??\n");
-		return 0;
-	}
-	nd->u.scr.timertick=tick;
-	te=nd->u.scr.timer_event+ nd->u.scr.nexttimer;
-	nd->u.scr.timerid = -1;
-	
-	t = nd->u.scr.timer+=data;
-	nd->u.scr.nexttimer++;
-	if( nd->u.scr.timeramount>nd->u.scr.nexttimer ){
-		next= nd->u.scr.timer_event[ nd->u.scr.nexttimer ].timer - t;
-		nd->u.scr.timerid = add_timer(tick+next,npc_timerevent,id,next);
-	}
-
-	run_script(nd->u.scr.script,te->pos,0,nd->bl.id);
-	return 0;
-}
-/*==========================================
- * �^�C�}�[�C�x���g�J�n
- *------------------------------------------
- */
-int npc_timerevent_start(struct npc_data *nd)
-{
-	int j,n, next;
-
-	nullpo_retr(0, nd);
-
-	n=nd->u.scr.timeramount;
-	if( nd->u.scr.nexttimer>=0 || n==0 )
-		return 0;
-	
-	for(j=0;j<n;j++){
-		if( nd->u.scr.timer_event[j].timer > nd->u.scr.timer )
-			break;
-	}
-	nd->u.scr.nexttimer=j;
-	nd->u.scr.timertick=gettick();
-
-	if(j>=n)
-		return 0;
-	
-	next = nd->u.scr.timer_event[j].timer - nd->u.scr.timer;
-	nd->u.scr.timerid = add_timer(gettick()+next,npc_timerevent,nd->bl.id,next);
-	return 0;
-}
-/*==========================================
- * �^�C�}�[�C�x���g�I��
- *------------------------------------------
- */
-int npc_timerevent_stop(struct npc_data *nd)
-{
-	nullpo_retr(0, nd);
-
-	if( nd->u.scr.nexttimer>=0 ){
-		nd->u.scr.nexttimer = -1;
-		nd->u.scr.timer += (int)(gettick() - nd->u.scr.timertick);
-		if(nd->u.scr.timerid!=-1)
-			delete_timer(nd->u.scr.timerid,npc_timerevent);
-		nd->u.scr.timerid = -1;
-	}
-	return 0;
-}
-/*==========================================
- * �^�C�}�[�l�̏���
- *------------------------------------------
- */
-int npc_gettimerevent_tick(struct npc_data *nd)
-{
-	int tick;
-
-	nullpo_retr(0, nd);
-
-	tick=nd->u.scr.timer;
-
-	if( nd->u.scr.nexttimer>=0 )
-		tick += (int)(gettick() - nd->u.scr.timertick);
-	return tick;
-}
-/*==========================================
- * �^�C�}�[�l�̐ݒ�
- *------------------------------------------
- */
-int npc_settimerevent_tick(struct npc_data *nd,int newtimer)
-{
-	int flag;
-
-	nullpo_retr(0, nd);
-
-	flag= nd->u.scr.nexttimer;
-
-	npc_timerevent_stop(nd);
-	nd->u.scr.timer=newtimer;
-	if(flag>=0)
-		npc_timerevent_start(nd);
-	return 0;
-}
-
-/*==========================================
- * �C�x���g�^��NPC����
- *------------------------------------------
- */
-int npc_event(struct map_session_data *sd,const char *eventname,int mob_kill)
-{
-	struct event_data *ev=strdb_search(ev_db,eventname);
-	struct npc_data *nd;
-	int xs,ys;
-	char mobevent[100];
-
-	if( sd == NULL ){
-		printf("npc_event nullpo?\n");
-	}
-
-	if(ev==NULL && eventname && strcmp(((eventname)+strlen(eventname)-9),"::OnTouch") == 0)
-	return 1;
-
-	if(ev==NULL || (nd=ev->nd)==NULL){
-		if(mob_kill && (ev==NULL || (nd=ev->nd)==NULL)){
-			strcpy( mobevent, eventname);
-			strcat( mobevent, "::OnMyMobDead");
-			ev=strdb_search(ev_db,mobevent);
-	if (ev==NULL || (nd=ev->nd)==NULL) {
-				if (strncasecmp(eventname,"GM_MONSTER",10)!=0)
-					printf("npc_event: event not found [%s]\n",mobevent);
-				return 0;
-			}
-		}
-		else {
-			if(battle_config.error_log)
-				printf("npc_event: event not found [%s]\n",eventname);
-			return 0;
-		}
-	}
-
-	xs=nd->u.scr.xs;
-	ys=nd->u.scr.ys;
-	if (xs>=0 && ys>=0 ) {
-		if (nd->bl.m != sd->bl.m )
-			return 1;
-		if ( xs>0 && (sd->bl.x<nd->bl.x-xs/2 || nd->bl.x+xs/2<sd->bl.x) )
-			return 1;
-		if ( ys>0 && (sd->bl.y<nd->bl.y-ys/2 || nd->bl.y+ys/2<sd->bl.y) )
-			return 1;
-	}
-
-	if ( sd->npc_id!=0) {
-//		if (battle_config.error_log)
-//			printf("npc_event: npc_id != 0\n");
-		int i;
-		for(i=0;i<MAX_EVENTQUEUE;i++)
-			if (!sd->eventqueue[i][0])
-				break;
-		if (i==MAX_EVENTQUEUE) {
-			if (battle_config.error_log)
-				printf("npc_event: event queue is full !\n");
-		}else{
-//			if (battle_config.etc_log)
-//				printf("npc_event: enqueue\n");
-			memcpy(sd->eventqueue[i],eventname,50);
-		}
-		return 1;
-	}
-	if (nd->flag&1) {	// �������������
-		npc_event_dequeue(sd);
-		return 0;
-	}
-	
-	sd->npc_id=nd->bl.id;
-	sd->npc_pos=run_script(nd->u.scr.script,ev->pos,sd->bl.id,nd->bl.id);
-	return 0;
-}
-
-
-int npc_command_sub(void *key,void *data,va_list ap)
-{
-	char *p=(char *)key;
-	struct event_data *ev=(struct event_data *)data;
-	char *npcname=va_arg(ap,char *);
-	char *command=va_arg(ap,char *);
-	char temp[100];
-
-	if(strcmp(ev->nd->name,npcname)==0 && (p=strchr(p,':')) && p && strncasecmp("::OnCommand",p,10)==0 ){
-		sscanf(&p[11],"%s",temp);
-
-		if (strcmp(command,temp)==0)
-			run_script(ev->nd->u.scr.script,ev->pos,0,ev->nd->bl.id);
-	}
-	
-	return 0;
-}
-
-int npc_command(struct map_session_data *sd,char *npcname,char *command)
-{
-	strdb_foreach(ev_db,npc_command_sub,npcname,command);
-
-	return 0;
-}
-/*==========================================
- * �ڐG�^��NPC����
- *------------------------------------------
- */
-int npc_touch_areanpc(struct map_session_data *sd,int m,int x,int y)
-{
-	int i,f=1;
-	int xs,ys;
-
-	nullpo_retr(1, sd);
-
-	if(sd->npc_id)
-		return 1;
-
-	for(i=0;i<map[m].npc_num;i++) {
-		if (map[m].npc[i]->flag&1) {	// �������������
-			f=0;
-			continue;
-		}
-	
-		switch(map[m].npc[i]->bl.subtype) {
-		case WARP:
-			xs=map[m].npc[i]->u.warp.xs;
-			ys=map[m].npc[i]->u.warp.ys;
-			break;
-		case SCRIPT:
-			xs=map[m].npc[i]->u.scr.xs;
-			ys=map[m].npc[i]->u.scr.ys;
-			break;
-		default:
-			continue;
-		}
-		if (x >= map[m].npc[i]->bl.x-xs/2 && x < map[m].npc[i]->bl.x-xs/2+xs &&
-		   y >= map[m].npc[i]->bl.y-ys/2 && y < map[m].npc[i]->bl.y-ys/2+ys)
-			break;
-	}
-	if (i==map[m].npc_num) {
-		if (f) {
-			if (battle_config.error_log)
-				printf("npc_touch_areanpc : some bug \n");
-		}
-		return 1;
-	}
-	switch(map[m].npc[i]->bl.subtype) {
-	case WARP:
-		skill_stop_dancing(&sd->bl,0);
-		pc_setpos(sd,map[m].npc[i]->u.warp.name,map[m].npc[i]->u.warp.x,map[m].npc[i]->u.warp.y,0);
-		break;
-	case SCRIPT:
-		{
-			char *name=(char *)aCalloc(50,sizeof(char));
-
-			memcpy(name,map[m].npc[i]->name,50);
-			if(sd->areanpc_id==map[m].npc[i]->bl.id)
-				return 1;
-			sd->areanpc_id=map[m].npc[i]->bl.id;
-			if(npc_event(sd,strcat(name,"::OnTouch"),0)>0)
-				npc_click(sd,map[m].npc[i]->bl.id);
-			free(name);
-			break;
-		}
-	}
-	return 0;
-}
-
-/*==========================================
- * �߂����ǂ����̔���
- *------------------------------------------
- */
-int npc_checknear(struct map_session_data *sd,int id)
-{
-	struct npc_data *nd;
-
-	nullpo_retr(0, sd);
-
-	nd=(struct npc_data *)map_id2bl(id);
-	if (nd==NULL || nd->bl.type!=BL_NPC) {
-		if (battle_config.error_log)
-			printf("no such npc : %d\n",id);
-		return 1;
-	}
-	
-	if (nd->class<0)	// �C�x���g�n�͏��OK
-		return 0;
-
-	// �G���A����
-	if (nd->bl.m!=sd->bl.m ||
-	   nd->bl.x<sd->bl.x-AREA_SIZE-1 || nd->bl.x>sd->bl.x+AREA_SIZE+1 ||
-	   nd->bl.y<sd->bl.y-AREA_SIZE-1 || nd->bl.y>sd->bl.y+AREA_SIZE+1)
-		return 1;
-
-	return 0;
-}
-
-/*==========================================
- * �N���b�N����NPC����
- *------------------------------------------
- */
-int npc_click(struct map_session_data *sd,int id)
-{
-	struct npc_data *nd;
-
-	nullpo_retr(1, sd);
-
-	if (sd->npc_id != 0) {
-		if (battle_config.error_log)
-			printf("npc_click: npc_id != 0\n");
-		return 1;
-	}
-
-	if (npc_checknear(sd,id))
-		return 1;
-
-	nd=(struct npc_data *)map_id2bl(id);
-
-	if (nd->flag&1)	// �������������
-		return 1;
-
-	sd->npc_id=id;
-	switch(nd->bl.subtype) {
-	case SHOP:
-		clif_npcbuysell(sd,id);
-		npc_event_dequeue(sd);
-		break;
-	case SCRIPT:
-		sd->npc_pos=run_script(nd->u.scr.script,0,sd->bl.id,id);
-		break;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int npc_scriptcont(struct map_session_data *sd,int id)
-{
-	struct npc_data *nd;
-
-	nullpo_retr(1, sd);
-
-	if (id!=sd->npc_id)
-		return 1;
-	if (npc_checknear(sd,id))
-		return 1;
-
-	nd=(struct npc_data *)map_id2bl(id);
-
-	sd->npc_pos=run_script(nd->u.scr.script,sd->npc_pos,sd->bl.id,id);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int npc_buysellsel(struct map_session_data *sd,int id,int type)
-{
-	struct npc_data *nd;
-
-	nullpo_retr(1, sd);
-
-	if (npc_checknear(sd,id))
-		return 1;
-
-	nd=(struct npc_data *)map_id2bl(id);
-	if (nd->bl.subtype!=SHOP) {
-		if (battle_config.error_log)
-			printf("no such shop npc : %d\n",id);
-		sd->npc_id=0;
-		return 1;
-	}
-	if (nd->flag&1)	// �������������
-		return 1;
-
-	sd->npc_shopid=id;
-	if (type==0) {
-		clif_buylist(sd,nd);
-	} else {
-		clif_selllist(sd);
-	}
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int npc_buylist(struct map_session_data *sd,int n,unsigned short *item_list)
-{
-	struct npc_data *nd;
-	double z;
-	int i,j,w,skill,itemamount=0,new=0;
-
-	nullpo_retr(3, sd);
-	nullpo_retr(3, item_list);
-
-	if (npc_checknear(sd,sd->npc_shopid))
-		return 3;
-
-	nd=(struct npc_data*)map_id2bl(sd->npc_shopid);
-	if (nd->bl.subtype!=SHOP)
-		return 3;
-
-	for(i=0,w=0,z=0;i<n;i++) {
-		for(j=0;nd->u.shop_item[j].nameid;j++) {
-			if (nd->u.shop_item[j].nameid==item_list[i*2+1])
-				break;
-		}
-		if (nd->u.shop_item[j].nameid==0)
-			return 3;
-
-		if (itemdb_value_notdc(nd->u.shop_item[j].nameid))
-			z+=(double)nd->u.shop_item[j].value * item_list[i*2];
-		else
-			z+=(double)pc_modifybuyvalue(sd,nd->u.shop_item[j].value) * item_list[i*2];
-		itemamount+=item_list[i*2];
-
-		switch(pc_checkadditem(sd,item_list[i*2+1],item_list[i*2])) {
-		case ADDITEM_EXIST:
-			break;
-		case ADDITEM_NEW:
-			new++;
-			break;
-		case ADDITEM_OVERAMOUNT:
-			return 2;
-		}
-
-		w+=itemdb_weight(item_list[i*2+1]) * item_list[i*2];
-	}
-	if (z > (double)sd->status.zeny)
-		return 1;	// zeny�s��
-	if (w+sd->weight > sd->max_weight)
-		return 2;	// �d�ʒ���
-	if (pc_inventoryblank(sd)<new)
-		return 3;	// ��ސ�����
-
-	pc_payzeny(sd,(int)z);
-	for(i=0;i<n;i++) {
-		struct item item_tmp;
-
-		memset(&item_tmp,0,sizeof(item_tmp));
-		item_tmp.nameid = item_list[i*2+1];
-		item_tmp.identify = 1;	// npc�̔��A�C�e���͊Ӓ�ς�
-
-		pc_additem(sd,&item_tmp,item_list[i*2]);
-	}
-
-	//���l�o���l
-/*	if ((sd->status.class == 5) || (sd->status.class == 10) || (sd->status.class == 18)) {
-		z = z * pc_checkskill(sd,MC_DISCOUNT) / ((1 + 300 / itemamount) * 4000) * battle_config.shop_exp;
-		pc_gainexp(sd,0,z);
-	}*/
-	if (battle_config.shop_exp > 0 && z > 0 && (skill = pc_checkskill(sd,MC_DISCOUNT)) > 0) {
-		if (sd->status.skill[MC_DISCOUNT].flag != 0)
-			skill = sd->status.skill[MC_DISCOUNT].flag - 2;
-		if (skill > 0) {
-			z = (log(z * (double)skill) * (double)battle_config.shop_exp/100.);
-			if (z < 1)
-				z = 1;
-			pc_gainexp(sd,0,(int)z);
-		}
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int npc_selllist(struct map_session_data *sd,int n,unsigned short *item_list)
-{
-	double z;
-	int i,skill,itemamount=0;
-
-	nullpo_retr(1, sd);
-	nullpo_retr(1, item_list);
-
-	if (npc_checknear(sd,sd->npc_shopid))
-		return 1;
-	for(i=0,z=0;i<n;i++) {
-		int nameid;
-		if (item_list[i*2]-2 <0 || item_list[i*2]-2 >=MAX_INVENTORY)
-			return 1;
-		nameid=sd->status.inventory[item_list[i*2]-2].nameid;
-		if (nameid == 0 ||
-		   sd->status.inventory[item_list[i*2]-2].amount < item_list[i*2+1])
-			return 1;
-		if (itemdb_value_notoc(nameid))
-			z+=(double)itemdb_value_sell(nameid) * item_list[i*2+1];
-		else
-			z+=(double)pc_modifysellvalue(sd,itemdb_value_sell(nameid)) * item_list[i*2+1];
-		itemamount+=item_list[i*2+1];
-	}
-
-	if (z > MAX_ZENY) z = MAX_ZENY;
-	pc_getzeny(sd,(int)z);
-	for(i=0;i<n;i++) {
-		int item_id=item_list[i*2]-2;
-		if(	sd->status.inventory[item_id].nameid>0 && sd->inventory_data[item_id] != NULL &&
-			sd->inventory_data[item_id]->type==7 && sd->status.inventory[item_id].amount>0 &&
-			sd->status.inventory[item_id].card[0] == (short)0xff00)
-				if(search_petDB_index(sd->status.inventory[item_id].nameid, PET_EGG) >= 0)
-					intif_delete_petdata((*(long *)(&sd->status.inventory[item_id].card[1])));
-		pc_delitem(sd,item_id,item_list[i*2+1],0);
-	}
-
-	//���l�o���l
-/*	if ((sd->status.class == 5) || (sd->status.class == 10) || (sd->status.class == 18)) {
-		z = z * pc_checkskill(sd,MC_OVERCHARGE) / ((1 + 500 / itemamount) * 4000) * battle_config.shop_exp ;
-		pc_gainexp(sd,0,z);
-	}*/
-	if (battle_config.shop_exp > 0 && z > 0 && (skill = pc_checkskill(sd,MC_OVERCHARGE)) > 0) {
-		if (sd->status.skill[MC_OVERCHARGE].flag != 0)
-			skill = sd->status.skill[MC_OVERCHARGE].flag - 2;
-		if (skill > 0) {
-			z = (log(z * (double)skill) * (double)battle_config.shop_exp/100.);
-			if (z < 1)
-				z = 1;
-			pc_gainexp(sd,0,(int)z);
-		}
-	}
-
-	return 0;
-
-}
-
-//
-// �������֌W
-//
-
-/*==========================================
- * �ǂݍ���npc�t�@�C���̃N���A
- *------------------------------------------
- */
-void npc_clearsrcfile()
-{
-	struct npc_src_list *p=npc_src_first;
-
-	while( p ) {
-		struct npc_src_list *p2=p;
-		p=p->next;
-		free(p2);
-	}
-	npc_src_first=NULL;
-	npc_src_last=NULL;
-}
-/*==========================================
- * �ǂݍ���npc�t�@�C���̒lj�
- *------------------------------------------
- */
-void npc_addsrcfile(char *name)
-{
-	struct npc_src_list *new;
-	size_t len;
-
-	if ( strcmpi(name,"clear")==0 ) {
-		npc_clearsrcfile();
-		return;
-	}
-
-	len = sizeof(*new) + strlen(name);
-	new=(struct npc_src_list *)aCalloc(1,len);
-	new->next = NULL;
-	strncpy(new->name,name,strlen(name)+1);
-	if (npc_src_first==NULL)
-		npc_src_first = new;
-	if (npc_src_last)
-		npc_src_last->next = new;
-
-	npc_src_last=new;
-}
-/*==========================================
- * �ǂݍ���npc�t�@�C���̍폜
- *------------------------------------------
- */
-void npc_delsrcfile(char *name)
-{
-	struct npc_src_list *p=npc_src_first,*pp=NULL,**lp=&npc_src_first;
-
-	if ( strcmpi(name,"all")==0 ) {
-		npc_clearsrcfile();
-		return;
-	}
-
-	for( ; p; lp=&p->next,pp=p,p=p->next ) {
-		if ( strcmp(p->name,name)==0 ) {
-			*lp=p->next;
-			if ( npc_src_last==p )
-				npc_src_last=pp;
-			free(p);
-			break;
-		}
-	}
-}
-
-/*==========================================
- * warp�s���
- *------------------------------------------
- */
-int npc_parse_warp(char *w1,char *w2,char *w3,char *w4)
-{
-	int x,y,xs,ys,to_x,to_y,m;
-	int i,j;
-	char mapname[24],to_mapname[24];
-	struct npc_data *nd;
-
-	// �����̌��`�F�b�N
-	if (sscanf(w1,"%[^,],%d,%d",mapname,&x,&y) != 3 ||
-	   sscanf(w4,"%d,%d,%[^,],%d,%d",&xs,&ys,to_mapname,&to_x,&to_y) != 5) {
-		printf("bad warp line : %s\n",w3);
-		return 1;
-	}
-
-	m=map_mapname2mapid(mapname);
-
-	nd=(struct npc_data *)aCalloc(1,sizeof(struct npc_data));
-	nd->bl.id=npc_get_new_npc_id();
-	nd->n=map_addnpc(m,nd);
-
-	nd->bl.prev = nd->bl.next = NULL;
-	nd->bl.m=m;
-	nd->bl.x=x;
-	nd->bl.y=y;
-	nd->dir=0;
-	nd->flag=0;
-	memcpy(nd->name,w3,24);
-	memcpy(nd->exname,w3,24);
-
-	nd->chat_id=0;
-	if (!battle_config.warp_point_debug)
-		nd->class=WARP_CLASS;
-	else
-		nd->class=WARP_DEBUG_CLASS;
-	nd->speed=200;
-	nd->option = 0;
-	nd->opt1 = 0;
-	nd->opt2 = 0;
-	nd->opt3 = 0;
-	memcpy(nd->u.warp.name,to_mapname,16);
-	xs+=2; ys+=2;
-	nd->u.warp.x=to_x;
-	nd->u.warp.y=to_y;
-	nd->u.warp.xs=xs;
-	nd->u.warp.ys=ys;
-
-	for(i=0;i<ys;i++) {
-		for(j=0;j<xs;j++) {
-			int t;
-			t=map_getcell(m,x-xs/2+j,y-ys/2+i);
-			if (t==1 || t==5)
-				continue;
-			map_setcell(m,x-xs/2+j,y-ys/2+i,t|0x80);
-		}
-	}
-
-//	printf("warp npc %s %d read done\n",mapname,nd->bl.id);
-	npc_warp++;
-	nd->bl.type=BL_NPC;
-	nd->bl.subtype=WARP;
-	map_addblock(&nd->bl);
-	clif_spawnnpc(nd);
-	strdb_insert(npcname_db,nd->name,nd);
-
-	return 0;
-}
-
-/*==========================================
- * shop�s���
- *------------------------------------------
- */
-static int npc_parse_shop(char *w1,char *w2,char *w3,char *w4)
-{
-	char *p;
-	int x, y, dir, m;
-	int max = 100, pos = 0;
-	char mapname[24];
-	struct npc_data *nd;
-
-	// �����̌��`�F�b�N
-	if (sscanf(w1, "%[^,],%d,%d,%d", mapname, &x, &y, &dir) != 4 ||
-	    strchr(w4, ',') == NULL) {
-		printf("bad shop line : %s\n", w3);
-		return 1;
-	}
-	m = map_mapname2mapid(mapname);
-
-	nd = (struct npc_data *)aCalloc(1,sizeof(struct npc_data) +
-		sizeof(nd->u.shop_item[0]) * (max + 1));
-	p = strchr(w4, ',');
-
-	while (p && pos < max) {
-		int nameid,value;
-		p++;
-		if (sscanf(p, "%d:%d", &nameid, &value) != 2)
-			break;
-		nd->u.shop_item[pos].nameid = nameid;
-		if (value < 0) {
-			struct item_data *id = itemdb_search(nameid);
-			value = id->value_buy;
-		}
-		nd->u.shop_item[pos].value = value;
-		pos++;
-		p=strchr(p,',');
-	}
-	if (pos == 0) {
-		free(nd);
-		return 1;
-	}
-	nd->u.shop_item[pos++].nameid = 0;
-
-	nd->bl.prev = nd->bl.next = NULL;
-	nd->bl.m = m;
-	nd->bl.x = x;
-	nd->bl.y = y;
-	nd->bl.id = npc_get_new_npc_id();
-	nd->dir = dir;
-	nd->flag = 0;
-	memcpy(nd->name, w3, 24);
-	nd->class = atoi(w4);
-	nd->speed = 200;
-	nd->chat_id = 0;
-	nd->option = 0;
-	nd->opt1 = 0;
-	nd->opt2 = 0;
-	nd->opt3 = 0;
-	
-	nd = (struct npc_data *)aRealloc(nd,
-		sizeof(struct npc_data) + sizeof(nd->u.shop_item[0]) * pos);
-
-	//printf("shop npc %s %d read done\n",mapname,nd->bl.id);
-	npc_shop++;
-	nd->bl.type=BL_NPC;
-	nd->bl.subtype=SHOP;
-	nd->n=map_addnpc(m,nd);
-	map_addblock(&nd->bl);
-	clif_spawnnpc(nd);
-	strdb_insert(npcname_db,nd->name,nd);
-
-	return 0;
-}
-/*==========================================
- * NPC�̃��x���f�[�^�R���o�[�g
- *------------------------------------------
- */
-int npc_convertlabel_db(void *key,void *data,va_list ap)
-{
-	char *lname=(char *)key;
-	int pos=(int)data;
-	struct npc_data *nd;
-	struct npc_label_list *lst;
-	int num;
-	char *p=strchr(lname,':');
-	
-	nullpo_retr(0, ap);
-	nullpo_retr(0, nd=va_arg(ap,struct npc_data *));
-
-	lst=nd->u.scr.label_list;
-	num=nd->u.scr.label_list_num;
-	if(!lst){
-		lst=(struct npc_label_list *)aCalloc(1,sizeof(struct npc_label_list));
-		num=0;
-	}else
-		lst=(struct npc_label_list *)aRealloc(lst,sizeof(struct npc_label_list)*(num+1));
-
-	*p='\0';
-	strncpy(lst[num].name,lname,24);
-	*p=':';
-	lst[num].pos=pos;
-	nd->u.scr.label_list=lst;
-	nd->u.scr.label_list_num=num+1;
-	return 0;
-}
-/*==========================================
- * script�s���
- *------------------------------------------
- */
-static int npc_parse_script(char *w1,char *w2,char *w3,char *w4,char *first_line,FILE *fp,int *lines)
-{
-	int x,y,dir=0,m,xs=0,ys=0,class=0;	// [Valaris] thanks to fov
-	char mapname[24];
-	unsigned char *srcbuf=NULL,*script;
-	int srcsize=65536;
-	int startline=0;
-	unsigned char line[1024];
-	int i;
-	struct npc_data *nd;
-	int evflag=0;
-	struct dbt *label_db;
-	char *p;
-	struct npc_label_list *label_dup=NULL;
-	int label_dupnum=0;
-	int src_id=0;
-
-	if(strcmp(w1,"-")==0){
-		x=0;y=0;m=-1;
-	}else{
-	// �����̌��`�F�b�N
-	if (sscanf(w1,"%[^,],%d,%d,%d",mapname,&x,&y,&dir) != 4 ||
-		   ( strcmp(w2,"script")==0 && strchr(w4,',')==NULL) ) {
-		printf("bad script line : %s\n",w3);
-		return 1;
-	}
-	m = map_mapname2mapid(mapname);
-	}
-
-	if(strcmp(w2,"script")==0){
-		// �X�N���v�g�̉��
-		srcbuf=(char *)aCalloc(srcsize,sizeof(char));
-	if (strchr(first_line,'{')) {
-		strcpy(srcbuf,strchr(first_line,'{'));
-		startline=*lines;
-	} else
-		srcbuf[0]=0;
-	while(1) {
-		for(i=strlen(srcbuf)-1;i>=0 && isspace(srcbuf[i]);i--);
-		if (i>=0 && srcbuf[i]=='}')
-			break;
-		fgets(line,1020,fp);
-		(*lines)++;
-		if (feof(fp))
-			break;
-		if (strlen(srcbuf)+strlen(line)+1>=srcsize) {
-			srcsize += 65536;
-				srcbuf = (char *)aRealloc(srcbuf, srcsize);
-			memset(srcbuf + srcsize - 65536, '\0', 65536);
-		}
-		if (srcbuf[0]!='{') {
-			if (strchr(line,'{')) {
-				strcpy(srcbuf,strchr(line,'{'));
-				startline=*lines;
-			}
-		} else
-			strcat(srcbuf,line);
-	}
-	script=parse_script(srcbuf,startline);
-	if (script==NULL) {
-		// script parse error?
-		free(srcbuf);
-		return 1;
-	}
-
-	}else{
-		// duplicate����
-		
-		char srcname[128];
-		struct npc_data *nd2;
-		if( sscanf(w2,"duplicate(%[^)])",srcname)!=1 ){
-			printf("bad duplicate name! : %s",w2);
-			return 0;
-		}
-		if( (nd2=npc_name2id(srcname))==NULL ){
-			printf("bad duplicate name! (not exist) : %s\n",srcname);
-			return 0;
-		}
-		script=nd2->u.scr.script;
-		label_dup=nd2->u.scr.label_list;
-		label_dupnum=nd2->u.scr.label_list_num;
-		src_id=nd2->bl.id;
-	
-	}// end of �X�N���v�g���
-
-	nd=(struct npc_data *)aCalloc(1,sizeof(struct npc_data));
-
-	if(m==-1){
-		// �X�N���v�g�R�s�[�p�̃_�~�[NPC
-		
-	}else if( sscanf(w4,"%d,%d,%d",&class,&xs,&ys)==3) {
-		// �ڐG�^NPC
-		int i,j;
-		
-		if (xs>=0)xs=xs*2+1;
-		if (ys>=0)ys=ys*2+1;
-		
-		if (class>=0) {
-
-			for(i=0;i<ys;i++) {
-				for(j=0;j<xs;j++) {
-					int t;
-					t=map_getcell(m,x-xs/2+j,y-ys/2+i);
-					if (t==1 || t==5)
-						continue;
-					map_setcell(m,x-xs/2+j,y-ys/2+i,t|0x80);
-				}
-			}
-		}
-		
-		nd->u.scr.xs=xs;
-		nd->u.scr.ys=ys;
-	} else {	// �N���b�N�^NPC
-		class=atoi(w4);
-		nd->u.scr.xs=0;
-		nd->u.scr.ys=0;
-	}
-	
-	if (class<0 && m>=0) {	// �C�x���g�^NPC
-		evflag=1;
-	}
-
-	while((p=strchr(w3,':'))) {
-		if (p[1]==':') break;
-	}
-	if (p) {
-		*p=0;
-		memcpy(nd->name,w3,24);
-		memcpy(nd->exname,p+2,24);
-	}else{
-		memcpy(nd->name,w3,24);
-		memcpy(nd->exname,w3,24);
-	}
-
-	nd->bl.prev = nd->bl.next = NULL;
-	nd->bl.m = m;
-	nd->bl.x = x;
-	nd->bl.y = y;
-	nd->bl.id=npc_get_new_npc_id();
-	nd->dir = dir;
-	nd->flag=0;
-	nd->class=class;
-	nd->speed=200;
-	nd->u.scr.script=script;
-	nd->u.scr.src_id=src_id;
-	nd->chat_id=0;
-	nd->option = 0;
-	nd->opt1 = 0;
-	nd->opt2 = 0;
-	nd->opt3 = 0;
-
-	//printf("script npc %s %d %d read done\n",mapname,nd->bl.id,nd->class);
-	npc_script++;
-	nd->bl.type=BL_NPC;
-	nd->bl.subtype=SCRIPT;
-	if(m>=0){
-	nd->n=map_addnpc(m,nd);
-	map_addblock(&nd->bl);
-
-	if (evflag) {	// �C�x���g�^
-			struct event_data *ev=(struct event_data *)aCalloc(1,sizeof(struct event_data));
-			ev->nd=nd;
-			ev->pos=0;
-			strdb_insert(ev_db,nd->exname,ev);
-		}else
-		clif_spawnnpc(nd);
-	}
-	strdb_insert(npcname_db,nd->exname,nd);
-
-
-	//-----------------------------------------
-	// ���x���f�[�^�̏���	
-	if(srcbuf){
-		// script�{�̂�����ꍇ�̏���
-		
-		// ���x���f�[�^�̃R���o�[�g
-	label_db=script_get_label_db();
-		strdb_foreach(label_db,npc_convertlabel_db,nd);
-	
-		// �����g��Ȃ��̂Ńo�b�t�@���
-		free(srcbuf);
-
-	}else{
-		// duplicate
-
-//		nd->u.scr.label_list=malloc(sizeof(struct npc_label_list)*label_dupnum);
-//		memcpy(nd->u.scr.label_list,label_dup,sizeof(struct npc_label_list)*label_dupnum);
-
-		nd->u.scr.label_list=label_dup;	// ���x���f�[�^���L
-		nd->u.scr.label_list_num=label_dupnum;
-	}
-
-	//-----------------------------------------
-	// �C�x���g�p���x���f�[�^�̃G�N�X�|�[�g
-	for(i=0;i<nd->u.scr.label_list_num;i++){
-		char *lname=nd->u.scr.label_list[i].name;
-		int pos=nd->u.scr.label_list[i].pos;
-	
-		if ((lname[0]=='O' || lname[0]=='o')&&(lname[1]=='N' || lname[1]=='n')) {
-			struct event_data *ev;
-			char *buf;
-			// �G�N�X�|�[�g�����
-			ev=(struct event_data *)aCalloc(1,sizeof(struct event_data));
-			buf=(char *)aCalloc(50,sizeof(char));
-			if (strlen(lname)>24) {
-				printf("npc_parse_script: label name error !\n");
-				exit(1);
-			}else{
-				ev->nd=nd;
-				ev->pos=pos;
-				sprintf(buf,"%s::%s",nd->exname,lname);
-				strdb_insert(ev_db,buf,ev);
-			}
-		}
-	}
-	
-	//-----------------------------------------
-	// ���x���f�[�^����^�C�}�[�C�x���g��荞��
-	for(i=0;i<nd->u.scr.label_list_num;i++){
-		int t=0,k=0;
-		char *lname=nd->u.scr.label_list[i].name;
-		int pos=nd->u.scr.label_list[i].pos;
-		if(sscanf(lname,"OnTimer%d%n",&t,&k)==1 && lname[k]=='\0') {
-			// �^�C�}�[�C�x���g
-			struct npc_timerevent_list *te=nd->u.scr.timer_event;
-			int j,k=nd->u.scr.timeramount;
-			if(te==NULL)
-				te=(struct npc_timerevent_list *)aCalloc(1,sizeof(struct npc_timerevent_list));
-			else
-				te=(struct npc_timerevent_list *)aRealloc( te, sizeof(struct npc_timerevent_list) * (k+1) );
-			for(j=0;j<k;j++){
-				if(te[j].timer>t){
-					memmove(te+j+1,te+j,sizeof(struct npc_timerevent_list)*(k-j));
-					break;
-				}
-			}
-			te[j].timer=t;
-			te[j].pos=pos;
-			nd->u.scr.timer_event=te;
-			nd->u.scr.timeramount=k+1;
-		}
-	}
-	nd->u.scr.nexttimer=-1;
-	nd->u.scr.timerid=-1;
-
-	
-	return 0;
-}
-
-/*==========================================
- * function�s���
- *------------------------------------------
- */
-static int npc_parse_function(char *w1,char *w2,char *w3,char *w4,char *first_line,FILE *fp,int *lines)
-{
-	char *srcbuf=NULL,*script;
-	int srcsize=65536;
-	int startline=0;
-	char line[1024];
-	int i;
-//	struct dbt *label_db;
-	char *p;
-
-	// �X�N���v�g�̉��
-	srcbuf=(char *)aCalloc(srcsize,sizeof(char));
-	if (strchr(first_line,'{')) {
-		strcpy(srcbuf,strchr(first_line,'{'));
-		startline=*lines;
-	} else
-		srcbuf[0]=0;
-	while(1) {
-		for(i=strlen(srcbuf)-1;i>=0 && isspace(srcbuf[i]);i--);
-		if (i>=0 && srcbuf[i]=='}')
-			break;
-		fgets(line,1020,fp);
-		(*lines)++;
-		if (feof(fp))
-			break;
-		if (strlen(srcbuf)+strlen(line)+1>=srcsize) {
-			srcsize += 65536;
-			srcbuf = (char *)aRealloc(srcbuf, srcsize);
-			memset(srcbuf + srcsize - 65536, '\0', 65536);
-		}
-		if (srcbuf[0]!='{') {
-			if (strchr(line,'{')) {
-				strcpy(srcbuf,strchr(line,'{'));
-				startline=*lines;
-			}
-		} else
-			strcat(srcbuf,line);
-	}
-	script=parse_script(srcbuf,startline);
-	if (script==NULL) {
-		// script parse error?
-		free(srcbuf);
-		return 1;
-	}
-
-	p=(char *)aCalloc(50,sizeof(char));
-
-	strncpy(p,w3,50);
-	strdb_insert(script_get_userfunc_db(),p,script);
-
-//	label_db=script_get_label_db();
-
-	// �����g��Ȃ��̂Ńo�b�t�@���
-	free(srcbuf);
-	
-//	printf("function %s => %p\n",p,script);
-	
-	return 0;
-}
-
-
-/*==========================================
- * mob�s���
- *------------------------------------------
- */
-int npc_parse_mob(char *w1,char *w2,char *w3,char *w4)
-{
-	int m,x,y,xs,ys,class,num,delay1,delay2;
-	int i;
-	char mapname[24];
-	char eventname[24]="";
-	struct mob_data *md;
-
-	xs=ys=0;
-	delay1=delay2=0;
-	// �����̌��`�F�b�N
-	if (sscanf(w1,"%[^,],%d,%d,%d,%d",mapname,&x,&y,&xs,&ys) < 3 ||
-	   sscanf(w4,"%d,%d,%d,%d,%s",&class,&num,&delay1,&delay2,eventname) < 2 ) {
-		printf("bad monster line : %s\n",w3);
-		return 1;
-	}
-
-	m=map_mapname2mapid(mapname);
-
-	if ( num>1 && battle_config.mob_count_rate!=100) {
-		if ( (num=num*battle_config.mob_count_rate/100)<1 )
-			num=1;
-	}
-
-	for(i=0;i<num;i++) {
-		md=(struct mob_data *)aCalloc(1,sizeof(struct mob_data));
-
-		md->bl.prev=NULL;
-		md->bl.next=NULL;
-		md->bl.m=m;
-		md->bl.x=x;
-		md->bl.y=y;
-		if(strcmp(w3,"--en--")==0)
-			memcpy(md->name,mob_db[class].name,24);
-		else if(strcmp(w3,"--ja--")==0)
-			memcpy(md->name,mob_db[class].jname,24);
-		else
-		memcpy(md->name,w3,24);
-
-		md->n = i;
-		md->base_class = md->class = class;
-		md->bl.id=npc_get_new_npc_id();
-		md->m =m;
-		md->x0=x;
-		md->y0=y;
-		md->xs=xs;
-		md->ys=ys;
-		md->spawndelay1=delay1;
-		md->spawndelay2=delay2;
-
-		memset(&md->state,0,sizeof(md->state));
-		md->timer = -1;
-		md->target_id=0;
-		md->attacked_id=0;
-		md->speed=mob_db[class].speed;
-
-		if (mob_db[class].mode&0x02)
-			md->lootitem=(struct item *)aCalloc(LOOTITEM_SIZE,sizeof(struct item));
-		else
-			md->lootitem=NULL;
-
-		if (strlen(eventname)>=4) {
-			memcpy(md->npc_event,eventname,24);
-		}else
-			memset(md->npc_event,0,24);
-
-		md->bl.type=BL_MOB;
-		map_addiddb(&md->bl);
-		mob_spawn(md->bl.id);
-
-		npc_mob++;
-	}
-	//printf("warp npc %s %d read done\n",mapname,nd->bl.id);
-
-	return 0;
-}
-
-/*==========================================
- * �}�b�v�t���O�s�̉��
- *------------------------------------------
- */
-static int npc_parse_mapflag(char *w1,char *w2,char *w3,char *w4)
-{
-	int m;
-	char mapname[24],savemap[16];
-	int savex,savey;
-	char drop_arg1[16],drop_arg2[16];
-	int drop_id=0,drop_type=0,drop_per=0;
-
-	// �����̌��`�F�b�N
-//	if (	sscanf(w1,"%[^,],%d,%d,%d",mapname,&x,&y,&dir) != 4 )
-	if (	sscanf(w1,"%[^,]",mapname) != 1 )
-		return 1;
-
-	m=map_mapname2mapid(mapname);
-	if (m<0)
-		return 1;
-
-//�}�b�v�t���O
-	if ( strcmpi(w3,"nosave")==0) {
-		if (strcmp(w4,"SavePoint")==0) {
-			memcpy(map[m].save.map,"SavePoint",16);
-			map[m].save.x=-1;
-			map[m].save.y=-1;
-		}else if (sscanf(w4,"%[^,],%d,%d",savemap,&savex,&savey)==3) {
-			memcpy(map[m].save.map,savemap,16);
-			map[m].save.x=savex;
-			map[m].save.y=savey;
-		}
-		map[m].flag.nosave=1;
-	}
-	else if (strcmpi(w3,"nomemo")==0) {
-		map[m].flag.nomemo=1;
-	}
-	else if (strcmpi(w3,"noteleport")==0) {
-		map[m].flag.noteleport=1;
-	}
-	else if (strcmpi(w3,"nowarp")==0) {
-		map[m].flag.nowarp=1;
-	}
-	else if (strcmpi(w3,"nowarpto")==0) {
-		map[m].flag.nowarpto=1;
-	}
-	else if (strcmpi(w3,"noreturn")==0) {
-		map[m].flag.noreturn=1;
-	}
-	else if (strcmpi(w3,"monster_noteleport")==0) {
-		map[m].flag.monster_noteleport=1;
-	}
-	else if (strcmpi(w3,"nobranch")==0) {
-		map[m].flag.nobranch=1;
-	}
-	else if (strcmpi(w3,"nopenalty")==0) {
-		map[m].flag.nopenalty=1;
-	}
-	else if (strcmpi(w3,"pvp")==0) {
-		map[m].flag.pvp=1;
-	}
-	else if (strcmpi(w3,"pvp_noparty")==0) {
-		map[m].flag.pvp_noparty=1;
-	}
-	else if (strcmpi(w3,"pvp_noguild")==0) {
-		map[m].flag.pvp_noguild=1;
-	}
-	else if (strcmpi(w3,"pvp_nightmaredrop")==0) {
-		if (sscanf(w4,"%[^,],%[^,],%d",drop_arg1,drop_arg2,&drop_per)==3) {		int i;
-			if(strcmp(drop_arg1,"random")==0)
-				drop_id = -1;
-			else if(itemdb_exists( (drop_id=atoi(drop_arg1)) )==NULL)
-				drop_id = 0;
-			if(strcmp(drop_arg2,"inventory")==0)
-				drop_type = 1;
-			else if(strcmp(drop_arg2,"equip")==0)
-				drop_type = 2;
-			else if(strcmp(drop_arg2,"all")==0)
-				drop_type = 3;
-
-			if(drop_id != 0){
-				for (i=0;i<MAX_DROP_PER_MAP;i++){
-					if(map[m].drop_list[i].drop_id==0){
-						map[m].drop_list[i].drop_id = drop_id;
-						map[m].drop_list[i].drop_type = drop_type;
-						map[m].drop_list[i].drop_per = drop_per;
-						break;
-					}
-				}
-				map[m].flag.pvp_nightmaredrop=1;
-			}
-		}
-	}
-	else if (strcmpi(w3,"pvp_nocalcrank")==0) {
-		map[m].flag.pvp_nocalcrank=1;
-	}
-	else if (strcmpi(w3,"gvg")==0) {
-		map[m].flag.gvg=1;
-	}
-	else if (strcmpi(w3,"gvg_noparty")==0) {
-		map[m].flag.gvg_noparty=1;
-	}
-	else if (strcmpi(w3,"nozenypenalty")==0) {
-		map[m].flag.nozenypenalty=1;
-	}
-	else if (strcmpi(w3,"notrade")==0) {
-		map[m].flag.notrade=1;
-	}
-	else if (strcmpi(w3,"noskill")==0) {
-		map[m].flag.noskill=1;
-	}
-	else if (battle_config.pk_mode && strcmpi(w3,"nopvp")==0) { // nopvp for pk mode [Valaris]
-		map[m].flag.nopvp=1;
-		map[m].flag.pvp=0;
-	}
-	else if (strcmpi(w3,"noicewall")==0) { // noicewall [Valaris]
-		map[m].flag.noicewall=1;
-	}	
-	else if (strcmpi(w3,"snow")==0) { // snow [Valaris]
-		map[m].flag.snow=1;
-	}	
-	else if (strcmpi(w3,"fog")==0) { // fog [Valaris]
-		map[m].flag.fog=1;
-	}	
-	else if (strcmpi(w3,"sakura")==0) { // sakura [Valaris]
-		map[m].flag.sakura=1;
-	}	
-	else if (strcmpi(w3,"leaves")==0) { // leaves [Valaris]
-		map[m].flag.leaves=1;
-	}	
-	else if (strcmpi(w3,"rain")==0) { // rain [Valaris]
-		map[m].flag.rain=1;
-	}	
-	
-	return 0;
-}
-
-static int ev_db_final(void *key,void *data,va_list ap)
-{
-	free(data);
-	if(strstr(key,"::")!=NULL)
-		free(key);
-	return 0;
-}
-static int npcname_db_final(void *key,void *data,va_list ap)
-{
-	return 0;
-}
-/*==========================================
- * �I��
- *------------------------------------------
- */
-int do_final_npc(void)
-{
-	int i;
-	struct block_list *bl;
-	struct npc_data *nd;
-	struct mob_data *md;
-	struct chat_data *cd;
-	struct pet_data *pd;
-
-	if(ev_db)
-		strdb_final(ev_db,ev_db_final);
-	if(npcname_db)
-		strdb_final(npcname_db,npcname_db_final);
-
-	for(i=START_NPC_NUM;i<npc_id;i++){
-		if((bl=map_id2bl(i))){
-			if(bl->type == BL_NPC && (nd = (struct npc_data *)bl)){
-				if(nd->chat_id && (cd=(struct chat_data*)map_id2bl(nd->chat_id))){
-					free(cd);
-					cd = NULL;
-				}
-				if(nd->bl.subtype == SCRIPT){
-					if(nd->u.scr.timer_event)
-						free(nd->u.scr.timer_event);
-				 	if(nd->u.scr.src_id==0){
-						if(nd->u.scr.script){
-							free(nd->u.scr.script);
-							nd->u.scr.script=NULL;
-						}
-						if(nd->u.scr.label_list){
-							free(nd->u.scr.label_list);
-							nd->u.scr.label_list = NULL;
-						}
-					}
-				}
-				free(nd);
-				nd = NULL;
-			}else if(bl->type == BL_MOB && (md = (struct mob_data *)bl)){
-				if(md->lootitem){
-					free(md->lootitem);
-					md->lootitem = NULL;
-				}
-				free(md);
-				md = NULL;
-			}else if(bl->type == BL_PET && (pd = (struct pet_data *)bl)){
-				free(pd);
-				pd = NULL;
-			}
-		}
-	}
-	
-	return 0;
-}
-
-
-void ev_release(struct dbn *db, int which) 
-{
-    if (which & 0x1)
-        free(db->key);
-    if (which & 0x2)
-        free(db->data);
-}
-
-/*==========================================
- * npc������
- *------------------------------------------
- */
-int do_init_npc(void)
-{
-	struct npc_src_list *nsl;
-	FILE *fp;
-	char line[1024];
-	int m,lines;
-
-	ev_db=strdb_init(24);
-	npcname_db=strdb_init(24);
-
-        ev_db->release = ev_release;
-	
-	memset(&ev_tm_b,-1,sizeof(ev_tm_b));
-
-	for(nsl=npc_src_first;nsl;nsl=nsl->next) {
-		if(nsl->prev){
-			free(nsl->prev);
-			nsl->prev = NULL;
-		}
-		fp=fopen(nsl->name,"r");
-		if (fp==NULL) {
-			printf("file not found : %s\n",nsl->name);
-			exit(1);
-		}
-		lines=0;
-		while(fgets(line,1020,fp)) {
-			char w1[1024],w2[1024],w3[1024],w4[1024],mapname[1024];
-			int i,j,w4pos,count;
-			lines++;
-
-			if (line[0] == '/' && line[1] == '/')
-				continue;
-			// �s�v�ȃX�y�[�X��^�u�̘A���͋l�߂�
-			for(i=j=0;line[i];i++) {
-				if (line[i]==' ') {
-					if (!((line[i+1] && (isspace(line[i+1]) || line[i+1]==',')) ||
-						 (j && line[j-1]==',')))
-						line[j++]=' ';
-				} else if (line[i]=='\t') {
-					if (!(j && line[j-1]=='\t'))
-						line[j++]='\t';
-				} else
- 					line[j++]=line[i];
-			}
-			// �ŏ��̓^�u��؂�Ń`�F�b�N���Ă݂āA�_���Ȃ�X�y�[�X��؂�Ŋm�F
-			if ((count=sscanf(line,"%[^\t]\t%[^\t]\t%[^\t\r\n]\t%n%[^\t\r\n]",w1,w2,w3,&w4pos,w4)) < 3 &&
-			   (count=sscanf(line,"%s%s%s%n%s",w1,w2,w3,&w4pos,w4)) < 3) {
-				continue;
-			}
-			// �}�b�v�̑��݊m�F
-			if( strcmp(w1,"-")!=0 && strcmpi(w1,"function")!=0 ){
-			sscanf(w1,"%[^,]",mapname);
-			m = map_mapname2mapid(mapname);
-			if (strlen(mapname)>16 || m<0) {
-				// "mapname" is not assigned to this server
-				continue;
-			}
-			}
-			if (strcmpi(w2,"warp")==0 && count > 3) {
-				npc_parse_warp(w1,w2,w3,w4);
-			} else if (strcmpi(w2,"shop")==0 && count > 3) {
-				npc_parse_shop(w1,w2,w3,w4);
-			} else if (strcmpi(w2,"script")==0 && count > 3) {
-				if( strcmpi(w1,"function")==0 ){
-					npc_parse_function(w1,w2,w3,w4,line+w4pos,fp,&lines);
-				}else{
-				npc_parse_script(w1,w2,w3,w4,line+w4pos,fp,&lines);
-				}
-			} else if ( (i=0,sscanf(w2,"duplicate%n",&i), (i>0 && w2[i]=='(')) && count > 3) {
-				npc_parse_script(w1,w2,w3,w4,line+w4pos,fp,&lines);
-			} else if (strcmpi(w2,"monster")==0 && count > 3) {
-				npc_parse_mob(w1,w2,w3,w4);
-			} else if (strcmpi(w2,"mapflag")==0 && count >= 3) {
-				npc_parse_mapflag(w1,w2,w3,w4);
-			}
-		}
-		fclose(fp);
-		printf("\rLoading NPCs [%d]: %-54s",npc_id-START_NPC_NUM,nsl->name);
-		fflush(stdout);
-	}
-	printf("\rNPCs Loaded: %d [Warps:%d Shops:%d Scripts:%d Mobs:%d]\n",
-		npc_id-START_NPC_NUM,npc_warp,npc_shop,npc_script,npc_mob);
-
-	add_timer_func_list(npc_event_timer,"npc_event_timer");
-	add_timer_func_list(npc_event_do_clock,"npc_event_do_clock");
-	add_timer_func_list(npc_timerevent,"npc_timerevent");
-
-	//exit(1);
-
-	return 0;
-}
diff --git a/misc/src/map/npc.h b/misc/src/map/npc.h
deleted file mode 100644
index 63d7765..0000000
--- a/misc/src/map/npc.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// $Id: npc.h,v 1.5 2004/09/25 11:39:17 MouseJstr Exp $
-#ifndef _NPC_H_
-#define _NPC_H_
-
-#define START_NPC_NUM 110000000
-
-#define WARP_CLASS 45
-#define WARP_DEBUG_CLASS 722
-#define INVISIBLE_CLASS 32767
-
-int npc_event_dequeue(struct map_session_data *sd);
-int npc_event_timer(int tid,unsigned int tick,int id,int data);
-int npc_event(struct map_session_data *sd,const char *npcname,int);
-int npc_timer_event(const char *eventname);				// Added by RoVeRT
-int npc_command(struct map_session_data *sd,char *npcname,char *command);
-int npc_touch_areanpc(struct map_session_data *,int,int,int);
-int npc_click(struct map_session_data *,int);
-int npc_scriptcont(struct map_session_data *,int);
-int npc_checknear(struct map_session_data *,int);
-int npc_buysellsel(struct map_session_data *,int,int);
-int npc_buylist(struct map_session_data *,int,unsigned short *);
-int npc_selllist(struct map_session_data *,int,unsigned short *);
-int npc_parse_mob(char *w1,char *w2,char *w3,char *w4);
-int npc_parse_warp(char *w1,char *w2,char *w3,char *w4);
-
-int npc_enable(const char *name,int flag);
-struct npc_data* npc_name2id(const char *name);
-
-int npc_get_new_npc_id(void);
-
-void npc_addsrcfile(char *);
-void npc_delsrcfile(char *);
-int do_final_npc(void);
-int do_init_npc(void);
-int npc_event_do_oninit(void);
-int npc_do_ontimer(int,struct map_session_data *,int);
-
-int npc_event_doall(const char *name);
-int npc_event_do(const char *name);
-
-int npc_timerevent_start(struct npc_data *nd);
-int npc_timerevent_stop(struct npc_data *nd);
-int npc_gettimerevent_tick(struct npc_data *nd);
-int npc_settimerevent_tick(struct npc_data *nd,int newtimer);
-int npc_delete(struct npc_data *nd);
-
-#endif
-
diff --git a/misc/src/map/party.c b/misc/src/map/party.c
deleted file mode 100644
index 7d8cdaf..0000000
--- a/misc/src/map/party.c
+++ /dev/null
@@ -1,644 +0,0 @@
-// $Id: party.c,v 1.2 2004/09/22 02:59:47 Akitasha Exp $
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "party.h"
-#include "db.h"
-#include "timer.h"
-#include "socket.h"
-#include "nullpo.h"
-#include "malloc.h"
-#include "pc.h"
-#include "map.h"
-#include "battle.h"
-#include "intif.h"
-#include "clif.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-#define PARTY_SEND_XYHP_INVERVAL	1000	// ���W��g�o���M�̊Ԋu
-
-static struct dbt* party_db;
-
-int party_send_xyhp_timer(int tid,unsigned int tick,int id,int data);
-/*==========================================
- * �I��
- *------------------------------------------
- */
-static int party_db_final(void *key,void *data,va_list ap)
-{
-	free(data);
-	return 0;
-}
-void do_final_party(void)
-{
-	if(party_db)
-		numdb_final(party_db,party_db_final);
-}
-// ������
-void do_init_party(void)
-{
-	party_db=numdb_init();
-	add_timer_func_list(party_send_xyhp_timer,"party_send_xyhp_timer");
-	add_timer_interval(gettick()+PARTY_SEND_XYHP_INVERVAL,party_send_xyhp_timer,0,0,PARTY_SEND_XYHP_INVERVAL);
-}
-
-// ����
-struct party *party_search(int party_id)
-{
-	return numdb_search(party_db,party_id);
-}
-int party_searchname_sub(void *key,void *data,va_list ap)
-{
-	struct party *p=(struct party *)data,**dst;
-	char *str;
-	str=va_arg(ap,char *);
-	dst=va_arg(ap,struct party **);
-	if(strcmpi(p->name,str)==0)
-		*dst=p;
-	return 0;
-}
-// �p�[�e�B������
-struct party* party_searchname(char *str)
-{
-	struct party *p=NULL;
-	numdb_foreach(party_db,party_searchname_sub,str,&p);
-	return p;
-}
-// �쐬�v��
-int party_create(struct map_session_data *sd,char *name)
-{
-	nullpo_retr(0, sd);
-
-	if(sd->status.party_id==0)
-		intif_create_party(sd,name);
-	else
-		clif_party_created(sd,2);
-	return 0;
-}
-
-// �쐬�”�
-int party_created(int account_id,int fail,int party_id,char *name)
-{
-	struct map_session_data *sd;
-	sd=map_id2sd(account_id);
-
-	nullpo_retr(0, sd);
-	
-	if(fail==0){
-		struct party *p;
-		sd->status.party_id=party_id;
-		if((p=numdb_search(party_db,party_id))!=NULL){
-			printf("party: id already exists!\n");
-			exit(1);
-		}
-		p=(struct party *)aCalloc(1,sizeof(struct party));
-		p->party_id=party_id;
-		memcpy(p->name,name,24);
-		numdb_insert(party_db,party_id,p);
-		clif_party_created(sd,0);
-	}else{
-		clif_party_created(sd,1);
-	}
-	return 0;
-}
-
-// ���v��
-int party_request_info(int party_id)
-{
-	return intif_request_partyinfo(party_id);
-}
-
-// �����L�����̊m�F
-int party_check_member(struct party *p)
-{
-	int i;
-	struct map_session_data *sd;
-
-	nullpo_retr(0, p);
-
-	for(i=0;i<fd_max;i++){
-		if(session[i] && (sd=session[i]->session_data) && sd->state.auth){
-			if(sd->status.party_id==p->party_id){
-				int j,f=1;
-				for(j=0;j<MAX_PARTY;j++){	// �p�[�e�B�Ƀf�[�^�����邩�m�F
-					if(	p->member[j].account_id==sd->status.account_id){
-						if(	strcmp(p->member[j].name,sd->status.name)==0 )
-							f=0;	// �f�[�^������
-						else
-							p->member[j].sd=NULL;	// ���C�ʃL����������
-					}
-				}
-				if(f){
-					sd->status.party_id=0;
-					if(battle_config.error_log)
-						printf("party: check_member %d[%s] is not member\n",sd->status.account_id,sd->status.name);
-				}
-			}
-		}
-	}
-	return 0;
-}
-
-// ��񏊓����s�i����ID�̃L������S���������ɂ���j
-int party_recv_noinfo(int party_id)
-{
-	int i;
-	struct map_session_data *sd;
-	for(i=0;i<fd_max;i++){
-		if(session[i] && (sd=session[i]->session_data) && sd->state.auth){
-			if(sd->status.party_id==party_id)
-				sd->status.party_id=0;
-		}
-	}
-	return 0;
-}
-// ��񏊓�
-int party_recv_info(struct party *sp)
-{
-	struct party *p;
-	int i;
-	
-	nullpo_retr(0, sp);
-
-	if((p=numdb_search(party_db,sp->party_id))==NULL){
-		p=(struct party *)aCalloc(1,sizeof(struct party));
-		numdb_insert(party_db,sp->party_id,p);
-		
-		// �ŏ��̃��[�h�Ȃ̂Ń��[�U�[�̃`�F�b�N���s��
-		party_check_member(sp);
-	}
-	memcpy(p,sp,sizeof(struct party));
-	
-	for(i=0;i<MAX_PARTY;i++){	// sd�̐ݒ�
-		struct map_session_data *sd = map_id2sd(p->member[i].account_id);
-		p->member[i].sd=(sd!=NULL && sd->status.party_id==p->party_id)?sd:NULL;
-	}
-
-	clif_party_info(p,-1);
-
-	for(i=0;i<MAX_PARTY;i++){	// �ݒ���̑��M
-//		struct map_session_data *sd = map_id2sd(p->member[i].account_id);
-		struct map_session_data *sd = p->member[i].sd;
-		if(sd!=NULL && sd->party_sended==0){
-			clif_party_option(p,sd,0x100);
-			sd->party_sended=1;
-		}
-	}
-	
-	return 0;
-}
-
-// �p�[�e�B�ւ̊��U
-int party_invite(struct map_session_data *sd,int account_id)
-{
-	struct map_session_data *tsd= map_id2sd(account_id);
-	struct party *p=party_search(sd->status.party_id);
-	int i;
-	
-	nullpo_retr(0, sd);
-
-	if(tsd==NULL || p==NULL)
-		return 0;
-	if(!battle_config.invite_request_check) {
-		if (tsd->guild_invite>0 || tsd->trade_partner) {	// ���肪��������ǂ���
-			clif_party_inviteack(sd,tsd->status.name,0);
-			return 0;
-		}
-	}
-	if( tsd->status.party_id>0 || tsd->party_invite>0 ){	// ����̏����m�F
-		clif_party_inviteack(sd,tsd->status.name,0);
-		return 0;
-	}
-	for(i=0;i<MAX_PARTY;i++){	// ���A�J�E���g�m�F
-		if(p->member[i].account_id==account_id){
-			clif_party_inviteack(sd,tsd->status.name,0);
-			return 0;
-		}
-	}
-	
-	tsd->party_invite=sd->status.party_id;
-	tsd->party_invite_account=sd->status.account_id;
-
-	clif_party_invite(sd,tsd);
-	return 0;
-}
-// �p�[�e�B���U�ւ̕ԓ�
-int party_reply_invite(struct map_session_data *sd,int account_id,int flag)
-{
-	struct map_session_data *tsd= map_id2sd(account_id);
-
-	nullpo_retr(0, sd);
-
-	if(flag==1){	// ����
-		//inter�I�֒lj��v��
-		intif_party_addmember( sd->party_invite, sd->status.account_id );
-		return 0;
-	}
-	else {		// ����
-		sd->party_invite=0;
-		sd->party_invite_account=0;
-		if(tsd==NULL)
-			return 0;
-		clif_party_inviteack(tsd,sd->status.name,1);
-	}
-	return 0;
-}
-// �p�[�e�B���lj����ꂽ
-int party_member_added(int party_id,int account_id,int flag)
-{
-	struct map_session_data *sd= map_id2sd(account_id),*sd2;
-	if(sd==NULL && flag==0){
-		if(battle_config.error_log)
-			printf("party: member added error %d is not online\n",account_id);
-		intif_party_leave(party_id,account_id); // �L�������ɓo�^�ł��Ȃ��������ߒE�ޗv�����o��
-		return 0;
-	}
-	sd2=map_id2sd(sd->party_invite_account);
-	sd->party_invite=0;
-	sd->party_invite_account=0;
-	
-	if(flag==1){	// ���s
-		if( sd2!=NULL )
-			clif_party_inviteack(sd2,sd->status.name,0);
-		return 0;
-	}
-	
-		// ����
-	sd->party_sended=0;
-	sd->status.party_id=party_id;
-	
-	if( sd2!=NULL)
-		clif_party_inviteack(sd2,sd->status.name,2);
-
-	// �������������m�F
-	party_check_conflict(sd);
-
-	return 0;
-}
-// �p�[�e�B�����v��
-int party_removemember(struct map_session_data *sd,int account_id,char *name)
-{
-	struct party *p;
-	int i;
-
-	nullpo_retr(0, sd);
-	
-	if( (p = party_search(sd->status.party_id)) == NULL )
-		return 0;
-
-	for(i=0;i<MAX_PARTY;i++){	// ���[�_�[���ǂ����`�F�b�N
-		if(p->member[i].account_id==sd->status.account_id)
-			if(p->member[i].leader==0)
-				return 0;
-	}
-
-	for(i=0;i<MAX_PARTY;i++){	// �������Ă��邩���ׂ�
-		if(p->member[i].account_id==account_id){
-			intif_party_leave(p->party_id,account_id);
-			return 0;
-		}
-	}
-	return 0;
-}
-
-// �p�[�e�B�E�ޗv��
-int party_leave(struct map_session_data *sd)
-{
-	struct party *p;
-	int i;
-
-	nullpo_retr(0, sd);
-	
-	if( (p = party_search(sd->status.party_id)) == NULL )
-		return 0;
-	
-	for(i=0;i<MAX_PARTY;i++){	// �������Ă��邩
-		if(p->member[i].account_id==sd->status.account_id){
-			intif_party_leave(p->party_id,sd->status.account_id);
-			return 0;
-		}
-	}
-	return 0;
-}
-// �p�[�e�B�����o���E�ނ���
-int party_member_leaved(int party_id,int account_id,char *name)
-{
-	struct map_session_data *sd=map_id2sd(account_id);
-	struct party *p=party_search(party_id);
-	if(p!=NULL){
-		int i;
-		for(i=0;i<MAX_PARTY;i++)
-			if(p->member[i].account_id==account_id){
-				clif_party_leaved(p,sd,account_id,name,0x00);
-				p->member[i].account_id=0;
-				p->member[i].sd=NULL;
-			}
-	}
-	if(sd!=NULL && sd->status.party_id==party_id){
-		sd->status.party_id=0;
-		sd->party_sended=0;
-	}
-	return 0;
-}
-// �p�[�e�B���U�ʒm
-int party_broken(int party_id)
-{
-	struct party *p;
-	int i;
-	if( (p=party_search(party_id))==NULL )
-		return 0;
-	
-	for(i=0;i<MAX_PARTY;i++){
-		if(p->member[i].sd!=NULL){
-			clif_party_leaved(p,p->member[i].sd,
-				p->member[i].account_id,p->member[i].name,0x10);
-			p->member[i].sd->status.party_id=0;
-			p->member[i].sd->party_sended=0;
-		}
-	}
-	numdb_erase(party_db,party_id);
-	return 0;
-}
-// �p�[�e�B�̐ݒ�ύX�v��
-int party_changeoption(struct map_session_data *sd,int exp,int item)
-{
-	struct party *p;
-
-	nullpo_retr(0, sd);
-
-	if( sd->status.party_id==0 || (p=party_search(sd->status.party_id))==NULL )
-		return 0;
-	intif_party_changeoption(sd->status.party_id,sd->status.account_id,exp,item);
-	return 0;
-}
-// �p�[�e�B�̐ݒ�ύX�ʒm
-int party_optionchanged(int party_id,int account_id,int exp,int item,int flag)
-{
-	struct party *p;
-	struct map_session_data *sd=map_id2sd(account_id);
-	if( (p=party_search(party_id))==NULL)
-		return 0;
-
-	if(!(flag&0x01)) p->exp=exp;
-	if(!(flag&0x10)) p->item=item;
-	clif_party_option(p,sd,flag);
-	return 0;
-}
-
-// �p�[�e�B�����o�̈ړ��ʒm
-int party_recv_movemap(int party_id,int account_id,char *map,int online,int lv)
-{
-	struct party *p;
-	int i;
-	if( (p=party_search(party_id))==NULL)
-		return 0;
-	for(i=0;i<MAX_PARTY;i++){
-		struct party_member *m=&p->member[i];
-		if( m == NULL ){
-			printf("party_recv_movemap nullpo?\n");
-			return 0;
-		}
-		if(m->account_id==account_id){
-			memcpy(m->map,map,16);
-			m->online=online;
-			m->lv=lv;
-			break;
-		}
-	}
-	if(i==MAX_PARTY){
-		if(battle_config.error_log)
-			printf("party: not found member %d on %d[%s]",account_id,party_id,p->name);
-		return 0;
-	}
-	
-	for(i=0;i<MAX_PARTY;i++){	// sd�Đݒ�
-		struct map_session_data *sd= map_id2sd(p->member[i].account_id);
-		p->member[i].sd=(sd!=NULL && sd->status.party_id==p->party_id)?sd:NULL;
-	}
-
-	party_send_xy_clear(p);	// ���W�Ēʒm�v��
-	
-	clif_party_info(p,-1);
-	return 0;
-}
-
-// �p�[�e�B�����o�̈ړ�
-int party_send_movemap(struct map_session_data *sd)
-{
-	struct party *p;
-
-	nullpo_retr(0, sd);
-
-	if( sd->status.party_id==0 )
-		return 0;
-	intif_party_changemap(sd,1);
-
-	if( sd->party_sended!=0 )	// �����p�[�e�B�f�[�^�͑��M�ς�
-		return 0;
-
-	// �����m�F	
-	party_check_conflict(sd);
-	
-	// ����Ȃ�p�[�e�B��񑗐M
-	if( (p=party_search(sd->status.party_id))!=NULL ){
-		party_check_member(p);	// �������m�F����
-		if(sd->status.party_id==p->party_id){
-			clif_party_info(p,sd->fd);
-			clif_party_option(p,sd,0x100);
-			sd->party_sended=1;
-		}
-	}
-	
-	return 0;
-}
-// �p�[�e�B�����o�̃��O�A�E�g
-int party_send_logout(struct map_session_data *sd)
-{
-	struct party *p;
-
-	nullpo_retr(0, sd);
-
-	if( sd->status.party_id>0 )
-		intif_party_changemap(sd,0);
-	
-	// sd�������ɂȂ�̂Ńp�[�e�B��񂩂�폜
-	if( (p=party_search(sd->status.party_id))!=NULL ){
-		int i;
-		for(i=0;i<MAX_PARTY;i++)
-			if(p->member[i].sd==sd)
-				p->member[i].sd=NULL;
-	}
-	
-	return 0;
-}
-// �p�[�e�B���b�Z�[�W���M
-int party_send_message(struct map_session_data *sd,char *mes,int len)
-{
-	if(sd->status.party_id==0)
-		return 0;
-	intif_party_message(sd->status.party_id,sd->status.account_id,mes,len);
-	return 0;
-}
-
-// �p�[�e�B���b�Z�[�W��M
-int party_recv_message(int party_id,int account_id,char *mes,int len)
-{
-	struct party *p;
-	if( (p=party_search(party_id))==NULL)
-		return 0;
-	clif_party_message(p,account_id,mes,len);
-	return 0;
-}
-// �p�[�e�B�����m�F
-int party_check_conflict(struct map_session_data *sd)
-{
-	nullpo_retr(0, sd);
-
-	intif_party_checkconflict(sd->status.party_id,sd->status.account_id,sd->status.name);
-	return 0;
-}
-
-
-// �ʒu��g�o�ʒm�p
-int party_send_xyhp_timer_sub(void *key,void *data,va_list ap)
-{
-	struct party *p=(struct party *)data;
-	int i;
-
-	nullpo_retr(0, p);
-
-	for(i=0;i<MAX_PARTY;i++){
-		struct map_session_data *sd;
-		if((sd=p->member[i].sd)!=NULL){
-			// ���W�ʒm
-			if(sd->party_x!=sd->bl.x || sd->party_y!=sd->bl.y){
-				clif_party_xy(p,sd);
-				sd->party_x=sd->bl.x;
-				sd->party_y=sd->bl.y;
-			}
-			// �g�o�ʒm
-			if(sd->party_hp!=sd->status.hp){
-				clif_party_hp(p,sd);
-				sd->party_hp=sd->status.hp;
-			}
-			
-		}
-	}
-	return 0;
-}
-// �ʒu��g�o�ʒm
-int party_send_xyhp_timer(int tid,unsigned int tick,int id,int data)
-{
-	numdb_foreach(party_db,party_send_xyhp_timer_sub,tick);
-	return 0;
-}
-
-// �ʒu�ʒm�N���A
-int party_send_xy_clear(struct party *p)
-{
-	int i;
-
-	nullpo_retr(0, p);
-
-	for(i=0;i<MAX_PARTY;i++){
-		struct map_session_data *sd;
-		if((sd=p->member[i].sd)!=NULL){
-			sd->party_x=-1;
-			sd->party_y=-1;
-			sd->party_hp=-1;
-		}
-	}
-	return 0;
-}
-// HP�ʒm�̕K�v�������p�imap_foreachinmovearea����Ă΂��j
-int party_send_hp_check(struct block_list *bl,va_list ap)
-{
-	int party_id;
-	int *flag;
-	struct map_session_data *sd;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, sd=(struct map_session_data *)bl);
-
-	party_id=va_arg(ap,int);
-	flag=va_arg(ap,int *);
-	
-	if(sd->status.party_id==party_id){
-		*flag=1;
-		sd->party_hp=-1;
-	}
-	return 0;
-}
-
-// �o���l�������z
-int party_exp_share(struct party *p,int map,int base_exp,int job_exp)
-{
-	struct map_session_data *sd;
-	int i,c;
-
-	nullpo_retr(0, p);
-	
-	for(i=c=0;i<MAX_PARTY;i++)
-		if((sd=p->member[i].sd)!=NULL && sd->bl.m==map)
-			c++;
-	if(c==0)
-		return 0;
-	for(i=0;i<MAX_PARTY;i++)
-		if((sd=p->member[i].sd)!=NULL && sd->bl.m==map)
-			pc_gainexp(sd,base_exp/c+1,job_exp/c+1);
-	return 0;
-}
-
-// �����}�b�v�̃p�[�e�B�����o�[�S�̂ɏ�����������
-// type==0 �����}�b�v
-//     !=0 ��ʓ�
-void party_foreachsamemap(int (*func)(struct block_list*,va_list),
-	struct map_session_data *sd,int type,...)
-{
-	struct party *p;
-	va_list ap;
-	int i;
-	int x0,y0,x1,y1;
-	struct block_list *list[MAX_PARTY];
-	int blockcount=0;
-	
-	nullpo_retv(sd);
-	
-	if((p=party_search(sd->status.party_id))==NULL)
-		return;
-
-	x0=sd->bl.x-AREA_SIZE;
-	y0=sd->bl.y-AREA_SIZE;
-	x1=sd->bl.x+AREA_SIZE;
-	y1=sd->bl.y+AREA_SIZE;
-
-	va_start(ap,type);
-	
-	for(i=0;i<MAX_PARTY;i++){
-		struct party_member *m=&p->member[i];
-		if(m->sd!=NULL){
-			if(sd->bl.m!=m->sd->bl.m)
-				continue;
-			if(type!=0 &&
-				(m->sd->bl.x<x0 || m->sd->bl.y<y0 ||
-				 m->sd->bl.x>x1 || m->sd->bl.y>y1 ) )
-				continue;
-			list[blockcount++]=&m->sd->bl; 
-		}
-	}
-
-	map_freeblock_lock();	// ����������̉�����֎~����
-	
-	for(i=0;i<blockcount;i++)
-		if(list[i]->prev)	// �L�����ǂ����`�F�b�N
-			func(list[i],ap);
-
-	map_freeblock_unlock();	// ��������‚���
-
-	va_end(ap);
-}
diff --git a/misc/src/map/party.h b/misc/src/map/party.h
deleted file mode 100644
index 28d8096..0000000
--- a/misc/src/map/party.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// $Id: party.h,v 1.3 2004/09/25 05:32:18 MouseJstr Exp $
-#ifndef _PARTY_H_
-#define _PARTY_H_
-
-#include <stdarg.h>
-
-struct party;
-struct map_session_data;
-struct block_list;
-
-void do_init_party(void);
-void do_final_party(void);
-struct party *party_search(int party_id);
-struct party* party_searchname(char *str);
-
-int party_create(struct map_session_data *sd,char *name);
-int party_created(int account_id,int fail,int party_id,char *name);
-int party_request_info(int party_id);
-int party_invite(struct map_session_data *sd,int account_id);
-int party_member_added(int party_id,int account_id,int flag);
-int party_leave(struct map_session_data *sd);
-int party_removemember(struct map_session_data *sd,int account_id,char *name);
-int party_member_leaved(int party_id,int account_id,char *name);
-int party_reply_invite(struct map_session_data *sd,int account_id,int flag);
-int party_recv_noinfo(int party_id);
-int party_recv_info(struct party *sp);
-int party_recv_movemap(int party_id,int account_id,char *map,int online,int lv);
-int party_broken(int party_id);
-int party_optionchanged(int party_id,int account_id,int exp,int item,int flag);
-int party_changeoption(struct map_session_data *sd,int exp,int item);
-
-int party_send_movemap(struct map_session_data *sd);
-int party_send_logout(struct map_session_data *sd);
-
-int party_send_message(struct map_session_data *sd,char *mes,int len);
-int party_recv_message(int party_id,int account_id,char *mes,int len);
-
-int party_check_conflict(struct map_session_data *sd);
-
-int party_send_xy_clear(struct party *p);
-int party_send_hp_check(struct block_list *bl,va_list ap);
-
-int party_exp_share(struct party *p,int map,int base_exp,int job_exp);
-
-void party_foreachsamemap(int (*func)(struct block_list *,va_list),struct map_session_data *sd,int type,...);
-
-#endif
diff --git a/misc/src/map/path.c b/misc/src/map/path.c
deleted file mode 100644
index b2e0a78..0000000
--- a/misc/src/map/path.c
+++ /dev/null
@@ -1,404 +0,0 @@
-// $Id: path.c,v 1.1.1.1 2004/09/10 17:27:00 MagicalTux Exp $
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "map.h"
-#include "battle.h"
-#include "nullpo.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-//#define PATH_STANDALONETEST
-
-#define MAX_HEAP 150
-struct tmp_path { short x,y,dist,before,cost; char dir,flag;};
-#define calc_index(x,y) (((x)+(y)*MAX_WALKPATH) & (MAX_WALKPATH*MAX_WALKPATH-1))
-
-/*==========================================
- * �o�H�T���⏕heap push
- *------------------------------------------
- */
-static void push_heap_path(int *heap,struct tmp_path *tp,int index)
-{
-	int i,h;
-
-	if( heap == NULL || tp == NULL ){
-		printf("push_heap_path nullpo\n");
-		return;
-	}
-
-	heap[0]++;
-
-	for(h=heap[0]-1,i=(h-1)/2;
-		h>0 && tp[index].cost<tp[heap[i+1]].cost;
-		i=(h-1)/2)
-		heap[h+1]=heap[i+1],h=i;
-	heap[h+1]=index;
-}
-
-/*==========================================
- * �o�H�T���⏕heap update
- * cost���������̂ō��̕��ֈړ�
- *------------------------------------------
- */
-static void update_heap_path(int *heap,struct tmp_path *tp,int index)
-{
-	int i,h;
-
-	nullpo_retv(heap);
-	nullpo_retv(tp);
-
-	for(h=0;h<heap[0];h++)
-		if(heap[h+1]==index)
-			break;
-	if(h==heap[0]){
-		fprintf(stderr,"update_heap_path bug\n");
-		exit(1);
-	}
-	for(i=(h-1)/2;
-		h>0 && tp[index].cost<tp[heap[i+1]].cost;
-		i=(h-1)/2)
-		heap[h+1]=heap[i+1],h=i;
-	heap[h+1]=index;
-}
-
-/*==========================================
- * �o�H�T���⏕heap pop
- *------------------------------------------
- */
-static int pop_heap_path(int *heap,struct tmp_path *tp)
-{
-	int i,h,k;
-	int ret,last;
-
-	nullpo_retr(-1, heap);
-	nullpo_retr(-1, tp);
-
-	if(heap[0]<=0)
-		return -1;
-	ret=heap[1];
-	last=heap[heap[0]];
-	heap[0]--;
-
-	for(h=0,k=2;k<heap[0];k=k*2+2){
-		if(tp[heap[k+1]].cost>tp[heap[k]].cost)
-			k--;
-		heap[h+1]=heap[k+1], h=k;
-	}
-	if(k==heap[0])
-		heap[h+1]=heap[k], h=k-1;
-
-	for(i=(h-1)/2;
-		h>0 && tp[heap[i+1]].cost>tp[last].cost;
-		i=(h-1)/2)
-		heap[h+1]=heap[i+1],h=i;
-	heap[h+1]=last;
-
-	return ret;
-}
-
-/*==========================================
- * ���݂̓_��cost�v�Z
- *------------------------------------------
- */
-static int calc_cost(struct tmp_path *p,int x1,int y1)
-{
-	int xd,yd;
-
-	nullpo_retr(0, p);
-
-	xd=x1-p->x;
-	if(xd<0) xd=-xd;
-	yd=y1-p->y;
-	if(yd<0) yd=-yd;
-	return (xd+yd)*10+p->dist;
-}
-
-/*==========================================
- * �K�v�Ȃ�path��lj�/�C������
- *------------------------------------------
- */
-static int add_path(int *heap,struct tmp_path *tp,int x,int y,int dist,int dir,int before,int x1,int y1)
-{
-	int i;
-
-	nullpo_retr(0, heap);
-	nullpo_retr(0, tp);
-
-	i=calc_index(x,y);
-
-	if(tp[i].x==x && tp[i].y==y){
-		if(tp[i].dist>dist){
-			tp[i].dist=dist;
-			tp[i].dir=dir;
-			tp[i].before=before;
-			tp[i].cost=calc_cost(&tp[i],x1,y1);
-			if(tp[i].flag)
-				push_heap_path(heap,tp,i);
-			else
-				update_heap_path(heap,tp,i);
-			tp[i].flag=0;
-		}
-		return 0;
-	}
-
-	if(tp[i].x || tp[i].y)
-		return 1;
-
-	tp[i].x=x;
-	tp[i].y=y;
-	tp[i].dist=dist;
-	tp[i].dir=dir;
-	tp[i].before=before;
-	tp[i].cost=calc_cost(&tp[i],x1,y1);
-	tp[i].flag=0;
-	push_heap_path(heap,tp,i);
-
-	return 0;
-}
-
-
-/*==========================================
- * (x,y)���ړ��s�”\�n�т��ǂ���
- * flag 0x10000 �������U������
- *------------------------------------------
- */
-static int can_place(struct map_data *m,int x,int y,int flag)
-{
-	int c;
-
-	nullpo_retr(0, m);
-
-	c=read_gatp(m,x,y);
-
-	if(c==1)
-		return 0;
-	if(!(flag&0x10000) && c==5)
-		return 0;
-	return 1;
-}
-
-/*==========================================
- * (x0,y0)����(x1,y1)��1���ňړ��”\���v�Z
- *------------------------------------------
- */
-static int can_move(struct map_data *m,int x0,int y0,int x1,int y1,int flag)
-{
-	nullpo_retr(0, m);
-
-	if(x0-x1<-1 || x0-x1>1 || y0-y1<-1 || y0-y1>1)
-		return 0;
-	if(x1<0 || y1<0 || x1>=m->xs || y1>=m->ys)
-		return 0;
-	if(!can_place(m,x0,y0,flag))
-		return 0;
-	if(!can_place(m,x1,y1,flag))
-		return 0;
-	if(x0==x1 || y0==y1)
-		return 1;
-	if(!can_place(m,x0,y1,flag) || !can_place(m,x1,y0,flag))
-		return 0;
-	return 1;
-}
-/*==========================================
- * (x0,y0)����(dx,dy)������count�Z����
- * ������΂������Ƃ̍��W������
- *------------------------------------------
- */
-int path_blownpos(int m,int x0,int y0,int dx,int dy,int count)
-{
-	struct map_data *md;
-
-	if(!map[m].gat)
-		return -1;
-	md=&map[m];
-
-	if(count>15){	// �ő�10�}�X�ɐ���
-		if(battle_config.error_log)
-			printf("path_blownpos: count too many %d !\n",count);
-		count=15;
-	}
-	if(dx>1 || dx<-1 || dy>1 || dy<-1){
-		if(battle_config.error_log)
-			printf("path_blownpos: illeagal dx=%d or dy=%d !\n",dx,dy);
-		dx=(dx>=0)?1:((dx<0)?-1:0);
-		dy=(dy>=0)?1:((dy<0)?-1:0);
-	}
-	
-	while( (count--)>0 && (dx!=0 || dy!=0) ){
-		if( !can_move(md,x0,y0,x0+dx,y0+dy,0) ){
-			int fx=(dx!=0 && can_move(md,x0,y0,x0+dx,y0,0));
-			int fy=(dy!=0 && can_move(md,x0,y0,x0,y0+dy,0));
-			if( fx && fy ){
-				if(rand()&1) dx=0;
-				else		 dy=0;
-			}
-			if( !fx )		dx=0;
-			if( !fy )		dy=0;
-		}
-		x0+=dx;
-		y0+=dy;
-	}
-	return (x0<<16)|y0;
-}
-
-/*==========================================
- * path�T�� (x0,y0)->(x1,y1)
- *------------------------------------------
- */
-int path_search(struct walkpath_data *wpd,int m,int x0,int y0,int x1,int y1,int flag)
-{
-	int heap[MAX_HEAP+1];
-	struct tmp_path tp[MAX_WALKPATH*MAX_WALKPATH];
-	int i,rp,x,y;
-	struct map_data *md;
-	int dx,dy;
-
-	nullpo_retr(0, wpd);
-
-	if(!map[m].gat)
-		return -1;
-	md=&map[m];
-	if(x1<0 || x1>=md->xs || y1<0 || y1>=md->ys || (i=read_gatp(md,x1,y1))==1 || i==5)
-		return -1;
-
-	// easy
-	dx = (x1-x0<0) ? -1 : 1;
-	dy = (y1-y0<0) ? -1 : 1;
-	for(x=x0,y=y0,i=0;x!=x1 || y!=y1;){
-		if(i>=sizeof(wpd->path))
-			return -1;
-		if(x!=x1 && y!=y1){
-			if(!can_move(md,x,y,x+dx,y+dy,flag))
-				break;
-			x+=dx;
-			y+=dy;
-			wpd->path[i++]=(dx<0) ? ((dy>0)? 1 : 3) : ((dy<0)? 5 : 7);
-		} else if(x!=x1){
-			if(!can_move(md,x,y,x+dx,y   ,flag))
-				break;
-			x+=dx;
-			wpd->path[i++]=(dx<0) ? 2 : 6;
-		} else { // y!=y1
-			if(!can_move(md,x,y,x   ,y+dy,flag))
-				break;
-			y+=dy;
-			wpd->path[i++]=(dy>0) ? 0 : 4;
-		}
-		if(x==x1 && y==y1){
-			wpd->path_len=i;
-			wpd->path_pos=0;
-			wpd->path_half=0;
-			return 0;
-		}
-	}
-	if(flag&1)
-		return -1;
-
-	memset(tp,0,sizeof(tp));
-
-	i=calc_index(x0,y0);
-	tp[i].x=x0;
-	tp[i].y=y0;
-	tp[i].dist=0;
-	tp[i].dir=0;
-	tp[i].before=0;
-	tp[i].cost=calc_cost(&tp[i],x1,y1);
-	tp[i].flag=0;
-	heap[0]=0;
-	push_heap_path(heap,tp,calc_index(x0,y0));
-	while(1){
-		int e=0,fromdir;
-
-		if(heap[0]==0)
-			return -1;
-		rp=pop_heap_path(heap,tp);
-		x=tp[rp].x;
-		y=tp[rp].y;
-		if(x==x1 && y==y1){
-			int len,j;
-
-			for(len=0,i=rp;len<100 && i!=calc_index(x0,y0);i=tp[i].before,len++);
-			if(len==100 || len>=sizeof(wpd->path))
-				return -1;
-			wpd->path_len=len;
-			wpd->path_pos=0;
-			wpd->path_half=0;
-			for(i=rp,j=len-1;j>=0;i=tp[i].before,j--)
-				wpd->path[j]=tp[i].dir;
-
-			return 0;
-		}
-		fromdir=tp[rp].dir;
-		if(can_move(md,x,y,x+1,y-1,flag))
-			e+=add_path(heap,tp,x+1,y-1,tp[rp].dist+14,5,rp,x1,y1);
-		if(can_move(md,x,y,x+1,y  ,flag))
-			e+=add_path(heap,tp,x+1,y  ,tp[rp].dist+10,6,rp,x1,y1);
-		if(can_move(md,x,y,x+1,y+1,flag))
-			e+=add_path(heap,tp,x+1,y+1,tp[rp].dist+14,7,rp,x1,y1);
-		if(can_move(md,x,y,x  ,y+1,flag))
-			e+=add_path(heap,tp,x  ,y+1,tp[rp].dist+10,0,rp,x1,y1);
-		if(can_move(md,x,y,x-1,y+1,flag))
-			e+=add_path(heap,tp,x-1,y+1,tp[rp].dist+14,1,rp,x1,y1);
-		if(can_move(md,x,y,x-1,y  ,flag))
-			e+=add_path(heap,tp,x-1,y  ,tp[rp].dist+10,2,rp,x1,y1);
-		if(can_move(md,x,y,x-1,y-1,flag))
-			e+=add_path(heap,tp,x-1,y-1,tp[rp].dist+14,3,rp,x1,y1);
-		if(can_move(md,x,y,x  ,y-1,flag))
-			e+=add_path(heap,tp,x  ,y-1,tp[rp].dist+10,4,rp,x1,y1);
-		tp[rp].flag=1;
-		if(e || heap[0]>=MAX_HEAP-5)
-			return -1;
-	}
-	return -1;
-}
-
-#ifdef PATH_STANDALONETEST
-char gat[64][64]={
-	{0,0,0,0,0,0,0,0,0,0},
-	{0,0,0,0,0,0,0,0,0,0},
-	{0,0,0,0,0,0,0,0,0,0},
-	{0,0,0,0,0,0,0,0,0,0},
-	{0,0,0,0,1,0,0,0,0,0},
-};
-struct map_data map[1];
-
-/*==========================================
- * �o�H�T�����[�`���P�̃e�X�g�pmain�֐�
- *------------------------------------------
- */
-void main(int argc,char *argv[])
-{
-	struct walkpath_data wpd;
-
-	map[0].gat=gat;
-	map[0].xs=64;
-	map[0].ys=64;
-
-	path_search(&wpd,0,3,4,5,4);
-	path_search(&wpd,0,5,4,3,4);
-	path_search(&wpd,0,6,4,3,4);
-	path_search(&wpd,0,7,4,3,4);
-	path_search(&wpd,0,4,3,4,5);
-	path_search(&wpd,0,4,2,4,5);
-	path_search(&wpd,0,4,1,4,5);
-	path_search(&wpd,0,4,5,4,3);
-	path_search(&wpd,0,4,6,4,3);
-	path_search(&wpd,0,4,7,4,3);
-	path_search(&wpd,0,7,4,3,4);
-	path_search(&wpd,0,8,4,3,4);
-	path_search(&wpd,0,9,4,3,4);
-	path_search(&wpd,0,10,4,3,4);
-	path_search(&wpd,0,11,4,3,4);
-	path_search(&wpd,0,12,4,3,4);
-	path_search(&wpd,0,13,4,3,4);
-	path_search(&wpd,0,14,4,3,4);
-	path_search(&wpd,0,15,4,3,4);
-	path_search(&wpd,0,16,4,3,4);
-	path_search(&wpd,0,17,4,3,4);
-	path_search(&wpd,0,18,4,3,4);
-}
-#endif
diff --git a/misc/src/map/pc.c b/misc/src/map/pc.c
deleted file mode 100644
index 4e702c0..0000000
--- a/misc/src/map/pc.c
+++ /dev/null
@@ -1,7485 +0,0 @@
-// $Id: pc.c 101 2004-09-25 17:57:22Z Valaris $
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-
-#include "socket.h" // [Valaris]
-#include "timer.h"
-#include "db.h"
-
-#include "malloc.h"
-#include "map.h"
-#include "chrif.h"
-#include "clif.h"
-#include "intif.h"
-#include "pc.h"
-#include "npc.h"
-#include "mob.h"
-#include "pet.h"
-#include "itemdb.h"
-#include "script.h"
-#include "battle.h"
-#include "skill.h"
-#include "party.h"
-#include "guild.h"
-#include "chat.h"
-#include "trade.h"
-#include "storage.h"
-#include "vending.h"
-#include "nullpo.h"
-#include "atcommand.h"
-
-#ifndef TXT_ONLY // mail system [Valaris]
-#include "mail.h"
-#endif
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-#define PVP_CALCRANK_INTERVAL 1000	// PVP���ʌv�Z�̊Ԋu
-
-#define STATE_BLIND 0x10
-
-static int max_weight_base[MAX_PC_CLASS];
-static int hp_coefficient[MAX_PC_CLASS];
-static int hp_coefficient2[MAX_PC_CLASS];
-static int hp_sigma_val[MAX_PC_CLASS][MAX_LEVEL];
-static int sp_coefficient[MAX_PC_CLASS];
-static int aspd_base[MAX_PC_CLASS][20];
-static char job_bonus[3][MAX_PC_CLASS][MAX_LEVEL];
-static int exp_table[14][MAX_LEVEL];
-static char statp[255][7];
-static struct {
-	int id;
-	int max;
-	struct {
-		short id,lv;
-	} need[6];
-} skill_tree[3][MAX_PC_CLASS][100];
-
-static int atkmods[3][20];	// ����ATK�T�C�Y�C��(size_fix.txt)
-static int refinebonus[5][3];	// ���B�{�[�i�X�e�[�u��(refine_db.txt)
-static int percentrefinery[5][10];	// ���B������(refine_db.txt)
-
-static int dirx[8]={0,-1,-1,-1,0,1,1,1};
-static int diry[8]={1,1,0,-1,-1,-1,0,1};
-
-static unsigned int equip_pos[11]={0x0080,0x0008,0x0040,0x0004,0x0001,0x0200,0x0100,0x0010,0x0020,0x0002,0x8000};
-
-//static struct dbt *gm_account_db;
-static struct gm_account *gm_account = NULL;
-static int GM_num = 0;
-
-int pc_isGM(struct map_session_data *sd) {
-//	struct gm_account *p;
-	int i;
-
-	nullpo_retr(0, sd);
-
-/*	p = numdb_search(gm_account_db, sd->status.account_id);
-	if (p == NULL)
-		return 0;
-	return p->level;*/
-
-	for(i = 0; i < GM_num; i++)
-		if (gm_account[i].account_id == sd->status.account_id)
-			return gm_account[i].level;
-	return 0;
-
-}
-
-int pc_iskiller(struct map_session_data *src, struct map_session_data *target) {
-	nullpo_retr(0, src);
-
-	if(src->bl.type!=BL_PC )
-		return 0;
-        if (src->special_state.killer)
-                 return 1;
-
-	if(target->bl.type!=BL_PC )
-		return 0;
-        if (target->special_state.killable)
-                 return 1;
-
-        return 0;
-}
-
-
-int pc_set_gm_level(int account_id, int level) {
-    int i;
-    for (i = 0; i < GM_num; i++) {
-        if (account_id == gm_account[i].account_id) {
-            gm_account[i].level = level;
-            return 0;
-        }
-    }
-
-    GM_num++;
-    gm_account = realloc(gm_account, sizeof(struct gm_account) * GM_num);
-    gm_account[GM_num - 1].account_id = account_id;
-    gm_account[GM_num - 1].level = level;
-    return 0;
-}
-
-int pc_getrefinebonus(int lv, int type) {
-	if (lv >= 0 && lv < 5 && type >= 0 && type < 3)
-		return refinebonus[lv][type];
-	return 0;
-}
-
-static int distance(int x0, int y0, int x1, int y1) {
-	int dx, dy;
-
-	dx = abs(x0-x1);
-	dy = abs(y0-y1);
-	return dx>dy ? dx : dy;
-}
-
-static int pc_invincible_timer(int tid,unsigned int tick,int id,int data) {
-	struct map_session_data *sd;
-
-	if( (sd=(struct map_session_data *)map_id2sd(id)) == NULL || sd->bl.type!=BL_PC )
-		return 1;
-
-	if(sd->invincible_timer != tid){
-		if(battle_config.error_log)
-			printf("invincible_timer %d != %d\n",sd->invincible_timer,tid);
-		return 0;
-	}
-	sd->invincible_timer=-1;
-
-	return 0;
-}
-
-int pc_setinvincibletimer(struct map_session_data *sd,int val) {
-	nullpo_retr(0, sd);
-
-	if(sd->invincible_timer != -1)
-		delete_timer(sd->invincible_timer,pc_invincible_timer);
-	sd->invincible_timer = add_timer(gettick()+val,pc_invincible_timer,sd->bl.id,0);
-	return 0;
-}
-
-int pc_delinvincibletimer(struct map_session_data *sd) {
-	nullpo_retr(0, sd);
-
-	if(sd->invincible_timer != -1) {
-		delete_timer(sd->invincible_timer,pc_invincible_timer);
-		sd->invincible_timer = -1;
-	}
-	return 0;
-}
-
-static int pc_spiritball_timer(int tid,unsigned int tick,int id,int data) {
-	struct map_session_data *sd;
-	int i;
-
-	if( (sd=(struct map_session_data *)map_id2sd(id)) == NULL || sd->bl.type!=BL_PC )
-		return 1;
-
-	if(sd->spirit_timer[0] != tid){
-		if(battle_config.error_log)
-			printf("spirit_timer %d != %d\n",sd->spirit_timer[0],tid);
-		return 0;
-	}
-	sd->spirit_timer[0]=-1;
-	for(i=1;i<sd->spiritball;i++) {
-		sd->spirit_timer[i-1] = sd->spirit_timer[i];
-		sd->spirit_timer[i] = -1;
-	}
-	sd->spiritball--;
-	if(sd->spiritball < 0)
-		sd->spiritball = 0;
-	clif_spiritball(sd);
-
-	return 0;
-}
-
-int pc_addspiritball(struct map_session_data *sd,int interval,int max) {
-	int i;
-
-	nullpo_retr(0, sd);
-
-	if(max > MAX_SKILL_LEVEL)
-		max = MAX_SKILL_LEVEL;
-	if(sd->spiritball < 0)
-		sd->spiritball = 0;
-
-	if(sd->spiritball >= max) {
-		if(sd->spirit_timer[0] != -1) {
-			delete_timer(sd->spirit_timer[0],pc_spiritball_timer);
-			sd->spirit_timer[0] = -1;
-		}
-		for(i=1;i<max;i++) {
-			sd->spirit_timer[i-1] = sd->spirit_timer[i];
-			sd->spirit_timer[i] = -1;
-		}
-	}
-	else
-		sd->spiritball++;
-
-	sd->spirit_timer[sd->spiritball-1] = add_timer(gettick()+interval,pc_spiritball_timer,sd->bl.id,0);
-	clif_spiritball(sd);
-
-	return 0;
-}
-
-int pc_delspiritball(struct map_session_data *sd,int count,int type) {
-	int i;
-
-	nullpo_retr(0, sd);
-
-	if(sd->spiritball <= 0) {
-		sd->spiritball = 0;
-		return 0;
-	}
-
-	if(count > sd->spiritball)
-		count = sd->spiritball;
-	sd->spiritball -= count;
-	if(count > MAX_SKILL_LEVEL)
-		count = MAX_SKILL_LEVEL;
-
-	for(i=0;i<count;i++) {
-		if(sd->spirit_timer[i] != -1) {
-			delete_timer(sd->spirit_timer[i],pc_spiritball_timer);
-			sd->spirit_timer[i] = -1;
-		}
-	}
-	for(i=count;i<MAX_SKILL_LEVEL;i++) {
-		sd->spirit_timer[i-count] = sd->spirit_timer[i];
-		sd->spirit_timer[i] = -1;
-	}
-
-	if(!type)
-		clif_spiritball(sd);
-
-	return 0;
-}
-
-int pc_setrestartvalue(struct map_session_data *sd,int type) {
-	//�]����{�q�̏ꍇ�̌��̐E�Ƃ��Z�o����
-	struct pc_base_job s_class;
-
-	nullpo_retr(0, sd);
-
-	s_class = pc_calc_base_job(sd->status.class);
-
-	//-----------------------
-	// ���S����
-	if(sd->special_state.restart_full_recover) {	// �I�V���X�J�[�h
-		sd->status.hp=sd->status.max_hp;
-		sd->status.sp=sd->status.max_sp;
-	}
-	else {
-		if(s_class.job == 0 && battle_config.restart_hp_rate < 50) { //�m�r�͔�����
-			sd->status.hp=(sd->status.max_hp)/2;
-		}
-		else {
-			if(battle_config.restart_hp_rate <= 0)
-				sd->status.hp = 1;
-			else {
-				sd->status.hp = sd->status.max_hp * battle_config.restart_hp_rate /100;
-				if(sd->status.hp <= 0)
-					sd->status.hp = 1;
-			}
-		}
-		if(battle_config.restart_sp_rate > 0) {
-			int sp = sd->status.max_sp * battle_config.restart_sp_rate /100;
-			if(sd->status.sp < sp)
-				sd->status.sp = sp;
-		}
-	}
-	if(type&1)
-		clif_updatestatus(sd,SP_HP);
-	if(type&1)
-		clif_updatestatus(sd,SP_SP);
-
-	/* removed exp penalty on spawn [Valaris] */
-
-	if(type&2 && sd->status.class != 0 && battle_config.zeny_penalty > 0 && !map[sd->bl.m].flag.nozenypenalty) {
-		int zeny = (int)((double)sd->status.zeny * (double)battle_config.zeny_penalty / 10000.);
-		if(zeny < 1) zeny = 1;
-		sd->status.zeny -= zeny;
-		if(sd->status.zeny < 0) sd->status.zeny = 0;
-		clif_updatestatus(sd,SP_ZENY);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * ���������b�N���Ă���MOB�̐��𐔂���(foreachclient)
- *------------------------------------------
- */
-static int pc_counttargeted_sub(struct block_list *bl,va_list ap)
-{
-	int id,*c,target_lv;
-	struct block_list *src;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-
-	id=va_arg(ap,int);
-
-	nullpo_retr(0, c=va_arg(ap,int *));
-
-	src=va_arg(ap,struct block_list *);
-	target_lv=va_arg(ap,int);
-	if(id == bl->id || (src && id == src->id)) return 0;
-	if(bl->type == BL_PC) {
-		struct map_session_data *sd=(struct map_session_data *)bl;
-		if( sd && sd->attacktarget == id && sd->attacktimer != -1 && sd->attacktarget_lv >= target_lv)
-			(*c)++;
-	}
-	else if(bl->type == BL_MOB) {
-		struct mob_data *md = (struct mob_data *)bl;
-		if(md && md->target_id == id && md->timer != -1 && md->state.state == MS_ATTACK && md->target_lv >= target_lv)
-
-			(*c)++;
-		//printf("md->target_lv:%d, target_lv:%d\n",((struct mob_data *)bl)->target_lv,target_lv);
-	}
-	return 0;
-}
-
-int pc_counttargeted(struct map_session_data *sd,struct block_list *src,int target_lv)
-{
-	int c=0;
-	map_foreachinarea(pc_counttargeted_sub, sd->bl.m,
-		sd->bl.x-AREA_SIZE,sd->bl.y-AREA_SIZE,
-		sd->bl.x+AREA_SIZE,sd->bl.y+AREA_SIZE,0,sd->bl.id,&c,src,target_lv);
-	return c;
-}
-
-/*==========================================
- * ���[�J���v���g�^�C�v�錾 (�K�v�ȕ��̂�)
- *------------------------------------------
- */
-static int pc_walktoxy_sub(struct map_session_data *);
-
-/*==========================================
- * save�ɕK�v�ȃX�e�[�^�X�C�����s�Ȃ�
- *------------------------------------------
- */
-int pc_makesavestatus(struct map_session_data *sd)
-{
-	nullpo_retr(0, sd);
-
-	// ���̐F�͐F�X���Q�������̂ŕۑ��Ώۂɂ͂��Ȃ�
-	if(!battle_config.save_clothcolor)
-		sd->status.clothes_color=0;
-
-	// ���S��Ԃ������̂�hp��1�A�ʒu���Z�[�u�ꏊ�ɕύX
-	if(pc_isdead(sd)){
-		pc_setrestartvalue(sd,0);
-		memcpy(&sd->status.last_point,&sd->status.save_point,sizeof(sd->status.last_point));
-	} else {
-		memcpy(sd->status.last_point.map,sd->mapname,24);
-		sd->status.last_point.x = sd->bl.x;
-		sd->status.last_point.y = sd->bl.y;
-	}
-
-	// �Z�[�u�֎~�}�b�v�������̂Ŏw��ʒu�Ɉړ�
-	if(map[sd->bl.m].flag.nosave){
-		struct map_data *m=&map[sd->bl.m];
-		if(strcmp(m->save.map,"SavePoint")==0)
-			memcpy(&sd->status.last_point,&sd->status.save_point,sizeof(sd->status.last_point));
-		else
-			memcpy(&sd->status.last_point,&m->save,sizeof(sd->status.last_point));
-	}
-
-	//�}�i�[�|�C���g���v���X�������ꍇ0��
-	if(battle_config.muting_players && sd->status.manner > 0)
-		sd->status.manner = 0;
-	return 0;
-}
-
-/*==========================================
- * �ڑ����̏�����
- *------------------------------------------
- */
-int pc_setnewpc(struct map_session_data *sd, int account_id, int char_id, int login_id1, int client_tick, int sex, int fd) {
-	nullpo_retr(0, sd);
-
-	sd->bl.id        = account_id;
-	sd->char_id      = char_id;
-	sd->login_id1    = login_id1;
-	sd->login_id2    = 0; // at this point, we can not know the value :(
-	sd->client_tick  = client_tick;
-	sd->sex          = sex;
-	sd->state.auth   = 0;
-	sd->bl.type      = BL_PC;
-	sd->canact_tick  = sd->canmove_tick = gettick();
-	sd->canlog_tick  = gettick();
-	sd->state.waitingdisconnect = 0;
-
-	return 0;
-}
-
-int pc_equippoint(struct map_session_data *sd,int n)
-{
-	int ep = 0;
-	//�]����{�q�̏ꍇ�̌��̐E�Ƃ��Z�o����
-	struct pc_base_job s_class;
-
-	nullpo_retr(0, sd);
-
-	s_class = pc_calc_base_job(sd->status.class);
-
-	if(sd->inventory_data[n]) {
-		ep = sd->inventory_data[n]->equip;
-		if(sd->inventory_data[n]->look == 1 || sd->inventory_data[n]->look == 2 || sd->inventory_data[n]->look == 6) {
-			if(ep == 2 && (pc_checkskill(sd,AS_LEFT) > 0 || s_class.job == 12))
-				return 34;
-		}
-	}
-	return ep;
-}
-
-int pc_setinventorydata(struct map_session_data *sd)
-{
-	int i,id;
-
-	nullpo_retr(0, sd);
-
-	for(i=0;i<MAX_INVENTORY;i++) {
-		id = sd->status.inventory[i].nameid;
-		sd->inventory_data[i] = itemdb_search(id);
-	}
-	return 0;
-}
-
-int pc_calcweapontype(struct map_session_data *sd)
-{
-	nullpo_retr(0, sd);
-
-	if(sd->weapontype1 != 0 &&	sd->weapontype2 == 0)
-		sd->status.weapon = sd->weapontype1;
-	if(sd->weapontype1 == 0 &&	sd->weapontype2 != 0)// ���蕐�� Only
-		sd->status.weapon = sd->weapontype2;
-	else if(sd->weapontype1 == 1 && sd->weapontype2 == 1)// �o�Z��
-		sd->status.weapon = 0x11;
-	else if(sd->weapontype1 == 2 && sd->weapontype2 == 2)// �o�P�茕
-		sd->status.weapon = 0x12;
-	else if(sd->weapontype1 == 6 && sd->weapontype2 == 6)// �o�P�蕀
-		sd->status.weapon = 0x13;
-	else if( (sd->weapontype1 == 1 && sd->weapontype2 == 2) ||
-		(sd->weapontype1 == 2 && sd->weapontype2 == 1) ) // �Z�� - �P�茕
-		sd->status.weapon = 0x14;
-	else if( (sd->weapontype1 == 1 && sd->weapontype2 == 6) ||
-		(sd->weapontype1 == 6 && sd->weapontype2 == 1) ) // �Z�� - ��
-		sd->status.weapon = 0x15;
-	else if( (sd->weapontype1 == 2 && sd->weapontype2 == 6) ||
-		(sd->weapontype1 == 6 && sd->weapontype2 == 2) ) // �P�茕 - ��
-		sd->status.weapon = 0x16;
-	else
-		sd->status.weapon = sd->weapontype1;
-
-	return 0;
-}
-
-int pc_setequipindex(struct map_session_data *sd)
-{
-	int i,j;
-
-	nullpo_retr(0, sd);
-
-	for(i=0;i<11;i++)
-		sd->equip_index[i] = -1;
-
-	for(i=0;i<MAX_INVENTORY;i++) {
-		if(sd->status.inventory[i].nameid <= 0)
-			continue;
-		if(sd->status.inventory[i].equip) {
-			for(j=0;j<11;j++)
-				if(sd->status.inventory[i].equip & equip_pos[j])
-					sd->equip_index[j] = i;
-			if(sd->status.inventory[i].equip & 0x0002) {
-				if(sd->inventory_data[i])
-					sd->weapontype1 = sd->inventory_data[i]->look;
-				else
-					sd->weapontype1 = 0;
-			}
-			if(sd->status.inventory[i].equip & 0x0020) {
-				if(sd->inventory_data[i]) {
-					if(sd->inventory_data[i]->type == 4) {
-						if(sd->status.inventory[i].equip == 0x0020)
-							sd->weapontype2 = sd->inventory_data[i]->look;
-						else
-							sd->weapontype2 = 0;
-					}
-					else
-						sd->weapontype2 = 0;
-				}
-				else
-					sd->weapontype2 = 0;
-			}
-		}
-	}
-	pc_calcweapontype(sd);
-
-	return 0;
-}
-
-int pc_isequip(struct map_session_data *sd,int n)
-{
-	struct item_data *item;
-	struct status_change *sc_data;
-	//�]����{�q�̏ꍇ�̌��̐E�Ƃ��Z�o����
-
-	nullpo_retr(0, sd);
-
-	item = sd->inventory_data[n];
-	sc_data = battle_get_sc_data(&sd->bl);
-	//s_class = pc_calc_base_job(sd->status.class);
-
-	if( battle_config.gm_allequip>0 && pc_isGM(sd)>=battle_config.gm_allequip )
-		return 1;
-
-	if(item == NULL)
-		return 0;
-	if(item->sex != 2 && sd->status.sex != item->sex)
-		return 0;
-	if(item->elv > 0 && sd->status.base_level < item->elv)
-		return 0;
-// -- moonsoul	(below statement substituted for commented out version further below
-//			 as it allows all advanced classes to equip items their normal versions
-//			 could equip)
-//
-	if(((sd->status.class==13 || sd->status.class==4014) && ((1<<7)&item->class) == 0) || // have mounted classes use unmounted equipment [Valaris]
-  	  ((sd->status.class==21 || sd->status.class==4022) && ((1<<14)&item->class) == 0))
-		return 0;
-	if(sd->status.class!=13 && sd->status.class!=4014 && sd->status.class!=21 && sd->status.class!=4022)
-	if((sd->status.class<=4000 && ((1<<sd->status.class)&item->class) == 0) || (sd->status.class>4000 && sd->status.class<4023 && ((1<<(sd->status.class-4001))&item->class) == 0) ||
-		(sd->status.class>=4023 && ((1<<(sd->status.class-4023))&item->class) == 0))
-		return 0;
-//	if(((1<<sd->status.class)&item->class) == 0)
-//		return 0;
-	if(map[sd->bl.m].flag.pvp && (item->flag.no_equip==1 || item->flag.no_equip==3))
-		return 0;
-	if(map[sd->bl.m].flag.gvg && (item->flag.no_equip==2 || item->flag.no_equip==3))
-		return 0;
-	if(item->equip & 0x0002 && sc_data && sc_data[SC_STRIPWEAPON].timer != -1)
-		return 0;
-	if(item->equip & 0x0020 && sc_data && sc_data[SC_STRIPSHIELD].timer != -1)
-		return 0;
-	if(item->equip & 0x0010 && sc_data && sc_data[SC_STRIPARMOR].timer != -1)
-		return 0;
-	if(item->equip & 0x0100 && sc_data && sc_data[SC_STRIPHELM].timer != -1)
-		return 0;
-	return 1;
-}
-
-/*==========================================
- * Weapon Breaking [Valaris]
- *------------------------------------------
- */
-int pc_breakweapon(struct map_session_data *sd)
-{
-	struct item_data* item;
-	char output[255];
-	int i;
-
-	if(sd==NULL)
-		return -1;
-	if(sd->unbreakable>=rand()%100)
-		return 0;
-	if(sd->sc_data && sd->sc_data[SC_CP_WEAPON].timer != -1)
-		return 0;
-
-	for(i=0;i<MAX_INVENTORY;i++){
-		if(sd->status.inventory[i].equip && sd->status.inventory[i].equip & 0x0002 && !sd->status.inventory[i].broken){
-			item=sd->inventory_data[i];
-			sd->status.inventory[i].broken=1;
-			//pc_unequipitem(sd,i,0);
-			if(sd->status.inventory[i].equip && sd->status.inventory[i].equip & 0x0002 && 
-			sd->status.inventory[i].broken==1){
-				sprintf(output, "%s has broken.",item->jname);
-				clif_emotion(&sd->bl,23);
-				clif_displaymessage(sd->fd, output);
-				clif_equiplist(sd);
-				skill_status_change_start(&sd->bl,SC_BROKNWEAPON,0,0,0,0,0,0);
-		}
-	}
-		if(sd->status.inventory[i].broken==1)
-			return 0;
-	}
-	
-	return 0;
-}
-/*==========================================
- * Armor Breaking [Valaris]
- *------------------------------------------
- */
-int pc_breakarmor(struct map_session_data *sd)
-{
-	struct item_data* item;
-	char output[255];
-	int i;
-
-	if(sd==NULL)
-		return -1;
-	if(sd->unbreakable>=rand()%100)
-		return 0;
-	if(sd->sc_data && sd->sc_data[SC_CP_ARMOR].timer != -1)
-		return 0;
-
-	for(i=0;i<MAX_INVENTORY;i++){
-		if(sd->status.inventory[i].equip && sd->status.inventory[i].equip & 0x0010 && !sd->status.inventory[i].broken){
-			item=sd->inventory_data[i];
-			sd->status.inventory[i].broken=1;
-			//pc_unequipitem(sd,i,0);
-			if(sd->status.inventory[i].equip && sd->status.inventory[i].equip & 0x0010 && 
-			sd->status.inventory[i].broken==1){
-				sprintf(output, "%s has broken.",item->jname);
-				clif_emotion(&sd->bl,23);
-				clif_displaymessage(sd->fd, output);
-				clif_equiplist(sd);
-				skill_status_change_start(&sd->bl,SC_BROKNARMOR,0,0,0,0,0,0);
-		}
-             }
-		if(sd->status.inventory[i].broken==1)
-			return 0;
-	}
-	return 0;
-}
-/*==========================================
- * session id�ɖ�薳��
- * char�I���瑗���Ă����X�e�[�^�X��ݒ�
- *------------------------------------------
- */
-int pc_authok(int id, int login_id2, time_t connect_until_time, struct mmo_charstatus *st)
-{
-	struct map_session_data *sd = NULL;
-
-	struct party *p;
-	struct guild *g;
-	int i;
-	unsigned long tick = gettick();
-
-	sd = map_id2sd(id);
-	if(sd==NULL)
-		return 1;
-
-	sd->login_id2 = login_id2;
-
-	memcpy(&sd->status, st, sizeof(*st));
-
-	if (sd->status.sex != sd->sex) {
-		clif_authfail_fd(sd->fd, 0);
-		return 1;
-	}
-
-	memset(&sd->state, 0, sizeof(sd->state));
-	// ��{�I�ȏ�����
-	sd->state.connect_new = 1;
-	sd->bl.prev = sd->bl.next = NULL;
-
-	sd->weapontype1 = sd->weapontype2 = 0;
-	sd->view_class = sd->status.class;
-	sd->speed = DEFAULT_WALK_SPEED;
-	sd->state.dead_sit = 0;
-	sd->dir = 0;
-	sd->head_dir = 0;
-	sd->state.auth = 1;
-	sd->walktimer = -1;
-	sd->attacktimer = -1;
-	sd->followtimer = -1; // [MouseJstr]
-	sd->skilltimer = -1;
-	sd->skillitem = -1;
-	sd->skillitemlv = -1;
-	sd->invincible_timer = -1;
-	sd->sg_count = 0;
-
-	sd->deal_locked = 0;
-	sd->trade_partner = 0;
-
-	sd->inchealhptick = 0;
-	sd->inchealsptick = 0;
-	sd->hp_sub = 0;
-	sd->sp_sub = 0;
-	sd->inchealspirithptick = 0;
-	sd->inchealspiritsptick = 0;
-	sd->canact_tick = tick;
-	sd->canmove_tick = tick;
-	sd->attackabletime = tick;
-
-	sd->doridori_counter = 0;
-
-#ifndef TXT_ONLY // mail system [Valaris]
-	if(battle_config.mail_system)
-		sd->mail_counter = 0;
-#endif
-	sd->spiritball = 0;
-	for(i = 0; i < MAX_SKILL_LEVEL; i++)
-		sd->spirit_timer[i] = -1;
-	for(i = 0; i < MAX_SKILLTIMERSKILL; i++)
-		sd->skilltimerskill[i].timer = -1;
-
-	memset(&sd->dev,0,sizeof(struct square));
-	for(i = 0; i < 5; i++) {
-		sd->dev.val1[i] = 0;
-		sd->dev.val2[i] = 0;
-	}
-	
-	// �A�J�E���g�ϐ��̑��M�v��
-	intif_request_accountreg(sd);
-
-	// �A�C�e���`�F�b�N
-	pc_setinventorydata(sd);
-	pc_checkitem(sd);
-
-	// pet
-	sd->petDB = NULL;
-	sd->pd = NULL;
-	sd->pet_hungry_timer = -1;
-	memset(&sd->pet, 0, sizeof(struct s_pet));
-
-	// �X�e�[�^�X�ُ�̏�����
-	for(i = 0; i < MAX_STATUSCHANGE; i++) {
-		sd->sc_data[i].timer=-1;
-		sd->sc_data[i].val1 = sd->sc_data[i].val2 = sd->sc_data[i].val3 = sd->sc_data[i].val4 = 0;
-	}
-	sd->sc_count=0;
-	if ((battle_config.atc_gmonly == 0 || pc_isGM(sd)) &&
-	    (pc_isGM(sd) >= get_atcommand_level(AtCommand_Hide)))
-		sd->status.option &= (OPTION_MASK | OPTION_HIDE);
-	else
-		sd->status.option &= OPTION_MASK;
-
-	// �X�L�����j�b�g�֌W�̏�����
-	memset(sd->skillunit, 0, sizeof(sd->skillunit));
-	memset(sd->skillunittick, 0, sizeof(sd->skillunittick));
-
-	// init ignore list
-	memset(sd->ignore, 0, sizeof(sd->ignore));
-
-	// �p�[�e�B�[�֌W�̏�����
-	sd->party_sended = 0;
-	sd->party_invite = 0;
-	sd->party_x = -1;
-	sd->party_y = -1;
-	sd->party_hp = -1;
-
-	// �M���h�֌W�̏�����
-	sd->guild_sended = 0;
-	sd->guild_invite = 0;
-	sd->guild_alliance = 0;
-
-	// �C�x���g�֌W�̏�����
-	memset(sd->eventqueue, 0, sizeof(sd->eventqueue));
-	for(i = 0; i < MAX_EVENTTIMER; i++)
-		sd->eventtimer[i] = -1;
-
-	// �ʒu�̐ݒ�
-	pc_setpos(sd,sd->status.last_point.map, sd->status.last_point.x, sd->status.last_point.y, 0);
-
-	// pet
-	if (sd->status.pet_id > 0)
-		intif_request_petdata(sd->status.account_id, sd->status.char_id, sd->status.pet_id);
-
-	// �p�[�e�B�A�M���h�f�[�^�̗v��
-	if (sd->status.party_id > 0 && (p = party_search(sd->status.party_id)) == NULL)
-		party_request_info(sd->status.party_id);
-	if (sd->status.guild_id > 0 && (g = guild_search(sd->status.guild_id)) == NULL)
-		guild_request_info(sd->status.guild_id);
-
-	// pvp�̐ݒ�
-	sd->pvp_rank = 0;
-	sd->pvp_point = 0;
-	sd->pvp_timer = -1;
-
-	// �ʒm
-
-	clif_authok(sd);
-	map_addnickdb(sd);
-	if (map_charid2nick(sd->status.char_id) == NULL)
-		map_addchariddb(sd->status.char_id, sd->status.name);
-
-	//�X�p�m�r�p���ɃJ�E���^�[�̃X�N���v�g�ϐ�����̓ǂݏo����sd�ւ̃Z�b�g
-	sd->die_counter = pc_readglobalreg(sd,"PC_DIE_COUNTER");
-
-	if (night_flag == 1) {
-		char tmpstr[1024];
-		strcpy(tmpstr, msg_txt(500)); // Actually, it's the night...
-		clif_wis_message(sd->fd, wisp_server_name, tmpstr, strlen(tmpstr)+1);
-		sd->opt2 |= STATE_BLIND;
-	}
-
-	// �X�e�[�^�X�����v�Z�Ȃ�
-	pc_calcstatus(sd,1);
-
-	if (pc_isGM(sd))
-		printf("Connection accepted: character '%s' (account: %d; GM level %d).\n", sd->status.name, sd->status.account_id, pc_isGM(sd));
-	else
-		printf("Connection accepted: Character '%s' (account: %d).\n", sd->status.name, sd->status.account_id);
-
-	// Message of the Day�̑��M
-	{
-		char buf[256];
-		FILE *fp;
-		if ((fp = fopen(motd_txt, "r")) != NULL) {
-			while (fgets(buf, sizeof(buf)-1, fp) != NULL) {
-				int i;
-				for(i=0; buf[i]; i++) {
-					if (buf[i] == '\r' || buf[i]== '\n') {
-						buf[i] = 0;
-						break;
-					}
-				}
-				clif_displaymessage(sd->fd, buf);
-			}
-			fclose(fp);
-		}
-	}
-
-#ifndef TXT_ONLY
-	if(battle_config.mail_system)
-		mail_check(sd,1); // check mail at login [Valaris]
-#endif
-
-	// message of the limited time of the account
-	if (connect_until_time != 0) { // don't display if it's unlimited or unknow value
-		char tmpstr[1024];
-		strftime(tmpstr, sizeof(tmpstr) - 1, msg_txt(501), localtime(&connect_until_time)); // "Your account time limit is: %d-%m-%Y %H:%M:%S."
-		clif_wis_message(sd->fd, wisp_server_name, tmpstr, strlen(tmpstr)+1);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * session id�ɖ�肠��Ȃ̂Ō�n��
- *------------------------------------------
- */
-int pc_authfail(int id) {
-	struct map_session_data *sd;
-
-	sd = map_id2sd(id);
-	if (sd == NULL)
-		return 1;
-
-	clif_authfail_fd(sd->fd, 0);
-
-	return 0;
-}
-
-static int pc_calc_skillpoint(struct map_session_data* sd)
-{
-	int  i,skill,skill_point=0;
-
-	nullpo_retr(0, sd);
-
-	for(i=1;i<MAX_SKILL;i++){
-		if( (skill = pc_checkskill(sd,i)) > 0) {
-			if(!(skill_get_inf2(i)&0x01) || battle_config.quest_skill_learn) {
-				if(!sd->status.skill[i].flag)
-					skill_point += skill;
-				else if(sd->status.skill[i].flag > 2 && sd->status.skill[i].flag != 13) {
-					skill_point += (sd->status.skill[i].flag - 2);
-				}
-			}
-		}
-	}
-
-	return skill_point;
-}
-
-/*==========================================
- * �o������X�L���̌v�Z
- *------------------------------------------
- */
-int pc_calc_skilltree(struct map_session_data *sd)
-{
-	int i,id=0,flag;
-	int c=0, s=0;
-	//�]����{�q�̏ꍇ�̌��̐E�Ƃ��Z�o����
-	struct pc_base_job s_class;
-
-	nullpo_retr(0, sd);
-
-	s_class = pc_calc_base_job(sd->status.class);
-	c = s_class.job;
-	s = (s_class.upper==1) ? 1 : 0 ; //�]���ȊO�͒ʏ�̃X�L���H
-
-	if((battle_config.skillup_limit) && ((c >= 0 && c < 23) || (c >= 4001 && c < 4023) || (c >= 4023 && c < 4045))) {
-		int skill_point = pc_calc_skillpoint(sd);
-		if(skill_point < 9)
-			c = 0;
-		else if((sd->status.skill_point >= sd->status.job_level && skill_point < 58) && ((c > 6 && c < 23) || (c > 4007 && c < 4023) || (c > 4029 && c < 4045))) {
-			switch(c) {
-				case 7:
-				case 14:
-					c = 1;
-					break;
-				case 8:
-				case 15:
-					c = 4;
-					break;
-				case 9:
-				case 16:
-					c = 2;
-					break;
-				case 10:
-				case 18:
-					c = 5;
-					break;
-				case 11:
-				case 19:
-				case 20:
-					c = 3;
-					break;
-				case 12:
-				case 17:
-					c = 6;
-					break;
-				case 4008:
-				case 4015:
-					c = 4002;
-					break;
-				case 4009:
-				case 4016:
-					c = 4005;
-					break;
-				case 4010:
-				case 4017:
-					c = 4003;
-					break;
-				case 4011:
-				case 4019:
-					c = 4006;
-					break;
-				case 4012:
-				case 4020:
-				case 4021:
-					c = 4004;
-					break;
-				case 4013:
-				case 4018:
-					c = 4007;
-					break;
-				case 4030:
-				case 4037:
-					c = 4024;
-					break;
-				case 4031:
-				case 4038:
-					c = 4027;
-					break;
-				case 4032:
-				case 4039:
-					c = 4025;
-					break;
-				case 4033:
-				case 4040:
-					c = 4028;
-					break;
-				case 4034:
-				case 4041:
-				case 4042:
-					c = 4026;
-					break;
-				case 4035:
-				case 4043:
-					c = 4029;
-					break;
-
-			}
-		}
-	}
-
-	for(i=0;i<MAX_SKILL;i++){
-		if (sd->status.skill[i].flag != 13) sd->status.skill[i].id=0;
-		if (sd->status.skill[i].flag && sd->status.skill[i].flag != 13){	// card�X�L���Ȃ�A
-			sd->status.skill[i].lv=(sd->status.skill[i].flag==1)?0:sd->status.skill[i].flag-2;	// �{����lv��
-			sd->status.skill[i].flag=0;	// flag��0�ɂ��Ă���
-		}
-	}
-
-	if (battle_config.gm_allskill > 0 && pc_isGM(sd) >= battle_config.gm_allskill){
-		// �S�ẴX�L��
-		for(i=1;i<158;i++)
-			sd->status.skill[i].id=i;
-		for(i=210;i<291;i++)
-			sd->status.skill[i].id=i;
-		for(i=304;i<337;i++)
-			sd->status.skill[i].id=i;
-		if(battle_config.enable_upper_class){ //conf�Ŗ����łȂ���Γǂݍ���
-		for(i=355;i<MAX_SKILL;i++)
-			sd->status.skill[i].id=i;
-		}
-	}else{
-		// �ʏ�̌v�Z
-		do{
-			flag=0;
-			for(i=0;(id=skill_tree[s][c][i].id)>0;i++){
-				int j,f=1;
-				if(!battle_config.skillfree) {
-					for(j=0;j<5;j++) {
-						if( skill_tree[s][c][i].need[j].id &&
-							pc_checkskill(sd,skill_tree[s][c][i].need[j].id) < skill_tree[s][c][i].need[j].lv)
-							f=0;
-					}
-				}
-				if(f && sd->status.skill[id].id==0 ){
-					sd->status.skill[id].id=id;
-					flag=1;
-				}
-			}
-		}while(flag);
-	}
-//	if(battle_config.etc_log)
-//		printf("calc skill_tree\n");
-	return 0;
-}
-
-/*==========================================
- * �d�ʃA�C�R���̊m�F
- *------------------------------------------
- */
-int pc_checkweighticon(struct map_session_data *sd)
-{
-	int flag=0;
-
-	nullpo_retr(0, sd);
-
-	if(sd->weight*2 >= sd->max_weight)
-		flag=1;
-	if(sd->weight*10 >= sd->max_weight*9)
-		flag=2;
-
-	if(flag==1){
-		if(sd->sc_data[SC_WEIGHT50].timer==-1)
-			skill_status_change_start(&sd->bl,SC_WEIGHT50,0,0,0,0,0,0);
-	}else{
-		skill_status_change_end(&sd->bl,SC_WEIGHT50,-1);
-	}
-	if(flag==2){
-		if(sd->sc_data[SC_WEIGHT90].timer==-1)
-			skill_status_change_start(&sd->bl,SC_WEIGHT90,0,0,0,0,0,0);
-	}else{
-		skill_status_change_end(&sd->bl,SC_WEIGHT90,-1);
-	}
-	return 0;
-}
-
-/*==========================================
- * �p�����[�^�v�Z
- * first==0�̎��A�v�Z�Ώۂ̃p�����[�^���Ăяo���O����
- * �� �������ꍇ������send���邪�A
- * �\���I�ɕω��������p�����[�^�͎��O��send����悤��
- *------------------------------------------
- */
-int pc_calcstatus(struct map_session_data* sd,int first)
-{
-	int b_speed,b_max_hp,b_max_sp,b_hp,b_sp,b_weight,b_max_weight,b_paramb[6],b_parame[6],b_hit,b_flee;
-	int b_aspd,b_watk,b_def,b_watk2,b_def2,b_flee2,b_critical,b_attackrange,b_matk1,b_matk2,b_mdef,b_mdef2,b_class;
-	int b_base_atk;
-	struct skill b_skill[MAX_SKILL];
-	int i,bl,index;
-	int skill,aspd_rate,wele,wele_,def_ele,refinedef=0;
-	int pele=0,pdef_ele=0;
-	int str,dstr,dex;
-	struct pc_base_job s_class;
-
-	nullpo_retr(0, sd);
-
-	//�]����{�q�̏ꍇ�̌��̐E�Ƃ��Z�o����
-	s_class = pc_calc_base_job(sd->status.class);
-
-	b_speed = sd->speed;
-	b_max_hp = sd->status.max_hp;
-	b_max_sp = sd->status.max_sp;
-	b_hp = sd->status.hp;
-	b_sp = sd->status.sp;
-	b_weight = sd->weight;
-	b_max_weight = sd->max_weight;
-	memcpy(b_paramb,&sd->paramb,sizeof(b_paramb));
-	memcpy(b_parame,&sd->paramc,sizeof(b_parame));
-	memcpy(b_skill,&sd->status.skill,sizeof(b_skill));
-	b_hit = sd->hit;
-	b_flee = sd->flee;
-	b_aspd = sd->aspd;
-	b_watk = sd->watk;
-	b_def = sd->def;
-	b_watk2 = sd->watk2;
-	b_def2 = sd->def2;
-	b_flee2 = sd->flee2;
-	b_critical = sd->critical;
-	b_attackrange = sd->attackrange;
-	b_matk1 = sd->matk1;
-	b_matk2 = sd->matk2;
-	b_mdef = sd->mdef;
-	b_mdef2 = sd->mdef2;
-	b_class = sd->view_class;
-	sd->view_class = sd->status.class;
-	b_base_atk = sd->base_atk;
-
-	pc_calc_skilltree(sd);	// �X�L���c���[�̌v�Z
-
-	sd->max_weight = max_weight_base[s_class.job]+sd->status.str*300;
-
-	if(first&1) {
-		sd->weight=0;
-		for(i=0;i<MAX_INVENTORY;i++){
-			if(sd->status.inventory[i].nameid==0 || sd->inventory_data[i] == NULL)
-				continue;
-			sd->weight += sd->inventory_data[i]->weight*sd->status.inventory[i].amount;
-		}
-		sd->cart_max_weight=battle_config.max_cart_weight;
-		sd->cart_weight=0;
-		sd->cart_max_num=MAX_CART;
-		sd->cart_num=0;
-		for(i=0;i<MAX_CART;i++){
-			if(sd->status.cart[i].nameid==0)
-				continue;
-			sd->cart_weight+=itemdb_weight(sd->status.cart[i].nameid)*sd->status.cart[i].amount;
-			sd->cart_num++;
-		}
-	}
-
-	memset(sd->paramb,0,sizeof(sd->paramb));
-	memset(sd->parame,0,sizeof(sd->parame));
-	sd->hit = 0;
-	sd->flee = 0;
-	sd->flee2 = 0;
-	sd->critical = 0;
-	sd->aspd = 0;
-	sd->watk = 0;
-	sd->def = 0;
-	sd->mdef = 0;
-	sd->watk2 = 0;
-	sd->def2 = 0;
-	sd->mdef2 = 0;
-	sd->status.max_hp = 0;
-	sd->status.max_sp = 0;
-	sd->attackrange = 0;
-	sd->attackrange_ = 0;
-	sd->atk_ele = 0;
-	sd->def_ele = 0;
-	sd->star =0;
-	sd->overrefine =0;
-	sd->matk1 =0;
-	sd->matk2 =0;
-	sd->speed = DEFAULT_WALK_SPEED ;
-	sd->hprate=100;
-	sd->sprate=100;
-	sd->castrate=100;
-	sd->dsprate=100;
-	sd->base_atk=0;
-	sd->arrow_atk=0;
-	sd->arrow_ele=0;
-	sd->arrow_hit=0;
-	sd->arrow_range=0;
-	sd->nhealhp=sd->nhealsp=sd->nshealhp=sd->nshealsp=sd->nsshealhp=sd->nsshealsp=0;
-	memset(sd->addele,0,sizeof(sd->addele));
-	memset(sd->addrace,0,sizeof(sd->addrace));
-	memset(sd->addsize,0,sizeof(sd->addsize));
-	memset(sd->addele_,0,sizeof(sd->addele_));
-	memset(sd->addrace_,0,sizeof(sd->addrace_));
-	memset(sd->addsize_,0,sizeof(sd->addsize_));
-	memset(sd->subele,0,sizeof(sd->subele));
-	memset(sd->subrace,0,sizeof(sd->subrace));
-	memset(sd->addeff,0,sizeof(sd->addeff));
-	memset(sd->addeff2,0,sizeof(sd->addeff2));
-	memset(sd->reseff,0,sizeof(sd->reseff));
-	memset(&sd->special_state,0,sizeof(sd->special_state));
-	memset(sd->weapon_coma_ele,0,sizeof(sd->weapon_coma_ele));
-	memset(sd->weapon_coma_race,0,sizeof(sd->weapon_coma_race));
-
-	sd->watk_ = 0;			//�񓁗��p(��)
-	sd->watk_2 = 0;
-	sd->atk_ele_ = 0;
-	sd->star_ = 0;
-	sd->overrefine_ = 0;
-
-	sd->aspd_rate = 100;
-	sd->speed_rate = 100;
-	sd->hprecov_rate = 100;
-	sd->sprecov_rate = 100;
-	sd->critical_def = 0;
-	sd->double_rate = 0;
-	sd->near_attack_def_rate = sd->long_attack_def_rate = 0;
-	sd->atk_rate = sd->matk_rate = 100;
-	sd->ignore_def_ele = sd->ignore_def_race = 0;
-	sd->ignore_def_ele_ = sd->ignore_def_race_ = 0;
-	sd->ignore_mdef_ele = sd->ignore_mdef_race = 0;
-	sd->arrow_cri = 0;
-	sd->magic_def_rate = sd->misc_def_rate = 0;
-	memset(sd->arrow_addele,0,sizeof(sd->arrow_addele));
-	memset(sd->arrow_addrace,0,sizeof(sd->arrow_addrace));
-	memset(sd->arrow_addsize,0,sizeof(sd->arrow_addsize));
-	memset(sd->arrow_addeff,0,sizeof(sd->arrow_addeff));
-	memset(sd->arrow_addeff2,0,sizeof(sd->arrow_addeff2));
-	memset(sd->magic_addele,0,sizeof(sd->magic_addele));
-	memset(sd->magic_addrace,0,sizeof(sd->magic_addrace));
-	memset(sd->magic_subrace,0,sizeof(sd->magic_subrace));
-	sd->perfect_hit = 0;
-	sd->critical_rate = sd->hit_rate = sd->flee_rate = sd->flee2_rate = 100;
-	sd->def_rate = sd->def2_rate = sd->mdef_rate = sd->mdef2_rate = 100;
-	sd->def_ratio_atk_ele = sd->def_ratio_atk_ele_ = 0;
-	sd->def_ratio_atk_race = sd->def_ratio_atk_race_ = 0;
-	sd->get_zeny_num = 0;
-	sd->add_damage_class_count = sd->add_damage_class_count_ = sd->add_magic_damage_class_count = 0;
-	sd->add_def_class_count = sd->add_mdef_class_count = 0;
-	sd->monster_drop_item_count = 0;
-	memset(sd->add_damage_classrate,0,sizeof(sd->add_damage_classrate));
-	memset(sd->add_damage_classrate_,0,sizeof(sd->add_damage_classrate_));
-	memset(sd->add_magic_damage_classrate,0,sizeof(sd->add_magic_damage_classrate));
-	memset(sd->add_def_classrate,0,sizeof(sd->add_def_classrate));
-	memset(sd->add_mdef_classrate,0,sizeof(sd->add_mdef_classrate));
-	memset(sd->monster_drop_race,0,sizeof(sd->monster_drop_race));
-	memset(sd->monster_drop_itemrate,0,sizeof(sd->monster_drop_itemrate));
-	sd->speed_add_rate = sd->aspd_add_rate = 100;
-	sd->double_add_rate = sd->perfect_hit_add = sd->get_zeny_add_num = 0;
-	sd->splash_range = sd->splash_add_range = 0;
-	sd->autospell_id = sd->autospell_lv = sd->autospell_rate = 0;
-	sd->hp_drain_rate = sd->hp_drain_per = sd->sp_drain_rate = sd->sp_drain_per = 0;
-	sd->hp_drain_rate_ = sd->hp_drain_per_ = sd->sp_drain_rate_ = sd->sp_drain_per_ = 0;
-	sd->short_weapon_damage_return = sd->long_weapon_damage_return = 0;
-	sd->magic_damage_return = 0; //AppleGirl Was Here
-	sd->random_attack_increase_add = sd->random_attack_increase_per = 0;
-
-	if(!sd->disguiseflag && sd->disguise) {
-		sd->disguise=0;
-		clif_changelook(&sd->bl,LOOK_WEAPON,sd->status.weapon);
-		clif_changelook(&sd->bl,LOOK_SHIELD,sd->status.shield);
-		clif_changelook(&sd->bl,LOOK_HEAD_BOTTOM,sd->status.head_bottom);
-		clif_changelook(&sd->bl,LOOK_HEAD_TOP,sd->status.head_top);
-		clif_changelook(&sd->bl,LOOK_HEAD_MID,sd->status.head_mid);
-		clif_clearchar(&sd->bl, 9);
-		pc_setpos(sd, sd->mapname, sd->bl.x, sd->bl.y, 3);
-	}
-
-	for(i=0;i<10;i++) {
-		index = sd->equip_index[i];
-		if(index < 0)
-			continue;
-		if(i == 9 && sd->equip_index[8] == index)
-			continue;
-		if(i == 5 && sd->equip_index[4] == index)
-			continue;
-		if(i == 6 && (sd->equip_index[5] == index || sd->equip_index[4] == index))
-			continue;
-
-		if(sd->inventory_data[index]) {
-			if(sd->inventory_data[index]->type == 4) {
-				if(sd->status.inventory[index].card[0]!=0x00ff && sd->status.inventory[index].card[0]!=0x00fe && sd->status.inventory[index].card[0]!=(short)0xff00) {
-					int j;
-					for(j=0;j<sd->inventory_data[index]->slot;j++){	// �J�[�h
-						int c=sd->status.inventory[index].card[j];
-						if(c>0){
-							if(i == 8 && sd->status.inventory[index].equip == 0x20)
-								sd->state.lr_flag = 1;
-							run_script(itemdb_equipscript(c),0,sd->bl.id,0);
-							sd->state.lr_flag = 0;
-						}
-					}
-				}
-			}
-			else if(sd->inventory_data[index]->type==5){ // �h��
-				if(sd->status.inventory[index].card[0]!=0x00ff && sd->status.inventory[index].card[0]!=0x00fe && sd->status.inventory[index].card[0]!=(short)0xff00) {
-					int j;
-					for(j=0;j<sd->inventory_data[index]->slot;j++){	// �J�[�h
-						int c=sd->status.inventory[index].card[j];
-						if(c>0)
-							run_script(itemdb_equipscript(c),0,sd->bl.id,0);
-					}
-				}
-			}
-		}
-	}
-	wele = sd->atk_ele;
-	wele_ = sd->atk_ele_;
-	def_ele = sd->def_ele;
-	if(sd->status.pet_id > 0) {
-		struct pet_data *pd=sd->pd;
-		if((pd && battle_config.pet_status_support==1) && (battle_config.pet_equip_required==0 || (battle_config.pet_equip_required && pd->equip > 0))) {
-			if(sd->status.pet_id > 0 && sd->petDB && sd->pet.intimate > 0)
-				run_script(sd->petDB->script,0,sd->bl.id,0);
-			pele = sd->atk_ele;
-			pdef_ele = sd->def_ele;
-			sd->atk_ele = sd->def_ele = 0;
-		}
-	}
-	memcpy(sd->paramcard,sd->parame,sizeof(sd->paramcard));
-
-	// �����i�ɂ��X�e�[�^�X�ω��͂����Ŏ��s
-	for(i=0;i<10;i++) {
-		index = sd->equip_index[i];
-		if(index < 0)
-			continue;
-		if(i == 9 && sd->equip_index[8] == index)
-			continue;
-		if(i == 5 && sd->equip_index[4] == index)
-			continue;
-		if(i == 6 && (sd->equip_index[5] == index || sd->equip_index[4] == index))
-			continue;
-		if(sd->inventory_data[index]) {
-			sd->def += sd->inventory_data[index]->def;
-			if(sd->inventory_data[index]->type == 4) {
-				int r,wlv = sd->inventory_data[index]->wlv;
-				if(i == 8 && sd->status.inventory[index].equip == 0x20) {
-					//�񓁗��p�f�[�^����
-					sd->watk_ += sd->inventory_data[index]->atk;
-					sd->watk_2 = (r=sd->status.inventory[index].refine)*	// ���B�U����
-						refinebonus[wlv][0];
-					if( (r-=refinebonus[wlv][2])>0 )	// �ߏ萸�B�{�[�i�X
-						sd->overrefine_ = r*refinebonus[wlv][1];
-
-					if(sd->status.inventory[index].card[0]==0x00ff){	// ��������
-						sd->star_ = (sd->status.inventory[index].card[1]>>8);	// ���̂�����
-						wele_= (sd->status.inventory[index].card[1]&0x0f);	// �� ��
-					}
-					sd->attackrange_ += sd->inventory_data[index]->range;
-					sd->state.lr_flag = 1;
-					run_script(sd->inventory_data[index]->equip_script,0,sd->bl.id,0);
-					sd->state.lr_flag = 0;
-				}
-				else {	//�񓁗�����ȊO
-					sd->watk += sd->inventory_data[index]->atk;
-					sd->watk2 += (r=sd->status.inventory[index].refine)*	// ���B�U����
-						refinebonus[wlv][0];
-					if( (r-=refinebonus[wlv][2])>0 )	// �ߏ萸�B�{�[�i�X
-						sd->overrefine += r*refinebonus[wlv][1];
-
-					if(sd->status.inventory[index].card[0]==0x00ff){	// ��������
-						sd->star += (sd->status.inventory[index].card[1]>>8);	// ���̂�����
-						wele = (sd->status.inventory[index].card[1]&0x0f);	// �� ��
-					}
-					sd->attackrange += sd->inventory_data[index]->range;
-					run_script(sd->inventory_data[index]->equip_script,0,sd->bl.id,0);
-				}
-			}
-			else if(sd->inventory_data[index]->type == 5) {
-				sd->watk += sd->inventory_data[index]->atk;
-				refinedef += sd->status.inventory[index].refine*refinebonus[0][0];
-				run_script(sd->inventory_data[index]->equip_script,0,sd->bl.id,0);
-			}
-		}
-	}
-
-	if(sd->equip_index[10] >= 0){ // ��
-		index = sd->equip_index[10];
-		if(sd->inventory_data[index]){		//�܂������������Ă��Ȃ�
-			sd->state.lr_flag = 2;
-			run_script(sd->inventory_data[index]->equip_script,0,sd->bl.id,0);
-			sd->state.lr_flag = 0;
-			sd->arrow_atk += sd->inventory_data[index]->atk;
-		}
-	}
-	sd->def += (refinedef+50)/100;
-
-	if(sd->attackrange < 1) sd->attackrange = 1;
-	if(sd->attackrange_ < 1) sd->attackrange_ = 1;
-	if(sd->attackrange < sd->attackrange_)
-		sd->attackrange = sd->attackrange_;
-	if(sd->status.weapon == 11)
-		sd->attackrange += sd->arrow_range;
-	if(wele > 0)
-		sd->atk_ele = wele;
-	if(wele_ > 0)
-		sd->atk_ele_ = wele_;
-	if(def_ele > 0)
-		sd->def_ele = def_ele;
-	if(battle_config.pet_status_support) {
-		if(pele > 0 && !sd->atk_ele)
-			sd->atk_ele = pele;
-		if(pdef_ele > 0 && !sd->def_ele)
-			sd->def_ele = pdef_ele;
-	}
-	sd->double_rate += sd->double_add_rate;
-	sd->perfect_hit += sd->perfect_hit_add;
-	sd->get_zeny_num += sd->get_zeny_add_num;
-	sd->splash_range += sd->splash_add_range;
-	if(sd->speed_add_rate != 100)
-		sd->speed_rate += sd->speed_add_rate - 100;
-	if(sd->aspd_add_rate != 100)
-		sd->aspd_rate += sd->aspd_add_rate - 100;
-
-	// ����ATK�T�C�Y�␳ (�E��)
-	sd->atkmods[0] = atkmods[0][sd->weapontype1];
-	sd->atkmods[1] = atkmods[1][sd->weapontype1];
-	sd->atkmods[2] = atkmods[2][sd->weapontype1];
-	//����ATK�T�C�Y�␳ (����)
-	sd->atkmods_[0] = atkmods[0][sd->weapontype2];
-	sd->atkmods_[1] = atkmods[1][sd->weapontype2];
-	sd->atkmods_[2] = atkmods[2][sd->weapontype2];
-
-	// job�{�[�i�X��
-	for(i=0;i<sd->status.job_level && i<MAX_LEVEL;i++){
-		if(job_bonus[s_class.upper][s_class.job][i])
-			sd->paramb[job_bonus[s_class.upper][s_class.job][i]-1]++;
-	}
-
-	if( (skill=pc_checkskill(sd,MC_INCCARRY))>0 )	// skill can be used with an item now, thanks to orn [Valaris]
-		sd->max_weight += skill*1000;
-
-	if( (skill=pc_checkskill(sd,AC_OWL))>0 )	// �ӂ��낤�̖�
-		sd->paramb[4] += skill;
-
-	// �X�e�[�^�X�ω��ɂ���{�p�����[�^�␳
-	if(sd->sc_count){
-		if(sd->sc_data[SC_CONCENTRATE].timer!=-1 && sd->sc_data[SC_QUAGMIRE].timer == -1){	// �W���͌���
-			sd->paramb[1]+= (sd->status.agi+sd->paramb[1]+sd->parame[1]-sd->paramcard[1])*(2+sd->sc_data[SC_CONCENTRATE].val1)/100;
-			sd->paramb[4]+= (sd->status.dex+sd->paramb[4]+sd->parame[4]-sd->paramcard[4])*(2+sd->sc_data[SC_CONCENTRATE].val1)/100;
-		}
-		if(sd->sc_data[SC_INCREASEAGI].timer!=-1 && sd->sc_data[SC_QUAGMIRE].timer == -1 && sd->sc_data[SC_DONTFORGETME].timer == -1){	// ���x����
-			sd->paramb[1]+= 2+sd->sc_data[SC_INCREASEAGI].val1;
-			sd->speed -= sd->speed *25/100;
-		}
-		if(sd->sc_data[SC_DECREASEAGI].timer!=-1)	// ���x����(agi��battle.c��)
-			sd->speed = sd->speed *125/100;
-		if(sd->sc_data[SC_CLOAKING].timer!=-1)
-			sd->speed = (sd->speed*(76+(sd->sc_data[SC_INCREASEAGI].val1*3)))/100;
-		if(sd->sc_data[SC_BLESSING].timer!=-1){	// �u���b�V���O
-			sd->paramb[0]+= sd->sc_data[SC_BLESSING].val1;
-			sd->paramb[3]+= sd->sc_data[SC_BLESSING].val1;
-			sd->paramb[4]+= sd->sc_data[SC_BLESSING].val1;
-		}
-		if(sd->sc_data[SC_GLORIA].timer!=-1)	// �O�����A
-			sd->paramb[5]+= 30;
-		if(sd->sc_data[SC_LOUD].timer!=-1 && sd->sc_data[SC_QUAGMIRE].timer == -1)	// ���E�h�{�C�X
-			sd->paramb[0]+= 4;
-		if(sd->sc_data[SC_QUAGMIRE].timer!=-1){	// �N�@�O�}�C�A
-			sd->speed = sd->speed*3/2;
-			sd->paramb[1]-=(sd->status.agi+sd->paramb[1]+sd->parame[1])/2;
-			sd->paramb[4]-=(sd->status.dex+sd->paramb[4]+sd->parame[4])/2;
-		}
-		if(sd->sc_data[SC_TRUESIGHT].timer!=-1){	// �g�D���[�T�C�g
-			sd->paramb[0]+= 5;
-			sd->paramb[1]+= 5;
-			sd->paramb[2]+= 5;
-			sd->paramb[3]+= 5;
-			sd->paramb[4]+= 5;
-			sd->paramb[5]+= 5;
-		}
-	}
-
-	//1�x������łȂ�Job70�X�p�m�r��+10
-	if(s_class.job == 23 && sd->die_counter == 0 && sd->status.job_level >= 70){
-		sd->paramb[0]+= 15;
-		sd->paramb[1]+= 15;
-		sd->paramb[2]+= 15;
-		sd->paramb[3]+= 15;
-		sd->paramb[4]+= 15;
-		sd->paramb[5]+= 15;
-	}
-	sd->paramc[0]=sd->status.str+sd->paramb[0]+sd->parame[0];
-	sd->paramc[1]=sd->status.agi+sd->paramb[1]+sd->parame[1];
-	sd->paramc[2]=sd->status.vit+sd->paramb[2]+sd->parame[2];
-	sd->paramc[3]=sd->status.int_+sd->paramb[3]+sd->parame[3];
-	sd->paramc[4]=sd->status.dex+sd->paramb[4]+sd->parame[4];
-	sd->paramc[5]=sd->status.luk+sd->paramb[5]+sd->parame[5];
-	for(i=0;i<6;i++)
-		if(sd->paramc[i] < 0) sd->paramc[i] = 0;
-
-	if(sd->status.weapon == 11 || sd->status.weapon == 13 || sd->status.weapon == 14) {
-		str = sd->paramc[4];
-		dex = sd->paramc[0];
-	}
-	else {
-		str = sd->paramc[0];
-		dex = sd->paramc[4];
-	}
-	dstr = str/10;
-	sd->base_atk += str + dstr*dstr + dex/5 + sd->paramc[5]/5;
-	sd->matk1 += sd->paramc[3]+(sd->paramc[3]/5)*(sd->paramc[3]/5);
-	sd->matk2 += sd->paramc[3]+(sd->paramc[3]/7)*(sd->paramc[3]/7);
-	if(sd->matk1 < sd->matk2) {
-		int temp = sd->matk2;
-		sd->matk2 = sd->matk1;
-		sd->matk1 = temp;
-	}
-	sd->hit += sd->paramc[4] + sd->status.base_level;
-	sd->flee += sd->paramc[1] + sd->status.base_level;
-	sd->def2 += sd->paramc[2];
-	sd->mdef2 += sd->paramc[3];
-	sd->flee2 += sd->paramc[5]+10;
-	sd->critical += (sd->paramc[5]*3)+10;
-
-	if(sd->base_atk < 1)
-		sd->base_atk = 1;
-	if(sd->critical_rate != 100)
-		sd->critical = (sd->critical*sd->critical_rate)/100;
-	if(sd->critical < 10) sd->critical = 10;
-	if(sd->hit_rate != 100)
-		sd->hit = (sd->hit*sd->hit_rate)/100;
-	if(sd->hit < 1) sd->hit = 1;
-	if(sd->flee_rate != 100)
-		sd->flee = (sd->flee*sd->flee_rate)/100;
-	if(sd->flee < 1) sd->flee = 1;
-	if(sd->flee2_rate != 100)
-		sd->flee2 = (sd->flee2*sd->flee2_rate)/100;
-	if(sd->flee2 < 10) sd->flee2 = 10;
-	if(sd->def_rate != 100)
-		sd->def = (sd->def*sd->def_rate)/100;
-	if(sd->def < 0) sd->def = 0;
-	if(sd->def2_rate != 100)
-		sd->def2 = (sd->def2*sd->def2_rate)/100;
-	if(sd->def2 < 1) sd->def2 = 1;
-	if(sd->mdef_rate != 100)
-		sd->mdef = (sd->mdef*sd->mdef_rate)/100;
-	if(sd->mdef < 0) sd->mdef = 0;
-	if(sd->mdef2_rate != 100)
-		sd->mdef2 = (sd->mdef2*sd->mdef2_rate)/100;
-	if(sd->mdef2 < 1) sd->mdef2 = 1;
-
-	// �񓁗� ASPD �C��
-	if (sd->status.weapon <= 16)
-		sd->aspd += aspd_base[s_class.job][sd->status.weapon]-(sd->paramc[1]*4+sd->paramc[4])*aspd_base[s_class.job][sd->status.weapon]/1000;
-	else
-		sd->aspd += (
-			(aspd_base[s_class.job][sd->weapontype1]-(sd->paramc[1]*4+sd->paramc[4])*aspd_base[s_class.job][sd->weapontype1]/1000) +
-			(aspd_base[s_class.job][sd->weapontype2]-(sd->paramc[1]*4+sd->paramc[4])*aspd_base[s_class.job][sd->weapontype2]/1000)
-			) * 140 / 200;
-
-	aspd_rate = sd->aspd_rate;
-
-	//�U�����x����
-
-	if( (skill=pc_checkskill(sd,AC_VULTURE))>0){	// ���V�̖�
-		sd->hit += skill;
-		if(sd->status.weapon == 11)
-			sd->attackrange += skill;
-	}
-
-	if( (skill=pc_checkskill(sd,BS_WEAPONRESEARCH))>0)	// ���팤���̖���������
-		sd->hit += skill*2;
-	if(sd->status.option&2 && (skill = pc_checkskill(sd,RG_TUNNELDRIVE))>0 )	// �g���l���h���C�u	// �g���l���h���C�u
-		sd->speed += (1.2*DEFAULT_WALK_SPEED - skill*9);
-	if (pc_iscarton(sd) && (skill=pc_checkskill(sd,MC_PUSHCART))>0)	// �J�[�g�ɂ�鑬�x�ቺ
-		sd->speed += (10-skill) * (DEFAULT_WALK_SPEED * 0.1);
-	else if (pc_isriding(sd))	// �y�R�y�R���ɂ�鑬�x����
-		sd->speed -= (0.25 * DEFAULT_WALK_SPEED);
-		sd->max_weight += 1000;
-	if(sd->sc_count){
-		if(sd->sc_data[SC_WINDWALK].timer!=-1)	//�E�B���h�E�H�[�N����Lv*2%���Z
-			sd->speed -= sd->speed *(sd->sc_data[SC_WINDWALK].val1*2)/100;
-		if(sd->sc_data[SC_CARTBOOST].timer!=-1)	// �J�[�g�u�[�X�g
-		sd->speed -= (DEFAULT_WALK_SPEED * 20)/100;
-		if(sd->sc_data[SC_BERSERK].timer!=-1)	//�o�[�T�[�N����IA�Ɠ������炢�����H
-			sd->speed -= sd->speed *25/100;
-		if(sd->sc_data[SC_WEDDING].timer!=-1)	//�������͕����̂��x��
-			sd->speed = 2*DEFAULT_WALK_SPEED;
-	}
-
-	if((skill=pc_checkskill(sd,CR_TRUST))>0) { // �t�F�C�X
-		sd->status.max_hp += skill*200;
-		sd->subele[6] += skill*5;
-	}
-	if((skill=pc_checkskill(sd,BS_SKINTEMPER))>0)
-		sd->subele[3] += skill*4;
-
-	bl=sd->status.base_level;
-
-	sd->status.max_hp += (3500 + bl*hp_coefficient2[s_class.job] + hp_sigma_val[s_class.job][(bl > 0)? bl-1:0])/100 * (100 + sd->paramc[2])/100 + (sd->parame[2] - sd->paramcard[2]);
-        if (s_class.upper==1) // [MouseJstr]
-                sd->status.max_hp = sd->status.max_hp * 130/100;
-	if(sd->hprate!=100)
-		sd->status.max_hp = sd->status.max_hp*sd->hprate/100;
-
-	if(sd->sc_data && sd->sc_data[SC_BERSERK].timer!=-1){	// �o�[�T�[�N
-		sd->status.max_hp = sd->status.max_hp * 3;
-		sd->status.hp = sd->status.hp * 3;
-		if(sd->status.max_hp > battle_config.max_hp) // removed negative max hp bug by Valaris
-		sd->status.max_hp = battle_config.max_hp;
-		if(sd->status.hp > battle_config.max_hp) // removed negative max hp bug by Valaris
-		sd->status.hp = battle_config.max_hp;
-	}
-	if(s_class.job == 23 && sd->status.base_level >= 99){
-		sd->status.max_hp = sd->status.max_hp + 2000;
-	}
-
-	if(sd->status.max_hp > battle_config.max_hp) // removed negative max hp bug by Valaris
-		sd->status.max_hp = battle_config.max_hp;
-	if(sd->status.max_hp <= 0) sd->status.max_hp = 1; // end
-
-	// �ő�SP�v�Z
-	sd->status.max_sp += ((sp_coefficient[s_class.job] * bl) + 1000)/100 * (100 + sd->paramc[3])/100 + (sd->parame[3] - sd->paramcard[3]);
-        if (s_class.upper==1) // [MouseJstr]
-                sd->status.max_sp = sd->status.max_sp * 130/100;
-	if(sd->sprate!=100)
-		sd->status.max_sp = sd->status.max_sp*sd->sprate/100;
-
-	if((skill=pc_checkskill(sd,HP_MEDITATIO))>0) // ���f�B�e�C�e�B�I
-		sd->status.max_sp += sd->status.max_sp*skill/100;
-	if((skill=pc_checkskill(sd,HW_SOULDRAIN))>0) /* �\�E���h���C�� */
-		sd->status.max_sp += sd->status.max_sp*2*skill/100;
-
-	if(sd->status.max_sp < 0 || sd->status.max_sp > battle_config.max_sp)
-		sd->status.max_sp = battle_config.max_sp;
-
-	//���R��HP
-	sd->nhealhp = 1 + (sd->paramc[2]/5) + (sd->status.max_hp/200);
-	if((skill=pc_checkskill(sd,SM_RECOVERY)) > 0) {	/* HP�񕜗͌��� */
-		sd->nshealhp = skill*5 + (sd->status.max_hp*skill/500);
-		if(sd->nshealhp > 0x7fff) sd->nshealhp = 0x7fff;
-	}
-	//���R��SP
-	sd->nhealsp = 1 + (sd->paramc[3]/6) + (sd->status.max_sp/100);
-	if(sd->paramc[3] >= 120)
-		sd->nhealsp += ((sd->paramc[3]-120)>>1) + 4;
-	if((skill=pc_checkskill(sd,MG_SRECOVERY)) > 0) { /* SP�񕜗͌��� */
-		sd->nshealsp = skill*3 + (sd->status.max_sp*skill/500);
-		if(sd->nshealsp > 0x7fff) sd->nshealsp = 0x7fff;
-	}
-
-	if((skill = pc_checkskill(sd,MO_SPIRITSRECOVERY)) > 0) {
-		sd->nsshealhp = skill*4 + (sd->status.max_hp*skill/500);
-		sd->nsshealsp = skill*2 + (sd->status.max_sp*skill/500);
-		if(sd->nsshealhp > 0x7fff) sd->nsshealhp = 0x7fff;
-		if(sd->nsshealsp > 0x7fff) sd->nsshealsp = 0x7fff;
-	}
-	if(sd->hprecov_rate != 100) {
-		sd->nhealhp = sd->nhealhp*sd->hprecov_rate/100;
-		if(sd->nhealhp < 1) sd->nhealhp = 1;
-	}
-	if(sd->sprecov_rate != 100) {
-		sd->nhealsp = sd->nhealsp*sd->sprecov_rate/100;
-		if(sd->nhealsp < 1) sd->nhealsp = 1;
-	}
-	if((skill=pc_checkskill(sd,HP_MEDITATIO)) > 0) { // ���f�B�e�C�e�B�I��SPR�ł͂Ȃ����R�񕜂ɂ�����
-		sd->nhealsp += 3*skill*(sd->status.max_sp)/100;
-		if(sd->nhealsp > 0x7fff) sd->nhealsp = 0x7fff;
-	}
-
-	// �푰�ϐ��i����ł����́H �f�B�o�C���v���e�N�V�����Ɠ������������邩���j
-	if( (skill=pc_checkskill(sd,SA_DRAGONOLOGY))>0 ){ // �h���S�m���W�[
-		skill = skill*4;
-		sd->addrace[9]+=skill;
-		sd->addrace_[9]+=skill;
-		sd->subrace[9]+=skill;
-		sd->magic_addrace[9]+=skill;
-		sd->magic_subrace[9]-=skill;
-	}
-
-	//Flee�㏸
-	if( (skill=pc_checkskill(sd,TF_MISS))>0 ){	// ��𗦑���
-		if(sd->status.class==6||sd->status.class==4007 || sd->status.class==23){
-			sd->flee += skill*3;
-		}
-		if(sd->status.class==12||sd->status.class==17||sd->status.class==4013||sd->status.class==4018)
-			sd->flee += skill*4;
-		if(sd->status.class==12||sd->status.class==4013)
-			sd->speed -= sd->speed *(skill*.5)/100;
-	}
-	if( (skill=pc_checkskill(sd,MO_DODGE))>0 )	// ���؂�
-		sd->flee += (skill*3)>>1;
-
-	// �X�L����X�e�[�^�X�ُ�ɂ��c��̃p�����[�^�␳
-	if(sd->sc_count){
-		// ATK/DEF�ω��`
-		if(sd->sc_data[SC_ANGELUS].timer!=-1)	// �G���W�F���X
-			sd->def2 = sd->def2*(110+5*sd->sc_data[SC_ANGELUS].val1)/100;
-		if(sd->sc_data[SC_IMPOSITIO].timer!=-1)	{// �C���|�V�e�B�I�}�k�X
-			sd->watk += sd->sc_data[SC_IMPOSITIO].val1*5;
-			index = sd->equip_index[8];
-			if(index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == 4)
-				sd->watk_ += sd->sc_data[SC_IMPOSITIO].val1*5;
-		}
-		if(sd->sc_data[SC_PROVOKE].timer!=-1){	// �v���{�b�N
-			sd->def2 = sd->def2*(100-6*sd->sc_data[SC_PROVOKE].val1)/100;
-			sd->base_atk = sd->base_atk*(100+2*sd->sc_data[SC_PROVOKE].val1)/100;
-			sd->watk = sd->watk*(100+2*sd->sc_data[SC_PROVOKE].val1)/100;
-			index = sd->equip_index[8];
-			if(index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == 4)
-				sd->watk_ = sd->watk_*(100+2*sd->sc_data[SC_PROVOKE].val1)/100;
-		}
-		if(sd->sc_data[SC_ENDURE].timer!=-1)
-			sd->mdef2 += sd->sc_data[SC_ENDURE].val1;
-		if(sd->sc_data[SC_MINDBREAKER].timer!=-1){	// �v���{�b�N
-			sd->mdef2 = sd->mdef2*(100-6*sd->sc_data[SC_MINDBREAKER].val1)/100;
-			sd->matk1 = sd->matk1*(100+2*sd->sc_data[SC_MINDBREAKER].val1)/100;
-			sd->matk2 = sd->matk2*(100+2*sd->sc_data[SC_MINDBREAKER].val1)/100;
-		}
-		if(sd->sc_data[SC_POISON].timer!=-1)	// �ŏ��
-			sd->def2 = sd->def2*75/100;
-		if(sd->sc_data[SC_DRUMBATTLE].timer!=-1){	// �푾�ۂ̋���
-			sd->watk += sd->sc_data[SC_DRUMBATTLE].val2;
-			sd->def  += sd->sc_data[SC_DRUMBATTLE].val3;
-			index = sd->equip_index[8];
-			if(index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == 4)
-				sd->watk_ += sd->sc_data[SC_DRUMBATTLE].val2;
-		}
-		if(sd->sc_data[SC_NIBELUNGEN].timer!=-1) {	// �j�[�x�����O�̎w��
-			index = sd->equip_index[9];
-			if(index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->wlv == 3)
-				sd->watk += sd->sc_data[SC_NIBELUNGEN].val3;
-			index = sd->equip_index[8];
-			if(index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->wlv == 3)
-				sd->watk_ += sd->sc_data[SC_NIBELUNGEN].val3;
-			if(index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->wlv == 4)
-				sd->watk += sd->sc_data[SC_NIBELUNGEN].val2;
-			index = sd->equip_index[8];
-			if(index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->wlv == 4)
-				sd->watk_ += sd->sc_data[SC_NIBELUNGEN].val2;
-		}
-
-		if(sd->sc_data[SC_VOLCANO].timer!=-1 && sd->def_ele==3){	// �{���P�[�m
-			sd->watk += sd->sc_data[SC_VIOLENTGALE].val3;
-		}
-
-		if(sd->sc_data[SC_SIGNUMCRUCIS].timer!=-1)
-			sd->def = sd->def * (100 - sd->sc_data[SC_SIGNUMCRUCIS].val2)/100;
-		if(sd->sc_data[SC_ETERNALCHAOS].timer!=-1)	// �G�^�[�i���J�I�X
-			sd->def=0;
-
-		if(sd->sc_data[SC_CONCENTRATION].timer!=-1){ //�R���Z���g���[�V����
-			sd->watk = sd->watk * (100 + 5*sd->sc_data[SC_CONCENTRATION].val1)/100;
-			index = sd->equip_index[8];
-			if(index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == 4)
-				sd->watk_ = sd->watk * (100 + 5*sd->sc_data[SC_CONCENTRATION].val1)/100;
-			sd->def = sd->def * (100 - 5*sd->sc_data[SC_CONCENTRATION].val1)/100;
-		}
-
-		if(sd->sc_data[SC_MAGICPOWER].timer!=-1){ //���@�͑���
-			sd->matk1 = sd->matk1*(100+2*sd->sc_data[SC_MAGICPOWER].val1)/100;
-			sd->matk2 = sd->matk2*(100+2*sd->sc_data[SC_MAGICPOWER].val1)/100;
-		}
-		if(sd->sc_data[SC_ATKPOT].timer!=-1)
-			sd->watk += sd->sc_data[SC_ATKPOT].val1;
-		if(sd->sc_data[SC_MATKPOT].timer!=-1){
-			sd->matk1 += sd->sc_data[SC_MATKPOT].val1;
-			sd->matk2 += sd->sc_data[SC_MATKPOT].val1;
-		}
-
-		// ASPD/�ړ����x�ω��n
-		if(sd->sc_data[SC_TWOHANDQUICKEN].timer != -1 && sd->sc_data[SC_QUAGMIRE].timer == -1 && sd->sc_data[SC_DONTFORGETME].timer == -1)	// 2HQ
-			aspd_rate -= 30;
-		if(sd->sc_data[SC_ADRENALINE].timer != -1 && sd->sc_data[SC_TWOHANDQUICKEN].timer == -1 &&
-			sd->sc_data[SC_QUAGMIRE].timer == -1 && sd->sc_data[SC_DONTFORGETME].timer == -1) {	// �A�h���i�������b�V��
-			if(sd->sc_data[SC_ADRENALINE].val2 || !battle_config.party_skill_penaly)
-				aspd_rate -= 30;
-			else
-				aspd_rate -= 25;
-		}
-		if(sd->sc_data[SC_SPEARSQUICKEN].timer != -1 && sd->sc_data[SC_ADRENALINE].timer == -1 &&
-			sd->sc_data[SC_TWOHANDQUICKEN].timer == -1 && sd->sc_data[SC_QUAGMIRE].timer == -1 && sd->sc_data[SC_DONTFORGETME].timer == -1)	// �X�s�A�N�B�b�P��
-			aspd_rate -= sd->sc_data[SC_SPEARSQUICKEN].val2;
-		if(sd->sc_data[SC_ASSNCROS].timer!=-1 && // �[�z�̃A�T�V���N���X
-			sd->sc_data[SC_TWOHANDQUICKEN].timer==-1 && sd->sc_data[SC_ADRENALINE].timer==-1 && sd->sc_data[SC_SPEARSQUICKEN].timer==-1 &&
-			sd->sc_data[SC_DONTFORGETME].timer == -1)
-				aspd_rate -= 5+sd->sc_data[SC_ASSNCROS].val1+sd->sc_data[SC_ASSNCROS].val2+sd->sc_data[SC_ASSNCROS].val3;
-		if(sd->sc_data[SC_DONTFORGETME].timer!=-1){		// ����Y��Ȃ���
-			aspd_rate += sd->sc_data[SC_DONTFORGETME].val1*3 + sd->sc_data[SC_DONTFORGETME].val2 + (sd->sc_data[SC_DONTFORGETME].val3>>16);
-			sd->speed= sd->speed*(100+sd->sc_data[SC_DONTFORGETME].val1*2 + sd->sc_data[SC_DONTFORGETME].val2 + (sd->sc_data[SC_DONTFORGETME].val3&0xffff))/100;
-		}
-		if(	sd->sc_data[i=SC_SPEEDPOTION2].timer!=-1 ||
-			sd->sc_data[i=SC_SPEEDPOTION1].timer!=-1 ||
-			sd->sc_data[i=SC_SPEEDPOTION0].timer!=-1)	// �� ���|�[�V����
-			aspd_rate -= sd->sc_data[i].val2;
-
-		// HIT/FLEE�ω��n
-		if(sd->sc_data[SC_WHISTLE].timer!=-1){  // ���J
-			sd->flee += sd->flee * (sd->sc_data[SC_WHISTLE].val1
-					+sd->sc_data[SC_WHISTLE].val2+(sd->sc_data[SC_WHISTLE].val3>>16))/100;
-			sd->flee2+= (sd->sc_data[SC_WHISTLE].val1+sd->sc_data[SC_WHISTLE].val2+(sd->sc_data[SC_WHISTLE].val3&0xffff)) * 10;
-		}
-		if(sd->sc_data[SC_HUMMING].timer!=-1)  // �n�~���O
-			sd->hit += (sd->sc_data[SC_HUMMING].val1*2+sd->sc_data[SC_HUMMING].val2
-					+sd->sc_data[SC_HUMMING].val3) * sd->hit/100;
-		if(sd->sc_data[SC_VIOLENTGALE].timer!=-1 && sd->def_ele==4){	// �o�C�I�����g�Q�C��
-			sd->flee += sd->flee*sd->sc_data[SC_VIOLENTGALE].val3/100;
-		}
-		if(sd->sc_data[SC_BLIND].timer!=-1){	// ��
-			sd->hit -= sd->hit*25/100;
-			sd->flee -= sd->flee*25/100;
-		}
-		if(sd->sc_data[SC_WINDWALK].timer!=-1) // �E�B���h�E�H�[�N
-			sd->flee += sd->flee*(sd->sc_data[SC_WINDWALK].val2)/100;
-		if(sd->sc_data[SC_SPIDERWEB].timer!=-1) //�X�p�C�_�[�E�F�u
-			sd->flee -= sd->flee*50/100;
-		if(sd->sc_data[SC_TRUESIGHT].timer!=-1) //�g�D���[�T�C�g
-			sd->hit += 3*(sd->sc_data[SC_TRUESIGHT].val1);
-		if(sd->sc_data[SC_CONCENTRATION].timer!=-1) //�R���Z���g���[�V����
-			sd->hit += (10*(sd->sc_data[SC_CONCENTRATION].val1));
-
-		// �ϐ�
-		if(sd->sc_data[SC_SIEGFRIED].timer!=-1){  // �s���g�̃W�[�N�t���[�h
-			sd->subele[1] += sd->sc_data[SC_SIEGFRIED].val2;	// ��
-			sd->subele[2] += sd->sc_data[SC_SIEGFRIED].val2;	// ��
-			sd->subele[3] += sd->sc_data[SC_SIEGFRIED].val2;	// ��
-			sd->subele[4] += sd->sc_data[SC_SIEGFRIED].val2;	// ��
-			sd->subele[5] += sd->sc_data[SC_SIEGFRIED].val2;	// ��
-			sd->subele[6] += sd->sc_data[SC_SIEGFRIED].val2;	// ��
-			sd->subele[7] += sd->sc_data[SC_SIEGFRIED].val2;	// ��
-			sd->subele[8] += sd->sc_data[SC_SIEGFRIED].val2;	// ��
-			sd->subele[9] += sd->sc_data[SC_SIEGFRIED].val2;	// ��
-		}
-		if(sd->sc_data[SC_PROVIDENCE].timer!=-1){	// �v�����B�f���X
-			sd->subele[6] += sd->sc_data[SC_PROVIDENCE].val2;	// �� ������
-			sd->subrace[6] += sd->sc_data[SC_PROVIDENCE].val2;	// �� ����
-		}
-
-		// ���̑�
-		if(sd->sc_data[SC_APPLEIDUN].timer!=-1){	// �C�h�D���̗ь�
-			sd->status.max_hp += ((5+sd->sc_data[SC_APPLEIDUN].val1*2+((sd->sc_data[SC_APPLEIDUN].val2+1)>>1)
-						+sd->sc_data[SC_APPLEIDUN].val3/10) * sd->status.max_hp)/100;
-			if(sd->status.max_hp < 0 || sd->status.max_hp > battle_config.max_hp)
-				sd->status.max_hp = battle_config.max_hp;
-		}
-		if(sd->sc_data[SC_DELUGE].timer!=-1 && sd->def_ele==1){	// �f�����[�W
-			sd->status.max_hp += sd->status.max_hp*sd->sc_data[SC_DELUGE].val3/100;
-			if(sd->status.max_hp < 0 || sd->status.max_hp > battle_config.max_hp)
-				sd->status.max_hp = battle_config.max_hp;
-		}
-		if(sd->sc_data[SC_SERVICE4U].timer!=-1) {	// �T�[�r�X�t�H�[���[
-			sd->status.max_sp += sd->status.max_sp*(10+sd->sc_data[SC_SERVICE4U].val1+sd->sc_data[SC_SERVICE4U].val2
-						+sd->sc_data[SC_SERVICE4U].val3)/100;
-			if(sd->status.max_sp < 0 || sd->status.max_sp > battle_config.max_sp)
-				sd->status.max_sp = battle_config.max_sp;
-			sd->dsprate-=(10+sd->sc_data[SC_SERVICE4U].val1*3+sd->sc_data[SC_SERVICE4U].val2
-					+sd->sc_data[SC_SERVICE4U].val3);
-			if(sd->dsprate<0)sd->dsprate=0;
-		}
-
-		if(sd->sc_data[SC_FORTUNE].timer!=-1)	// �K�^�̃L�X
-			sd->critical += (10+sd->sc_data[SC_FORTUNE].val1+sd->sc_data[SC_FORTUNE].val2
-						+sd->sc_data[SC_FORTUNE].val3)*10;
-
-		if(sd->sc_data[SC_EXPLOSIONSPIRITS].timer!=-1){	// �����g��
-			if(s_class.job==23)
-				sd->critical += sd->sc_data[SC_EXPLOSIONSPIRITS].val1*100;
-			else
-			sd->critical += sd->sc_data[SC_EXPLOSIONSPIRITS].val2;
-		}
-
-		if(sd->sc_data[SC_STEELBODY].timer!=-1){	// ����
-			sd->def = 90;
-			sd->mdef = 90;
-			aspd_rate += 25;
-			sd->speed = (sd->speed * 125) / 100;
-		}
-		if(sd->sc_data[SC_DEFENDER].timer != -1) {
-			sd->aspd += (550 - sd->sc_data[SC_DEFENDER].val1*50);
-			sd->speed = (sd->speed * (155 - sd->sc_data[SC_DEFENDER].val1*5)) / 100;
-		}
-		if(sd->sc_data[SC_ENCPOISON].timer != -1)
-			sd->addeff[4] += sd->sc_data[SC_ENCPOISON].val2;
-
-		if( sd->sc_data[SC_DANCING].timer!=-1 ){		// ���t/�_���X�g�p��
-			sd->speed*=4;
-			sd->nhealsp = 0;
-			sd->nshealsp = 0;
-			sd->nsshealsp = 0;
-		}
-		if(sd->sc_data[SC_CURSE].timer!=-1)
-			sd->speed += 450;
-
-		if(sd->sc_data[SC_TRUESIGHT].timer!=-1) //�g�D���[�T�C�g
-			sd->critical += sd->critical*(sd->sc_data[SC_TRUESIGHT].val1)/100;
-
-/*		if(sd->sc_data[SC_VOLCANO].timer!=-1)	// �G���`�����g�|�C�Y��(������battle.c��)
-			sd->addeff[2]+=sd->sc_data[SC_VOLCANO].val2;//% of granting
-		if(sd->sc_data[SC_DELUGE].timer!=-1)	// �G���`�����g�|�C�Y��(������battle.c��)
-			sd->addeff[0]+=sd->sc_data[SC_DELUGE].val2;//% of granting
-		*/
-	}
-
-	if(sd->speed_rate != 100)
-		sd->speed = sd->speed*sd->speed_rate/100;
-	if(sd->speed < 1) sd->speed = 1;
-	if(aspd_rate != 100)
-		sd->aspd = sd->aspd*aspd_rate/100;
-	if(pc_isriding(sd))							// �R���C��
-		sd->aspd = sd->aspd*(100 + 10*(5 - pc_checkskill(sd,KN_CAVALIERMASTERY)))/ 100;
-	if(sd->aspd < battle_config.max_aspd) sd->aspd = battle_config.max_aspd;
-	sd->amotion = sd->aspd;
-	sd->dmotion = 800-sd->paramc[1]*4;
-	if(sd->dmotion<400)
-		sd->dmotion = 400;
-	if(sd->skilltimer != -1 && (skill = pc_checkskill(sd,SA_FREECAST)) > 0) {
-		sd->prev_speed = sd->speed;
-		sd->speed = sd->speed*(175 - skill*5)/100;
-	}
-
-	if(sd->status.hp>sd->status.max_hp)
-		sd->status.hp=sd->status.max_hp;
-	if(sd->status.sp>sd->status.max_sp)
-		sd->status.sp=sd->status.max_sp;
-
-	if(first&4)
-		return 0;
-	if(first&3) {
-		clif_updatestatus(sd,SP_SPEED);
-		clif_updatestatus(sd,SP_MAXHP);
-		clif_updatestatus(sd,SP_MAXSP);
-		if(first&1) {
-			clif_updatestatus(sd,SP_HP);
-			clif_updatestatus(sd,SP_SP);
-		}
-		return 0;
-	}
-
-	if(b_class != sd->view_class) {
-		clif_changelook(&sd->bl,LOOK_BASE,sd->view_class);
-#if PACKETVER < 4
-		clif_changelook(&sd->bl,LOOK_WEAPON,sd->status.weapon);
-		clif_changelook(&sd->bl,LOOK_SHIELD,sd->status.shield);
-#else
-		clif_changelook(&sd->bl,LOOK_WEAPON,0);
-#endif
-	}
-
-	if( memcmp(b_skill,sd->status.skill,sizeof(sd->status.skill)) || b_attackrange != sd->attackrange)
-		clif_skillinfoblock(sd);	// �X�L�����M
-
-	if(b_speed != sd->speed)
-		clif_updatestatus(sd,SP_SPEED);
-	if(b_weight != sd->weight)
-		clif_updatestatus(sd,SP_WEIGHT);
-	if(b_max_weight != sd->max_weight) {
-		clif_updatestatus(sd,SP_MAXWEIGHT);
-		pc_checkweighticon(sd);
-	}
-	for(i=0;i<6;i++)
-		if(b_paramb[i] + b_parame[i] != sd->paramb[i] + sd->parame[i])
-			clif_updatestatus(sd,SP_STR+i);
-	if(b_hit != sd->hit)
-		clif_updatestatus(sd,SP_HIT);
-	if(b_flee != sd->flee)
-		clif_updatestatus(sd,SP_FLEE1);
-	if(b_aspd != sd->aspd)
-		clif_updatestatus(sd,SP_ASPD);
-	if(b_watk != sd->watk || b_base_atk != sd->base_atk)
-		clif_updatestatus(sd,SP_ATK1);
-	if(b_def != sd->def)
-		clif_updatestatus(sd,SP_DEF1);
-	if(b_watk2 != sd->watk2)
-		clif_updatestatus(sd,SP_ATK2);
-	if(b_def2 != sd->def2)
-		clif_updatestatus(sd,SP_DEF2);
-	if(b_flee2 != sd->flee2)
-		clif_updatestatus(sd,SP_FLEE2);
-	if(b_critical != sd->critical)
-		clif_updatestatus(sd,SP_CRITICAL);
-	if(b_matk1 != sd->matk1)
-		clif_updatestatus(sd,SP_MATK1);
-	if(b_matk2 != sd->matk2)
-		clif_updatestatus(sd,SP_MATK2);
-	if(b_mdef != sd->mdef)
-		clif_updatestatus(sd,SP_MDEF1);
-	if(b_mdef2 != sd->mdef2)
-		clif_updatestatus(sd,SP_MDEF2);
-	if(b_attackrange != sd->attackrange)
-		clif_updatestatus(sd,SP_ATTACKRANGE);
-	if(b_max_hp != sd->status.max_hp)
-		clif_updatestatus(sd,SP_MAXHP);
-	if(b_max_sp != sd->status.max_sp)
-		clif_updatestatus(sd,SP_MAXSP);
-	if(b_hp != sd->status.hp)
-		clif_updatestatus(sd,SP_HP);
-	if(b_sp != sd->status.sp)
-		clif_updatestatus(sd,SP_SP);
-
-/*	if(before.cart_num != before.cart_num || before.cart_max_num != before.cart_max_num ||
-		before.cart_weight != before.cart_weight || before.cart_max_weight != before.cart_max_weight )
-		clif_updatestatus(sd,SP_CARTINFO);*/
-
-	if(sd->status.hp<sd->status.max_hp>>2 && pc_checkskill(sd,SM_AUTOBERSERK)>0 &&
-		(sd->sc_data[SC_PROVOKE].timer==-1 || sd->sc_data[SC_PROVOKE].val2==0 ) && !pc_isdead(sd))
-		// �I�[�g�o�[�T�[�N����
-		skill_status_change_start(&sd->bl,SC_PROVOKE,10,1,0,0,0,0);
-
-	return 0;
-}
-
-/*==========================================
- * �� ���i�ɂ��\�͓��̃{�[�i�X�ݒ�
- *------------------------------------------
- */
-int pc_bonus(struct map_session_data *sd,int type,int val)
-{
-	nullpo_retr(0, sd);
-
-	switch(type){
-	case SP_STR:
-	case SP_AGI:
-	case SP_VIT:
-	case SP_INT:
-	case SP_DEX:
-	case SP_LUK:
-		if(sd->state.lr_flag != 2)
-			sd->parame[type-SP_STR]+=val;
-		break;
-	case SP_ATK1:
-		if(!sd->state.lr_flag)
-			sd->watk+=val;
-		else if(sd->state.lr_flag == 1)
-			sd->watk_+=val;
-		break;
-	case SP_ATK2:
-		if(!sd->state.lr_flag)
-			sd->watk2+=val;
-		else if(sd->state.lr_flag == 1)
-			sd->watk_2+=val;
-		break;
-	case SP_BASE_ATK:
-		if(sd->state.lr_flag != 2)
-			sd->base_atk+=val;
-		break;
-	case SP_MATK1:
-		if(sd->state.lr_flag != 2)
-			sd->matk1 += val;
-		break;
-	case SP_MATK2:
-		if(sd->state.lr_flag != 2)
-			sd->matk2 += val;
-		break;
-	case SP_MATK:
-		if(sd->state.lr_flag != 2) {
-			sd->matk1 += val;
-			sd->matk2 += val;
-		}
-		break;
-	case SP_DEF1:
-		if(sd->state.lr_flag != 2)
-			sd->def+=val;
-		break;
-	case SP_MDEF1:
-		if(sd->state.lr_flag != 2)
-			sd->mdef+=val;
-		break;
-	case SP_MDEF2:
-		if(sd->state.lr_flag != 2)
-			sd->mdef+=val;
-		break;
-	case SP_HIT:
-		if(sd->state.lr_flag != 2)
-			sd->hit+=val;
-		else
-			sd->arrow_hit+=val;
-		break;
-	case SP_FLEE1:
-		if(sd->state.lr_flag != 2)
-			sd->flee+=val;
-		break;
-	case SP_FLEE2:
-		if(sd->state.lr_flag != 2)
-			sd->flee2+=val*10;
-		break;
-	case SP_CRITICAL:
-		if(sd->state.lr_flag != 2)
-			sd->critical+=val*10;
-		else
-			sd->arrow_cri += val*10;
-		break;
-	case SP_ATKELE:
-		if(!sd->state.lr_flag)
-			sd->atk_ele=val;
-		else if(sd->state.lr_flag == 1)
-			sd->atk_ele_=val;
-		else if(sd->state.lr_flag == 2)
-			sd->arrow_ele=val;
-		break;
-	case SP_DEFELE:
-		if(sd->state.lr_flag != 2)
-			sd->def_ele=val;
-		break;
-	case SP_MAXHP:
-		if(sd->state.lr_flag != 2)
-			sd->status.max_hp+=val;
-		break;
-	case SP_MAXSP:
-		if(sd->state.lr_flag != 2)
-			sd->status.max_sp+=val;
-		break;
-	case SP_CASTRATE:
-		if(sd->state.lr_flag != 2)
-			sd->castrate+=val;
-		break;
-	case SP_MAXHPRATE:
-		if(sd->state.lr_flag != 2)
-			sd->hprate+=val;
-		break;
-	case SP_MAXSPRATE:
-		if(sd->state.lr_flag != 2)
-			sd->sprate+=val;
-		break;
-	case SP_SPRATE:
-		if(sd->state.lr_flag != 2)
-			sd->dsprate+=val;
-		break;
-	case SP_ATTACKRANGE:
-		if(!sd->state.lr_flag)
-			sd->attackrange += val;
-		else if(sd->state.lr_flag == 1)
-			sd->attackrange_ += val;
-		else if(sd->state.lr_flag == 2)
-			sd->arrow_range += val;
-		break;
-	case SP_ADD_SPEED:
-		if(sd->state.lr_flag != 2)
-			sd->speed -= val;
-		break;
-	case SP_SPEED_RATE:
-		if(sd->state.lr_flag != 2) {
-			if(sd->speed_rate > 100-val)
-				sd->speed_rate = 100-val;
-		}
-		break;
-	case SP_SPEED_ADDRATE:
-		if(sd->state.lr_flag != 2)
-			sd->speed_add_rate = sd->speed_add_rate * (100-val)/100;
-		break;
-	case SP_ASPD:
-		if(sd->state.lr_flag != 2)
-			sd->aspd -= val*10;
-		break;
-	case SP_ASPD_RATE:
-		if(sd->state.lr_flag != 2) {
-			if(sd->aspd_rate > 100-val)
-				sd->aspd_rate = 100-val;
-		}
-		break;
-	case SP_ASPD_ADDRATE:
-		if(sd->state.lr_flag != 2)
-			sd->aspd_add_rate = sd->aspd_add_rate * (100-val)/100;
-		break;
-	case SP_HP_RECOV_RATE:
-		if(sd->state.lr_flag != 2)
-			sd->hprecov_rate += val;
-		break;
-	case SP_SP_RECOV_RATE:
-		if(sd->state.lr_flag != 2)
-			sd->sprecov_rate += val;
-		break;
-	case SP_CRITICAL_DEF:
-		if(sd->state.lr_flag != 2)
-			sd->critical_def += val;
-		break;
-	case SP_NEAR_ATK_DEF:
-		if(sd->state.lr_flag != 2)
-			sd->near_attack_def_rate += val;
-		break;
-	case SP_LONG_ATK_DEF:
-		if(sd->state.lr_flag != 2)
-			sd->long_attack_def_rate += val;
-		break;
-	case SP_DOUBLE_RATE:
-		if(sd->state.lr_flag == 0 && sd->double_rate < val)
-			sd->double_rate = val;
-		break;
-	case SP_DOUBLE_ADD_RATE:
-		if(sd->state.lr_flag == 0)
-			sd->double_add_rate += val;
-		break;
-	case SP_MATK_RATE:
-		if(sd->state.lr_flag != 2)
-			sd->matk_rate += val;
-		break;
-	case SP_IGNORE_DEF_ELE:
-		if(!sd->state.lr_flag)
-			sd->ignore_def_ele |= 1<<val;
-		else if(sd->state.lr_flag == 1)
-			sd->ignore_def_ele_ |= 1<<val;
-		break;
-	case SP_IGNORE_DEF_RACE:
-		if(!sd->state.lr_flag)
-			sd->ignore_def_race |= 1<<val;
-		else if(sd->state.lr_flag == 1)
-			sd->ignore_def_race_ |= 1<<val;
-		break;
-	case SP_ATK_RATE:
-		if(sd->state.lr_flag != 2)
-			sd->atk_rate += val;
-		break;
-	case SP_MAGIC_ATK_DEF:
-		if(sd->state.lr_flag != 2)
-			sd->magic_def_rate += val;
-		break;
-	case SP_MISC_ATK_DEF:
-		if(sd->state.lr_flag != 2)
-			sd->misc_def_rate += val;
-		break;
-	case SP_IGNORE_MDEF_ELE:
-		if(sd->state.lr_flag != 2)
-			sd->ignore_mdef_ele |= 1<<val;
-		break;
-	case SP_IGNORE_MDEF_RACE:
-		if(sd->state.lr_flag != 2)
-			sd->ignore_mdef_race |= 1<<val;
-		break;
-	case SP_PERFECT_HIT_RATE:
-		if(sd->state.lr_flag != 2 && sd->perfect_hit < val)
-			sd->perfect_hit = val;
-		break;
-	case SP_PERFECT_HIT_ADD_RATE:
-		if(sd->state.lr_flag != 2)
-			sd->perfect_hit_add += val;
-		break;
-	case SP_CRITICAL_RATE:
-		if(sd->state.lr_flag != 2)
-			sd->critical_rate+=val;
-		break;
-	case SP_GET_ZENY_NUM:
-		if(sd->state.lr_flag != 2 && sd->get_zeny_num < val)
-			sd->get_zeny_num = val;
-		break;
-	case SP_ADD_GET_ZENY_NUM:
-		if(sd->state.lr_flag != 2)
-			sd->get_zeny_add_num += val;
-		break;
-	case SP_DEF_RATIO_ATK_ELE:
-		if(!sd->state.lr_flag)
-			sd->def_ratio_atk_ele |= 1<<val;
-		else if(sd->state.lr_flag == 1)
-			sd->def_ratio_atk_ele_ |= 1<<val;
-		break;
-	case SP_DEF_RATIO_ATK_RACE:
-		if(!sd->state.lr_flag)
-			sd->def_ratio_atk_race |= 1<<val;
-		else if(sd->state.lr_flag == 1)
-			sd->def_ratio_atk_race_ |= 1<<val;
-		break;
-	case SP_HIT_RATE:
-		if(sd->state.lr_flag != 2)
-			sd->hit_rate += val;
-		break;
-	case SP_FLEE_RATE:
-		if(sd->state.lr_flag != 2)
-			sd->flee_rate += val;
-		break;
-	case SP_FLEE2_RATE:
-		if(sd->state.lr_flag != 2)
-			sd->flee2_rate += val;
-		break;
-	case SP_DEF_RATE:
-		if(sd->state.lr_flag != 2)
-			sd->def_rate += val;
-		break;
-	case SP_DEF2_RATE:
-		if(sd->state.lr_flag != 2)
-			sd->def2_rate += val;
-		break;
-	case SP_MDEF_RATE:
-		if(sd->state.lr_flag != 2)
-			sd->mdef_rate += val;
-		break;
-	case SP_MDEF2_RATE:
-		if(sd->state.lr_flag != 2)
-			sd->mdef2_rate += val;
-		break;
-	case SP_RESTART_FULL_RECORVER:
-		if(sd->state.lr_flag != 2)
-			sd->special_state.restart_full_recover = 1;
-		break;
-	case SP_NO_CASTCANCEL:
-		if(sd->state.lr_flag != 2)
-			sd->special_state.no_castcancel = 1;
-		break;
-	case SP_NO_CASTCANCEL2:
-		if(sd->state.lr_flag != 2)
-			sd->special_state.no_castcancel2 = 1;
-		break;
-	case SP_NO_SIZEFIX:
-		if(sd->state.lr_flag != 2)
-			sd->special_state.no_sizefix = 1;
-		break;
-	case SP_NO_MAGIC_DAMAGE:
-		if(sd->state.lr_flag != 2)
-			sd->special_state.no_magic_damage = 1;
-		break;
-	case SP_NO_WEAPON_DAMAGE:
-		if(sd->state.lr_flag != 2)
-			sd->special_state.no_weapon_damage = 1;
-		break;
-	case SP_NO_GEMSTONE:
-		if(sd->state.lr_flag != 2)
-			sd->special_state.no_gemstone = 1;
-		break;
-	case SP_INFINITE_ENDURE:
-		if(sd->state.lr_flag != 2)
-			sd->special_state.infinite_endure = 1;
-		break;
-	case SP_SPLASH_RANGE:
-		if(sd->state.lr_flag != 2 && sd->splash_range < val)
-			sd->splash_range = val;
-		break;
-	case SP_SPLASH_ADD_RANGE:
-		if(sd->state.lr_flag != 2)
-			sd->splash_add_range += val;
-		break;
-	case SP_SHORT_WEAPON_DAMAGE_RETURN:
-		if(sd->state.lr_flag != 2)
-			sd->short_weapon_damage_return += val;
-		break;
-	case SP_LONG_WEAPON_DAMAGE_RETURN:
-		if(sd->state.lr_flag != 2)
-			sd->long_weapon_damage_return += val;
-		break;
-	case SP_MAGIC_DAMAGE_RETURN: //AppleGirl Was Here
-		if(sd->state.lr_flag != 2)
-			sd->magic_damage_return += val;
-		break;
-	case SP_ALL_STATS:	// [Valaris]
-		if(sd->state.lr_flag!=2) {
-			sd->parame[SP_STR-SP_STR]+=val;
-			sd->parame[SP_AGI-SP_STR]+=val;
-			sd->parame[SP_VIT-SP_STR]+=val;
-			sd->parame[SP_INT-SP_STR]+=val;
-			sd->parame[SP_DEX-SP_STR]+=val;
-			sd->parame[SP_LUK-SP_STR]+=val;
-			clif_updatestatus(sd,13);
-			clif_updatestatus(sd,14);
-			clif_updatestatus(sd,15);
-			clif_updatestatus(sd,16);
-			clif_updatestatus(sd,17);
-			clif_updatestatus(sd,18);
-		}
-		break;
-	case SP_AGI_VIT:	// [Valaris]
-		if(sd->state.lr_flag!=2) {
-			sd->parame[SP_AGI-SP_STR]+=val;
-			sd->parame[SP_VIT-SP_STR]+=val;
-			clif_updatestatus(sd,14);
-			clif_updatestatus(sd,15);
-		}
-		break;
-	case SP_AGI_DEX_STR:	// [Valaris]
-		if(sd->state.lr_flag!=2) {
-			sd->parame[SP_AGI-SP_STR]+=val;
-			sd->parame[SP_DEX-SP_STR]+=val;
-			sd->parame[SP_STR-SP_STR]+=val;
-			clif_updatestatus(sd,14);
-			clif_updatestatus(sd,17);
-			clif_updatestatus(sd,13);
-		}
-		break;
-	case SP_PERFECT_HIDE: // [Valaris]
-		if(sd->state.lr_flag!=2) {
-			sd->perfect_hiding=1;
-		}
-		break;
-	case SP_DISGUISE: // Disguise script for items [Valaris]
-		if(sd->state.lr_flag!=2 && sd->disguiseflag==0) {
-			if(pc_isriding(sd)) { // temporary prevention of crash caused by peco + disguise, will look into a better solution [Valaris]
-				clif_displaymessage(sd->fd, "Cannot wear disguise when riding a Peco.");
-				break;
-			}
-			sd->disguise=val;
-			clif_clearchar(&sd->bl, 9);
-			pc_setpos(sd, sd->mapname, sd->bl.x, sd->bl.y, 3);
-		}
-		break;
-	case SP_UNBREAKABLE:
-		if(sd->state.lr_flag!=2) {
-			sd->unbreakable += val;
-		}
-		break;
-	default:
-		if(battle_config.error_log)
-			printf("pc_bonus: unknown type %d %d !\n",type,val);
-		break;
-	}
-	return 0;
-}
-
-/*==========================================
- * �� ���i�ɂ��\�͓��̃{�[�i�X�ݒ�
- *------------------------------------------
- */
-int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	switch(type){
-	case SP_ADDELE:
-		if(!sd->state.lr_flag)
-			sd->addele[type2]+=val;
-		else if(sd->state.lr_flag == 1)
-			sd->addele_[type2]+=val;
-		else if(sd->state.lr_flag == 2)
-			sd->arrow_addele[type2]+=val;
-		break;
-	case SP_ADDRACE:
-		if(!sd->state.lr_flag)
-			sd->addrace[type2]+=val;
-		else if(sd->state.lr_flag == 1)
-			sd->addrace_[type2]+=val;
-		else if(sd->state.lr_flag == 2)
-			sd->arrow_addrace[type2]+=val;
-		break;
-	case SP_ADDSIZE:
-		if(!sd->state.lr_flag)
-			sd->addsize[type2]+=val;
-		else if(sd->state.lr_flag == 1)
-			sd->addsize_[type2]+=val;
-		else if(sd->state.lr_flag == 2)
-			sd->arrow_addsize[type2]+=val;
-		break;
-	case SP_SUBELE:
-		if(sd->state.lr_flag != 2)
-			sd->subele[type2]+=val;
-		break;
-	case SP_SUBRACE:
-		if(sd->state.lr_flag != 2)
-			sd->subrace[type2]+=val;
-		break;
-	case SP_ADDEFF:
-		if(sd->state.lr_flag != 2)
-			sd->addeff[type2]+=val;
-		else
-			sd->arrow_addeff[type2]+=val;
-		break;
-	case SP_ADDEFF2:
-		if(sd->state.lr_flag != 2)
-			sd->addeff2[type2]+=val;
-		else
-			sd->arrow_addeff2[type2]+=val;
-		break;
-	case SP_RESEFF:
-		if(sd->state.lr_flag != 2)
-			sd->reseff[type2]+=val;
-		break;
-	case SP_MAGIC_ADDELE:
-		if(sd->state.lr_flag != 2)
-			sd->magic_addele[type2]+=val;
-		break;
-	case SP_MAGIC_ADDRACE:
-		if(sd->state.lr_flag != 2)
-			sd->magic_addrace[type2]+=val;
-		break;
-	case SP_MAGIC_SUBRACE:
-		if(sd->state.lr_flag != 2)
-			sd->magic_subrace[type2]+=val;
-		break;
-	case SP_ADD_DAMAGE_CLASS:
-		if(!sd->state.lr_flag) {
-			for(i=0;i<sd->add_damage_class_count;i++) {
-				if(sd->add_damage_classid[i] == type2) {
-					sd->add_damage_classrate[i] += val;
-					break;
-				}
-			}
-			if(i >= sd->add_damage_class_count && sd->add_damage_class_count < 10) {
-				sd->add_damage_classid[sd->add_damage_class_count] = type2;
-				sd->add_damage_classrate[sd->add_damage_class_count] += val;
-				sd->add_damage_class_count++;
-			}
-		}
-		else if(sd->state.lr_flag == 1) {
-			for(i=0;i<sd->add_damage_class_count_;i++) {
-				if(sd->add_damage_classid_[i] == type2) {
-					sd->add_damage_classrate_[i] += val;
-					break;
-				}
-			}
-			if(i >= sd->add_damage_class_count_ && sd->add_damage_class_count_ < 10) {
-				sd->add_damage_classid_[sd->add_damage_class_count_] = type2;
-				sd->add_damage_classrate_[sd->add_damage_class_count_] += val;
-				sd->add_damage_class_count_++;
-			}
-		}
-		break;
-	case SP_ADD_MAGIC_DAMAGE_CLASS:
-		if(sd->state.lr_flag != 2) {
-			for(i=0;i<sd->add_magic_damage_class_count;i++) {
-				if(sd->add_magic_damage_classid[i] == type2) {
-					sd->add_magic_damage_classrate[i] += val;
-					break;
-				}
-			}
-			if(i >= sd->add_magic_damage_class_count && sd->add_magic_damage_class_count < 10) {
-				sd->add_magic_damage_classid[sd->add_magic_damage_class_count] = type2;
-				sd->add_magic_damage_classrate[sd->add_magic_damage_class_count] += val;
-				sd->add_magic_damage_class_count++;
-			}
-		}
-		break;
-	case SP_ADD_DEF_CLASS:
-		if(sd->state.lr_flag != 2) {
-			for(i=0;i<sd->add_def_class_count;i++) {
-				if(sd->add_def_classid[i] == type2) {
-					sd->add_def_classrate[i] += val;
-					break;
-				}
-			}
-			if(i >= sd->add_def_class_count && sd->add_def_class_count < 10) {
-				sd->add_def_classid[sd->add_def_class_count] = type2;
-				sd->add_def_classrate[sd->add_def_class_count] += val;
-				sd->add_def_class_count++;
-			}
-		}
-		break;
-	case SP_ADD_MDEF_CLASS:
-		if(sd->state.lr_flag != 2) {
-			for(i=0;i<sd->add_mdef_class_count;i++) {
-				if(sd->add_mdef_classid[i] == type2) {
-					sd->add_mdef_classrate[i] += val;
-					break;
-				}
-			}
-			if(i >= sd->add_mdef_class_count && sd->add_mdef_class_count < 10) {
-				sd->add_mdef_classid[sd->add_mdef_class_count] = type2;
-				sd->add_mdef_classrate[sd->add_mdef_class_count] += val;
-				sd->add_mdef_class_count++;
-			}
-		}
-		break;
-	case SP_HP_DRAIN_RATE:
-		if(!sd->state.lr_flag) {
-			sd->hp_drain_rate += type2;
-			sd->hp_drain_per += val;
-		}
-		else if(sd->state.lr_flag == 1) {
-			sd->hp_drain_rate_ += type2;
-			sd->hp_drain_per_ += val;
-		}
-		break;
-	case SP_SP_DRAIN_RATE:
-		if(!sd->state.lr_flag) {
-			sd->sp_drain_rate += type2;
-			sd->sp_drain_per += val;
-		}
-		else if(sd->state.lr_flag == 1) {
-			sd->sp_drain_rate_ += type2;
-			sd->sp_drain_per_ += val;
-		}
-		break;
-	case SP_WEAPON_COMA_ELE:
-		if(sd->state.lr_flag != 2)
-			sd->weapon_coma_ele[type2] += val;
-		break;
-	case SP_WEAPON_COMA_RACE:
-		if(sd->state.lr_flag != 2)
-			sd->weapon_coma_race[type2] += val;
-		break;
-	case SP_RANDOM_ATTACK_INCREASE:	// [Valaris]
-		if(sd->state.lr_flag !=2){
-			sd->random_attack_increase_add = type2;
-			sd->random_attack_increase_per += val;
-		break;
-		}	// end addition
-	default:
-		if(battle_config.error_log)
-			printf("pc_bonus2: unknown type %d %d %d!\n",type,type2,val);
-		break;
-	}
-	return 0;
-}
-
-int pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val)
-{
-	int i;
-	switch(type){
-	case SP_ADD_MONSTER_DROP_ITEM:
-		if(sd->state.lr_flag != 2) {
-			for(i=0;i<sd->monster_drop_item_count;i++) {
-				if(sd->monster_drop_itemid[i] == type2) {
-					sd->monster_drop_race[i] |= 1<<type3;
-					if(sd->monster_drop_itemrate[i] < val)
-						sd->monster_drop_itemrate[i] = val;
-					break;
-				}
-			}
-			if(i >= sd->monster_drop_item_count && sd->monster_drop_item_count < 10) {
-				sd->monster_drop_itemid[sd->monster_drop_item_count] = type2;
-				sd->monster_drop_race[sd->monster_drop_item_count] |= 1<<type3;
-				sd->monster_drop_itemrate[sd->monster_drop_item_count] = val;
-				sd->monster_drop_item_count++;
-			}
-		}
-		break;
-	case SP_AUTOSPELL:
-		if(sd->state.lr_flag != 2){
-			sd->autospell_id = type2;
-			sd->autospell_lv = type3;
-			sd->autospell_rate = val;
-		}
-		break;
-	default:
-		if(battle_config.error_log)
-			printf("pc_bonus3: unknown type %d %d %d %d!\n",type,type2,type3,val);
-		break;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �X�N���v�g�ɂ��X�L������
- *------------------------------------------
- */
-int pc_skill(struct map_session_data *sd,int id,int level,int flag)
-{
-	nullpo_retr(0, sd);
-
-	if(level>MAX_SKILL_LEVEL){
-		if(battle_config.error_log)
-			printf("support card skill only!\n");
-		return 0;
-	}
-	if(!flag && (sd->status.skill[id].id == id || level == 0)){	// �N�G�X�g�����Ȃ炱���ŏ������m�F���đ��M����
-		sd->status.skill[id].lv=level;
-		pc_calcstatus(sd,0);
-		clif_skillinfoblock(sd);
-	}
-	else if(sd->status.skill[id].lv < level){	// �o�����邪lv���������Ȃ�
-		if(sd->status.skill[id].id==id)
-			sd->status.skill[id].flag=sd->status.skill[id].lv+2;	// lv���L��
-		else {
-			sd->status.skill[id].id=id;
-			sd->status.skill[id].flag=1;	// card�X�L���Ƃ���
-		}
-		sd->status.skill[id].lv=level;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �J�[�h�}��
- *------------------------------------------
- */
-int pc_insert_card(struct map_session_data *sd,int idx_card,int idx_equip)
-{
-	nullpo_retr(0, sd);
-
-	if(idx_card >= 0 && idx_card < MAX_INVENTORY && idx_equip >= 0 && idx_equip < MAX_INVENTORY && sd->inventory_data[idx_card]) {
-		int i;
-		int nameid=sd->status.inventory[idx_equip].nameid;
-		int cardid=sd->status.inventory[idx_card].nameid;
-		int ep=sd->inventory_data[idx_card]->equip;
-
-		if( nameid <= 0 || sd->inventory_data[idx_equip] == NULL ||
-			(sd->inventory_data[idx_equip]->type!=4 && sd->inventory_data[idx_equip]->type!=5)||	// �� ������Ȃ�
-			( sd->status.inventory[idx_equip].identify==0 ) ||		// ���Ӓ�
-			( sd->status.inventory[idx_equip].card[0]==0x00ff) ||		// ��������
-			( sd->status.inventory[idx_equip].card[0]==0x00fe) ||
-			( (sd->inventory_data[idx_equip]->equip&ep)==0 ) ||					// �� �����Ⴂ
-			( sd->inventory_data[idx_equip]->type==4 && ep==32) ||			// �� �蕐��Ə��J�[�h
-			( sd->status.inventory[idx_equip].card[0]==(short)0xff00) || sd->status.inventory[idx_equip].equip){
-
-			clif_insert_card(sd,idx_equip,idx_card,1);
-			return 0;
-		}
-		for(i=0;i<sd->inventory_data[idx_equip]->slot;i++){
-			if( sd->status.inventory[idx_equip].card[i] == 0){
-			// �󂫃X���b�g���������̂ō�������
-				sd->status.inventory[idx_equip].card[i]=cardid;
-
-			// �J�[�h�͌��炷
-				clif_insert_card(sd,idx_equip,idx_card,0);
-				pc_delitem(sd,idx_card,1,1);
-				return 0;
-			}
-		}
-	}
-	else
-		clif_insert_card(sd,idx_equip,idx_card,1);
-
-	return 0;
-}
-
-//
-// �A�C�e����
-//
-
-/*==========================================
- * �X�L���ɂ�锃���l�C��
- *------------------------------------------
- */
-int pc_modifybuyvalue(struct map_session_data *sd,int orig_value)
-{
-	int skill,val = orig_value,rate1 = 0,rate2 = 0;
-	if((skill=pc_checkskill(sd,MC_DISCOUNT))>0)	// �f�B�X�J�E���g
-		rate1 = 5+skill*2-((skill==10)? 1:0);
-	if((skill=pc_checkskill(sd,RG_COMPULSION))>0)	// �R���p���V�����f�B�X�J�E���g
-		rate2 = 5+skill*4;
-	if(rate1 < rate2) rate1 = rate2;
-	if(rate1)
-		val = (int)((double)orig_value*(double)(100-rate1)/100.);
-	if(val < 0) val = 0;
-	if(orig_value > 0 && val < 1) val = 1;
-
-	return val;
-}
-
-/*==========================================
- * �X�L���ɂ�锄��l�C��
- *------------------------------------------
- */
-int pc_modifysellvalue(struct map_session_data *sd,int orig_value)
-{
-	int skill,val = orig_value,rate = 0;
-	if((skill=pc_checkskill(sd,MC_OVERCHARGE))>0)	// �I�[�o�[�`���[�W
-		rate = 5+skill*2-((skill==10)? 1:0);
-	if(rate)
-		val = (int)((double)orig_value*(double)(100+rate)/100.);
-	if(val < 0) val = 0;
-	if(orig_value > 0 && val < 1) val = 1;
-
-	return val;
-}
-
-/*==========================================
- * �A�C�e���𔃂������ɁA�V�����A�C�e�������g�����A
- * 3�������ɂ����邩�m�F
- *------------------------------------------
- */
-int pc_checkadditem(struct map_session_data *sd,int nameid,int amount)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	if(itemdb_isequip(nameid))
-		return ADDITEM_NEW;
-
-	for(i=0;i<MAX_INVENTORY;i++){
-		if(sd->status.inventory[i].nameid==nameid){
-			if(sd->status.inventory[i].amount+amount > MAX_AMOUNT)
-				return ADDITEM_OVERAMOUNT;
-			return ADDITEM_EXIST;
-		}
-	}
-
-	if(amount > MAX_AMOUNT)
-		return ADDITEM_OVERAMOUNT;
-	return ADDITEM_NEW;
-}
-
-/*==========================================
- * �󂫃A�C�e�����̌�
- *------------------------------------------
- */
-int pc_inventoryblank(struct map_session_data *sd)
-{
-	int i,b;
-
-	nullpo_retr(0, sd);
-
-	for(i=0,b=0;i<MAX_INVENTORY;i++){
-		if(sd->status.inventory[i].nameid==0)
-			b++;
-	}
-
-	return b;
-}
-
-/*==========================================
- * �����𕥂�
- *------------------------------------------
- */
-int pc_payzeny(struct map_session_data *sd,int zeny)
-{
-	double z;
-
-	nullpo_retr(0, sd);
-
-	z = (double)sd->status.zeny;
-	if(sd->status.zeny<zeny || z - (double)zeny > MAX_ZENY)
-		return 1;
-	sd->status.zeny-=zeny;
-	clif_updatestatus(sd,SP_ZENY);
-
-	return 0;
-}
-
-/*==========================================
- * �����𓾂�
- *------------------------------------------
- */
-int pc_getzeny(struct map_session_data *sd,int zeny)
-{
-	double z;
-
-	nullpo_retr(0, sd);
-
-	z = (double)sd->status.zeny;
-	if(z + (double)zeny > MAX_ZENY) {
-		zeny = 0;
-		sd->status.zeny = MAX_ZENY;
-	}
-	sd->status.zeny+=zeny;
-	clif_updatestatus(sd,SP_ZENY);
-
-	return 0;
-}
-
-/*==========================================
- * �A�C�e����T���āA�C���f�b�N�X��Ԃ�
- *------------------------------------------
- */
-int pc_search_inventory(struct map_session_data *sd,int item_id)
-{
-	int i;
-
-	nullpo_retr(-1, sd);
-
-	for(i=0;i<MAX_INVENTORY;i++) {
-		if(sd->status.inventory[i].nameid == item_id &&
-		 (sd->status.inventory[i].amount > 0 || item_id == 0))
-			return i;
-	}
-
-	return -1;
-}
-
-/*==========================================
- * �A�C�e���lj��B���̂�item�\���̂̐����𖳎�
- *------------------------------------------
- */
-int pc_additem(struct map_session_data *sd,struct item *item_data,int amount)
-{
-	struct item_data *data;
-	int i,w;
-
-	nullpo_retr(1, sd);
-	nullpo_retr(1, item_data);
-
-	if(item_data->nameid <= 0 || amount <= 0)
-		return 1;
-	data = itemdb_search(item_data->nameid);
-	if((w = data->weight*amount) + sd->weight > sd->max_weight)
-		return 2;
-
-	i = MAX_INVENTORY;
-
-	if(!itemdb_isequip2(data)){
-		// �� ���i�ł͂Ȃ��̂ŁA�����L�i�Ȃ���̂ݕω�������
-		for(i=0;i<MAX_INVENTORY;i++)
-		if(sd->status.inventory[i].nameid == item_data->nameid &&
-			sd->status.inventory[i].card[0] == item_data->card[0] && sd->status.inventory[i].card[1] == item_data->card[1] &&
-			sd->status.inventory[i].card[2] == item_data->card[2] && sd->status.inventory[i].card[3] == item_data->card[3]) {
-			if(sd->status.inventory[i].amount+amount > MAX_AMOUNT)
-				return 5;
-			sd->status.inventory[i].amount+=amount;
-			clif_additem(sd,i,amount,0);
-			break;
-		}
-	}
-	if(i >= MAX_INVENTORY){
-		// �� ���i�������L�i�������̂ŋ󂫗��֒lj�
-		i = pc_search_inventory(sd,0);
-		if(i >= 0) {
-			memcpy(&sd->status.inventory[i],item_data,sizeof(sd->status.inventory[0]));
-			sd->status.inventory[i].amount=amount;
-			sd->inventory_data[i]=data;
-			clif_additem(sd,i,amount,0);
-		}
-		else return 4;
-	}
-	sd->weight += w;
-	clif_updatestatus(sd,SP_WEIGHT);
-
-	return 0;
-}
-
-/*==========================================
- * �A�C�e�������炷
- *------------------------------------------
- */
-int pc_delitem(struct map_session_data *sd,int n,int amount,int type)
-{
-	nullpo_retr(1, sd);
-
-	if(sd->status.inventory[n].nameid==0 || amount <= 0 || sd->status.inventory[n].amount<amount || sd->inventory_data[n] == NULL)
-		return 1;
-
-	sd->status.inventory[n].amount -= amount;
-	sd->weight -= sd->inventory_data[n]->weight*amount ;
-	if(sd->status.inventory[n].amount<=0){
-		if(sd->status.inventory[n].equip)
-			pc_unequipitem(sd,n,0);
-		memset(&sd->status.inventory[n],0,sizeof(sd->status.inventory[0]));
-		sd->inventory_data[n] = NULL;
-	}
-	if(!(type&1))
-		clif_delitem(sd,n,amount);
-	if(!(type&2))
-		clif_updatestatus(sd,SP_WEIGHT);
-
-	return 0;
-}
-
-/*==========================================
- * �A�C�e���𗎂�
- *------------------------------------------
- */
-int pc_dropitem(struct map_session_data *sd,int n,int amount)
-{
-	nullpo_retr(1, sd);
-
-	if (sd->status.inventory[n].nameid <= 0 ||
-	    sd->status.inventory[n].amount < amount ||
-	    sd->trade_partner != 0 || sd->vender_id != 0 ||
-	    sd->status.inventory[n].amount <= 0)
-		return 1;
-	map_addflooritem(&sd->status.inventory[n], amount, sd->bl.m, sd->bl.x, sd->bl.y, NULL, NULL, NULL, 0);
-	pc_delitem(sd, n, amount, 0);
-
-	return 0;
-}
-
-/*==========================================
- * �A�C�e�����E��
- *------------------------------------------
- */
-int pc_takeitem(struct map_session_data *sd,struct flooritem_data *fitem)
-{
-	int flag;
-	unsigned int tick = gettick();
-	struct map_session_data *first_sd = NULL,*second_sd = NULL,*third_sd = NULL;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, fitem);
-
-	if(fitem->first_get_id > 0) {
-		first_sd = map_id2sd(fitem->first_get_id);
-		if(tick < fitem->first_get_tick) {
-			if(fitem->first_get_id != sd->bl.id && !(first_sd && first_sd->status.party_id == sd->status.party_id)) {
-				clif_additem(sd,0,0,6);
-				return 0;
-			}
-		}
-		else if(fitem->second_get_id > 0) {
-			second_sd = map_id2sd(fitem->second_get_id);
-			if(tick < fitem->second_get_tick) {
-				if(fitem->first_get_id != sd->bl.id && fitem->second_get_id != sd->bl.id &&
-					!(first_sd && first_sd->status.party_id == sd->status.party_id) && !(second_sd && second_sd->status.party_id == sd->status.party_id)) {
-					clif_additem(sd,0,0,6);
-					return 0;
-				}
-			}
-			else if(fitem->third_get_id > 0) {
-				third_sd = map_id2sd(fitem->third_get_id);
-				if(tick < fitem->third_get_tick) {
-					if(fitem->first_get_id != sd->bl.id && fitem->second_get_id != sd->bl.id && fitem->third_get_id != sd->bl.id &&
-						!(first_sd && first_sd->status.party_id == sd->status.party_id) && !(second_sd && second_sd->status.party_id == sd->status.party_id) &&
-						!(third_sd && third_sd->status.party_id == sd->status.party_id)) {
-						clif_additem(sd,0,0,6);
-						return 0;
-					}
-				}
-			}
-		}
-	}
-	if((flag = pc_additem(sd,&fitem->item_data,fitem->item_data.amount)))
-		// �d��over�Ŏ擾���s
-		clif_additem(sd,0,0,flag);
-	else {
-		/* �擾���� */
-		if(sd->attacktimer != -1)
-			pc_stopattack(sd);
-		clif_takeitem(&sd->bl,&fitem->bl);
-		map_clearflooritem(fitem->bl.id);
-	}
-	return 0;
-}
-
-int pc_isUseitem(struct map_session_data *sd,int n)
-{
-	struct item_data *item;
-	int nameid;
-
-	nullpo_retr(0, sd);
-
-	item = sd->inventory_data[n];
-	nameid = sd->status.inventory[n].nameid;
-
-	if(item == NULL)
-		return 0;
-	if((nameid == 605) && map[sd->bl.m].flag.gvg)
-		return 0;
-	if(nameid == 601 && (map[sd->bl.m].flag.noteleport || map[sd->bl.m].flag.gvg)) {
-		clif_skill_teleportmessage(sd,0);
-		return 0;
-	}
-	if(nameid == 602 && map[sd->bl.m].flag.noreturn)
-		return 0;
-	if(nameid == 604 && (map[sd->bl.m].flag.nobranch || map[sd->bl.m].flag.gvg))
-		return 0;
-	if(item->sex != 2 && sd->status.sex != item->sex)
-		return 0;
-	if(item->elv > 0 && sd->status.base_level < item->elv)
-		return 0;
-	if(((sd->status.class==13 || sd->status.class==4014) && ((1<<7)&item->class) == 0) || // have mounted classes use unmounted items [Valaris]
-		((sd->status.class==21 || sd->status.class==4022) && ((1<<14)&item->class) == 0))
-		return 0;
-	if(sd->status.class!=13 && sd->status.class!=4014 && sd->status.class!=21 && sd->status.class!=4022)
-	if((sd->status.class<=4000 && ((1<<sd->status.class)&item->class) == 0) || (sd->status.class>4000 && sd->status.class<4023 && ((1<<(sd->status.class-4001))&item->class) == 0) ||
-	  (sd->status.class>=4023 && ((1<<(sd->status.class-4023))&item->class) == 0))
-		return 0;
-	return 1;
-}
-
-/*==========================================
- * �A�C�e�����g��
- *------------------------------------------
- */
-int pc_useitem(struct map_session_data *sd,int n)
-{
-	int nameid,amount;
-
-	nullpo_retr(1, sd);
-
-	if(n >=0 && n < MAX_INVENTORY) {
-		nameid = sd->status.inventory[n].nameid;
-		amount = sd->status.inventory[n].amount;
-		if(sd->status.inventory[n].nameid <= 0 ||
-			sd->status.inventory[n].amount <= 0 ||
-			sd->sc_data[SC_BERSERK].timer!=-1 ||
-			!pc_isUseitem(sd,n) ) {
-			clif_useitemack(sd,n,0,0);
-			return 1;
-		}
-		if(sd->inventory_data[n])
-			run_script(sd->inventory_data[n]->use_script,0,sd->bl.id,0);
-
-		clif_useitemack(sd,n,amount-1,1);
-		pc_delitem(sd,n,1,1);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �J�[�g�A�C�e���lj��B���̂�item�\���̂̐����𖳎�
- *------------------------------------------
- */
-int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amount)
-{
-	struct item_data *data;
-	int i,w;
-
-	nullpo_retr(1, sd);
-	nullpo_retr(1, item_data);
-
-	if(item_data->nameid <= 0 || amount <= 0)
-		return 1;
-	data = itemdb_search(item_data->nameid);
-
-	if((w=data->weight*amount) + sd->cart_weight > sd->cart_max_weight)
-		return 1;
-
-	i=MAX_CART;
-	if(!itemdb_isequip2(data)){
-		// �� ���i�ł͂Ȃ��̂ŁA�����L�i�Ȃ���̂ݕω�������
-		for(i=0;i<MAX_CART;i++){
-			if(sd->status.cart[i].nameid==item_data->nameid &&
-				sd->status.cart[i].card[0] == item_data->card[0] && sd->status.cart[i].card[1] == item_data->card[1] &&
-				sd->status.cart[i].card[2] == item_data->card[2] && sd->status.cart[i].card[3] == item_data->card[3]){
-				if(sd->status.cart[i].amount+amount > MAX_AMOUNT)
-					return 1;
-				sd->status.cart[i].amount+=amount;
-				clif_cart_additem(sd,i,amount,0);
-				break;
-			}
-		}
-	}
-	if(i >= MAX_CART){
-		// �� ���i�������L�i�������̂ŋ󂫗��֒lj�
-		for(i=0;i<MAX_CART;i++){
-			if(sd->status.cart[i].nameid==0){
-				memcpy(&sd->status.cart[i],item_data,sizeof(sd->status.cart[0]));
-				sd->status.cart[i].amount=amount;
-				sd->cart_num++;
-				clif_cart_additem(sd,i,amount,0);
-				break;
-			}
-		}
-		if(i >= MAX_CART)
-			return 1;
-	}
-	sd->cart_weight += w;
-	clif_updatestatus(sd,SP_CARTINFO);
-
-	return 0;
-}
-
-/*==========================================
- * �J�[�g�A�C�e�������炷
- *------------------------------------------
- */
-int pc_cart_delitem(struct map_session_data *sd,int n,int amount,int type)
-{
-	nullpo_retr(1, sd);
-
-	if(sd->status.cart[n].nameid==0 ||
-	   sd->status.cart[n].amount<amount)
-		return 1;
-
-	sd->status.cart[n].amount -= amount;
-	sd->cart_weight -= itemdb_weight(sd->status.cart[n].nameid)*amount ;
-	if(sd->status.cart[n].amount <= 0){
-		memset(&sd->status.cart[n],0,sizeof(sd->status.cart[0]));
-		sd->cart_num--;
-	}
-	if(!type) {
-		clif_cart_delitem(sd,n,amount);
-		clif_updatestatus(sd,SP_CARTINFO);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �J�[�g�փA�C�e���ړ�
- *------------------------------------------
- */
-int pc_putitemtocart(struct map_session_data *sd,int idx,int amount) {
-	struct item *item_data;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, item_data = &sd->status.inventory[idx]);
-
-	if (item_data->nameid==0 || item_data->amount<amount || sd->vender_id)
-		return 1;
-	if (pc_cart_additem(sd,item_data,amount) == 0)
-		return pc_delitem(sd,idx,amount,0);
-
-	return 1;
-}
-
-/*==========================================
- * �J�[�g���̃A�C�e�����m�F(���̍�����Ԃ�)
- *------------------------------------------
- */
-int pc_cartitem_amount(struct map_session_data *sd,int idx,int amount)
-{
-	struct item *item_data;
-
-	nullpo_retr(-1, sd);
-	nullpo_retr(-1, item_data=&sd->status.cart[idx]);
-
-	if( item_data->nameid==0 || !item_data->amount)
-		return -1;
-	return item_data->amount-amount;
-}
-/*==========================================
- * �J�[�g����A�C�e���ړ�
- *------------------------------------------
- */
-
-int pc_getitemfromcart(struct map_session_data *sd,int idx,int amount)
-{
-	struct item *item_data;
-	int flag;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, item_data=&sd->status.cart[idx]);
-
-	if( item_data->nameid==0 || item_data->amount<amount || sd->vender_id )
-		return 1;
-	if((flag = pc_additem(sd,item_data,amount)) == 0)
-		return pc_cart_delitem(sd,idx,amount,0);
-
-	clif_additem(sd,0,0,flag);
-	return 1;
-}
-
-/*==========================================
- * �A�C�e���Ӓ�
- *------------------------------------------
- */
-int pc_item_identify(struct map_session_data *sd,int idx)
-{
-	int flag=1;
-
-	nullpo_retr(0, sd);
-
-	if(idx >= 0 && idx < MAX_INVENTORY) {
-		if(sd->status.inventory[idx].nameid > 0 && sd->status.inventory[idx].identify == 0 ){
-			flag=0;
-			sd->status.inventory[idx].identify=1;
-		}
-		clif_item_identified(sd,idx,flag);
-	}
-	else
-		clif_item_identified(sd,idx,flag);
-
-	return !flag;
-}
-
-/*==========================================
- * �X�e�B���i���J
- *------------------------------------------
- */
-int pc_show_steal(struct block_list *bl,va_list ap)
-{
-	struct map_session_data *sd;
-	int itemid;
-	int type;
-
-	struct item_data *item=NULL;
-	char output[100];
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, sd=va_arg(ap,struct map_session_data *));
-
-	itemid=va_arg(ap,int);
-	type=va_arg(ap,int);
-
-	if(!type){
-		if((item=itemdb_exists(itemid))==NULL)
-			sprintf(output,"%s stole an Unknown_Item.",sd->status.name);
-		else
-			sprintf(output,"%s stole %s.",sd->status.name,item->jname);
-		clif_displaymessage( ((struct map_session_data *)bl)->fd, output);
-	}else{
-		sprintf(output,"%s has not stolen the item because of being  overweight.",sd->status.name);
-		clif_displaymessage( ((struct map_session_data *)bl)->fd, output);
-	}
-
-	return 0;
-}
-/*==========================================
- *
- *------------------------------------------
- */
-//** pc.c: Small Steal Item fix by fritz
-int pc_steal_item(struct map_session_data *sd,struct block_list *bl)
-{
-	if(sd != NULL && bl != NULL && bl->type == BL_MOB) {
-		int i,skill,rate,itemid,flag, count;
-		struct mob_data *md;
-		md=(struct mob_data *)bl;
-		if(!md->state.steal_flag && mob_db[md->class].mexp <= 0 && !(mob_db[md->class].mode&0x20) && md->sc_data[SC_STONE].timer == -1 && md->sc_data[SC_FREEZE].timer == -1 &&
-			(!(md->class>1324 && md->class<1364))) // prevent stealing from treasure boxes [Valaris]
-		{
-			skill = sd->paramc[4] - mob_db[md->class].dex + pc_checkskill(sd,TF_STEAL) + 10;
-
-			if(0 < skill)
-			{
-				for(count = 8; count <= 8 && count != 0; count--)
-				{
-					i = rand()%8;
-					itemid = mob_db[md->class].dropitem[i].nameid;
-
-					if(itemid > 0 && itemdb_type(itemid) != 6)
-					{
-						rate = (mob_db[md->class].dropitem[i].p / battle_config.item_rate_common * 100 * skill)/100;
-						
-						if(rand()%10000 < rate)
-						{
-							struct item tmp_item;
-							memset(&tmp_item,0,sizeof(tmp_item));
-							tmp_item.nameid = itemid;
-							tmp_item.amount = 1;
-							tmp_item.identify = 1;
-							flag = pc_additem(sd,&tmp_item,1);
-							if(battle_config.show_steal_in_same_party)
-							{
-								party_foreachsamemap(pc_show_steal,sd,1,sd,tmp_item.nameid,0);
-							}
-
-							if(flag)
-							{
-								if(battle_config.show_steal_in_same_party)
-								{
-									party_foreachsamemap(pc_show_steal,sd,1,sd,tmp_item.nameid,1);
-								}
-
-								clif_additem(sd,0,0,flag);
-							}
-							md->state.steal_flag = 1;
-							return 1;
-						}
-					}
-				}
-			}
-		}
-	}
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int pc_steal_coin(struct map_session_data *sd,struct block_list *bl)
-{
-	if(sd != NULL && bl != NULL && bl->type == BL_MOB) {
-		int rate,skill;
-		struct mob_data *md=(struct mob_data *)bl;
-		if(md && !md->state.steal_coin_flag && md->sc_data && md->sc_data[SC_STONE].timer == -1 && md->sc_data[SC_FREEZE].timer == -1) {
-			skill = pc_checkskill(sd,RG_STEALCOIN)*10;
-			rate = skill + (sd->status.base_level - mob_db[md->class].lv)*3 + sd->paramc[4]*2 + sd->paramc[5]*2;
-			if(rand()%1000 < rate) {
-				pc_getzeny(sd,mob_db[md->class].lv*10 + rand()%100);
-				md->state.steal_coin_flag = 1;
-				return 1;
-			}
-		}
-	}
-
-	return 0;
-}
-//
-//
-//
-/*==========================================
- * PC�̈ʒu�ݒ�
- *------------------------------------------
- */
-int pc_setpos(struct map_session_data *sd,char *mapname_org,int x,int y,int clrtype)
-{
-	char mapname[24];
-	int m=0,c=0,disguise=0;
-
-	nullpo_retr(0, sd);
-
-	if(sd->chatID)	// �`���b�g����o��
-		chat_leavechat(sd);
-	if(sd->trade_partner)	// ����𒆒f����
-		trade_tradecancel(sd);
-	if(sd->state.storage_flag)
-		storage_guild_storage_quit(sd,0);
-	else
-		storage_storage_quit(sd);	// �q�ɂ��J���Ă�Ȃ�ۑ�����
-
-	if(sd->party_invite>0)	// �p�[�e�B���U�����ۂ���
-		party_reply_invite(sd,sd->party_invite_account,0);
-	if(sd->guild_invite>0)	// �M���h���U�����ۂ���
-		guild_reply_invite(sd,sd->guild_invite,0);
-	if(sd->guild_alliance>0)	// �M���h�������U�����ۂ���
-		guild_reply_reqalliance(sd,sd->guild_alliance_account,0);
-
-	skill_castcancel(&sd->bl,0);	// �r�����f
-	pc_stop_walking(sd,0);		// ���s���f
-	pc_stopattack(sd);			// �U�����f
-
-	if(pc_issit(sd)) {
-		pc_setstand(sd);
-		skill_gangsterparadise(sd,0);
-	}
-
-	if(sd->sc_data[SC_TRICKDEAD].timer != -1)
-		skill_status_change_end(&sd->bl, SC_TRICKDEAD, -1);
-	if(sd->status.option&2)
-		skill_status_change_end(&sd->bl, SC_HIDING, -1);
-	if(sd->status.option&4)
-		skill_status_change_end(&sd->bl, SC_CLOAKING, -1);
-	if(sd->status.option&16386)
-		skill_status_change_end(&sd->bl, SC_CHASEWALK, -1);
-	if(sd->sc_data[SC_BLADESTOP].timer!=-1)
-		skill_status_change_end(&sd->bl,SC_BLADESTOP,-1);
-	if(sd->sc_data[SC_DANCING].timer!=-1) // clear dance effect when warping [Valaris]
-		skill_stop_dancing(&sd->bl,0);
-
-	if(sd->status.pet_id > 0 && sd->pd && sd->pet.intimate > 0) {
-		pet_stopattack(sd->pd);
-		pet_changestate(sd->pd,MS_IDLE,0);
-	}
-	
-	if(sd->disguise) { // clear disguises when warping [Valaris]
-		clif_clearchar(&sd->bl, 9);
-		disguise=sd->disguise;
-		sd->disguise=0;
-	}
-
-	memcpy(mapname,mapname_org,24);
-	mapname[16]=0;
-	if(strstr(mapname,".gat")==NULL && strlen(mapname)<16){
-		strcat(mapname,".gat");
-	}
-
-	m=map_mapname2mapid(mapname);
-	if(m<0){
-		if(sd->mapname[0]){
-			int ip,port;
-			if(map_mapname2ipport(mapname,&ip,&port)==0){
-				skill_stop_dancing(&sd->bl,1);
-				skill_unit_out_all(&sd->bl,gettick(),1);
-				clif_clearchar_area(&sd->bl,clrtype&0xffff);
-				skill_gangsterparadise(sd,0);
-				map_delblock(&sd->bl);
-				if(sd->status.pet_id > 0 && sd->pd) {
-					if(sd->pd->bl.m != m && sd->pet.intimate <= 0) {
-						pet_remove_map(sd);
-						intif_delete_petdata(sd->status.pet_id);
-						sd->status.pet_id = 0;
-						sd->pd = NULL;
-						sd->petDB = NULL;
-						if(battle_config.pet_status_support)
-							pc_calcstatus(sd,2);
-					}
-					else if(sd->pet.intimate > 0) {
-						pet_stopattack(sd->pd);
-						pet_changestate(sd->pd,MS_IDLE,0);
-						clif_clearchar_area(&sd->pd->bl,clrtype&0xffff);
-						map_delblock(&sd->pd->bl);
-					}
-				}
-				memcpy(sd->mapname,mapname,24);
-				sd->bl.x=x;
-				sd->bl.y=y;
-				sd->state.waitingdisconnect=1;
-				pc_makesavestatus(sd);
-				if(sd->status.pet_id > 0 && sd->pd)
-					intif_save_petdata(sd->status.account_id,&sd->pet);
-				chrif_save(sd);
-				storage_storage_save(sd);
-				chrif_changemapserver(sd, mapname, x, y, ip, port);
-				return 0;
-			}
-		}
-#if 0
-		clif_authfail_fd(sd->fd,0);	// cancel
-		clif_setwaitclose(sd->fd);
-#endif
-		return 1;
-	}
-
-	if(x <0 || x >= map[m].xs || y <0 || y >= map[m].ys)
-		x=y=0;
-	if((x==0 && y==0) || (c=read_gat(m,x,y))==1 || c==5){
-		if(x||y) {
-			if(battle_config.error_log)
-				printf("stacked (%d,%d)\n",x,y);
-		}
-		do {
-			x=rand()%(map[m].xs-2)+1;
-			y=rand()%(map[m].ys-2)+1;
-		} while((c=read_gat(m,x,y))==1 || c==5);
-	}
-
-	if(sd->mapname[0] && sd->bl.prev != NULL){
-		skill_unit_out_all(&sd->bl,gettick(),1);
-		clif_clearchar_area(&sd->bl,clrtype&0xffff);
-		skill_gangsterparadise(sd,0);
-		map_delblock(&sd->bl);
-		// pet
-		if(sd->status.pet_id > 0 && sd->pd) {
-			if(sd->pd->bl.m != m && sd->pet.intimate <= 0) {
-				pet_remove_map(sd);
-				intif_delete_petdata(sd->status.pet_id);
-				sd->status.pet_id = 0;
-				sd->pd = NULL;
-				sd->petDB = NULL;
-				if(battle_config.pet_status_support)
-					pc_calcstatus(sd,2);
-				pc_makesavestatus(sd);
-				chrif_save(sd);
-				storage_storage_save(sd);
-			}
-			else if(sd->pet.intimate > 0) {
-				pet_stopattack(sd->pd);
-				pet_changestate(sd->pd,MS_IDLE,0);
-				clif_clearchar_area(&sd->pd->bl,clrtype&0xffff);
-				map_delblock(&sd->pd->bl);
-			}
-		}
-		clif_changemap(sd,map[m].name,x,y); // [MouseJstr]
-	}
-
-	if(disguise) // disguise teleport fix [Valaris]
-		sd->disguise=disguise;
-	
-	memcpy(sd->mapname,mapname,24);
-	sd->bl.m = m;
-	sd->to_x = x;
-	sd->to_y = y;
-
-	// moved and changed dance effect stopping	
-
-	sd->bl.x =  x;
-	sd->bl.y =  y;
-
-	if(sd->status.pet_id > 0 && sd->pd && sd->pet.intimate > 0) {
-		sd->pd->bl.m = m;
-		sd->pd->bl.x = sd->pd->to_x = x;
-		sd->pd->bl.y = sd->pd->to_y = y;
-		sd->pd->dir = sd->dir;
-	}
-
-//	map_addblock(&sd->bl);	/// �u���b�N�o�^��spawn��
-//	clif_spawnpc(sd);
-
-	return 0;
-}
-
-/*==========================================
- * PC�̃����_�����[�v
- *------------------------------------------
- */
-int pc_randomwarp(struct map_session_data *sd, int type) {
-	int x,y,c,i=0;
-	int m;
-
-	nullpo_retr(0, sd);
-
-	m=sd->bl.m;
-
-	if (map[sd->bl.m].flag.noteleport)	// �e���|�[�g�֎~
-		return 0;
-
-	do{
-		x=rand()%(map[m].xs-2)+1;
-		y=rand()%(map[m].ys-2)+1;
-	} while (((c=read_gat(m,x,y)) == 1 || c == 5) && (i++) < 1000);
-
-	if (i < 1000)
-		pc_setpos(sd,map[m].name,x,y,type);
-
-	return 0;
-}
-
-/*==========================================
- * ���݈ʒu�̃���
- *------------------------------------------
- */
-int pc_memo(struct map_session_data *sd, int i) {
-	int skill;
-	int j;
-
-	nullpo_retr(0, sd);
-
-	skill = pc_checkskill(sd, AL_WARP);
-
-	if (i >= MIN_PORTAL_MEMO)
-		i -= MIN_PORTAL_MEMO;
-	else if (map[sd->bl.m].flag.nomemo || (map[sd->bl.m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd))) {
-		clif_skill_teleportmessage(sd, 1);
-		return 0;
-	}
-
-	if (skill < 1) {
-		clif_skill_memo(sd,2);
-	}
-
-	if (skill < 2 || i < -1 || i > 2) {
-		clif_skill_memo(sd, 1);
-		return 0;
-	}
-
-	for(j = 0 ; j < 3; j++) {
-		if (strcmp(sd->status.memo_point[j].map, map[sd->bl.m].name) == 0) {
-			i = j;
-			break;
-		}
-	}
-
-	if (i == -1) {
-		for(i = skill - 3; i >= 0; i--) {
-			memcpy(&sd->status.memo_point[i+1],&sd->status.memo_point[i],
-				sizeof(struct point));
-		}
-		i = 0;
-	}
-	memcpy(sd->status.memo_point[i].map, map[sd->bl.m].name, 24);
-	sd->status.memo_point[i].x = sd->bl.x;
-	sd->status.memo_point[i].y = sd->bl.y;
-
-	clif_skill_memo(sd, 0);
-
-	return 1;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int pc_can_reach(struct map_session_data *sd,int x,int y)
-{
-	struct walkpath_data wpd;
-
-	nullpo_retr(0, sd);
-
-	if( sd->bl.x==x && sd->bl.y==y )	// �����}�X
-		return 1;
-
-	// ��Q������
-	wpd.path_len=0;
-	wpd.path_pos=0;
-	wpd.path_half=0;
-	return (path_search(&wpd,sd->bl.m,sd->bl.x,sd->bl.y,x,y,0)!=-1)?1:0;
-}
-
-//
-// �� �s��
-//
-/*==========================================
- * ����1���ɂ����鎞�Ԃ��v�Z
- *------------------------------------------
- */
-static int calc_next_walk_step(struct map_session_data *sd)
-{
-	nullpo_retr(0, sd);
-
-	if(sd->walkpath.path_pos>=sd->walkpath.path_len)
-		return -1;
-	if(sd->walkpath.path[sd->walkpath.path_pos]&1)
-		return sd->speed*14/10;
-
-	return sd->speed;
-}
-
-/*==========================================
- * �����i��(timer�֐�)
- *------------------------------------------
- */
-static int pc_walk(int tid,unsigned int tick,int id,int data)
-{
-	struct map_session_data *sd;
-	int i,ctype;
-	int moveblock;
-	int x,y,dx,dy;
-
-	sd=map_id2sd(id);
-	if(sd==NULL)
-		return 0;
-
-	if(sd->walktimer != tid){
-		if(battle_config.error_log)
-			printf("pc_walk %d != %d\n",sd->walktimer,tid);
-		return 0;
-	}
-	sd->walktimer=-1;
-	if(sd->walkpath.path_pos>=sd->walkpath.path_len || sd->walkpath.path_pos!=data)
-		return 0;
-
-	//�������̂ő����̃^�C�}�[��������
-	sd->inchealspirithptick = 0;
-	sd->inchealspiritsptick = 0;
-
-	sd->walkpath.path_half ^= 1;
-	if(sd->walkpath.path_half==0){ // �}�X�ڒ��S�֓���
-		sd->walkpath.path_pos++;
-		if(sd->state.change_walk_target){
-			pc_walktoxy_sub(sd);
-			return 0;
-		}
-	} else { // �}�X�ڋ��E�֓���
-		if(sd->walkpath.path[sd->walkpath.path_pos]>=8)
-			return 1;
-
-		x = sd->bl.x;
-		y = sd->bl.y;
-		ctype = map_getcell(sd->bl.m,x,y);
-		if(ctype == 1 || ctype == 5) {
-			pc_stop_walking(sd,1);
-			return 0;
-		}
-		sd->dir=sd->head_dir=sd->walkpath.path[sd->walkpath.path_pos];
-		dx = dirx[(int)sd->dir];
-		dy = diry[(int)sd->dir];
-		ctype = map_getcell(sd->bl.m,x+dx,y+dy);
-		if(ctype == 1 || ctype == 5) {
-			pc_walktoxy_sub(sd);
-			return 0;
-		}
-
-		moveblock = ( x/BLOCK_SIZE != (x+dx)/BLOCK_SIZE || y/BLOCK_SIZE != (y+dy)/BLOCK_SIZE);
-
-		sd->walktimer = 1;
-		map_foreachinmovearea(clif_pcoutsight,sd->bl.m,x-AREA_SIZE,y-AREA_SIZE,x+AREA_SIZE,y+AREA_SIZE,dx,dy,0,sd);
-
-		x += dx;
-		y += dy;
-
-		if(moveblock) map_delblock(&sd->bl);
-		sd->bl.x = x;
-		sd->bl.y = y;
-		if(moveblock) map_addblock(&sd->bl);
-
-		if(sd->sc_data[SC_DANCING].timer!=-1)
-			skill_unit_move_unit_group((struct skill_unit_group *)sd->sc_data[SC_DANCING].val2,sd->bl.m,dx,dy);
-
-		map_foreachinmovearea(clif_pcinsight,sd->bl.m,x-AREA_SIZE,y-AREA_SIZE,x+AREA_SIZE,y+AREA_SIZE,-dx,-dy,0,sd);
-		sd->walktimer = -1;
-
-		if(sd->status.party_id>0){	// �p�[�e�B�̂g�o���ʒm����
-			struct party *p=party_search(sd->status.party_id);
-			if(p!=NULL){
-				int p_flag=0;
-				map_foreachinmovearea(party_send_hp_check,sd->bl.m,x-AREA_SIZE,y-AREA_SIZE,x+AREA_SIZE,y+AREA_SIZE,-dx,-dy,BL_PC,sd->status.party_id,&p_flag);
-				if(p_flag)
-					sd->party_hp=-1;
-			}
-		}
-		if(sd->status.option&4)	// �N���[�L���O�̏��Ō���
-			skill_check_cloaking(&sd->bl);
-		/* �f�B�{�[�V�������� */
-		for(i=0;i<5;i++)
-			if(sd->dev.val1[i]){
-				skill_devotion3(&sd->bl,sd->dev.val1[i]);
-				break;
-			}
-		/* ��f�B�{�[�V�������� */
-		if( sd->sc_data && sd->sc_data[SC_DEVOTION].val1){
-				skill_devotion2(&sd->bl,sd->sc_data[SC_DEVOTION].val1);
-		}
-
-		skill_unit_move(&sd->bl,tick,1);	// �X�L�����j�b�g�̌���
-
-		if(map_getcell(sd->bl.m,x,y)&0x80)
-			npc_touch_areanpc(sd,sd->bl.m,x,y);
-		else
-			sd->areanpc_id=0;
-	}
-	if((i=calc_next_walk_step(sd))>0) {
-		i = i>>1;
-		if(i < 1 && sd->walkpath.path_half == 0)
-			i = 1;
-		sd->walktimer=add_timer(tick+i,pc_walk,id,sd->walkpath.path_pos);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �ړ��”\���m�F���āA�”\�Ȃ���s�J�n
- *------------------------------------------
- */
-static int pc_walktoxy_sub(struct map_session_data *sd)
-{
-	struct walkpath_data wpd;
-	int i;
-
-	nullpo_retr(1, sd);
-
-	if(path_search(&wpd,sd->bl.m,sd->bl.x,sd->bl.y,sd->to_x,sd->to_y,0))
-		return 1;
-	memcpy(&sd->walkpath,&wpd,sizeof(wpd));
-
-	clif_walkok(sd);
-	sd->state.change_walk_target=0;
-
-	if((i=calc_next_walk_step(sd))>0){
-		i = i>>2;
-		sd->walktimer=add_timer(gettick()+i,pc_walk,sd->bl.id,0);
-	}
-	clif_movechar(sd);
-
-	return 0;
-}
-
-/*==========================================
- * pc�� �s�v��
- *------------------------------------------
- */
-int pc_walktoxy(struct map_session_data *sd,int x,int y)
-{
-
-	nullpo_retr(0, sd);
-
-	sd->to_x=x;
-	sd->to_y=y;
-
-	if(sd->walktimer != -1 && sd->state.change_walk_target==0){
-		// ���ݕ����Ă���Œ��̖ړI�n�ύX�Ȃ̂Ń}�X�ڂ̒��S�ɗ�������
-		// timer�֐�����pc_walktoxy_sub���ĂԂ悤�ɂ���
-		sd->state.change_walk_target=1;
-	} else {
-		pc_walktoxy_sub(sd);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �� �s��~
- *------------------------------------------
- */
-int pc_stop_walking(struct map_session_data *sd,int type)
-{
-	nullpo_retr(0, sd);
-
-	if(sd->walktimer != -1) {
-		delete_timer(sd->walktimer,pc_walk);
-		sd->walktimer=-1;
-	}
-	sd->walkpath.path_len=0;
-	sd->to_x = sd->bl.x;
-	sd->to_y = sd->bl.y;
-	if(type&0x01)
-		clif_fixpos(&sd->bl);
-	if(type&0x02 && battle_config.pc_damage_delay) {
-		unsigned int tick = gettick();
-		int delay = battle_get_dmotion(&sd->bl);
-		if(sd->canmove_tick < tick)
-			sd->canmove_tick = tick + delay;
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int pc_movepos(struct map_session_data *sd,int dst_x,int dst_y)
-{
-	int moveblock;
-	int dx,dy,dist;
-
-	struct walkpath_data wpd;
-
-	nullpo_retr(0, sd);
-
-	if(path_search(&wpd,sd->bl.m,sd->bl.x,sd->bl.y,dst_x,dst_y,0))
-		return 1;
-
-	sd->dir = sd->head_dir = map_calc_dir(&sd->bl, dst_x,dst_y);
-
-	dx = dst_x - sd->bl.x;
-	dy = dst_y - sd->bl.y;
-	dist = distance(sd->bl.x,sd->bl.y,dst_x,dst_y);
-
-	moveblock = ( sd->bl.x/BLOCK_SIZE != dst_x/BLOCK_SIZE || sd->bl.y/BLOCK_SIZE != dst_y/BLOCK_SIZE);
-
-	map_foreachinmovearea(clif_pcoutsight,sd->bl.m,sd->bl.x-AREA_SIZE,sd->bl.y-AREA_SIZE,sd->bl.x+AREA_SIZE,sd->bl.y+AREA_SIZE,dx,dy,0,sd);
-
-	if(moveblock) map_delblock(&sd->bl);
-	sd->bl.x = dst_x;
-	sd->bl.y = dst_y;
-	if(moveblock) map_addblock(&sd->bl);
-
-	map_foreachinmovearea(clif_pcinsight,sd->bl.m,sd->bl.x-AREA_SIZE,sd->bl.y-AREA_SIZE,sd->bl.x+AREA_SIZE,sd->bl.y+AREA_SIZE,-dx,-dy,0,sd);
-
-	if(sd->status.party_id>0){	// �p�[�e�B�̂g�o���ʒm����
-		struct party *p=party_search(sd->status.party_id);
-		if(p!=NULL){
-			int flag=0;
-			map_foreachinmovearea(party_send_hp_check,sd->bl.m,sd->bl.x-AREA_SIZE,sd->bl.y-AREA_SIZE,sd->bl.x+AREA_SIZE,sd->bl.y+AREA_SIZE,-dx,-dy,BL_PC,sd->status.party_id,&flag);
-			if(flag)
-				sd->party_hp=-1;
-		}
-	}
-
-	if(sd->status.option&4)	// �N���[�L���O�̏��Ō���
-		skill_check_cloaking(&sd->bl);
-
-	skill_unit_move(&sd->bl,gettick(),dist+7);	// �X�L�����j�b�g�̌���
-
-	if(map_getcell(sd->bl.m,sd->bl.x,sd->bl.y)&0x80)
-		npc_touch_areanpc(sd,sd->bl.m,sd->bl.x,sd->bl.y);
-	else
-		sd->areanpc_id=0;
-	return 0;
-}
-
-//
-// ����퓬
-//
-/*==========================================
- * �X�L���̌��� ���L���Ă����ꍇLv���Ԃ�
- *------------------------------------------
- */
-int pc_checkskill(struct map_session_data *sd,int skill_id)
-{
-	if(sd == NULL) return 0;
-	if( skill_id>=10000 ){
-		struct guild *g;
-		if( sd->status.guild_id>0 && (g=guild_search(sd->status.guild_id))!=NULL)
-			return guild_checkskill(g,skill_id);
-		return 0;
-	}
-
-	if(sd->status.skill[skill_id].id == skill_id)
-		return (sd->status.skill[skill_id].lv);
-
-	return 0;
-}
-
-/*==========================================
- * ����ύX�ɂ��X�L���̌p���`�F�b�N
- * �����F
- *   struct map_session_data *sd	�Z�b�V�����f�[�^
- *   int nameid						�����iID
- * �Ԃ�l�F
- *   0		�ύX�Ȃ�
- *   -1		�X�L��������
- *------------------------------------------
- */
-int pc_checkallowskill(struct map_session_data *sd)
-{
-	nullpo_retr(0, sd);
-
-	if( sd->sc_data == NULL )
-		return 0;
-
-	if(!(skill_get_weapontype(KN_TWOHANDQUICKEN)&(1<<sd->status.weapon)) && sd->sc_data[SC_TWOHANDQUICKEN].timer!=-1) {	// 2HQ
-		skill_status_change_end(&sd->bl,SC_TWOHANDQUICKEN,-1);	// 2HQ������
-		return -1;
-	}
-	if(!(skill_get_weapontype(LK_AURABLADE)&(1<<sd->status.weapon)) && sd->sc_data[SC_AURABLADE].timer!=-1) {	/* �I�[���u���[�h */
-		skill_status_change_end(&sd->bl,SC_AURABLADE,-1);	/* �I�[���u���[�h������ */
-		return -1;
-	}
-	if(!(skill_get_weapontype(LK_PARRYING)&(1<<sd->status.weapon)) && sd->sc_data[SC_PARRYING].timer!=-1) {	/* �p���C���O */
-		skill_status_change_end(&sd->bl,SC_PARRYING,-1);	/* �p���C���O������ */
-		return -1;
-	}
-	if(!(skill_get_weapontype(LK_CONCENTRATION)&(1<<sd->status.weapon)) && sd->sc_data[SC_CONCENTRATION].timer!=-1) {	/* �R���Z���g���[�V���� */
-		skill_status_change_end(&sd->bl,SC_CONCENTRATION,-1);	/* �R���Z���g���[�V���������� */
-		return -1;
-	}
-	if(!(skill_get_weapontype(CR_SPEARQUICKEN)&(1<<sd->status.weapon)) && sd->sc_data[SC_SPEARSQUICKEN].timer!=-1){	// �X�s�A�N�B�b�P��
-		skill_status_change_end(&sd->bl,SC_SPEARSQUICKEN,-1);	// �X�s�A�N�C�b�P��������
-		return -1;
-	}
-	if(!(skill_get_weapontype(BS_ADRENALINE)&(1<<sd->status.weapon)) && sd->sc_data[SC_ADRENALINE].timer!=-1){	// �A�h���i�������b�V��
-		skill_status_change_end(&sd->bl,SC_ADRENALINE,-1);	// �A�h���i�������b�V��������
-		return -1;
-	}
-
-	if(sd->status.shield <= 0) {
-		if(sd->sc_data[SC_AUTOGUARD].timer!=-1){	// �I�[�g�K�[�h
-			skill_status_change_end(&sd->bl,SC_AUTOGUARD,-1);
-			return -1;
-		}
-		if(sd->sc_data[SC_DEFENDER].timer!=-1){	// �f�B�t�F���_�[
-			skill_status_change_end(&sd->bl,SC_DEFENDER,-1);
-			return -1;
-		}
-		if(sd->sc_data[SC_REFLECTSHIELD].timer!=-1){ //���t���N�g�V�[���h
-			skill_status_change_end(&sd->bl,SC_REFLECTSHIELD,-1);
-			return -1;
-		}
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �� ���i�̃`�F�b�N
- *------------------------------------------
- */
-int pc_checkequip(struct map_session_data *sd,int pos)
-{
-	int i;
-
-	nullpo_retr(-1, sd);
-
-	for(i=0;i<11;i++){
-		if(pos & equip_pos[i])
-			return sd->equip_index[i];
-	}
-
-	return -1;
-}
-
-/*==========================================
- * �]���E��{�q�E�̌��̐E�Ƃ�Ԃ�
- *------------------------------------------
- */
-struct pc_base_job pc_calc_base_job(int b_class)
-{
-	struct pc_base_job bj;
-	//�]����{�q�̏ꍇ�̌��̐E�Ƃ��Z�o����
-	if(b_class < MAX_PC_CLASS){ //�ʏ�
-		bj.job = b_class;
-		bj.upper = 0;
-	}else if(b_class >= 4001 && b_class < 4023){ //�]���E
-		bj.job = b_class - 4001;
-		bj.upper = 1;
-	}else if(b_class == 23 + 4023 -1){ //�{�q�X�p�m�r
-		bj.job = b_class - (4023 - 1);
-		bj.upper = 2;
-	}else{ //�{�q�X�p�m�r�ȊO�̗{�q
-		bj.job = b_class - 4023;
-		bj.upper = 2;
-	}
-
-	if(battle_config.enable_upper_class==0){ //conf�Ŗ����ɂȂ��Ă�����upper=0
-		bj.upper = 0;
-	}
-
-	if(bj.job == 0){
-		bj.type = 0;
-	}else if(bj.job < 7){
-		bj.type = 1;
-	}else{
-		bj.type = 2;
-	}
-	
-	return bj;
-}
-
-/*==========================================
- * PC�̍U�� (timer�֐�)
- *------------------------------------------
- */
-int pc_attack_timer(int tid,unsigned int tick,int id,int data)
-{
-	struct map_session_data *sd;
-	struct block_list *bl;
-	struct status_change *sc_data;
-	short *opt;
-	int dist,skill,range;
-
-	sd=map_id2sd(id);
-	if(sd == NULL)
-		return 0;
-	if(sd->attacktimer != tid){
-		if(battle_config.error_log)
-			printf("pc_attack_timer %d != %d\n",sd->attacktimer,tid);
-		return 0;
-	}
-	sd->attacktimer=-1;
-
-	if(sd->bl.prev == NULL)
-		return 0;
-
-	bl=map_id2bl(sd->attacktarget);
-	if(bl==NULL || bl->prev == NULL)
-		return 0;
-
-	if(bl->type == BL_PC && pc_isdead((struct map_session_data *)bl))
-		return 0;
-
-	// ����map�łȂ��Ȃ�U�����Ȃ�
-	// PC������łĂ��U�����Ȃ�
-	if(sd->bl.m != bl->m || pc_isdead(sd))
-		return 0;
-
-	if( sd->opt1>0 || sd->status.option&2 || sd->status.option&16388)	// �ُ�ȂǂōU���ł��Ȃ�
-		return 0;
-
-	if(sd->sc_data[SC_AUTOCOUNTER].timer != -1)
-		return 0;
-	if(sd->sc_data[SC_BLADESTOP].timer != -1)
-		return 0;
-
-	if((opt = battle_get_option(bl)) != NULL && *opt&0x46)
-		return 0;
-	if(((sc_data = battle_get_sc_data(bl)) != NULL && sc_data[SC_TRICKDEAD].timer != -1) ||
-	((sc_data = battle_get_sc_data(bl)) != NULL && sc_data[SC_BASILICA].timer != -1 ))
-		return 0;
-
-	if(sd->skilltimer != -1 && pc_checkskill(sd,SA_FREECAST) <= 0)
-		return 0;
-
-	if(!battle_config.sdelay_attack_enable && pc_checkskill(sd,SA_FREECAST) <= 0) {
-		if(DIFF_TICK(tick , sd->canact_tick) < 0) {
-			clif_skill_fail(sd,1,4,0);
-			return 0;
-		}
-	}
-
-	dist = distance(sd->bl.x,sd->bl.y,bl->x,bl->y);
-	range = sd->attackrange;
-	if(sd->status.weapon != 11) range++;
-	if( dist > range ){	// �� ���Ȃ��̂ňړ�
-		if(pc_can_reach(sd,bl->x,bl->y))
-			clif_movetoattack(sd,bl);
-		return 0;
-	}
-
-	if(dist <= range && !battle_check_range(&sd->bl,bl,range) ) {
-		if(pc_can_reach(sd,bl->x,bl->y) && sd->canmove_tick < tick && (sd->sc_data[SC_ANKLE].timer == -1 || sd->sc_data[SC_SPIDERWEB].timer == -1))
-			pc_walktoxy(sd,bl->x,bl->y);
-		sd->attackabletime = tick + (sd->aspd<<1);
-	}
-	else {
-		if(battle_config.pc_attack_direction_change)
-			sd->dir=sd->head_dir=map_calc_dir(&sd->bl, bl->x,bl->y );	// �����ݒ�
-
-		if(sd->walktimer != -1)
-			pc_stop_walking(sd,1);
-
-		if(sd->sc_data[SC_COMBO].timer == -1) {
-			map_freeblock_lock();
-			pc_stop_walking(sd,0);
-			sd->attacktarget_lv = battle_weapon_attack(&sd->bl,bl,tick,0);
-			if(!(battle_config.pc_cloak_check_type&2) && sd->sc_data[SC_CLOAKING].timer != -1)
-				skill_status_change_end(&sd->bl,SC_CLOAKING,-1);
-			if(sd->status.pet_id > 0 && sd->pd && sd->petDB && battle_config.pet_attack_support)
-				pet_target_check(sd,bl,0);
-			map_freeblock_unlock();
-			if(sd->skilltimer != -1 && (skill = pc_checkskill(sd,SA_FREECAST)) > 0 ) // �t���[�L���X�g
-				sd->attackabletime = tick + ((sd->aspd<<1)*(150 - skill*5)/100);
-			else
-				sd->attackabletime = tick + (sd->aspd<<1);
-		}
-		else if(sd->attackabletime <= tick) {
-			if(sd->skilltimer != -1 && (skill = pc_checkskill(sd,SA_FREECAST)) > 0 ) // �t���[�L���X�g
-				sd->attackabletime = tick + ((sd->aspd<<1)*(150 - skill*5)/100);
-			else
-				sd->attackabletime = tick + (sd->aspd<<1);
-		}
-		if(sd->attackabletime <= tick) sd->attackabletime = tick + (battle_config.max_aspd<<1);
-	}
-
-	if(sd->state.attack_continue) {
-		sd->attacktimer=add_timer(sd->attackabletime,pc_attack_timer,sd->bl.id,0);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �U���v��
- * type��1�Ȃ�p���U��
- *------------------------------------------
- */
-int pc_attack(struct map_session_data *sd,int target_id,int type)
-{
-	struct block_list *bl;
-	int d;
-
-	nullpo_retr(0, sd);
-
-	bl=map_id2bl(target_id);
-	if(bl==NULL)
-		return 1;
-	
-	if(bl->type==BL_NPC) { // monster npcs [Valaris]
-		npc_click(sd,RFIFOL(sd->fd,2));
-		return 0;
-	}
-	
-	if(!battle_check_target(&sd->bl,bl,BCT_ENEMY))
-		return 1;
-	if(sd->attacktimer != -1)
-		pc_stopattack(sd);
-	sd->attacktarget=target_id;
-	sd->state.attack_continue=type;
-
-	d=DIFF_TICK(sd->attackabletime,gettick());
-	if(d>0 && d<2000){	// �U��delay��
-		sd->attacktimer=add_timer(sd->attackabletime,pc_attack_timer,sd->bl.id,0);
-	} else {
-		// �{��timer�֐��Ȃ̂ň��������킹��
-		pc_attack_timer(-1,gettick(),sd->bl.id,0);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �p���U����~
- *------------------------------------------
- */
-int pc_stopattack(struct map_session_data *sd)
-{
-	nullpo_retr(0, sd);
-
-	if(sd->attacktimer != -1) {
-		delete_timer(sd->attacktimer,pc_attack_timer);
-		sd->attacktimer=-1;
-	}
-	sd->attacktarget=0;
-	sd->state.attack_continue=0;
-
-	return 0;
-}
-
-int pc_follow_timer(int tid,unsigned int tick,int id,int data)
-{
-  struct map_session_data *sd, *bl;
-
-  sd=map_id2sd(id);
-  if(sd == NULL || sd->followtimer != tid)
-    return 0;
-
-  sd->followtimer=-1;
-
-  do {
-    if(sd->bl.prev == NULL)
-      break;
-
-    bl=(struct map_session_data *) map_id2bl(sd->followtarget);
-
-    if(bl==NULL)
-      return 0;
-
-    if(bl->bl.prev == NULL)
-      break;
-
-    if(bl->bl.type == BL_PC && pc_isdead((struct map_session_data *)bl))
-      return 0;
-
-    if (sd->skilltimer == -1 && sd->attacktimer == -1 && sd->walktimer == -1) {
-      if((sd->bl.m == bl->bl.m) && pc_can_reach(sd,bl->bl.x,bl->bl.y)) {
-	if (distance(sd->bl.x,sd->bl.y,bl->bl.x,bl->bl.y) > 5)
-	  pc_walktoxy(sd,bl->bl.x,bl->bl.y);
-      } else
-	pc_setpos((struct map_session_data*)sd, bl->mapname, bl->bl.x, bl->bl.y, 3);
-    }
-  } while (0);
-
-  sd->followtimer=add_timer(tick + sd->aspd,pc_follow_timer,sd->bl.id,0);
-
-  return 0;
-}
-
-int pc_follow(struct map_session_data *sd,int target_id)
-{
-	struct block_list *bl;
-
-	bl=map_id2bl(target_id);
-	if(bl==NULL)
-		return 1;
-	sd->followtarget=target_id;
-	if(sd->followtimer != -1) {
-	    delete_timer(sd->followtimer,pc_follow_timer);
-	    sd->followtimer = -1;
-        }
-
-	pc_follow_timer(-1,gettick(),sd->bl.id,0);
-
-	return 0;
-}
-
-int pc_checkbaselevelup(struct map_session_data *sd)
-{
-	int next = pc_nextbaseexp(sd);
-
-	nullpo_retr(0, sd);
-
-	if(sd->status.base_exp >= next && next > 0){
-		struct pc_base_job s_class = pc_calc_base_job(sd->status.class);
-
-		// base�����x���A�b�v����
-		sd->status.base_exp -= next;
-
-		sd->status.base_level ++;
-		sd->status.status_point += (sd->status.base_level+14) / 5 ;
-		clif_updatestatus(sd,SP_STATUSPOINT);
-		clif_updatestatus(sd,SP_BASELEVEL);
-		clif_updatestatus(sd,SP_NEXTBASEEXP);
-		pc_calcstatus(sd,0);
-		pc_heal(sd,sd->status.max_hp,sd->status.max_sp);
-
-		//�X�p�m�r�̓L���G�A�C���|�A�}�j�s�A�O���A�T�t��Lv1��������
-		if(s_class.job == 23){
-			skill_status_change_start(&sd->bl,SkillStatusChangeTable[PR_KYRIE],1,0,0,0,skill_get_time(PR_KYRIE,1),0 );
-			skill_status_change_start(&sd->bl,SkillStatusChangeTable[PR_IMPOSITIO],1,0,0,0,skill_get_time(PR_IMPOSITIO,1),0 );
-			skill_status_change_start(&sd->bl,SkillStatusChangeTable[PR_MAGNIFICAT],1,0,0,0,skill_get_time(PR_MAGNIFICAT,1),0 );
-			skill_status_change_start(&sd->bl,SkillStatusChangeTable[PR_GLORIA],1,0,0,0,skill_get_time(PR_GLORIA,1),0 );
-			skill_status_change_start(&sd->bl,SkillStatusChangeTable[PR_SUFFRAGIUM],1,0,0,0,skill_get_time(PR_SUFFRAGIUM,1),0 );
-		}
-
-		clif_misceffect(&sd->bl,0);
-		//���x���A�b�v�����̂Ńp�[�e�B�[�����X�V����
-		//(�����͈̓`�F�b�N)
-		party_send_movemap(sd);
-		return 1;
-	}
-
-	return 0;
-}
-
-int pc_checkjoblevelup(struct map_session_data *sd)
-{
-	int next = pc_nextjobexp(sd);
-
-	nullpo_retr(0, sd);
-
-	if(sd->status.job_exp >= next && next > 0){
-		// job�����x���A�b�v����
-		sd->status.job_exp -= next;
-		sd->status.job_level ++;
-		clif_updatestatus(sd,SP_JOBLEVEL);
-		clif_updatestatus(sd,SP_NEXTJOBEXP);
-		sd->status.skill_point ++;
-		clif_updatestatus(sd,SP_SKILLPOINT);
-		pc_calcstatus(sd,0);
-
-		clif_misceffect(&sd->bl,1);
-		return 1;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �o���l�擾
- *------------------------------------------
- */
-int pc_gainexp(struct map_session_data *sd,int base_exp,int job_exp)
-{
-	char output[256];
-	nullpo_retr(0, sd);
-
-	if(sd->bl.prev == NULL || pc_isdead(sd))
-		return 0;
-
-	if((battle_config.pvp_exp == 0) && map[sd->bl.m].flag.pvp)  // [MouseJstr]
-		return 0; // no exp on pvp maps
-
-	if(sd->sc_data[SC_RICHMANKIM].timer != -1) { // added bounds checking [Vaalris]
-		base_exp += base_exp*(25 + sd->sc_data[SC_RICHMANKIM].val1*25)/100;
-		job_exp += job_exp*(25 + sd->sc_data[SC_RICHMANKIM].val1*25)/100;
-	}
-
-	if(sd->status.guild_id>0){	// �M���h�ɏ�[
-		base_exp-=guild_payexp(sd,base_exp);
-		if(base_exp < 0)
-			base_exp = 0;
-	}
-
-	if(!battle_config.multi_level_up && pc_nextbaseafter(sd)) {
-		while(sd->status.base_exp+base_exp >=pc_nextbaseafter(sd) && sd->status.base_exp <= pc_nextbaseexp(sd) && pc_nextbaseafter(sd) > 0) {
-			base_exp*=.90;
-		}
-	}
-
-	sd->status.base_exp += base_exp;
-	if(sd->status.base_exp < 0)
-		sd->status.base_exp = 0;
-	
-	while(pc_checkbaselevelup(sd)) ;
-
-	clif_updatestatus(sd,SP_BASEEXP);
-	if(!battle_config.multi_level_up && pc_nextjobafter(sd)) {
-		while(sd->status.job_exp+job_exp >= pc_nextjobafter(sd) && sd->status.job_exp <= pc_nextjobexp(sd) && pc_nextjobafter(sd) > 0) {
-			job_exp*=.90;
-		}
-	}
-
-	sd->status.job_exp += job_exp;
-	if(sd->status.job_exp < 0)
-		sd->status.job_exp = 0;
-	
-	while(pc_checkjoblevelup(sd)) ;
-
-	clif_updatestatus(sd,SP_JOBEXP);
-
-	if(battle_config.disp_experience){
-		sprintf(output, 
-			"Experienced Gained Base:%d Job:%d",base_exp,job_exp);
-		clif_disp_onlyself(sd,output,strlen(output));
-	}
-
-	return 0;
-}
-
-/*==========================================
- * base level���K�v�o���l�v�Z
- *------------------------------------------
- */
-int pc_nextbaseexp(struct map_session_data *sd)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	if(sd->status.base_level>=MAX_LEVEL || sd->status.base_level<=0)
-		return 0;
-
-	if(sd->status.class==0) i=0;
-	else if(sd->status.class<=6) i=1;
-	else if(sd->status.class<=22) i=2;
-	else if(sd->status.class==23) i=3;
-	else if(sd->status.class==4001) i=4;
-	else if(sd->status.class<=4007) i=5;
-	else i=6;
-
-	return exp_table[i][sd->status.base_level-1];
-}
-
-/*==========================================
- * job level���K�v�o���l�v�Z
- *------------------------------------------
- */
-int pc_nextjobexp(struct map_session_data *sd)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	if(sd->status.job_level>=MAX_LEVEL || sd->status.job_level<=0)
-		return 0;
-
-	if(sd->status.class==0) i=7;
-	else if(sd->status.class<=6) i=8;
-	else if(sd->status.class<=22) i=9;
-	else if(sd->status.class==23) i=10;
-	else if(sd->status.class==4001) i=11;
-	else if(sd->status.class<=4007) i=12;
-	else i=13;
-
-	return exp_table[i][sd->status.job_level-1];
-}
-
-/*==========================================
- * base level after next [Valaris]
- *------------------------------------------
- */
-int pc_nextbaseafter(struct map_session_data *sd)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	if(sd->status.base_level>=MAX_LEVEL || sd->status.base_level<=0)
-		return 0;
-
-	if(sd->status.class==0) i=0;
-	else if(sd->status.class<=6) i=1;
-	else if(sd->status.class<=22) i=2;
-	else if(sd->status.class==23) i=3;
-	else if(sd->status.class==4001) i=4;
-	else if(sd->status.class<=4007) i=5;
-	else i=6;
-
-	return exp_table[i][sd->status.base_level];
-}
-
-/*==========================================
- * job level after next [Valaris]
- *------------------------------------------
- */
-int pc_nextjobafter(struct map_session_data *sd)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	if(sd->status.job_level>=MAX_LEVEL || sd->status.job_level<=0)
-		return 0;
-
-	if(sd->status.class==0) i=7;
-	else if(sd->status.class<=6) i=8;
-	else if(sd->status.class<=22) i=9;
-	else if(sd->status.class==23) i=10;
-	else if(sd->status.class==4001) i=11;
-	else if(sd->status.class<=4007) i=12;
-	else i=13;
-
-	return exp_table[i][sd->status.job_level];
-}
-/*==========================================
-
- * �K�v�X�e�[�^�X�|�C���g�v�Z
- *------------------------------------------
- */
-int pc_need_status_point(struct map_session_data *sd,int type)
-{
-	int val;
-
-	nullpo_retr(-1, sd);
-
-	if(type<SP_STR || type>SP_LUK)
-		return -1;
-	val =
-		type==SP_STR ? sd->status.str :
-		type==SP_AGI ? sd->status.agi :
-		type==SP_VIT ? sd->status.vit :
-		type==SP_INT ? sd->status.int_:
-		type==SP_DEX ? sd->status.dex : sd->status.luk;
-
-	return (val+9)/10+1;
-}
-
-/*==========================================
- * �\�͒l����
- *------------------------------------------
- */
-int pc_statusup(struct map_session_data *sd,int type)
-{
-	int need,val = 0;
-
-	nullpo_retr(0, sd);
-
-	need=pc_need_status_point(sd,type);
-	if(type<SP_STR || type>SP_LUK || need<0 || need>sd->status.status_point){
-		clif_statusupack(sd,type,0,0);
-		return 1;
-	}
-	switch(type){
-	case SP_STR:
-		if(sd->status.str >= battle_config.max_parameter) {
-			clif_statusupack(sd,type,0,0);
-			return 1;
-		}
-		val= ++sd->status.str;
-		break;
-	case SP_AGI:
-		if(sd->status.agi >= battle_config.max_parameter) {
-			clif_statusupack(sd,type,0,0);
-			return 1;
-		}
-		val= ++sd->status.agi;
-		break;
-	case SP_VIT:
-		if(sd->status.vit >= battle_config.max_parameter) {
-			clif_statusupack(sd,type,0,0);
-			return 1;
-		}
-		val= ++sd->status.vit;
-		break;
-	case SP_INT:
-		if(sd->status.int_ >= battle_config.max_parameter) {
-			clif_statusupack(sd,type,0,0);
-			return 1;
-		}
-		val= ++sd->status.int_;
-		break;
-	case SP_DEX:
-		if(sd->status.dex >= battle_config.max_parameter) {
-			clif_statusupack(sd,type,0,0);
-			return 1;
-		}
-		val= ++sd->status.dex;
-		break;
-	case SP_LUK:
-		if(sd->status.luk >= battle_config.max_parameter) {
-			clif_statusupack(sd,type,0,0);
-			return 1;
-		}
-		val= ++sd->status.luk;
-		break;
-	}
-	sd->status.status_point-=need;
-	if(need!=pc_need_status_point(sd,type)){
-		clif_updatestatus(sd,type-SP_STR+SP_USTR);
-	}
-	clif_updatestatus(sd,SP_STATUSPOINT);
-	clif_updatestatus(sd,type);
-	pc_calcstatus(sd,0);
-	clif_statusupack(sd,type,1,val);
-
-	return 0;
-}
-
-/*==========================================
- * �\�͒l����
- *------------------------------------------
- */
-int pc_statusup2(struct map_session_data *sd,int type,int val)
-{
-	nullpo_retr(0, sd);
-
-	if(type<SP_STR || type>SP_LUK){
-		clif_statusupack(sd,type,0,0);
-		return 1;
-	}
-	switch(type){
-	case SP_STR:
-		if(sd->status.str + val >= battle_config.max_parameter)
-			val = battle_config.max_parameter;
-		else if(sd->status.str + val < 1)
-			val = 1;
-		else
-			val += sd->status.str;
-		sd->status.str = val;
-		break;
-	case SP_AGI:
-		if(sd->status.agi + val >= battle_config.max_parameter)
-			val = battle_config.max_parameter;
-		else if(sd->status.agi + val < 1)
-			val = 1;
-		else
-			val += sd->status.agi;
-		sd->status.agi = val;
-		break;
-	case SP_VIT:
-		if(sd->status.vit + val >= battle_config.max_parameter)
-			val = battle_config.max_parameter;
-		else if(sd->status.vit + val < 1)
-			val = 1;
-		else
-			val += sd->status.vit;
-		sd->status.vit = val;
-		break;
-	case SP_INT:
-		if(sd->status.int_ + val >= battle_config.max_parameter)
-			val = battle_config.max_parameter;
-		else if(sd->status.int_ + val < 1)
-			val = 1;
-		else
-			val += sd->status.int_;
-		sd->status.int_ = val;
-		break;
-	case SP_DEX:
-		if(sd->status.dex + val >= battle_config.max_parameter)
-			val = battle_config.max_parameter;
-		else if(sd->status.dex + val < 1)
-			val = 1;
-		else
-			val += sd->status.dex;
-		sd->status.dex = val;
-		break;
-	case SP_LUK:
-		if(sd->status.luk + val >= battle_config.max_parameter)
-			val = battle_config.max_parameter;
-		else if(sd->status.luk + val < 1)
-			val = 1;
-		else
-			val = sd->status.luk + val;
-		sd->status.luk = val;
-		break;
-	}
-	clif_updatestatus(sd,type-SP_STR+SP_USTR);
-	clif_updatestatus(sd,type);
-	pc_calcstatus(sd,0);
-	clif_statusupack(sd,type,1,val);
-
-	return 0;
-}
-
-/*==========================================
- * �X�L���|�C���g����U��
- *------------------------------------------
- */
-int pc_skillup(struct map_session_data *sd,int skill_num)
-{
-	nullpo_retr(0, sd);
-
-	if( skill_num>=10000 ){
-		guild_skillup(sd,skill_num);
-		return 0;
-	}
-
-	if( sd->status.skill_point>0 &&
-		sd->status.skill[skill_num].id!=0 &&
-		sd->status.skill[skill_num].lv < skill_get_max(skill_num) )
-	{
-		sd->status.skill[skill_num].lv++;
-		sd->status.skill_point--;
-		pc_calcstatus(sd,0);
-		clif_skillup(sd,skill_num);
-		clif_updatestatus(sd,SP_SKILLPOINT);
-		clif_skillinfoblock(sd);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * /allskill
- *------------------------------------------
- */
-int pc_allskillup(struct map_session_data *sd)
-{
-	int i,id;
-	int c=0, s=0;
-	//�]����{�q�̏ꍇ�̌��̐E�Ƃ��Z�o����
-	struct pc_base_job s_class;
-
-	nullpo_retr(0, sd);
-
-	s_class = pc_calc_base_job(sd->status.class);
-	c = s_class.job;
-	s = (s_class.upper==1) ? 1 : 0 ; //�]���ȊO�͒ʏ�̃X�L���H
-
-	for(i=0;i<MAX_SKILL;i++){
-		sd->status.skill[i].id=0;
-		if (sd->status.skill[i].flag && sd->status.skill[i].flag != 13){	// card�X�L���Ȃ�A
-			sd->status.skill[i].lv=(sd->status.skill[i].flag==1)?0:sd->status.skill[i].flag-2;	// �{����lv��
-			sd->status.skill[i].flag=0;	// flag��0�ɂ��Ă���
-		}
-	}
-
-	if (battle_config.gm_allskill > 0 && pc_isGM(sd) >= battle_config.gm_allskill){
-		// �S�ẴX�L��
-		for(i=1;i<158;i++)
-			sd->status.skill[i].lv=skill_get_max(i);
-		for(i=210;i<291;i++)
-			sd->status.skill[i].lv=skill_get_max(i);
-		for(i=304;i<MAX_SKILL;i++)
-			sd->status.skill[i].lv=skill_get_max(i);
-	}
-	else {
-		for(i=0;(id=skill_tree[s][c][i].id)>0;i++){
-			if(sd->status.skill[id].id==0 && (!(skill_get_inf2(id)&0x01) || battle_config.quest_skill_learn) )
-				sd->status.skill[id].lv=skill_get_max(id);
-		}
-	}
-	pc_calcstatus(sd,0);
-
-	return 0;
-}
-
-/*==========================================
- * /resetlvl
- *------------------------------------------
- */
-int pc_resetlvl(struct map_session_data* sd,int type)
-{
-	int  i;
-	
-	nullpo_retr(0, sd);
-	
-	for(i=1;i<MAX_SKILL;i++){
-		sd->status.skill[i].lv = 0;
-	}
-
-	if(type == 1){
-	sd->status.skill_point=0;
-	sd->status.base_level=1;
-	sd->status.job_level=1;
-	sd->status.base_exp=sd->status.base_exp=0;
-	sd->status.job_exp=sd->status.job_exp=0;
-	if(sd->status.option !=0)
-		sd->status.option = 0;
-
-	sd->status.str=1;
-	sd->status.agi=1;
-	sd->status.vit=1;
-	sd->status.int_=1;
-	sd->status.dex=1;
-	sd->status.luk=1;
-	if(sd->status.class == 4001)
-		sd->status.status_point=100;
-	}
-
-	if(type == 2){
-		sd->status.skill_point=0;
-		sd->status.base_level=1;
-		sd->status.job_level=1;
-		sd->status.base_exp=0;
-		sd->status.job_exp=0;
-	}
-	if(type == 3){
-		sd->status.base_level=1;
-		sd->status.base_exp=0;
-	}
-	if(type == 4){
-		sd->status.job_level=1;
-		sd->status.job_exp=0;
-	}	
-
-	clif_updatestatus(sd,SP_STATUSPOINT);
-	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);
-	clif_updatestatus(sd,SP_BASELEVEL);
-	clif_updatestatus(sd,SP_JOBLEVEL);
-	clif_updatestatus(sd,SP_STATUSPOINT);
-	clif_updatestatus(sd,SP_NEXTBASEEXP);
-	clif_updatestatus(sd,SP_NEXTJOBEXP);
-	clif_updatestatus(sd,SP_SKILLPOINT);
-
-	clif_updatestatus(sd,SP_USTR);	// Updates needed stat points - Valaris
-	clif_updatestatus(sd,SP_UAGI);
-	clif_updatestatus(sd,SP_UVIT);
-	clif_updatestatus(sd,SP_UINT);
-	clif_updatestatus(sd,SP_UDEX);
-	clif_updatestatus(sd,SP_ULUK);	// End Addition
-
-	for(i=0;i<11;i++) { // unequip items that can't be equipped by base 1 [Valaris]
-		if(sd->equip_index[i] >= 0)
-			if(!pc_isequip(sd,sd->equip_index[i]))
-				pc_unequipitem(sd,sd->equip_index[i],1);
-	}
-
-	clif_skillinfoblock(sd);
-	pc_calcstatus(sd,0);
-
-	return 0;
-}
-/*==========================================
- * /resetstate
- *------------------------------------------
- */
-int pc_resetstate(struct map_session_data* sd)
-{
-	#define sumsp(a) ((a)*((a-2)/10+2) - 5*((a-2)/10)*((a-2)/10) - 6*((a-2)/10) -2)
-//	int add=0; // Removed by Dexity
-
-	nullpo_retr(0, sd);
-
-//	New statpoint table used here - Dexity
-	sd->status.status_point = atoi (statp[sd->status.base_level - 1]);
-//	End addition 
-
-//	Removed by Dexity - old count
-//	add += sumsp(sd->status.str);
-//	add += sumsp(sd->status.agi);
-//	add += sumsp(sd->status.vit);
-//	add += sumsp(sd->status.int_);
-//	add += sumsp(sd->status.dex);
-//	add += sumsp(sd->status.luk);
-//	sd->status.status_point+=add;
-
-	clif_updatestatus(sd,SP_STATUSPOINT);
-
-	sd->status.str=1;
-	sd->status.agi=1;
-	sd->status.vit=1;
-	sd->status.int_=1;
-	sd->status.dex=1;
-	sd->status.luk=1;
-
-	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);
-
-	clif_updatestatus(sd,SP_USTR);	// Updates needed stat points - Valaris
-	clif_updatestatus(sd,SP_UAGI);
-	clif_updatestatus(sd,SP_UVIT);
-	clif_updatestatus(sd,SP_UINT);
-	clif_updatestatus(sd,SP_UDEX);
-	clif_updatestatus(sd,SP_ULUK);	// End Addition
-
-	pc_calcstatus(sd,0);
-
-	return 0;
-}
-
-/*==========================================
- * /resetskill
- *------------------------------------------
- */
-int pc_resetskill(struct map_session_data* sd)
-{
-	int  i,skill;
-
-	nullpo_retr(0, sd);
-
-	for(i=1;i<MAX_SKILL;i++){
-		if( (skill = pc_checkskill(sd,i)) > 0) {
-			if(!(skill_get_inf2(i)&0x01) || battle_config.quest_skill_learn) {
-				if(!sd->status.skill[i].flag)
-					sd->status.skill_point += skill;
-				else if(sd->status.skill[i].flag > 2 && sd->status.skill[i].flag != 13) {
-					sd->status.skill_point += (sd->status.skill[i].flag - 2);
-				}
-				sd->status.skill[i].lv = 0;
-			}
-			else if(battle_config.quest_skill_reset)
-				sd->status.skill[i].lv = 0;
-			sd->status.skill[i].flag = 0;
-		}
-		else
-			sd->status.skill[i].lv = 0;
-	}
-	clif_updatestatus(sd,SP_SKILLPOINT);
-	clif_skillinfoblock(sd);
-	pc_calcstatus(sd,0);
-
-	return 0;
-}
-
-/*==========================================
- * pc�Ƀ_���[�W��^����
- *------------------------------------------
- */
-int pc_damage(struct block_list *src,struct map_session_data *sd,int damage)
-{
-	int i=0,j=0;
-	struct pc_base_job s_class;
-
-	nullpo_retr(0, sd);
-
-	//�]����{�q�̏ꍇ�̌��̐E�Ƃ��Z�o����
-	s_class = pc_calc_base_job(sd->status.class);
-	// ���Ɏ���ł����疳��
-	if(pc_isdead(sd))
-		return 0;
-	// �����Ă��痧���オ��
-	if(pc_issit(sd)) {
-		pc_setstand(sd);
-		skill_gangsterparadise(sd,0);
-	}
-
-	// �� ���Ă����瑫���~�߂�
-	if(sd->sc_data[SC_ENDURE].timer == -1 && !sd->special_state.infinite_endure)
-		pc_stop_walking(sd,3);
-	// ���t/�_���X�̒��f
-	if(damage > sd->status.max_hp>>2)
-		skill_stop_dancing(&sd->bl,0);
-
-	sd->status.hp-=damage;
-	if(sd->status.pet_id > 0 && sd->pd && sd->petDB && battle_config.pet_damage_support)
-		pet_target_check(sd,src,1);
-
-	if (sd->sc_data[SC_TRICKDEAD].timer != -1)
-		skill_status_change_end(&sd->bl, SC_TRICKDEAD, -1);
-	if(sd->status.option&2)
-		skill_status_change_end(&sd->bl, SC_HIDING, -1);
-	if(sd->status.option&4)
-		skill_status_change_end(&sd->bl, SC_CLOAKING, -1);
-	if(sd->status.option&16386)
-		skill_status_change_end(&sd->bl, SC_CHASEWALK, -1);
-
-	if(sd->status.hp>0){
-		// �܂������Ă���Ȃ�HP�X�V
-		clif_updatestatus(sd,SP_HP);
-
-		if(sd->status.hp<sd->status.max_hp>>2 && pc_checkskill(sd,SM_AUTOBERSERK)>0 &&
-			(sd->sc_data[SC_PROVOKE].timer==-1 || sd->sc_data[SC_PROVOKE].val2==0 ))
-			// �I�[�g�o�[�T�[�N����
-			skill_status_change_start(&sd->bl,SC_PROVOKE,10,1,0,0,0,0);
-
-		sd->canlog_tick = gettick();
-
-		if(sd->status.party_id>0) {	// on-the-fly party hp updates [Valaris]
-			struct party *p=party_search(sd->status.party_id);
-			if(p!=NULL) clif_party_hp(p,sd);
-		}	// end addition [Valaris]
-
-		return 0;
-	}
-	sd->status.hp = 0;
-	pc_setdead(sd);
-	if(sd->vender_id)
-		vending_closevending(sd);
-
-	if(sd->status.pet_id > 0 && sd->pd) {
-		if(sd->petDB) {
-			sd->pet.intimate -= sd->petDB->die;
-			if(sd->pet.intimate < 0)
-				sd->pet.intimate = 0;
-			clif_send_petdata(sd,1,sd->pet.intimate);
-		}
-	}
-
-	pc_stop_walking(sd,0);
-	skill_castcancel(&sd->bl,0);	// �r���̒��~
-	clif_clearchar_area(&sd->bl,1);
-	skill_unit_out_all(&sd->bl,gettick(),1);
-	if(sd->sc_data[SC_BLADESTOP].timer!=-1)//���n�͎��O�ɉ���
-		skill_status_change_end(&sd->bl,SC_BLADESTOP,-1);
-	pc_setglobalreg(sd,"PC_DIE_COUNTER",++sd->die_counter); //���ɃJ�E���^�[��������
-	skill_status_change_clear(&sd->bl,0);	// �X�e�[�^�X�ُ����������
-	clif_updatestatus(sd,SP_HP);
-	pc_calcstatus(sd,0);
-
-	for(i=0;i<5;i++)
-		if(sd->dev.val1[i]){
-			skill_status_change_end(&map_id2sd(sd->dev.val1[i])->bl,SC_DEVOTION,-1);
-			sd->dev.val1[i] = sd->dev.val2[i]=0;
-		}
-
-	if(battle_config.death_penalty_type>0) { // changed penalty options, added death by player if pk_mode [Valaris]
-		if(sd->status.class != 0 && !map[sd->bl.m].flag.nopenalty && !map[sd->bl.m].flag.gvg){ // only novices will recieve no penalty
-			if(battle_config.death_penalty_type==1 && battle_config.death_penalty_base > 0)
-				sd->status.base_exp -= (double)pc_nextbaseexp(sd) * (double)battle_config.death_penalty_base/10000;
-				if(battle_config.pk_mode && src && src->type==BL_PC)
-					sd->status.base_exp -= (double)pc_nextbaseexp(sd) * (double)battle_config.death_penalty_base/10000;
-			else if(battle_config.death_penalty_type==2 && battle_config.death_penalty_base > 0) {
-				if(pc_nextbaseexp(sd) > 0)
-					sd->status.base_exp -= (double)sd->status.base_exp * (double)battle_config.death_penalty_base/10000;
-					if(battle_config.pk_mode && src && src->type==BL_PC)
-						sd->status.base_exp -= (double)sd->status.base_exp * (double)battle_config.death_penalty_base/10000;
-			}
-			if(sd->status.base_exp < 0)
-				sd->status.base_exp = 0;
-			clif_updatestatus(sd,SP_BASEEXP);
-
-			if(battle_config.death_penalty_type==1 && battle_config.death_penalty_job > 0)
-				sd->status.job_exp -= (double)pc_nextjobexp(sd) * (double)battle_config.death_penalty_job/10000;
-					if(battle_config.pk_mode && src && src->type==BL_PC)
-					sd->status.job_exp -= (double)pc_nextjobexp(sd) * (double)battle_config.death_penalty_job/10000;
-			else if(battle_config.death_penalty_type==2 && battle_config.death_penalty_job > 0) {
-				if(pc_nextjobexp(sd) > 0)
-					sd->status.job_exp -= (double)sd->status.job_exp * (double)battle_config.death_penalty_job/10000;
-					if(battle_config.pk_mode && src && src->type==BL_PC)
-						sd->status.job_exp -= (double)sd->status.job_exp * (double)battle_config.death_penalty_job/10000;
-			}
-			if(sd->status.job_exp < 0)
-				sd->status.job_exp = 0;
-			clif_updatestatus(sd,SP_JOBEXP);
-		}
-	}
-	//�i�C�g���A���[�h�A�C�e���h���b�v
-	if(map[sd->bl.m].flag.pvp_nightmaredrop){ // Moved this outside so it works when PVP isnt enabled and during pk mode [Ancyker]
-		for(j=0;j<MAX_DROP_PER_MAP;j++){
-			int id = map[sd->bl.m].drop_list[j].drop_id;
-			int type = map[sd->bl.m].drop_list[j].drop_type;
-			int per = map[sd->bl.m].drop_list[j].drop_per;
-			if(id == 0)
-				continue;
-			if(id == -1){//�����_���h���b�v
-				int eq_num=0,eq_n[MAX_INVENTORY];
-				memset(eq_n,0,sizeof(eq_n));
-				//�悸�������Ă���A�C�e�������J�E���g
-				for(i=0;i<MAX_INVENTORY;i++){
-					int k;
-					if( (type == 1 && !sd->status.inventory[i].equip)
-						|| (type == 2 && sd->status.inventory[i].equip)
-						||  type == 3){
-						//InventoryIndex���i�[
-						for(k=0;k<MAX_INVENTORY;k++){
-							if(eq_n[k] <= 0){
-								eq_n[k]=i;
-								break;
-							}
-						}
-						eq_num++;
-					}
-				}
-				if(eq_num > 0){
-					int n = eq_n[rand()%eq_num];//�Y���A�C�e���̒����烉���_��
-					if(rand()%10000 < per){
-						if(sd->status.inventory[n].equip)
-							pc_unequipitem(sd,n,0);
-						pc_dropitem(sd,n,1);
-					}
-				}
-			}
-			else if(id > 0){
-				for(i=0;i<MAX_INVENTORY;i++){
-					if(sd->status.inventory[i].nameid == id//ItemID����v������
-						&& rand()%10000 < per//�h���b�v�������OK��
-						&& ((type == 1 && !sd->status.inventory[i].equip)//�^�C�v�����OK�Ȃ�h���b�v
-							|| (type == 2 && sd->status.inventory[i].equip)
-							|| type == 3) ){
-						if(sd->status.inventory[i].equip)
-							pc_unequipitem(sd,i,0);
-						pc_dropitem(sd,i,1);
-						break;
-					}
-				}
-			}
-		}
-	}
-	// pvp
-	if( map[sd->bl.m].flag.pvp && !battle_config.pk_mode){ // disable certain pvp functions on pk_mode [Valaris]
-		//�����L���O�v�Z
-		if(!map[sd->bl.m].flag.pvp_nocalcrank){
-			sd->pvp_point-=5;
-			if(src && src->type==BL_PC )
-				((struct map_session_data *)src)->pvp_point++;
-		//} //fixed wrong '{' placement by Lupus
-			pc_setdead(sd);
-		}
-		// ��������
-		if( sd->pvp_point < 0 ){
-			sd->pvp_point=0;
-			pc_setstand(sd);
-			pc_setrestartvalue(sd,3);
-			pc_setpos(sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,0);
-		}
-	}
-	//GvG
-	if(map[sd->bl.m].flag.gvg){
-		pc_setstand(sd);
-		pc_setrestartvalue(sd,3);
-		pc_setpos(sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,0);
-	}
-
-	return 0;
-}
-
-//
-// script�� �A
-//
-/*==========================================
- * script�pPC�X�e�[�^�X�ǂݏo��
- *------------------------------------------
- */
-int pc_readparam(struct map_session_data *sd,int type)
-{
-	int val=0;
-	struct pc_base_job s_class;
-	
-	s_class = pc_calc_base_job(sd->status.class);
-
-	nullpo_retr(0, sd);
-
-	switch(type){
-	case SP_SKILLPOINT:
-		val= sd->status.skill_point;
-		break;
-	case SP_STATUSPOINT:
-		val= sd->status.status_point;
-		break;
-	case SP_ZENY:
-		val= sd->status.zeny;
-		break;
-	case SP_BASELEVEL:
-		val= sd->status.base_level;
-		break;
-	case SP_JOBLEVEL:
-		val= sd->status.job_level;
-		break;
-	case SP_CLASS:
-		if(val>=24 && val < 45)
-			val+=3978;
-		else
-		val= sd->status.class;
-		break;
-	case SP_UPPER:
-		val= s_class.upper;
-		break;
-	case SP_SEX:
-		val= sd->sex;
-		break;
-	case SP_WEIGHT:
-		val= sd->weight;
-		break;
-	case SP_MAXWEIGHT:
-		val= sd->max_weight;
-		break;
-	case SP_BASEEXP:
-		val= sd->status.base_exp;
-		break;
-	case SP_JOBEXP:
-		val= sd->status.job_exp;
-		break;
-	case SP_NEXTBASEEXP:
-		val= pc_nextbaseexp(sd);
-		break;
-	case SP_NEXTJOBEXP:
-		val= pc_nextjobexp(sd);
-		break;
-	case SP_HP:
-		val= sd->status.hp;
-		break;
-	case SP_MAXHP:
-		val= sd->status.max_hp;
-		break;
-	case SP_SP:
-		val= sd->status.sp;
-		break;
-	case SP_MAXSP:
-		val= sd->status.max_sp;
-		break;
-	case SP_STR:
-		val= sd->status.str;
-		break;
-	case SP_AGI:
-		val= sd->status.agi;
-		break;
-	case SP_VIT:
-		val= sd->status.vit;
-		break;
-	case SP_INT:
-		val= sd->status.int_;
-		break;
-	case SP_DEX:
-		val= sd->status.dex;
-		break;
-	case SP_LUK:
-		val= sd->status.luk;
-		break;
-	case SP_FAME:
-		val= sd->fame;
-		break;
-	}
-
-	return val;
-}
-
-/*==========================================
- * script�pPC�X�e�[�^�X�ݒ�
- *------------------------------------------
- */
-int pc_setparam(struct map_session_data *sd,int type,int val)
-{
-	int i = 0,up_level = 50;
-	struct pc_base_job s_class;
-
-	nullpo_retr(0, sd);
-
-	s_class = pc_calc_base_job(sd->status.class);
-
-	switch(type){
-	case SP_BASELEVEL:
-		if (val > sd->status.base_level) {
-			for (i = 1; i <= (val - sd->status.base_level); i++)
-				sd->status.status_point += (sd->status.base_level + i + 14) / 5 ;
-		}
-		sd->status.base_level = val;
-		sd->status.base_exp = 0;
-		clif_updatestatus(sd, SP_BASELEVEL);
-		clif_updatestatus(sd, SP_NEXTBASEEXP);
-		clif_updatestatus(sd, SP_STATUSPOINT);
-		clif_updatestatus(sd, SP_BASEEXP);
-		pc_calcstatus(sd, 0);
-		pc_heal(sd, sd->status.max_hp, sd->status.max_sp);
-		break;
-	case SP_JOBLEVEL:
-		if (sd->status.class == 0)
-			up_level -= 40;
-		if ((sd->status.class == 23) || (sd->status.class >= 4001 && sd->status.class <= 4022))
-			up_level += 20;
-		if (val >= sd->status.job_level) {
-			if (val > up_level)val = up_level;
-			sd->status.skill_point += (val-sd->status.job_level);
-		sd->status.job_level = val;
-			sd->status.job_exp = 0;
-			clif_updatestatus(sd, SP_JOBLEVEL);
-			clif_updatestatus(sd, SP_NEXTJOBEXP);
-			clif_updatestatus(sd, SP_JOBEXP);
-			clif_updatestatus(sd, SP_SKILLPOINT);
-			pc_calcstatus(sd, 0);
-			clif_misceffect(&sd->bl, 1);
-		} else {
-			sd->status.job_level = val;
-			sd->status.job_exp = 0;
-			clif_updatestatus(sd, SP_JOBLEVEL);
-			clif_updatestatus(sd, SP_NEXTJOBEXP);
-			clif_updatestatus(sd, SP_JOBEXP);
-			pc_calcstatus(sd, 0);
-		}
-		clif_updatestatus(sd,type);
-		break;
-	case SP_SKILLPOINT:
-		sd->status.skill_point = val;
-		break;
-	case SP_STATUSPOINT:
-		sd->status.status_point = val;
-		break;
-	case SP_ZENY:
-		sd->status.zeny = val;
-		break;
-	case SP_BASEEXP:
-		if(pc_nextbaseexp(sd) > 0) {
-			sd->status.base_exp = val;
-			if(sd->status.base_exp < 0)
-				sd->status.base_exp=0;
-			pc_checkbaselevelup(sd);
-		}
-		break;
-	case SP_JOBEXP:
-		if(pc_nextjobexp(sd) > 0) {
-			sd->status.job_exp = val;
-			if(sd->status.job_exp < 0)
-				sd->status.job_exp=0;
-			pc_checkjoblevelup(sd);
-		}
-		break;
-	case SP_SEX:
-		sd->sex = val;
-		break;
-	case SP_WEIGHT:
-		sd->weight = val;
-		break;
-	case SP_MAXWEIGHT:
-		sd->max_weight = val;
-		break;
-	case SP_HP:
-		sd->status.hp = val;
-		break;
-	case SP_MAXHP:
-		sd->status.max_hp = val;
-		break;
-	case SP_SP:
-		sd->status.sp = val;
-		break;
-	case SP_MAXSP:
-		sd->status.max_sp = val;
-		break;
-	case SP_STR:
-		sd->status.str = val;
-		break;
-	case SP_AGI:
-		sd->status.agi = val;
-		break;
-	case SP_VIT:
-		sd->status.vit = val;
-		break;
-	case SP_INT:
-		sd->status.int_ = val;
-		break;
-	case SP_DEX:
-		sd->status.dex = val;
-		break;
-	case SP_LUK:
-		sd->status.luk = val;
-		break;
-	case SP_FAME:
-		sd->fame = val;
-		break;
-	}
-	clif_updatestatus(sd,type);
-
-	return 0;
-}
-
-/*==========================================
- * HP/SP��
- *------------------------------------------
- */
-int pc_heal(struct map_session_data *sd,int hp,int sp)
-{
-//	if(battle_config.battle_log)
-//		printf("heal %d %d\n",hp,sp);
-
-	nullpo_retr(0, sd);
-
-	if(pc_checkoverhp(sd)) {
-		if(hp > 0)
-			hp = 0;
-	}
-	if(pc_checkoversp(sd)) {
-		if(sp > 0)
-			sp = 0;
-	}
-
-	if(sd->sc_data && sd->sc_data[SC_BERSERK].timer!=-1) //�o�[�T�[�N���͉񕜂����Ȃ��炵��
-		return 0;
-
-	if(hp+sd->status.hp>sd->status.max_hp)
-		hp=sd->status.max_hp-sd->status.hp;
-	if(sp+sd->status.sp>sd->status.max_sp)
-		sp=sd->status.max_sp-sd->status.sp;
-	sd->status.hp+=hp;
-	if(sd->status.hp <= 0) {
-		sd->status.hp = 0;
-		pc_damage(NULL,sd,1);
-		hp = 0;
-	}
-	sd->status.sp+=sp;
-	if(sd->status.sp <= 0)
-		sd->status.sp = 0;
-	if(hp)
-		clif_updatestatus(sd,SP_HP);
-	if(sp)
-		clif_updatestatus(sd,SP_SP);
-
-	if(sd->status.party_id>0) {	// on-the-fly party hp updates [Valaris]
-		struct party *p=party_search(sd->status.party_id);
-		if(p!=NULL) clif_party_hp(p,sd);
-	}	// end addition [Valaris]
-
-	return hp + sp;
-}
-
-/*==========================================
- * HP/SP��
- *------------------------------------------
- */
-int pc_itemheal(struct map_session_data *sd,int hp,int sp)
-{
-	int bonus;
-//	if(battle_config.battle_log)
-//		printf("heal %d %d\n",hp,sp);
-
-	nullpo_retr(0, sd);
-
-	if(sd->sc_data && sd->sc_data[SC_GOSPEL].timer!=-1) //�o�[�T�[�N���͉񕜂����Ȃ��炵��
-		return 0;
-
-	if(sd->state.potionpitcher_flag) {
-		sd->potion_hp = hp;
-		sd->potion_sp = sp;
-		return 0;
-	}
-
-	if(pc_checkoverhp(sd)) {
-		if(hp > 0)
-			hp = 0;
-	}
-	if(pc_checkoversp(sd)) {
-		if(sp > 0)
-			sp = 0;
-	}
-	if(hp > 0) {
-		bonus = (sd->paramc[2]<<1) + 100 + pc_checkskill(sd,SM_RECOVERY)*10;
-		if(bonus != 100)
-			hp = hp * bonus / 100;
-		bonus = 100 + pc_checkskill(sd,AM_LEARNINGPOTION)*5;
-		if(bonus != 100)
-			hp = hp * bonus / 100;
-	}
-	if(sp > 0) {
-		bonus = (sd->paramc[3]<<1) + 100 + pc_checkskill(sd,MG_SRECOVERY)*10;
-		if(bonus != 100)
-			sp = sp * bonus / 100;
-		bonus = 100 + pc_checkskill(sd,AM_LEARNINGPOTION)*5;
-		if(bonus != 100)
-			sp = sp * bonus / 100;
-	}
-	if(hp+sd->status.hp>sd->status.max_hp)
-		hp=sd->status.max_hp-sd->status.hp;
-	if(sp+sd->status.sp>sd->status.max_sp)
-		sp=sd->status.max_sp-sd->status.sp;
-	sd->status.hp+=hp;
-	if(sd->status.hp <= 0) {
-		sd->status.hp = 0;
-		pc_damage(NULL,sd,1);
-		hp = 0;
-	}
-	sd->status.sp+=sp;
-	if(sd->status.sp <= 0)
-		sd->status.sp = 0;
-	if(hp)
-		clif_updatestatus(sd,SP_HP);
-	if(sp)
-		clif_updatestatus(sd,SP_SP);
-
-	return 0;
-}
-
-/*==========================================
- * HP/SP��
- *------------------------------------------
- */
-int pc_percentheal(struct map_session_data *sd,int hp,int sp)
-{
-	nullpo_retr(0, sd);
-
-	if(sd->state.potionpitcher_flag) {
-		sd->potion_per_hp = hp;
-		sd->potion_per_sp = sp;
-		return 0;
-	}
-
-	if(pc_checkoverhp(sd)) {
-		if(hp > 0)
-			hp = 0;
-	}
-	if(pc_checkoversp(sd)) {
-		if(sp > 0)
-			sp = 0;
-	}
-	if(hp) {
-		if(hp >= 100) {
-			sd->status.hp = sd->status.max_hp;
-		}
-		else if(hp <= -100) {
-			sd->status.hp = 0;
-			pc_damage(NULL,sd,1);
-		}
-		else {
-			sd->status.hp += sd->status.max_hp*hp/100;
-			if(sd->status.hp > sd->status.max_hp)
-				sd->status.hp = sd->status.max_hp;
-			if(sd->status.hp <= 0) {
-				sd->status.hp = 0;
-				pc_damage(NULL,sd,1);
-				hp = 0;
-			}
-		}
-	}
-	if(sp) {
-		if(sp >= 100) {
-			sd->status.sp = sd->status.max_sp;
-		}
-		else if(sp <= -100) {
-			sd->status.sp = 0;
-		}
-		else {
-			sd->status.sp += sd->status.max_sp*sp/100;
-			if(sd->status.sp > sd->status.max_sp)
-				sd->status.sp = sd->status.max_sp;
-			if(sd->status.sp < 0)
-				sd->status.sp = 0;
-		}
-	}
-	if(hp)
-		clif_updatestatus(sd,SP_HP);
-	if(sp)
-		clif_updatestatus(sd,SP_SP);
-
-	return 0;
-}
-
-/*==========================================
- * �E�ύX
- * ����	job �E�� 0�`23
- *		upper �ʏ� 0, �]�� 1, �{�q 2, ���̂܂� -1
- *------------------------------------------
- */
-int pc_jobchange(struct map_session_data *sd,int job, int upper)
-{
-	int i;
-	int b_class = 0;
-	//�]����{�q�̏ꍇ�̌��̐E�Ƃ��Z�o����
-	struct pc_base_job s_class = pc_calc_base_job(sd->status.class);
-	
-	nullpo_retr(0, sd);
-
-	if((job > 23) && (job < 68))
-		job += 3977;
-
-	if((job > 69) && (job < 4000))
-		return 1;
-	
-	if(upper < 0) //���ݓ]�����ǂ����𔻒f����
-		upper = s_class.upper;
-
-	if(upper == 0){ //�ʏ�E�Ȃ�job���̂܂��
-		b_class = job;
-	}else if(upper == 1){
-		if(job == 23){ //�]���ɃX�p�m�r�͑��݂��Ȃ��̂ł��f��
-			return 1;
-		}else{
-			b_class = job + 4001;
-		}
-	}else if(upper == 2){ //�{�q�Ɍ����͂Ȃ����ǂǂ������ŏR���邩�炢����
-		b_class = (job==23)?job + 4022:job + 4023;
-	}else{
-		return 1;
-	}
-
-	if((sd->status.sex == 0 && job == 19) || (sd->status.sex == 1 && job == 20) ||
-		(sd->status.sex == 0 && job == 4020) || (sd->status.sex == 1 && job == 4021) ||
-	   job ==22 || sd->status.class == b_class) //���̓o�[�h�ɂȂ�Ȃ��A���̓_���T�[�ɂȂ�Ȃ��A�����ߏւ����f��
-		return 1;
-	
-	sd->status.class = sd->view_class = b_class;
-
-	sd->status.job_level=1;
-	sd->status.job_exp=0;
-	clif_updatestatus(sd,SP_JOBLEVEL);
-	clif_updatestatus(sd,SP_JOBEXP);
-	clif_updatestatus(sd,SP_NEXTJOBEXP);
-
-	for(i=0;i<11;i++) {
-		if(sd->equip_index[i] >= 0)
-			if(!pc_isequip(sd,sd->equip_index[i]))
-				pc_unequipitem(sd,sd->equip_index[i],1);	// �����O��
-	}
-
-	clif_changelook(&sd->bl,LOOK_BASE,sd->view_class); // move sprite update to prevent client crashes with incompatible equipment [Valaris]
-	if(sd->status.clothes_color > 0)
-		clif_changelook(&sd->bl,LOOK_CLOTHES_COLOR,sd->status.clothes_color);
-	if(battle_config.muting_players && sd->status.manner < 0)
-		clif_changestatus(&sd->bl,SP_MANNER,sd->status.manner);
-
-	pc_calcstatus(sd,0);
-	pc_checkallowskill(sd);
-	pc_equiplookall(sd);
-	clif_equiplist(sd);
-
-	if(pc_isriding(sd)) {	// remove peco status if changing into invalid class [Valaris]
-		if(!(pc_checkskill(sd,KN_RIDING))) 
-			pc_setoption(sd,sd->status.option|-0x0000);
-		if(pc_checkskill(sd,KN_RIDING)>0)
-			 pc_setriding(sd);
-	}
-	
-	return 0;
-}
-
-/*==========================================
- * �����ڕύX
- *------------------------------------------
- */
-int pc_equiplookall(struct map_session_data *sd)
-{
-	nullpo_retr(0, sd);
-
-#if PACKETVER < 4
-	clif_changelook(&sd->bl,LOOK_WEAPON,sd->status.weapon);
-	clif_changelook(&sd->bl,LOOK_SHIELD,sd->status.shield);
-#else
-	clif_changelook(&sd->bl,LOOK_WEAPON,0);
-	clif_changelook(&sd->bl,LOOK_SHOES,0);
-#endif
-	clif_changelook(&sd->bl,LOOK_HEAD_BOTTOM,sd->status.head_bottom);
-	clif_changelook(&sd->bl,LOOK_HEAD_TOP,sd->status.head_top);
-	clif_changelook(&sd->bl,LOOK_HEAD_MID,sd->status.head_mid);
-
-	return 0;
-}
-
-/*==========================================
- * �����ڕύX
- *------------------------------------------
- */
-int pc_changelook(struct map_session_data *sd,int type,int val)
-{
-	nullpo_retr(0, sd);
-
-	switch(type){
-	case LOOK_HAIR:
-		sd->status.hair=val;
-		break;
-	case LOOK_WEAPON:
-		sd->status.weapon=val;
-		break;
-	case LOOK_HEAD_BOTTOM:
-		sd->status.head_bottom=val;
-		break;
-	case LOOK_HEAD_TOP:
-		sd->status.head_top=val;
-		break;
-	case LOOK_HEAD_MID:
-		sd->status.head_mid=val;
-		break;
-	case LOOK_HAIR_COLOR:
-		sd->status.hair_color=val;
-		break;
-	case LOOK_CLOTHES_COLOR:
-		sd->status.clothes_color=val;
-		break;
-	case LOOK_SHIELD:
-		sd->status.shield=val;
-		break;
-	case LOOK_SHOES:
-		break;
-	}
-	clif_changelook(&sd->bl,type,val);
-
-	return 0;
-}
-
-/*==========================================
- * �t���i(��,�y�R,�J�[�g)�ݒ�
- *------------------------------------------
- */
-int pc_setoption(struct map_session_data *sd,int type)
-{
-	nullpo_retr(0, sd);
-
-	sd->status.option=type;
-	clif_changeoption(&sd->bl);
-	pc_calcstatus(sd,0);
-
-	return 0;
-}
-
-/*==========================================
- * �J�[�g�ݒ�
- *------------------------------------------
- */
-int pc_setcart(struct map_session_data *sd,int type)
-{
-	int cart[6]={0x0000,0x0008,0x0080,0x0100,0x0200,0x0400};
-
-	nullpo_retr(0, sd);
-
-	if(pc_checkskill(sd,MC_PUSHCART)>0){ // �v�b�V���J�[�g�X�L������
-		if(!pc_iscarton(sd)){ // �J�[�g��t���Ă��Ȃ�
-			pc_setoption(sd,cart[type]);
-			clif_cart_itemlist(sd);
-			clif_cart_equiplist(sd);
-			clif_updatestatus(sd,SP_CARTINFO);
-			clif_status_change(&sd->bl,0x0c,0);
-		}
-		else{
-			pc_setoption(sd,cart[type]);
-		}
-	}
-
-	return 0;
-}
-
-/*==========================================
- * ��ݒ�
- *------------------------------------------
- */
-int pc_setfalcon(struct map_session_data *sd)
-{
-	if(pc_checkskill(sd,HT_FALCON)>0){	// �t�@���R���}�X�^���[�X�L������
-		pc_setoption(sd,sd->status.option|0x0010);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �y�R�y�R�ݒ�
- *------------------------------------------
- */
-int pc_setriding(struct map_session_data *sd)
-{
-	if(sd->disguise > 0) { // temporary prevention of crash caused by peco + disguise, will look into a better solution [Valaris]
-		clif_displaymessage(sd->fd, "Cannot mount a Peco while in disguise.");
-		return 0;
-	}
-
-	if((pc_checkskill(sd,KN_RIDING)>0)){ // ���C�f�B���O�X�L������
-		pc_setoption(sd,sd->status.option|0x0020);
-
-		if(sd->status.class==7)
-			sd->status.class=sd->view_class=13;
-		
-		if(sd->status.class==14)
-			sd->status.class=sd->view_class=21;
-		
-		if(sd->status.class==4008)
-			sd->status.class=sd->view_class=4014;
-		
-		if(sd->status.class==4015)
-			sd->status.class=sd->view_class=4022;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * script�p�ϐ��̒l��ǂ�
- *------------------------------------------
- */
-int pc_readreg(struct map_session_data *sd,int reg)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	for(i=0;i<sd->reg_num;i++)
-		if(sd->reg[i].index==reg)
-			return sd->reg[i].data;
-
-	return 0;
-}
-/*==========================================
- * script�p�ϐ��̒l��ݒ�
- *------------------------------------------
- */
-int pc_setreg(struct map_session_data *sd,int reg,int val)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	for (i = 0; i < sd->reg_num; i++) {
-		if (sd->reg[i].index == reg){
-			sd->reg[i].data = val;
-			return 0;
-		}
-	}
-	sd->reg_num++;
-	sd->reg = realloc(sd->reg, sizeof(*(sd->reg)) * sd->reg_num);
-	if (sd->reg == NULL){
-		printf("out of memory : pc_setreg\n");
-		exit(1);
-	}
-/*	memset(sd->reg + (sd->reg_num - 1) * sizeof(*(sd->reg)), 0,
-		sizeof(*(sd->reg)));
-*/
-	sd->reg[i].index = reg;
-	sd->reg[i].data = val;
-
-	return 0;
-}
-
-/*==========================================
- * script�p������ϐ��̒l��ǂ�
- *------------------------------------------
- */
-char *pc_readregstr(struct map_session_data *sd,int reg)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	for(i=0;i<sd->regstr_num;i++)
-		if(sd->regstr[i].index==reg)
-			return sd->regstr[i].data;
-
-	return NULL;
-}
-/*==========================================
- * script�p������ϐ��̒l��ݒ�
- *------------------------------------------
- */
-int pc_setregstr(struct map_session_data *sd,int reg,char *str)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	if(strlen(str)+1 >= sizeof(sd->regstr[0].data)){
-		printf("pc_setregstr: string too long !\n");
-		return 0;
-	}
-
-	for(i=0;i<sd->regstr_num;i++)
-		if(sd->regstr[i].index==reg){
-			strcpy(sd->regstr[i].data,str);
-			return 0;
-		}
-	sd->regstr_num++;
-	sd->regstr = realloc(sd->regstr, sizeof(sd->regstr[0]) * sd->regstr_num);
-	if(sd->regstr==NULL){
-		printf("out of memory : pc_setreg\n");
-		exit(1);
-	}
-/*	memset(sd->reg + (sd->reg_num - 1) * sizeof(*(sd->reg)), 0,
-		sizeof(*(sd->reg)));
-*/
-	sd->regstr[i].index=reg;
-	strcpy(sd->regstr[i].data,str);
-
-	return 0;
-}
-
-/*==========================================
- * script�p�O���[�o���ϐ��̒l��ǂ�
- *------------------------------------------
- */
-int pc_readglobalreg(struct map_session_data *sd,char *reg)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	for(i=0;i<sd->status.global_reg_num;i++){
-		if(strcmp(sd->status.global_reg[i].str,reg)==0)
-			return sd->status.global_reg[i].value;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * script�p�O���[�o���ϐ��̒l��ݒ�
- *------------------------------------------
- */
-int pc_setglobalreg(struct map_session_data *sd,char *reg,int val)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	//PC_DIE_COUNTER���X�N���v�g�ȂǂŕύX���ꂽ���̏���
-	if(strcmp(reg,"PC_DIE_COUNTER") == 0 && sd->die_counter != val){
-		sd->die_counter = val;
-		pc_calcstatus(sd,0);
-	}
-	if(val==0){
-		for(i=0;i<sd->status.global_reg_num;i++){
-			if(strcmp(sd->status.global_reg[i].str,reg)==0){
-				sd->status.global_reg[i]=sd->status.global_reg[sd->status.global_reg_num-1];
-				sd->status.global_reg_num--;
-				break;
-			}
-		}
-		return 0;
-	}
-	for(i=0;i<sd->status.global_reg_num;i++){
-		if(strcmp(sd->status.global_reg[i].str,reg)==0){
-			sd->status.global_reg[i].value=val;
-			return 0;
-		}
-	}
-	if(sd->status.global_reg_num<GLOBAL_REG_NUM){
-		strcpy(sd->status.global_reg[i].str,reg);
-		sd->status.global_reg[i].value=val;
-		sd->status.global_reg_num++;
-		return 0;
-	}
-	if(battle_config.error_log)
-		printf("pc_setglobalreg : couldn't set %s (GLOBAL_REG_NUM = %d)\n", reg, GLOBAL_REG_NUM);
-
-	return 1;
-}
-
-/*==========================================
- * script�p�A�J�E���g�ϐ��̒l��ǂ�
- *------------------------------------------
- */
-int pc_readaccountreg(struct map_session_data *sd,char *reg)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	for(i=0;i<sd->status.account_reg_num;i++){
-		if(strcmp(sd->status.account_reg[i].str,reg)==0)
-			return sd->status.account_reg[i].value;
-	}
-
-	return 0;
-}
-/*==========================================
- * script�p�A�J�E���g�ϐ��̒l��ݒ�
- *------------------------------------------
- */
-int pc_setaccountreg(struct map_session_data *sd,char *reg,int val)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	if(val==0){
-		for(i=0;i<sd->status.account_reg_num;i++){
-			if(strcmp(sd->status.account_reg[i].str,reg)==0){
-				sd->status.account_reg[i]=sd->status.account_reg[sd->status.account_reg_num-1];
-				sd->status.account_reg_num--;
-				break;
-			}
-		}
-		intif_saveaccountreg(sd);
-		return 0;
-	}
-	for(i=0;i<sd->status.account_reg_num;i++){
-		if(strcmp(sd->status.account_reg[i].str,reg)==0){
-			sd->status.account_reg[i].value=val;
-			intif_saveaccountreg(sd);
-			return 0;
-		}
-	}
-	if(sd->status.account_reg_num<ACCOUNT_REG_NUM){
-		strcpy(sd->status.account_reg[i].str,reg);
-		sd->status.account_reg[i].value=val;
-		sd->status.account_reg_num++;
-		intif_saveaccountreg(sd);
-		return 0;
-	}
-	if(battle_config.error_log)
-		printf("pc_setaccountreg : couldn't set %s (ACCOUNT_REG_NUM = %d)\n", reg, ACCOUNT_REG_NUM);
-
-	return 1;
-}
-/*==========================================
- * script�p�A�J�E���g�ϐ�2�̒l��ǂ�
- *------------------------------------------
- */
-int pc_readaccountreg2(struct map_session_data *sd,char *reg)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	for(i=0;i<sd->status.account_reg2_num;i++){
-		if(strcmp(sd->status.account_reg2[i].str,reg)==0)
-			return sd->status.account_reg2[i].value;
-	}
-
-	return 0;
-}
-/*==========================================
- * script�p�A�J�E���g�ϐ�2�̒l��ݒ�
- *------------------------------------------
- */
-int pc_setaccountreg2(struct map_session_data *sd,char *reg,int val)
-{
-	int i;
-
-	nullpo_retr(1, sd);
-
-	if(val==0){
-		for(i=0;i<sd->status.account_reg2_num;i++){
-			if(strcmp(sd->status.account_reg2[i].str,reg)==0){
-				sd->status.account_reg2[i]=sd->status.account_reg2[sd->status.account_reg2_num-1];
-				sd->status.account_reg2_num--;
-				break;
-			}
-		}
-		chrif_saveaccountreg2(sd);
-		return 0;
-	}
-	for(i=0;i<sd->status.account_reg2_num;i++){
-		if(strcmp(sd->status.account_reg2[i].str,reg)==0){
-			sd->status.account_reg2[i].value=val;
-			chrif_saveaccountreg2(sd);
-			return 0;
-		}
-	}
-	if(sd->status.account_reg2_num<ACCOUNT_REG2_NUM){
-		strcpy(sd->status.account_reg2[i].str,reg);
-		sd->status.account_reg2[i].value=val;
-		sd->status.account_reg2_num++;
-		chrif_saveaccountreg2(sd);
-		return 0;
-	}
-	if(battle_config.error_log)
-		printf("pc_setaccountreg2 : couldn't set %s (ACCOUNT_REG2_NUM = %d)\n", reg, ACCOUNT_REG2_NUM);
-
-	return 1;
-}
-/*==========================================
- * ���B������
- *------------------------------------------
- */
-int pc_percentrefinery(struct map_session_data *sd,struct item *item)
-{
-	int percent;
-
-	nullpo_retr(0, item);
-	percent=percentrefinery[itemdb_wlv(item->nameid)][(int)item->refine];
-
-	percent += pc_checkskill(sd,BS_WEAPONRESEARCH);	// ���팤���X�L������
-
-	// �m���̗L���͈̓`�F�b�N
-	if( percent > 100 ){
-		percent = 100;
-	}
-	if( percent < 0 ){
-		percent = 0;
-	}
-
-	return percent;
-}
-
-/*==========================================
- * �C�x���g�^�C�}�[����
- *------------------------------------------
- */
-int pc_eventtimer(int tid,unsigned int tick,int id,int data)
-{
-	struct map_session_data *sd=map_id2sd(id);
-	int i;
-	if(sd==NULL)
-		return 0;
-
-	for(i=0;i<MAX_EVENTTIMER;i++){
-		if( sd->eventtimer[i]==tid ){
-			sd->eventtimer[i]=-1;
-			npc_event(sd,(const char *)data,0);
-			break;
-		}
-	}
-	free((void *)data);
-	if(i==MAX_EVENTTIMER) {
-		if(battle_config.error_log)
-			printf("pc_eventtimer: no such event timer\n");
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �C�x���g�^�C�}�[�lj�
- *------------------------------------------
- */
-int pc_addeventtimer(struct map_session_data *sd,int tick,const char *name)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	for(i=0;i<MAX_EVENTTIMER;i++)
-		if( sd->eventtimer[i]==-1 )
-			break;
-	if(i<MAX_EVENTTIMER){
-		char *evname=(char *)aCalloc(24,sizeof(char));
-		memcpy(evname,name,24);
-		sd->eventtimer[i]=add_timer(gettick()+tick,
-			pc_eventtimer,sd->bl.id,(int)evname);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �C�x���g�^�C�}�[�폜
- *------------------------------------------
- */
-int pc_deleventtimer(struct map_session_data *sd,const char *name)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	for(i=0;i<MAX_EVENTTIMER;i++)
-		if( sd->eventtimer[i]!=-1 && strcmp(
-			(char *)(get_timer(sd->eventtimer[i])->data), name)==0 ){
-				delete_timer(sd->eventtimer[i],pc_eventtimer);
-				sd->eventtimer[i]=-1;
-				break;
-		}
-
-	return 0;
-}
-
-/*==========================================
- * �C�x���g�^�C�}�[�J�E���g�l�lj�
- *------------------------------------------
- */
-int pc_addeventtimercount(struct map_session_data *sd,const char *name,int tick)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	for(i=0;i<MAX_EVENTTIMER;i++)
-		if( sd->eventtimer[i]!=-1 && strcmp(
-			(char *)(get_timer(sd->eventtimer[i])->data), name)==0 ){
-				addtick_timer(sd->eventtimer[i],tick);
-				break;
-		}
-
-	return 0;
-}
-
-/*==========================================
- * �C�x���g�^�C�}�[�S�폜
- *------------------------------------------
- */
-int pc_cleareventtimer(struct map_session_data *sd)
-{
-	int i;
-
-	nullpo_retr(0, sd);
-
-	for(i=0;i<MAX_EVENTTIMER;i++)
-		if( sd->eventtimer[i]!=-1 ){
-			delete_timer(sd->eventtimer[i],pc_eventtimer);
-			sd->eventtimer[i]=-1;
-		}
-
-	return 0;
-}
-
-//
-// �� ����
-//
-/*==========================================
- * �A�C�e���𑕔�����
- *------------------------------------------
- */
-int pc_equipitem(struct map_session_data *sd,int n,int pos)
-{
-	int i,nameid, arrow;
-	struct item_data *id;
-	//�]����{�q�̏ꍇ�̌��̐E�Ƃ��Z�o����
-
-	nullpo_retr(0, sd);
-
-	nameid = sd->status.inventory[n].nameid;
-	id = sd->inventory_data[n];
-	pos = pc_equippoint(sd,n);
-
-	if(battle_config.battle_log)
-		printf("equip %d(%d) %x:%x\n",nameid,n,id->equip,pos);
-	if(!pc_isequip(sd,n) || !pos || sd->status.inventory[n].broken==1 ) { // [Valaris]
-		clif_equipitemack(sd,n,0,0);	// fail
-		return 0;
-	}
-
-// -- moonsoul (if player is berserk then cannot equip)
-//
-	if(sd->sc_data[SC_BERSERK].timer!=-1){
-		clif_equipitemack(sd,n,0,0);	// fail
-		return 0;
-	}
-
-	if(pos==0x88){ // �A�N�Z�T���p��O����
-		int epor=0;
-		if(sd->equip_index[0] >= 0)
-			epor |= sd->status.inventory[sd->equip_index[0]].equip;
-		if(sd->equip_index[1] >= 0)
-			epor |= sd->status.inventory[sd->equip_index[1]].equip;
-		epor &= 0x88;
-		pos = epor == 0x08 ? 0x80 : 0x08;
-	}
-
-	// �񓁗�����
-	if ((pos==0x22) // �ꉞ�A�����v���ӏ����񓁗����킩�`�F�b�N����
-	 &&	(id->equip==2)	// �P �蕐��
-	 &&	(pc_checkskill(sd, AS_LEFT) > 0 || sd->status.class == 12) ) // ����C�B�L
-	{
-		int tpos=0;
-		if(sd->equip_index[8] >= 0)
-			tpos |= sd->status.inventory[sd->equip_index[8]].equip;
-		if(sd->equip_index[9] >= 0)
-			tpos |= sd->status.inventory[sd->equip_index[9]].equip;
-		tpos &= 0x02;
-		pos = tpos == 0x02 ? 0x20 : 0x02;
-	}
-
-	arrow=pc_search_inventory(sd,pc_checkequip(sd,9));	// Added by RoVeRT
-	for(i=0;i<11;i++) {
-		if(sd->equip_index[i] >= 0 && sd->status.inventory[sd->equip_index[i]].equip&pos) {
-			pc_unequipitem(sd,sd->equip_index[i],1);
-		}
-	}
-	// �|���
-	if(pos==0x8000){
-		clif_arrowequip(sd,n);
-		clif_arrow_fail(sd,3);	// 3=������ł��܂���
-	}
-	else
-		clif_equipitemack(sd,n,pos,1);
-
-	for(i=0;i<11;i++) {
-		if(pos & equip_pos[i])
-			sd->equip_index[i] = n;
-	}
-	sd->status.inventory[n].equip=pos;
-
-	if(sd->status.inventory[n].equip & 0x0002) {
-		if(sd->inventory_data[n])
-			sd->weapontype1 = sd->inventory_data[n]->look;
-		else
-			sd->weapontype1 = 0;
-		pc_calcweapontype(sd);
-		clif_changelook(&sd->bl,LOOK_WEAPON,sd->status.weapon);
-	}
-	if(sd->status.inventory[n].equip & 0x0020) {
-		if(sd->inventory_data[n]) {
-			if(sd->inventory_data[n]->type == 4) {
-				sd->status.shield = 0;
-				if(sd->status.inventory[n].equip == 0x0020)
-					sd->weapontype2 = sd->inventory_data[n]->look;
-				else
-					sd->weapontype2 = 0;
-			}
-			else if(sd->inventory_data[n]->type == 5) {
-				sd->status.shield = sd->inventory_data[n]->look;
-				sd->weapontype2 = 0;
-			}
-		}
-		else
-			sd->status.shield = sd->weapontype2 = 0;
-		pc_calcweapontype(sd);
-		clif_changelook(&sd->bl,LOOK_SHIELD,sd->status.shield);
-	}
-	if(sd->status.inventory[n].equip & 0x0001) {
-		if(sd->inventory_data[n])
-			sd->status.head_bottom = sd->inventory_data[n]->look;
-		else
-			sd->status.head_bottom = 0;
-		clif_changelook(&sd->bl,LOOK_HEAD_BOTTOM,sd->status.head_bottom);
-	}
-	if(sd->status.inventory[n].equip & 0x0100) {
-		if(sd->inventory_data[n])
-			sd->status.head_top = sd->inventory_data[n]->look;
-		else
-			sd->status.head_top = 0;
-		clif_changelook(&sd->bl,LOOK_HEAD_TOP,sd->status.head_top);
-	}
-	if(sd->status.inventory[n].equip & 0x0200) {
-		if(sd->inventory_data[n])
-			sd->status.head_mid = sd->inventory_data[n]->look;
-		else
-			sd->status.head_mid = 0;
-		clif_changelook(&sd->bl,LOOK_HEAD_MID,sd->status.head_mid);
-	}
-	if(sd->status.inventory[n].equip & 0x0040)
-		clif_changelook(&sd->bl,LOOK_SHOES,0);
-
-	pc_checkallowskill(sd);	// �����i�ŃX�L������������邩�`�F�b�N
-	if (itemdb_look(sd->status.inventory[n].nameid) == 11 && arrow){	// Added by RoVeRT
-		clif_arrowequip(sd,arrow);
-		sd->status.inventory[arrow].equip=32768;
-	}
-	pc_calcstatus(sd,0);
-
-	if(sd->special_state.infinite_endure) {
-		if(sd->sc_data[SC_ENDURE].timer == -1)
-			skill_status_change_start(&sd->bl,SC_ENDURE,10,1,0,0,0,0);
-	}
-	else {
-		if(sd->sc_data[SC_ENDURE].timer != -1 && sd->sc_data[SC_ENDURE].val2)
-			skill_status_change_end(&sd->bl,SC_ENDURE,-1);
-	}
-
-	if(sd->sc_data[SC_SIGNUMCRUCIS].timer != -1 && !battle_check_undead(7,sd->def_ele))
-		skill_status_change_end(&sd->bl,SC_SIGNUMCRUCIS,-1);
-	if(sd->sc_data[SC_DANCING].timer!=-1 && (sd->status.weapon != 13 && sd->status.weapon !=14))
-		skill_stop_dancing(&sd->bl,0);
-
-	return 0;
-}
-
-/*==========================================
- * �� �����������O��
- *------------------------------------------
- */
-int pc_unequipitem(struct map_session_data *sd,int n,int type)
-{
-	nullpo_retr(0, sd);	
-
-// -- moonsoul	(if player is berserk then cannot unequip)
-//
-	if(sd->sc_data[SC_BERSERK].timer!=-1){
-		clif_unequipitemack(sd,n,0,0);
-		return 0;
-	}
-
-	if(battle_config.battle_log)
-		printf("unequip %d %x:%x\n",n,pc_equippoint(sd,n),sd->status.inventory[n].equip);
-	if(sd->status.inventory[n].equip){
-		int i;
-		for(i=0;i<11;i++) {
-			if(sd->status.inventory[n].equip & equip_pos[i])
-				sd->equip_index[i] = -1;
-		}
-		if(sd->status.inventory[n].equip & 0x0002) {
-			sd->weapontype1 = 0;
-			sd->status.weapon = sd->weapontype2;
-			pc_calcweapontype(sd);
-			clif_changelook(&sd->bl,LOOK_WEAPON,sd->status.weapon);
-		}
-		if(sd->status.inventory[n].equip & 0x0020) {
-			sd->status.shield = sd->weapontype2 = 0;
-			pc_calcweapontype(sd);
-			clif_changelook(&sd->bl,LOOK_SHIELD,sd->status.shield);
-		}
-		if(sd->status.inventory[n].equip & 0x0001) {
-			sd->status.head_bottom = 0;
-			clif_changelook(&sd->bl,LOOK_HEAD_BOTTOM,sd->status.head_bottom);
-		}
-		if(sd->status.inventory[n].equip & 0x0100) {
-			sd->status.head_top = 0;
-			clif_changelook(&sd->bl,LOOK_HEAD_TOP,sd->status.head_top);
-		}
-		if(sd->status.inventory[n].equip & 0x0200) {
-			sd->status.head_mid = 0;
-			clif_changelook(&sd->bl,LOOK_HEAD_MID,sd->status.head_mid);
-		}
-		if(sd->status.inventory[n].equip & 0x0040)
-			clif_changelook(&sd->bl,LOOK_SHOES,0);
-
-		if(sd->sc_data[SC_BROKNWEAPON].timer != -1 && sd->status.inventory[n].equip & 0x0002 &&
-		sd->status.inventory[i].broken==1)
-			skill_status_change_end(&sd->bl,SC_BROKNWEAPON,-1);
-
-		clif_unequipitemack(sd,n,sd->status.inventory[n].equip,1);
-		sd->status.inventory[n].equip=0;
-		if(!type)
-			pc_checkallowskill(sd);
-		if(sd->weapontype1 == 0 && sd->weapontype2 == 0)
-			skill_encchant_eremental_end(&sd->bl,-1);  //���펝�������͖������ő����t�^����
-	} else {
-		clif_unequipitemack(sd,n,0,0);
-	}
-	if(!type) {
-		pc_calcstatus(sd,0);
-		if(sd->sc_data[SC_SIGNUMCRUCIS].timer != -1 && !battle_check_undead(7,sd->def_ele))
-			skill_status_change_end(&sd->bl,SC_SIGNUMCRUCIS,-1);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �A�C�e����index�ԍ����l�߂���
- * �� ���i�̑����”\�`�F�b�N���s�Ȃ�
- *------------------------------------------
- */
-int pc_checkitem(struct map_session_data *sd)
-{
-	int i,j,k,id,calc_flag = 0;
-	struct item_data *it=NULL;
-
-	nullpo_retr(0, sd);
-
-	// �����i�󂫋l��
-	for(i=j=0;i<MAX_INVENTORY;i++){
-		if( (id=sd->status.inventory[i].nameid)==0)
-			continue;
-		if( battle_config.item_check && !itemdb_available(id) ){
-			if(battle_config.error_log)
-				printf("illeagal item id %d in %d[%s] inventory.\n",id,sd->bl.id,sd->status.name);
-			pc_delitem(sd,i,sd->status.inventory[i].amount,3);
-			continue;
-		}
-		if(i>j){
-			memcpy(&sd->status.inventory[j],&sd->status.inventory[i],sizeof(struct item));
-			sd->inventory_data[j] = sd->inventory_data[i];
-		}
-		j++;
-	}
-	if(j < MAX_INVENTORY)
-		memset(&sd->status.inventory[j],0,sizeof(struct item)*(MAX_INVENTORY-j));
-	for(k=j;k<MAX_INVENTORY;k++)
-		sd->inventory_data[k] = NULL;
-
-	// �J�[�g���󂫋l��
-	for(i=j=0;i<MAX_CART;i++){
-		if( (id=sd->status.cart[i].nameid)==0 )
-			continue;
-		if( battle_config.item_check &&  !itemdb_available(id) ){
-			if(battle_config.error_log)
-				printf("illeagal item id %d in %d[%s] cart.\n",id,sd->bl.id,sd->status.name);
-			pc_cart_delitem(sd,i,sd->status.cart[i].amount,1);
-			continue;
-		}
-		if(i>j){
-			memcpy(&sd->status.cart[j],&sd->status.cart[i],sizeof(struct item));
-		}
-		j++;
-	}
-	if(j < MAX_CART)
-		memset(&sd->status.cart[j],0,sizeof(struct item)*(MAX_CART-j));
-
-	// �� ���ʒu�`�F�b�N
-
-	for(i=0;i<MAX_INVENTORY;i++){
-
-		it=sd->inventory_data[i];
-
-		if(sd->status.inventory[i].nameid==0)
-			continue;
-		if(sd->status.inventory[i].equip & ~pc_equippoint(sd,i)) {
-			sd->status.inventory[i].equip=0;
-			calc_flag = 1;
-		}
-		//���������`�F�b�N
-		if(sd->status.inventory[i].equip && map[sd->bl.m].flag.pvp && (it->flag.no_equip==1 || it->flag.no_equip==3)){//PvP����
-			sd->status.inventory[i].equip=0;
-			calc_flag = 1;
-		}else if(sd->status.inventory[i].equip && map[sd->bl.m].flag.gvg && (it->flag.no_equip==2 || it->flag.no_equip==3)){//GvG����
-			sd->status.inventory[i].equip=0;
-			calc_flag = 1;
-		}
-	}
-
-	pc_setequipindex(sd);
-	if(calc_flag)
-		pc_calcstatus(sd,2);
-
-	return 0;
-}
-
-int pc_checkoverhp(struct map_session_data *sd)
-{
-	nullpo_retr(0, sd);
-
-	if(sd->status.hp == sd->status.max_hp)
-		return 1;
-	if(sd->status.hp > sd->status.max_hp) {
-		sd->status.hp = sd->status.max_hp;
-		clif_updatestatus(sd,SP_HP);
-		return 2;
-	}
-
-	return 0;
-}
-
-int pc_checkoversp(struct map_session_data *sd)
-{
-	nullpo_retr(0, sd);
-
-	if(sd->status.sp == sd->status.max_sp)
-		return 1;
-	if(sd->status.sp > sd->status.max_sp) {
-		sd->status.sp = sd->status.max_sp;
-		clif_updatestatus(sd,SP_SP);
-		return 2;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * PVP���ʌv�Z�p(foreachinarea)
- *------------------------------------------
- */
-int pc_calc_pvprank_sub(struct block_list *bl,va_list ap)
-{
-	struct map_session_data *sd1,*sd2=NULL;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, sd1=(struct map_session_data *)bl);
-	nullpo_retr(0, sd2=va_arg(ap,struct map_session_data *));
-
-	if( sd1->pvp_point > sd2->pvp_point )
-		sd2->pvp_rank++;
-	return 0;
-}
-/*==========================================
- * PVP���ʌv�Z
- *------------------------------------------
- */
-int pc_calc_pvprank(struct map_session_data *sd)
-{
-	int old;
-	struct map_data *m;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, m=&map[sd->bl.m]);
-	
-	old=sd->pvp_rank;
-
-	if( !(m->flag.pvp) )
-		return 0;
-	sd->pvp_rank=1;
-	map_foreachinarea(pc_calc_pvprank_sub,sd->bl.m,0,0,m->xs,m->ys,BL_PC,sd);
-	if(old!=sd->pvp_rank || sd->pvp_lastusers!=m->users)
-		clif_pvpset(sd,sd->pvp_rank,sd->pvp_lastusers=m->users,0);
-	return sd->pvp_rank;
-}
-/*==========================================
- * PVP���ʌv�Z(timer)
- *------------------------------------------
- */
-int pc_calc_pvprank_timer(int tid,unsigned int tick,int id,int data)
-{
-	struct map_session_data *sd=NULL;
-	if(battle_config.pk_mode) // disable pvp ranking if pk_mode on [Valaris]
-		return 0;
-
-	sd=map_id2sd(id);
-	if(sd==NULL)
-		return 0;
-	sd->pvp_timer=-1;
-	if( pc_calc_pvprank(sd)>0 )
-		sd->pvp_timer=add_timer(
-			gettick()+PVP_CALCRANK_INTERVAL,
-			pc_calc_pvprank_timer,id,data);
-	return 0;
-}
-
-/*==========================================
- * sd�͌������Ă��邩(�����̏ꍇ�͑�����char_id��Ԃ�)
- *------------------------------------------
- */
-int pc_ismarried(struct map_session_data *sd)
-{
-	if(sd == NULL)
-		return -1;
-	if(sd->status.partner_id > 0)
-		return sd->status.partner_id;
-	else
-		return 0;
-}
-/*==========================================
- * sd��dstsd�ƌ���(dstsd��sd�̌��������������ɍs��)
- *------------------------------------------
- */
-int pc_marriage(struct map_session_data *sd,struct map_session_data *dstsd)
-{
-	if(sd == NULL || dstsd == NULL || sd->status.partner_id > 0 || dstsd->status.partner_id > 0)
-		return -1;
-	sd->status.partner_id=dstsd->status.char_id;
-	dstsd->status.partner_id=sd->status.char_id;
-	return 0;
-}
-
-/*==========================================
- * sd������(�����sd->status.partner_id�Ɉ˂�)(����������ɗ����E�����w�֎������D)
- *------------------------------------------
- */
-int pc_divorce(struct map_session_data *sd)
-{
-	struct map_session_data *p_sd=NULL;
-	if(sd == NULL || !pc_ismarried(sd))
-		return -1;
-
-	if( (p_sd=map_nick2sd(map_charid2nick(sd->status.partner_id))) !=NULL){
-		int i;
-		if(p_sd->status.partner_id != sd->status.char_id || sd->status.partner_id != p_sd->status.char_id){
-			printf("pc_divorce: Illegal partner_id sd=%d p_sd=%d\n",sd->status.partner_id,p_sd->status.partner_id);
-			return -1;
-		}
-		sd->status.partner_id=0;
-		p_sd->status.partner_id=0;
-		for(i=0;i<MAX_INVENTORY;i++)
-			if(sd->status.inventory[i].nameid == WEDDING_RING_M || sd->status.inventory[i].nameid == WEDDING_RING_F)
-				pc_delitem(sd,i,1,0);
-		for(i=0;i<MAX_INVENTORY;i++)
-			if(p_sd->status.inventory[i].nameid == WEDDING_RING_M || p_sd->status.inventory[i].nameid == WEDDING_RING_F)
-				pc_delitem(p_sd,i,1,0);
-
-	}else{
-		printf("pc_divorce: p_sd nullpo\n");
-		return -1;
-	}
-	return 0;
-}
-
-/*==========================================
- * sd�̑�����map_session_data��Ԃ�
- *------------------------------------------
- */
-struct map_session_data *pc_get_partner(struct map_session_data *sd)
-{
-	struct map_session_data *p_sd = NULL;
-	char *nick;
-	if(sd == NULL || !pc_ismarried(sd))
-		return NULL;
-
-	nick=map_charid2nick(sd->status.partner_id);
-
-	if (nick==NULL)
-		return NULL;
-
-	if((p_sd=map_nick2sd(nick)) == NULL )
-		return NULL;
-
-	return p_sd;
-}
-
-//
-// ���R�񕜕�
-//
-/*==========================================
- * SP�񕜗ʌv�Z
- *------------------------------------------
- */
-static int natural_heal_tick,natural_heal_prev_tick,natural_heal_diff_tick;
-static int pc_spheal(struct map_session_data *sd)
-{
-	int a;
-	struct guild_castle *gc = NULL;
-
-	nullpo_retr(0, sd);
-
-	a = natural_heal_diff_tick;
-	if(pc_issit(sd)) a += a;
-	if( sd->sc_data[SC_MAGNIFICAT].timer!=-1 )	// �}�O�j�t�B�J�[�g
-	a += a;
-
-	gc=guild_mapname2gc(sd->mapname);	// Increased guild castle regen [Valaris]
-	if(gc)	{
-		struct guild *g;
-		g=guild_search(sd->status.guild_id);
-		if(g && g->guild_id == gc->guild_id) 
-			a += a;	
-	}	// end addition [Valaris]
-
-	return a;
-}
-
-/*==========================================
- * HP�񕜗ʌv�Z
- *------------------------------------------
- */
-static int pc_hpheal(struct map_session_data *sd)
-{
-	int a;
-	struct guild_castle *gc;
-
-	nullpo_retr(0, sd);
-
-	a = natural_heal_diff_tick;
-	if(pc_issit(sd)) a += a;
-	if( sd->sc_data[SC_MAGNIFICAT].timer!=-1 )	// Modified by RoVeRT
-		a += a;
-
-	gc=guild_mapname2gc(sd->mapname);	// Increased guild castle regen [Valaris]
-	if(gc)	{
-		struct guild *g;
-		g=guild_search(sd->status.guild_id);
-		if(g && g->guild_id == gc->guild_id) 
-			a += a;	
-	}	// end addition [Valaris]
-
-	return a;
-}
-
-static int pc_natural_heal_hp(struct map_session_data *sd)
-{
-	int bhp;
-	int inc_num,bonus,skill,hp_flag;
-
-	nullpo_retr(0, sd);
-
-	if (sd->sc_data[SC_TRICKDEAD].timer != -1)		// Modified by RoVeRT
-		return 0;
-
-	if(pc_checkoverhp(sd)) {
-		sd->hp_sub = sd->inchealhptick = 0;
-		return 0;
-	}
-
-	bhp=sd->status.hp;
-	hp_flag = (pc_checkskill(sd,SM_MOVINGRECOVERY) > 0 && sd->walktimer != -1);
-
-	if(sd->walktimer == -1) {
-		inc_num = pc_hpheal(sd);
-		if( sd->sc_data[SC_TENSIONRELAX].timer!=-1 ){	// �e���V���������b�N�X
-			sd->hp_sub += 2*inc_num;
-			sd->inchealhptick += 3*natural_heal_diff_tick;
-		}else{
-		sd->hp_sub += inc_num;
-			sd->inchealhptick += natural_heal_diff_tick;
-		}
-	}
-	else if(hp_flag) {
-		inc_num = pc_hpheal(sd);
-		sd->hp_sub += inc_num;
-		sd->inchealhptick = 0;
-	}
-	else {
-		sd->hp_sub = sd->inchealhptick = 0;
-		return 0;
-	}
-
-	if(sd->hp_sub >= battle_config.natural_healhp_interval) {
-		bonus = sd->nhealhp;
-		if(hp_flag) {
-			bonus >>= 2;
-			if(bonus <= 0) bonus = 1;
-		}
-		while(sd->hp_sub >= battle_config.natural_healhp_interval) {
-			sd->hp_sub -= battle_config.natural_healhp_interval;
-			if(sd->status.hp + bonus <= sd->status.max_hp)
-				sd->status.hp += bonus;
-			else {
-				sd->status.hp = sd->status.max_hp;
-				sd->hp_sub = sd->inchealhptick = 0;
-			}
-		}
-	}
-	if(bhp!=sd->status.hp)
-		clif_updatestatus(sd,SP_HP);
-
-	if(sd->nshealhp > 0) {
-		if(sd->inchealhptick >= battle_config.natural_heal_skill_interval && sd->status.hp < sd->status.max_hp) {
-			bonus = sd->nshealhp;
-			while(sd->inchealhptick >= battle_config.natural_heal_skill_interval) {
-				sd->inchealhptick -= battle_config.natural_heal_skill_interval;
-				if(sd->status.hp + bonus <= sd->status.max_hp)
-					sd->status.hp += bonus;
-				else {
-					bonus = sd->status.max_hp - sd->status.hp;
-					sd->status.hp = sd->status.max_hp;
-					sd->hp_sub = sd->inchealhptick = 0;
-				}
-				clif_heal(sd->fd,SP_HP,bonus);
-			}
-		}
-	}
-	else sd->inchealhptick = 0;
-
-	return 0;
-
-	if(sd->sc_data[SC_APPLEIDUN].timer!=-1) { // Apple of Idun
-		if(sd->inchealhptick >= 6000 && sd->status.hp < sd->status.max_hp) {
-			bonus = skill*20;
-			while(sd->inchealhptick >= 6000) {
-				sd->inchealhptick -= 6000;
-				if(sd->status.hp + bonus <= sd->status.max_hp)
-					sd->status.hp += bonus;
-				else {
-					bonus = sd->status.max_hp - sd->status.hp;
-					sd->status.hp = sd->status.max_hp;
-					sd->hp_sub = sd->inchealhptick = 0;
-				}
-				clif_heal(sd->fd,SP_HP,bonus);
-			}
-		}
-	}
-	else sd->inchealhptick = 0;
-
-	return 0;
-}
-
-static int pc_natural_heal_sp(struct map_session_data *sd)
-{
-	int bsp;
-	int inc_num,bonus;
-
-	nullpo_retr(0, sd);
-
-	if (sd->sc_data[SC_TRICKDEAD].timer != -1)		// Modified by RoVeRT
-		return 0;
-
-	if(pc_checkoversp(sd)) {
-		sd->sp_sub = sd->inchealsptick = 0;
-		return 0;
-	}
-
-	bsp=sd->status.sp;
-
-	inc_num = pc_spheal(sd);
-	if(sd->sc_data[SC_EXPLOSIONSPIRITS].timer == -1)
-		sd->sp_sub += inc_num;
-	if(sd->walktimer == -1)
-		sd->inchealsptick += natural_heal_diff_tick;
-	else sd->inchealsptick = 0;
-
-	if(sd->sp_sub >= battle_config.natural_healsp_interval){
-		bonus = sd->nhealsp;;
-		while(sd->sp_sub >= battle_config.natural_healsp_interval){
-			sd->sp_sub -= battle_config.natural_healsp_interval;
-			if(sd->status.sp + bonus <= sd->status.max_sp)
-				sd->status.sp += bonus;
-			else {
-				sd->status.sp = sd->status.max_sp;
-				sd->sp_sub = sd->inchealsptick = 0;
-			}
-		}
-	}
-
-	if(bsp != sd->status.sp)
-		clif_updatestatus(sd,SP_SP);
-
-	if(sd->nshealsp > 0) {
-		if(sd->inchealsptick >= battle_config.natural_heal_skill_interval && sd->status.sp < sd->status.max_sp) {
-			struct pc_base_job s_class = pc_calc_base_job(sd->status.class);
-			if(sd->doridori_counter && s_class.job == 23)
-				bonus = sd->nshealsp*2;
-			else
-			bonus = sd->nshealsp;
-			sd->doridori_counter = 0;
-			while(sd->inchealsptick >= battle_config.natural_heal_skill_interval) {
-				sd->inchealsptick -= battle_config.natural_heal_skill_interval;
-				if(sd->status.sp + bonus <= sd->status.max_sp)
-					sd->status.sp += bonus;
-				else {
-					bonus = sd->status.max_sp - sd->status.sp;
-					sd->status.sp = sd->status.max_sp;
-					sd->sp_sub = sd->inchealsptick = 0;
-				}
-				clif_heal(sd->fd,SP_SP,bonus);
-			}
-		}
-	}
-	else sd->inchealsptick = 0;
-
-	return 0;
-}
-
-static int pc_spirit_heal_hp(struct map_session_data *sd,int level)
-{
-	int bonus_hp,interval = battle_config.natural_heal_skill_interval;
-
-	nullpo_retr(0, sd);
-
-	if(pc_checkoverhp(sd)) {
-		sd->inchealspirithptick = 0;
-		return 0;
-	}
-
-	sd->inchealspirithptick += natural_heal_diff_tick;
-
-	if(sd->weight*100/sd->max_weight >= battle_config.natural_heal_weight_rate)
-		interval += interval;
-
-	if(sd->inchealspirithptick >= interval) {
-		bonus_hp = sd->nsshealhp;
-		while(sd->inchealspirithptick >= interval) {
-			if(pc_issit(sd)) {
-				sd->inchealspirithptick -= interval;
-				if(sd->status.hp < sd->status.max_hp) {
-					if(sd->status.hp + bonus_hp <= sd->status.max_hp)
-						sd->status.hp += bonus_hp;
-					else {
-						bonus_hp = sd->status.max_hp - sd->status.hp;
-						sd->status.hp = sd->status.max_hp;
-					}
-					clif_heal(sd->fd,SP_HP,bonus_hp);
-					sd->inchealspirithptick = 0;
-				}
-			}else{
-				sd->inchealspirithptick -= natural_heal_diff_tick;
-				break;
-			}
-		}
-	}
-
-	return 0;
-}
-static int pc_spirit_heal_sp(struct map_session_data *sd,int level)
-{
-	int bonus_sp,interval = battle_config.natural_heal_skill_interval;
-
-	nullpo_retr(0, sd);
-
-	if(pc_checkoversp(sd)) {
-		sd->inchealspiritsptick = 0;
-		return 0;
-	}
-
-	sd->inchealspiritsptick += natural_heal_diff_tick;
-
-	if(sd->weight*100/sd->max_weight >= battle_config.natural_heal_weight_rate)
-		interval += interval;
-
-	if(sd->inchealspiritsptick >= interval) {
-		bonus_sp = sd->nsshealsp;
-		while(sd->inchealspiritsptick >= interval) {
-			if(pc_issit(sd)) {
-				sd->inchealspiritsptick -= interval;
-				if(sd->status.sp < sd->status.max_sp) {
-					if(sd->status.sp + bonus_sp <= sd->status.max_sp)
-						sd->status.sp += bonus_sp;
-					else {
-						bonus_sp = sd->status.max_sp - sd->status.sp;
-						sd->status.sp = sd->status.max_sp;
-					}
-					clif_heal(sd->fd,SP_SP,bonus_sp);
-					sd->inchealspiritsptick = 0;
-				}
-			}else{
-				sd->inchealspiritsptick -= natural_heal_diff_tick;
-				break;
-			}
-		}
-	}
-
-	return 0;
-}
-
-/*==========================================
- * HP/SP ���R�� �e�N���C�A���g
- *------------------------------------------
- */
-
-static int pc_natural_heal_sub(struct map_session_data *sd,va_list ap) {
-	int skill;
-
-	nullpo_retr(0, sd);
-
-// -- moonsoul (if conditions below altered to disallow natural healing if under berserk status)
-	if ((battle_config.natural_heal_weight_rate > 100 || sd->weight*100/sd->max_weight < battle_config.natural_heal_weight_rate) &&
-		!pc_isdead(sd) && 
-		!pc_ishiding(sd) && 
-		sd->sc_data[SC_POISON].timer == -1
-	  ) {
-		pc_natural_heal_hp(sd);
-		if( sd->sc_data && sd->sc_data[SC_EXTREMITYFIST].timer == -1 &&	//���C����Ԃł�SP���񕜂��Ȃ�
-			sd->sc_data[SC_DANCING].timer == -1 && //�_���X��Ԃł�SP���񕜂��Ȃ�
-			sd->sc_data[SC_BERSERK].timer == -1    //�o�[�T�[�N��Ԃł�SP���񕜂��Ȃ�
-		)
-				pc_natural_heal_sp(sd);
-	} else {
-		sd->hp_sub = sd->inchealhptick = 0;
-		sd->sp_sub = sd->inchealsptick = 0;
-	}
-	if((skill = pc_checkskill(sd,MO_SPIRITSRECOVERY)) > 0 && !pc_ishiding(sd) && sd->sc_data[SC_POISON].timer == -1 && sd->sc_data[SC_BERSERK].timer == -1){
-		pc_spirit_heal_hp(sd,skill);
-		pc_spirit_heal_sp(sd,skill);
-	}
-	else {
-		sd->inchealspirithptick = 0;
-		sd->inchealspiritsptick = 0;
-	}
-	return 0;
-}
-
-/*==========================================
- * HP/SP���R�� (interval timer�֐�)
- *------------------------------------------
- */
-int pc_natural_heal(int tid,unsigned int tick,int id,int data)
-{
-	natural_heal_tick = tick;
-	natural_heal_diff_tick = DIFF_TICK(natural_heal_tick,natural_heal_prev_tick);
-	clif_foreachclient(pc_natural_heal_sub);
-
-	natural_heal_prev_tick = tick;
-	return 0;
-}
-
-/*==========================================
- * �Z�[�u�|�C���g�̕ۑ�
- *------------------------------------------
- */
-int pc_setsavepoint(struct map_session_data *sd,char *mapname,int x,int y)
-{
-	nullpo_retr(0, sd);
-
-	strncpy(sd->status.save_point.map,mapname,24);
-	sd->status.save_point.x = x;
-	sd->status.save_point.y = y;
-
-	return 0;
-}
-
-/*==========================================
- * �����Z�[�u �e�N���C�A���g
- *------------------------------------------
- */
-static int last_save_fd,save_flag;
-static int pc_autosave_sub(struct map_session_data *sd,va_list ap)
-{
-	nullpo_retr(0, sd);
-
-	if(save_flag==0 && sd->fd>last_save_fd){
-		struct guild_castle *gc=NULL;
-		int i;
-//		if(battle_config.save_log)
-//			printf("autosave %d\n",sd->fd);
-		// pet
-		if(sd->status.pet_id > 0 && sd->pd)
-			intif_save_petdata(sd->status.account_id,&sd->pet);
-		pc_makesavestatus(sd);
-		chrif_save(sd);
-		storage_storage_save(sd);
-
-		for(i=0;i<MAX_GUILDCASTLE;i++){
-			gc=guild_castle_search(i);
-			if(!gc) continue;
-			if(gc->visibleG0==1) guild_castledatasave(gc->castle_id,18,gc->Ghp0);
-			if(gc->visibleG1==1) guild_castledatasave(gc->castle_id,19,gc->Ghp1);
-			if(gc->visibleG2==1) guild_castledatasave(gc->castle_id,20,gc->Ghp2);
-			if(gc->visibleG3==1) guild_castledatasave(gc->castle_id,21,gc->Ghp3);
-			if(gc->visibleG4==1) guild_castledatasave(gc->castle_id,22,gc->Ghp4);
-			if(gc->visibleG5==1) guild_castledatasave(gc->castle_id,23,gc->Ghp5);
-			if(gc->visibleG6==1) guild_castledatasave(gc->castle_id,24,gc->Ghp6);
-			if(gc->visibleG7==1) guild_castledatasave(gc->castle_id,25,gc->Ghp7);
-		}
-
-		save_flag=1;
-		last_save_fd = sd->fd;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �����Z�[�u (timer�֐�)
- *------------------------------------------
- */
-int pc_autosave(int tid,unsigned int tick,int id,int data)
-{
-	int interval;
-
-	save_flag=0;
-	clif_foreachclient(pc_autosave_sub);
-	if(save_flag==0)
-		last_save_fd=0;
-
-	interval = autosave_interval/(clif_countusers()+1);
-	if(interval <= 0)
-		interval = 1;
-	add_timer(gettick()+interval,pc_autosave,0,0);
-
-	return 0;
-}
-
-int pc_read_gm_account(int fd)
-{
-#ifdef TXT_ONLY
-        int i = 0;
-#endif
-	if (gm_account != NULL)
-		free(gm_account);
-	GM_num = 0;
-#ifdef TXT_ONLY
-	gm_account = calloc(sizeof(struct gm_account) * ((RFIFOW(fd,2) - 4) / 5), 1);
-	for (i = 4; i < RFIFOW(fd,2); i = i + 5) {
-		gm_account[GM_num].account_id = RFIFOL(fd,i);
-		gm_account[GM_num].level = (int)RFIFOB(fd,i+4);
-		//printf("GM account: %d -> level %d\n", gm_account[GM_num].account_id, gm_account[GM_num].level);
-		GM_num++;
-	}
-#else
-	sprintf (tmp_lsql, "SELECT `%s`,`%s` FROM `%s` WHERE `%s`>='%d'",login_db_account_id,login_db_level,login_db,login_db_level,lowest_gm_level);
-	if(mysql_query(&lmysql_handle, tmp_lsql) ) {
-		printf("DB server Error (select %s to Memory)- %s\n",login_db,mysql_error(&lmysql_handle) );
-	}
-	lsql_res = mysql_store_result(&lmysql_handle);
-	if (lsql_res) {
-	    gm_account = calloc(sizeof(struct gm_account) * mysql_num_rows(lsql_res), 1);
-	    while ((lsql_row = mysql_fetch_row(lsql_res))) {
-	        gm_account[GM_num].account_id = atoi(lsql_row[0]);
-		    gm_account[GM_num].level = atoi(lsql_row[1]);
-		    printf("GM account: %d -> level %d\n", gm_account[GM_num].account_id, gm_account[GM_num].level);
-		    GM_num++;
-	    }
-    }
-	
-    mysql_free_result(lsql_res);
-#endif /* TXT_ONLY */
-	return GM_num;
-}
-
-/*==========================================
- * timer to do the day
- *------------------------------------------
- */
-int map_day_timer(int tid, unsigned int tick, int id, int data) { // by [yor]
-	struct map_session_data *pl_sd = NULL;
-	int i;
-	char tmpstr[1024];
-
-	if (battle_config.day_duration > 0) { // if we want a day
-		if (night_flag != 0) {
-			strcpy(tmpstr, msg_txt(502)); // The day has arrived!
-			night_flag = 0; // 0=day, 1=night [Yor]
-			for(i = 0; i < fd_max; i++) {
-				if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) {
-					pl_sd->opt2 &= ~STATE_BLIND;
-					clif_changeoption(&pl_sd->bl);
-					clif_wis_message(pl_sd->fd, wisp_server_name, tmpstr, strlen(tmpstr)+1);
-				}
-			}
-		}
-	}
-
-	return 0;
-}
-
-/*==========================================
- * timer to do the night
- *------------------------------------------
- */
-int map_night_timer(int tid, unsigned int tick, int id, int data) { // by [yor]
-	struct map_session_data *pl_sd = NULL;
-	int i;
-	char tmpstr[1024];
-
-	if (battle_config.night_duration > 0) { // if we want a night
-		if (night_flag == 0) {
-			strcpy(tmpstr, msg_txt(503)); // The night has fallen...
-			night_flag = 1; // 0=day, 1=night [Yor]
-			for(i = 0; i < fd_max; i++) {
-				if (session[i] && (pl_sd = session[i]->session_data) && pl_sd->state.auth) {
-					pl_sd->opt2 |= STATE_BLIND;
-					clif_changeoption(&pl_sd->bl);
-					clif_wis_message(pl_sd->fd, wisp_server_name, tmpstr, strlen(tmpstr)+1);
-				}
-			}
-		}
-	}
-
-	return 0;
-}
-
-void pc_setstand(struct map_session_data *sd){
-	nullpo_retv(sd);
-
-	if(sd->sc_data && sd->sc_data[SC_TENSIONRELAX].timer!=-1)
-		skill_status_change_end(&sd->bl,SC_TENSIONRELAX,-1);
-
-	sd->state.dead_sit = 0;
-}
-
-//
-// ��������
-//
-/*==========================================
- * �ݒ�t�@�C���ǂݍ���
- * exp.txt �K�v�o���l
- * job_db1.txt �d��,hp,sp,�U�����x
- * job_db2.txt job�\�͒l�{�[�i�X
- * skill_tree.txt �e�E���̃X�L���c���[
- * attr_fix.txt �����C���e�[�u��
- * size_fix.txt �T�C�Y�␳�e�[�u��
- * refine_db.txt ���B�f�[�^�e�[�u��
- *------------------------------------------
- */
-int pc_readdb(void)
-{
-	int i,j,k;
-	FILE *fp;
-	char line[1024],*p;
-
-	// �K�v�o���l�ǂݍ���
-
-	fp=fopen("db/exp.txt","r");
-	if(fp==NULL){
-		printf("can't read db/exp.txt\n");
-		return 1;
-	}
-	i=0;
-	while(fgets(line, sizeof(line)-1, fp)){
-		int bn,b1,b2,b3,b4,b5,b6,jn,j1,j2,j3,j4,j5,j6;
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		if(sscanf(line,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",&bn,&b1,&b2,&b3,&b4,&b5,&b6,&jn,&j1,&j2,&j3,&j4,&j5,&j6)!=14)
-			continue;
-		exp_table[0][i]=bn;
-		exp_table[1][i]=b1;
-		exp_table[2][i]=b2;
-		exp_table[3][i]=b3;
-		exp_table[4][i]=b4;
-		exp_table[5][i]=b5;
-		exp_table[6][i]=b6;
-		exp_table[7][i]=jn;
-		exp_table[8][i]=j1;
-		exp_table[9][i]=j2;
-		exp_table[10][i]=j3;
-		exp_table[11][i]=j4;
-		exp_table[12][i]=j5;
-		exp_table[13][i]=j6;
-		i++;
-		if(i >= battle_config.maximum_level)
-			break;
-	}
-	fclose(fp);
-	printf("read db/exp.txt done\n");
-
-	// JOB�␳���l�P
-	fp=fopen("db/job_db1.txt","r");
-	if(fp==NULL){
-		printf("can't read db/job_db1.txt\n");
-		return 1;
-	}
-	i=0;
-	while(fgets(line, sizeof(line)-1, fp)){
-		char *split[50];
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		for(j=0,p=line;j<21 && p;j++){
-			split[j]=p;
-			p=strchr(p,',');
-			if(p) *p++=0;
-		}
-		if(j<21)
-			continue;
-		max_weight_base[i]=atoi(split[0]);
-		hp_coefficient[i]=atoi(split[1]);
-		hp_coefficient2[i]=atoi(split[2]);
-		sp_coefficient[i]=atoi(split[3]);
-		for(j=0;j<17;j++)
-			aspd_base[i][j]=atoi(split[j+4]);
-		i++;
-// -- moonsoul (below two lines added to accommodate high numbered new class ids)
-		if(i==24)
-			i=4001;
-		if(i==MAX_PC_CLASS)
-			break;
-	}
-	fclose(fp);
-	printf("read db/job_db1.txt done\n");
-
-	// JOB�{�[�i�X
-	fp=fopen("db/job_db2.txt","r");
-	if(fp==NULL){
-		printf("can't read db/job_db2.txt\n");
-		return 1;
-	}
-	i=0;
-	while(fgets(line, sizeof(line)-1, fp)){
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		for(j=0,p=line;j<MAX_LEVEL && p;j++){
-			if(sscanf(p,"%d",&k)==0)
-				break;
-			job_bonus[0][i][j]=k;
-			job_bonus[2][i][j]=k; //�{�q�E�̃{�[�i�X�͕�����Ȃ��̂ʼn�
-			p=strchr(p,',');
-			if(p) p++;
-		}
-		i++;
-// -- moonsoul (below two lines added to accommodate high numbered new class ids)
-		if(i==24)
-			i=4001;
-		if(i==MAX_PC_CLASS)
-			break;
-	}
-	fclose(fp);
-	printf("read db/job_db2.txt done\n");
-
-	// JOB�{�[�i�X2 �]���E�p
-	fp=fopen("db/job_db2-2.txt","r");
-	if(fp==NULL){
-		printf("can't read db/job_db2-2.txt\n");
-		return 1;
-	}
-	i=0;
-	while(fgets(line, sizeof(line)-1, fp)){
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		for(j=0,p=line;j<MAX_LEVEL && p;j++){
-			if(sscanf(p,"%d",&k)==0)
-				break;
-			job_bonus[1][i][j]=k;
-			p=strchr(p,',');
-			if(p) p++;
-		}
-		i++;
-		if(i==MAX_PC_CLASS)
-			break;
-	}
-	fclose(fp);
-	printf("read db/job_db2-2.txt done\n");
-
-	// �X�L���c���[
-	memset(skill_tree,0,sizeof(skill_tree));
-	fp=fopen("db/skill_tree.txt","r");
-	if(fp==NULL){
-		printf("can't read db/skill_tree.txt\n");
-		return 1;
-	}
-	while(fgets(line, sizeof(line)-1, fp)){
-		char *split[50];
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		for(j=0,p=line;j<13 && p;j++){
-			split[j]=p;
-			p=strchr(p,',');
-			if(p) *p++=0;
-		}
-		if(j<13)
-			continue;
-		i=atoi(split[0]);
-		for(j=0;skill_tree[0][i][j].id;j++);
-		skill_tree[0][i][j].id=atoi(split[1]);
-		skill_tree[0][i][j].max=atoi(split[2]);
-		skill_tree[2][i][j].id=atoi(split[1]); //�{�q�E�͗ǂ�������Ȃ��̂Ŏb��
-		skill_tree[2][i][j].max=atoi(split[2]); //�{�q�E�͗ǂ�������Ȃ��̂Ŏb��
-		for(k=0;k<5;k++){
-			skill_tree[0][i][j].need[k].id=atoi(split[k*2+3]);
-			skill_tree[0][i][j].need[k].lv=atoi(split[k*2+4]);
-			skill_tree[2][i][j].need[k].id=atoi(split[k*2+3]); //�{�q�E�͗ǂ�������Ȃ��̂Ŏb��
-			skill_tree[2][i][j].need[k].lv=atoi(split[k*2+4]); //�{�q�E�͗ǂ�������Ȃ��̂Ŏb��
-		}
-	}
-	fclose(fp);
-	printf("read db/skill_tree.txt done\n");
-
-	// �����C���e�[�u��
-	for(i=0;i<4;i++)
-		for(j=0;j<10;j++)
-			for(k=0;k<10;k++)
-				attr_fix_table[i][j][k]=100;
-	fp=fopen("db/attr_fix.txt","r");
-	if(fp==NULL){
-		printf("can't read db/attr_fix.txt\n");
-		return 1;
-	}
-	while(fgets(line, sizeof(line)-1, fp)){
-		char *split[10];
-		int lv,n;
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		for(j=0,p=line;j<3 && p;j++){
-			split[j]=p;
-			p=strchr(p,',');
-			if(p) *p++=0;
-		}
-		lv=atoi(split[0]);
-		n=atoi(split[1]);
-//		printf("%d %d\n",lv,n);
-
-		for(i=0;i<n;){
-			if( !fgets(line, sizeof(line)-1, fp) )
-				break;
-			if(line[0]=='/' && line[1]=='/')
-				continue;
-
-			for(j=0,p=line;j<n && p;j++){
-				while(*p==32 && *p>0)
-					p++;
-				attr_fix_table[lv-1][i][j]=atoi(p);
-				if(battle_config.attr_recover == 0 && attr_fix_table[lv-1][i][j] < 0)
-					attr_fix_table[lv-1][i][j] = 0;
-				p=strchr(p,',');
-				if(p) *p++=0;
-			}
-
-			i++;
-		}
-	}
-	fclose(fp);
-	printf("read db/attr_fix.txt done\n");
-
-	// �T�C�Y�␳�e�[�u��
-	for(i=0;i<3;i++)
-		for(j=0;j<20;j++)
-			atkmods[i][j]=100;
-	fp=fopen("db/size_fix.txt","r");
-	if(fp==NULL){
-		printf("can't read db/size_fix.txt\n");
-		return 1;
-	}
-	i=0;
-	while(fgets(line, sizeof(line)-1, fp)){
-		char *split[20];
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		if(atoi(line)<=0)
-			continue;
-		memset(split,0,sizeof(split));
-		for(j=0,p=line;j<20 && p;j++){
-			split[j]=p;
-			p=strchr(p,',');
-			if(p) *p++=0;
-		}
-		for(j=0;j<20 && split[j];j++)
-			atkmods[i][j]=atoi(split[j]);
-		i++;
-	}
-	fclose(fp);
-	printf("read db/size_fix.txt done\n");
-
-	// ���B�f�[�^�e�[�u��
-	for(i=0;i<5;i++){
-		for(j=0;j<10;j++)
-			percentrefinery[i][j]=100;
-		refinebonus[i][0]=0;
-		refinebonus[i][1]=0;
-		refinebonus[i][2]=10;
-	}
-	fp=fopen("db/refine_db.txt","r");
-	if(fp==NULL){
-		printf("can't read db/refine_db.txt\n");
-		return 1;
-	}
-	i=0;
-	while(fgets(line, sizeof(line)-1, fp)){
-		char *split[16];
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		if(atoi(line)<=0)
-			continue;
-		memset(split,0,sizeof(split));
-		for(j=0,p=line;j<16 && p;j++){
-			split[j]=p;
-			p=strchr(p,',');
-			if(p) *p++=0;
-		}
-		refinebonus[i][0]=atoi(split[0]);	// ���B�{�[�i�X
-		refinebonus[i][1]=atoi(split[1]);	// �ߏ萸�B�{�[�i�X
-		refinebonus[i][2]=atoi(split[2]);	// ���S���B���E
-		for(j=0;j<10 && split[j];j++)
-			percentrefinery[i][j]=atoi(split[j+3]);
-		i++;
-	}
-	fclose(fp); //Lupus. close this file!!!
-	printf("read db/refine_db.txt done\n");
-
-	return 0;
-}
-
-static int pc_calc_sigma(void)
-{
-	int i,j,k;
-
-	for(i=0;i<MAX_PC_CLASS;i++) {
-		memset(hp_sigma_val[i],0,sizeof(hp_sigma_val[i]));
-		for(k=0,j=2;j<=MAX_LEVEL;j++) {
-			k += hp_coefficient[i]*j + 50;
-			k -= k%100;
-			hp_sigma_val[i][j-1] = k;
-		}
-	}
-	return 0;
-}
-
-static void pc_statpointdb(void)
-{
-	char * buf_stat;
-	int i=0,j=0,k=0,l=0, end = 0;
-
-	FILE *stp;
-
-	stp=fopen("db/statpoint.txt","r");
-
-	if(stp==NULL){
-		printf("can't read db/statpoint.txt\n");
-                return;
-	}
-
-        fseek(stp, 0, SEEK_END);
-        end = ftell(stp);
-        rewind(stp);
-
-	buf_stat = (char *) malloc (end + 1);
-	l = fread(buf_stat,1,end,stp);
-	fclose(stp);
-	printf("read db/statpoint.txt done (size=%d)\n",l);
-
-	for(i=0;i<255;i++) {
-            j=0;
-            while (*(buf_stat+k)!='\n') { 
-                    statp[i][j]=*(buf_stat+k);
-                    j++;k++;
-                }
-            statp[i][j+1]='\0';
-            k++;
-	}
-
-        free(buf_stat);
-}
-
-/*==========================================
- * pc�� �W������
- *------------------------------------------
- */
-int do_init_pc(void) {
-	pc_readdb();
-	pc_statpointdb();
-	pc_calc_sigma();
-
-//	gm_account_db = numdb_init();
-
-	add_timer_func_list(pc_walk, "pc_walk");
-	add_timer_func_list(pc_attack_timer, "pc_attack_timer");
-	add_timer_func_list(pc_natural_heal, "pc_natural_heal");
-	add_timer_func_list(pc_invincible_timer, "pc_invincible_timer");
-	add_timer_func_list(pc_eventtimer, "pc_eventtimer");
-	add_timer_func_list(pc_calc_pvprank_timer, "pc_calc_pvprank_timer");
-	add_timer_func_list(pc_autosave, "pc_autosave");
-	add_timer_func_list(pc_spiritball_timer, "pc_spiritball_timer");
-	add_timer_interval((natural_heal_prev_tick = gettick() + NATURAL_HEAL_INTERVAL), pc_natural_heal, 0, 0, NATURAL_HEAL_INTERVAL);
-	add_timer(gettick() + autosave_interval, pc_autosave, 0, 0);
-
-#ifndef TXT_ONLY
-	pc_read_gm_account(0);
-#endif /* not TXT_ONLY */
-
-	// add night/day timer (by [yor])
-	add_timer_func_list(map_day_timer, "map_day_timer"); // by [yor]
-	add_timer_func_list(map_night_timer, "map_night_timer"); // by [yor]
-	{
-		int day_duration = battle_config.day_duration;
-		int night_duration = battle_config.night_duration;
-		if (day_duration < 60000)
-			day_duration = 60000;
-		if (night_duration < 60000)
-			night_duration = 60000;
-		if (battle_config.night_at_start == 0) {
-			night_flag = 0; // 0=day, 1=night [Yor]
-			day_timer_tid = add_timer_interval(gettick() + day_duration + night_duration, map_day_timer, 0, 0, day_duration + night_duration);
-			night_timer_tid = add_timer_interval(gettick() + day_duration, map_night_timer, 0, 0, day_duration + night_duration);
-		} else {
-			night_flag = 1; // 0=day, 1=night [Yor]
-			day_timer_tid = add_timer_interval(gettick() + night_duration, map_day_timer, 0, 0, day_duration + night_duration);
-			night_timer_tid = add_timer_interval(gettick() + day_duration + night_duration, map_night_timer, 0, 0, day_duration + night_duration);
-		}
-	}
-
-	return 0;
-}
diff --git a/misc/src/map/pc.h b/misc/src/map/pc.h
deleted file mode 100644
index 1919007..0000000
--- a/misc/src/map/pc.h
+++ /dev/null
@@ -1,186 +0,0 @@
-// $Id: pc.h,v 1.4 2004/09/25 05:32:18 MouseJstr Exp $
-
-#ifndef _PC_H_
-#define _PC_H_
-
-#include "map.h"
-
-#define OPTION_MASK 0xd7b8
-#define CART_MASK 0x788
-
-#define pc_setdead(sd) ((sd)->state.dead_sit = 1)
-#define pc_setsit(sd) ((sd)->state.dead_sit = 2)
-//#define pc_setstand(sd) ((sd)->state.dead_sit = 0)
-#define pc_isdead(sd) ((sd)->state.dead_sit == 1)
-#define pc_issit(sd) ((sd)->state.dead_sit == 2)
-#define pc_setdir(sd,b,h) ((sd)->dir = (b) ,(sd)->head_dir = (h) )
-#define pc_setchatid(sd,n) ((sd)->chatID = n)
-#define pc_ishiding(sd) ((sd)->status.option&0x4006)
-#define pc_iscarton(sd) ((sd)->status.option&CART_MASK)
-#define pc_isfalcon(sd) ((sd)->status.option&0x0010)
-#define pc_isriding(sd) ((sd)->status.option&0x0020)
-#define pc_isinvisible(sd) ((sd)->status.option&0x0040)
-#define pc_is50overweight(sd) (sd->weight*2 >= sd->max_weight) 
-#define pc_is90overweight(sd) (sd->weight*10 >= sd->max_weight*9)
-
-int pc_isGM(struct map_session_data *sd);
-int pc_iskiller(struct map_session_data *src, struct map_session_data *target); // [MouseJstr]
-int pc_getrefinebonus(int lv,int type);
-
-int pc_counttargeted(struct map_session_data *sd,struct block_list *src,int target_lv);
-int pc_setrestartvalue(struct map_session_data *sd,int type);
-int pc_makesavestatus(struct map_session_data *);
-int pc_setnewpc(struct map_session_data*,int,int,int,int,int,int);
-int pc_authok(int, int, time_t, struct mmo_charstatus *);
-int pc_authfail(int);
-
-int pc_isequip(struct map_session_data *sd,int n);
-int pc_equippoint(struct map_session_data *sd,int n);
-
-int pc_breakweapon(struct map_session_data *sd); // weapon breaking [Valaris]
-int pc_breakarmor(struct map_session_data *sd); // armor breaking [Valaris]
-
-int pc_checkskill(struct map_session_data *sd,int skill_id);
-int pc_checkallowskill(struct map_session_data *sd);
-int pc_checkequip(struct map_session_data *sd,int pos);
-
-int pc_checkoverhp(struct map_session_data*);
-int pc_checkoversp(struct map_session_data*);
-
-int pc_can_reach(struct map_session_data*,int,int);
-int pc_walktoxy(struct map_session_data*,int,int);
-int pc_stop_walking(struct map_session_data*,int);
-int pc_movepos(struct map_session_data*,int,int);
-int pc_setpos(struct map_session_data*,char*,int,int,int);
-int pc_setsavepoint(struct map_session_data*,char*,int,int);
-int pc_randomwarp(struct map_session_data *sd,int type);
-int pc_memo(struct map_session_data *sd,int i);
-
-int pc_checkadditem(struct map_session_data*,int,int);
-int pc_inventoryblank(struct map_session_data*);
-int pc_search_inventory(struct map_session_data *sd,int item_id);
-int pc_payzeny(struct map_session_data*,int);
-int pc_additem(struct map_session_data*,struct item*,int);
-int pc_getzeny(struct map_session_data*,int);
-int pc_delitem(struct map_session_data*,int,int,int);
-int pc_checkitem(struct map_session_data*);
-
-int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amount);
-int pc_cart_delitem(struct map_session_data *sd,int n,int amount,int type);
-int pc_putitemtocart(struct map_session_data *sd,int idx,int amount);
-int pc_getitemfromcart(struct map_session_data *sd,int idx,int amount);
-int pc_cartitem_amount(struct map_session_data *sd,int idx,int amount);
-
-int pc_takeitem(struct map_session_data*,struct flooritem_data*);
-int pc_dropitem(struct map_session_data*,int,int);
-
-int pc_checkweighticon(struct map_session_data *sd);
-
-int pc_calcstatus(struct map_session_data*,int);
-int pc_bonus(struct map_session_data*,int,int);
-int pc_bonus2(struct map_session_data *sd,int,int,int);
-int pc_bonus3(struct map_session_data *sd,int,int,int,int);
-int pc_skill(struct map_session_data*,int,int,int);
-
-int pc_insert_card(struct map_session_data *sd,int idx_card,int idx_equip);
-
-int pc_item_identify(struct map_session_data *sd,int idx);
-int pc_steal_item(struct map_session_data *sd,struct block_list *bl);
-int pc_steal_coin(struct map_session_data *sd,struct block_list *bl);
-
-int pc_modifybuyvalue(struct map_session_data*,int);
-int pc_modifysellvalue(struct map_session_data*,int);
-
-int pc_attack(struct map_session_data*,int,int);
-int pc_stopattack(struct map_session_data*);
-
-int pc_follow(struct map_session_data*, int); // [MouseJstr]
-
-int pc_checkbaselevelup(struct map_session_data *sd);
-int pc_checkjoblevelup(struct map_session_data *sd);
-int pc_gainexp(struct map_session_data*,int,int);
-int pc_nextbaseexp(struct map_session_data *);
-int pc_nextbaseafter(struct map_session_data *); // [Valaris]
-int pc_nextjobexp(struct map_session_data *);
-int pc_nextjobafter(struct map_session_data *); // [Valaris]
-int pc_need_status_point(struct map_session_data *,int);
-int pc_statusup(struct map_session_data*,int);
-int pc_statusup2(struct map_session_data*,int,int);
-int pc_skillup(struct map_session_data*,int);
-int pc_allskillup(struct map_session_data*);
-int pc_resetlvl(struct map_session_data*,int type);
-int pc_resetstate(struct map_session_data*);
-int pc_resetskill(struct map_session_data*);
-int pc_equipitem(struct map_session_data*,int,int);
-int pc_unequipitem(struct map_session_data*,int,int);
-int pc_checkitem(struct map_session_data*);
-int pc_useitem(struct map_session_data*,int);
-
-int pc_damage(struct block_list *,struct map_session_data*,int);
-int pc_heal(struct map_session_data *,int,int);
-int pc_itemheal(struct map_session_data *sd,int hp,int sp);
-int pc_percentheal(struct map_session_data *sd,int,int);
-int pc_jobchange(struct map_session_data *,int, int);
-int pc_setoption(struct map_session_data *,int);
-int pc_setcart(struct map_session_data *sd,int type);
-int pc_setfalcon(struct map_session_data *sd);
-int pc_setriding(struct map_session_data *sd);
-int pc_changelook(struct map_session_data *,int,int);
-int pc_equiplookall(struct map_session_data *sd);
-
-int pc_readparam(struct map_session_data*,int);
-int pc_setparam(struct map_session_data*,int,int);
-int pc_readreg(struct map_session_data*,int);
-int pc_setreg(struct map_session_data*,int,int);
-char *pc_readregstr(struct map_session_data *sd,int reg);
-int pc_setregstr(struct map_session_data *sd,int reg,char *str);
-int pc_readglobalreg(struct map_session_data*,char*);
-int pc_setglobalreg(struct map_session_data*,char*,int);
-int pc_readaccountreg(struct map_session_data*,char*);
-int pc_setaccountreg(struct map_session_data*,char*,int);
-int pc_readaccountreg2(struct map_session_data*,char*);
-int pc_setaccountreg2(struct map_session_data*,char*,int);
-int pc_percentrefinery(struct map_session_data *sd,struct item *item);
-
-int pc_addeventtimer(struct map_session_data *sd,int tick,const char *name);
-int pc_deleventtimer(struct map_session_data *sd,const char *name);
-int pc_cleareventtimer(struct map_session_data *sd);
-int pc_addeventtimercount(struct map_session_data *sd,const char *name,int tick);
-
-int pc_calc_pvprank(struct map_session_data *sd);
-int pc_calc_pvprank_timer(int tid,unsigned int tick,int id,int data);
-
-int pc_ismarried(struct map_session_data *sd);
-int pc_marriage(struct map_session_data *sd,struct map_session_data *dstsd);
-int pc_divorce(struct map_session_data *sd);
-struct map_session_data *pc_get_partner(struct map_session_data *sd);
-int pc_set_gm_level(int account_id, int level);
-void pc_setstand(struct map_session_data *sd);
-
-
-struct pc_base_job{
-	int job; //�E�ƁA�������]���E��{�q�E�̏ꍇ�͌��̐E�Ƃ�Ԃ�(�p�v�����v��)
-	int type; //�m�r 0, �ꎟ�E 1, �񎟐E 2, �X�p�m�r 3
-	int upper; //�ʏ� 0, �]�� 1, �{�q 2
-};
-
-struct pc_base_job pc_calc_base_job(int b_class);//�]����{�q�E�̌��̐E�Ƃ�Ԃ�
-
-int pc_read_gm_account(int fd);
-int pc_setinvincibletimer(struct map_session_data *sd,int);
-int pc_delinvincibletimer(struct map_session_data *sd);
-int pc_addspiritball(struct map_session_data *sd,int,int);
-int pc_delspiritball(struct map_session_data *sd,int,int);
-
-int do_init_pc(void);
-
-enum {ADDITEM_EXIST,ADDITEM_NEW,ADDITEM_OVERAMOUNT};
-
-// timer for night.day
-int day_timer_tid;
-int night_timer_tid;
-int map_day_timer(int,unsigned int,int,int); // by [yor]
-int map_night_timer(int,unsigned int,int,int); // by [yor]
-
-#endif
-
diff --git a/misc/src/map/pet.c b/misc/src/map/pet.c
deleted file mode 100644
index 6026b1e..0000000
--- a/misc/src/map/pet.c
+++ /dev/null
@@ -1,1651 +0,0 @@
-// $Id: pet.c,v 1.4 2004/09/25 05:32:18 MouseJstr Exp $
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "db.h"
-#include "timer.h"
-#include "socket.h"
-#include "nullpo.h"
-#include "malloc.h"
-#include "pc.h"
-#include "map.h"
-#include "intif.h"
-#include "clif.h"
-#include "chrif.h"
-#include "pet.h"
-#include "itemdb.h"
-#include "battle.h"
-#include "mob.h"
-#include "npc.h"
-#include "script.h"
-#include "skill.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-#define MIN_PETTHINKTIME 100
-
-struct pet_db pet_db[MAX_PET_DB];
-
-static int dirx[8]={0,-1,-1,-1,0,1,1,1};
-static int diry[8]={1,1,0,-1,-1,-1,0,1};
-
-static int pet_timer(int tid,unsigned int tick,int id,int data);
-static int pet_walktoxy_sub(struct pet_data *pd);
-
-static int distance(int x0,int y0,int x1,int y1)
-{
-	int dx,dy;
-
-	dx=abs(x0-x1);
-	dy=abs(y0-y1);
-	return dx>dy ? dx : dy;
-}
-
-static int calc_next_walk_step(struct pet_data *pd)
-{
-	nullpo_retr(0, pd);
-
-	if(pd->walkpath.path_pos>=pd->walkpath.path_len)
-		return -1;
-	if(pd->walkpath.path[pd->walkpath.path_pos]&1)
-		return pd->speed*14/10;
-	return pd->speed;
-}
-
-static int pet_performance_val(struct map_session_data *sd)
-{
-	nullpo_retr(0, sd);
-
-	if(sd->pet.intimate > 900)
-		return (sd->petDB->s_perfor > 0)? 4:3;
-	else if(sd->pet.intimate > 750)
-		return 2;
-	else
-		return 1;
-}
-
-int pet_hungry_val(struct map_session_data *sd)
-{
-	nullpo_retr(0, sd);
-
-	if(sd->pet.hungry > 90)
-		return 4;
-	else if(sd->pet.hungry > 75)
-		return 3;
-	else if(sd->pet.hungry > 25)
-		return 2;
-	else if(sd->pet.hungry > 10)
-		return 1;
-	else
-		return 0;
-}
-
-static int pet_can_reach(struct pet_data *pd,int x,int y)
-{
-	struct walkpath_data wpd;
-
-	nullpo_retr(0, pd);
-
-	if( pd->bl.x==x && pd->bl.y==y )	// �����}�X
-		return 1;
-
-	// ��Q������
-	wpd.path_len=0;
-	wpd.path_pos=0;
-	wpd.path_half=0;
-	return (path_search(&wpd,pd->bl.m,pd->bl.x,pd->bl.y,x,y,0)!=-1)?1:0;
-}
-
-static int pet_calc_pos(struct pet_data *pd,int tx,int ty,int dir)
-{
-	int x,y,dx,dy;
-	int i,j=0,k;
-
-	nullpo_retr(0, pd);
-
-	pd->to_x = tx;
-	pd->to_y = ty;
-
-	if(dir >= 0 && dir < 8) {
-		dx = -dirx[dir]*2;
-		dy = -diry[dir]*2;
-		x = tx + dx;
-		y = ty + dy;
-		if(!(j=pet_can_reach(pd,x,y))) {
-			if(dx > 0) x--;
-			else if(dx < 0) x++;
-			if(dy > 0) y--;
-			else if(dy < 0) y++;
-			if(!(j=pet_can_reach(pd,x,y))) {
-				for(i=0;i<12;i++) {
-					k = rand()%8;
-					dx = -dirx[k]*2;
-					dy = -diry[k]*2;
-					x = tx + dx;
-					y = ty + dy;
-					if((j=pet_can_reach(pd,x,y)))
-						break;
-					else {
-						if(dx > 0) x--;
-						else if(dx < 0) x++;
-						if(dy > 0) y--;
-						else if(dy < 0) y++;
-						if((j=pet_can_reach(pd,x,y)))
-							break;
-					}
-				}
-				if(!j) {
-					x = tx;
-					y = ty;
-					if(!pet_can_reach(pd,x,y))
-						return 1;
-				}
-			}
-		}
-	}
-	else
-		return 1;
-
-	pd->to_x = x;
-	pd->to_y = y;
-	return 0;
-}
-
-static int pet_attack(struct pet_data *pd,unsigned int tick,int data)
-{
-	struct mob_data *md;
-	int mode,race,range;
-
-	nullpo_retr(0, pd);
-
-	pd->state.state=MS_IDLE;
-
-	md=(struct mob_data *)map_id2bl(pd->target_id);
-	if(md == NULL || md->bl.type != BL_MOB || pd->bl.m != md->bl.m || md->bl.prev == NULL ||
-		distance(pd->bl.x,pd->bl.y,md->bl.x,md->bl.y) > 13) {
-		pd->target_id=0;
-		return 0;
-	}
-
-	mode=mob_db[pd->class].mode;
-	race=mob_db[pd->class].race;
-	if(mob_db[pd->class].mexp <= 0 && !(mode&0x20) && (md->option & 0x06 && race != 4 && race != 6) ) {
-		pd->target_id=0;
-		return 0;
-	}
-
-	range = mob_db[pd->class].range + 1;
-	if(distance(pd->bl.x,pd->bl.y,md->bl.x,md->bl.y) > range)
-		return 0;
-	if(battle_config.monster_attack_direction_change)
-		pd->dir=map_calc_dir(&pd->bl, md->bl.x,md->bl.y );
-
-	clif_fixpetpos(pd);
-
-	pd->target_lv = battle_weapon_attack(&pd->bl,&md->bl,tick,0);
-
-	pd->attackabletime = tick + battle_get_adelay(&pd->bl);
-
-	pd->timer=add_timer(pd->attackabletime,pet_timer,pd->bl.id,0);
-	pd->state.state=MS_ATTACK;
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-static int pet_walk(struct pet_data *pd,unsigned int tick,int data)
-{
-	int moveblock;
-	int i,ctype;
-	int x,y,dx,dy;
-
-	nullpo_retr(0, pd);
-
-	pd->state.state=MS_IDLE;
-	if(pd->walkpath.path_pos >= pd->walkpath.path_len || pd->walkpath.path_pos != data)
-		return 0;
-
-	pd->walkpath.path_half ^= 1;
-	if(pd->walkpath.path_half==0){
-		pd->walkpath.path_pos++;
-		if(pd->state.change_walk_target){
-			pet_walktoxy_sub(pd);
-			return 0;
-		}
-	}
-	else {
-		if(pd->walkpath.path[pd->walkpath.path_pos] >= 8)
-			return 1;
-
-		x = pd->bl.x;
-		y = pd->bl.y;
-/*		ctype = map_getcell(pd->bl.m,x,y);
-		if(ctype == 1 || ctype == 5) {
-			pet_stop_walking(pd,1);
-			return 0;
-		}*/
-		pd->dir=pd->walkpath.path[pd->walkpath.path_pos];
-		dx = dirx[pd->dir];
-		dy = diry[pd->dir];
-
-		ctype = map_getcell(pd->bl.m,x+dx,y+dy);
-		if(ctype == 1 || ctype == 5) {
-			pet_walktoxy_sub(pd);
-			return 0;
-		}
-
-		moveblock = ( x/BLOCK_SIZE != (x+dx)/BLOCK_SIZE || y/BLOCK_SIZE != (y+dy)/BLOCK_SIZE);
-
-		pd->state.state=MS_WALK;
-		map_foreachinmovearea(clif_petoutsight,pd->bl.m,x-AREA_SIZE,y-AREA_SIZE,x+AREA_SIZE,y+AREA_SIZE,dx,dy,BL_PC,pd);
-
-		x += dx;
-		y += dy;
-
-		if(moveblock) map_delblock(&pd->bl);
-		pd->bl.x = x;
-		pd->bl.y = y;
-		if(moveblock) map_addblock(&pd->bl);
-
-		map_foreachinmovearea(clif_petinsight,pd->bl.m,x-AREA_SIZE,y-AREA_SIZE,x+AREA_SIZE,y+AREA_SIZE,-dx,-dy,BL_PC,pd);
-		pd->state.state=MS_IDLE;
-	}
-	if((i=calc_next_walk_step(pd))>0){
-		i = i>>1;
-		if(i < 1 && pd->walkpath.path_half == 0)
-			i = 1;
-		pd->timer=add_timer(tick+i,pet_timer,pd->bl.id,pd->walkpath.path_pos);
-		pd->state.state=MS_WALK;
-
-		if(pd->walkpath.path_pos >= pd->walkpath.path_len)
-			clif_fixpetpos(pd);
-	}
-	return 0;
-}
-
-int pet_stopattack(struct pet_data *pd)
-{
-	nullpo_retr(0, pd);
-
-	pd->target_id=0;
-	if(pd->state.state == MS_ATTACK)
-		pet_changestate(pd,MS_IDLE,0);
-
-	return 0;
-}
-
-int pet_target_check(struct map_session_data *sd,struct block_list *bl,int type)
-{
-	struct pet_data *pd;
-	struct mob_data *md;
-	int rate,mode,race;
-
-	nullpo_retr(0, sd);
-
-	pd = sd->pd;
-
-	if(bl && pd && bl->type == BL_MOB && sd->pet.intimate > 900 && sd->pet.hungry > 0 && pd->class != battle_get_class(bl)
-		&& pd->state.state != MS_DELAY) {
-		mode=mob_db[pd->class].mode;
-		race=mob_db[pd->class].race;
-		md=(struct mob_data *)bl;
-		if(md->bl.type != BL_MOB || pd->bl.m != md->bl.m || md->bl.prev == NULL ||
-			distance(pd->bl.x,pd->bl.y,md->bl.x,md->bl.y) > 13)
-			return 0;
-		if(mob_db[pd->class].mexp <= 0 && !(mode&0x20) && (md->option & 0x06 && race!=4 && race!=6) )
-			return 0;
-		if(!type) {
-			rate = sd->petDB->attack_rate;
-			rate = rate * (150 - (sd->pet.intimate - 1000))/100;
-			if(battle_config.pet_support_rate != 100)
-				rate = rate*battle_config.pet_support_rate/100;
-			if(sd->petDB->attack_rate > 0 && rate <= 0)
-				rate = 1;
-		}
-		else {
-			rate = sd->petDB->defence_attack_rate;
-			rate = rate * (150 - (sd->pet.intimate - 1000))/100;
-			if(battle_config.pet_support_rate != 100)
-				rate = rate*battle_config.pet_support_rate/100;
-			if(sd->petDB->defence_attack_rate > 0 && rate <= 0)
-				rate = 1;
-		}
-		if(rand()%10000 < rate) {
-			if(pd->target_id == 0 || rand()%10000 < sd->petDB->change_target_rate)
-				pd->target_id = bl->id;
-		}
-	}
-	return 0;
-}
-
-int pet_changestate(struct pet_data *pd,int state,int type)
-{
-	unsigned int tick;
-	int i;
-
-	nullpo_retr(0, pd);
-
-	if(pd->timer != -1)
-		delete_timer(pd->timer,pet_timer);
-	pd->timer=-1;
-	pd->state.state=state;
-
-	switch(state) {
-		case MS_WALK:
-			if((i=calc_next_walk_step(pd)) > 0){
-				i = i>>2;
-				pd->timer=add_timer(gettick()+i,pet_timer,pd->bl.id,0);
-			} else
-				pd->state.state=MS_IDLE;
-			break;
-		case MS_ATTACK:
-			tick = gettick();
-			i=DIFF_TICK(pd->attackabletime,tick);
-			if(i>0 && i<2000)
-				pd->timer=add_timer(pd->attackabletime,pet_timer,pd->bl.id,0);
-			else
-				pd->timer=add_timer(tick+1,pet_timer,pd->bl.id,0);
-			break;
-		case MS_DELAY:
-			pd->timer=add_timer(gettick()+type,pet_timer,pd->bl.id,0);
-			break;
-	}
-
-	return 0;
-}
-
-static int pet_timer(int tid,unsigned int tick,int id,int data)
-{
-	struct pet_data *pd;
-
-	pd=(struct pet_data*)map_id2bl(id);
-	if(pd == NULL || pd->bl.type != BL_PET)
-		return 1;
-
-	if(pd->timer != tid){
-		if(battle_config.error_log)
-			printf("pet_timer %d != %d\n",pd->timer,tid);
-		return 0;
-	}
-	pd->timer=-1;
-
-	if(pd->bl.prev == NULL)
-		return 1;
-
-	switch(pd->state.state){
-		case MS_WALK:
-			pet_walk(pd,tick,data);
-			break;
-		case MS_ATTACK:
-			pet_attack(pd,tick,data);
-			break;
-		case MS_DELAY:
-			pet_changestate(pd,MS_IDLE,0);
-			break;
-		default:
-			if(battle_config.error_log)
-				printf("pet_timer : %d ?\n",pd->state.state);
-			break;
-	}
-
-	return 0;
-}
-
-static int pet_walktoxy_sub(struct pet_data *pd)
-{
-	struct walkpath_data wpd;
-
-	nullpo_retr(0, pd);
-
-	if(path_search(&wpd,pd->bl.m,pd->bl.x,pd->bl.y,pd->to_x,pd->to_y,0))
-		return 1;
-	memcpy(&pd->walkpath,&wpd,sizeof(wpd));
-
-	pd->state.change_walk_target=0;
-	pet_changestate(pd,MS_WALK,0);
-	clif_movepet(pd);
-//	if(battle_config.etc_log)
-//		printf("walkstart\n");
-
-	return 0;
-}
-
-int pet_walktoxy(struct pet_data *pd,int x,int y)
-{
-	struct walkpath_data wpd;
-
-	nullpo_retr(0, pd);
-
-	if(pd->state.state == MS_WALK && path_search(&wpd,pd->bl.m,pd->bl.x,pd->bl.y,x,y,0))
-		return 1;
-
-	pd->to_x=x;
-	pd->to_y=y;
-
-	if(pd->state.state == MS_WALK) {
-		pd->state.change_walk_target=1;
-	} else {
-		return pet_walktoxy_sub(pd);
-	}
-
-	return 0;
-}
-
-int pet_stop_walking(struct pet_data *pd,int type)
-{
-	nullpo_retr(0, pd);
-
-	if(pd->state.state == MS_WALK || pd->state.state == MS_IDLE) {
-		pd->walkpath.path_len=0;
-		pd->to_x=pd->bl.x;
-		pd->to_y=pd->bl.y;
-	}
-	if(type&0x01)
-		clif_fixpetpos(pd);
-	if(type&~0xff)
-		pet_changestate(pd,MS_DELAY,type>>8);
-	else
-		pet_changestate(pd,MS_IDLE,0);
-
-	return 0;
-}
-
-static int pet_hungry(int tid,unsigned int tick,int id,int data)
-{
-	struct map_session_data *sd;
-	int interval,t;
-
-	sd=map_id2sd(id);
-	if(sd==NULL)
-		return 1;
-
-	if(sd->pet_hungry_timer != tid){
-		if(battle_config.error_log)
-			printf("pet_hungry_timer %d != %d\n",sd->pet_hungry_timer,tid);
-		return 0;
-	}
-	sd->pet_hungry_timer = -1;
-	if(!sd->status.pet_id || !sd->pd || !sd->petDB)
-		return 1;
-
-	sd->pet.hungry--;
-	t = sd->pet.intimate;
-	if(sd->pet.hungry < 0) {
-		if(sd->pd->target_id > 0)
-			pet_stopattack(sd->pd);
-		sd->pet.hungry = 0;
-		sd->pet.intimate -= battle_config.pet_hungry_friendly_decrease;
-		if(sd->pet.intimate <= 0) {
-			sd->pet.intimate = 0;
-			if(battle_config.pet_status_support && t > 0) {
-				if(sd->bl.prev != NULL)
-					pc_calcstatus(sd,0);
-				else
-					pc_calcstatus(sd,2);
-			}
-		}
-		clif_send_petdata(sd,1,sd->pet.intimate);
-	}
-	clif_send_petdata(sd,2,sd->pet.hungry);
-
-	if(battle_config.pet_hungry_delay_rate != 100)
-		interval = (sd->petDB->hungry_delay*battle_config.pet_hungry_delay_rate)/100;
-	else
-		interval = sd->petDB->hungry_delay;
-	if(interval <= 0)
-		interval = 1;
-	sd->pet_hungry_timer = add_timer(tick+interval,pet_hungry,sd->bl.id,0);
-
-	return 0;
-}
-
-int search_petDB_index(int key,int type)
-{
-	int i;
-
-	for(i=0;i<MAX_PET_DB;i++) {
-		if(pet_db[i].class <= 0)
-			continue;
-		switch(type) {
-			case PET_CLASS:
-				if(pet_db[i].class == key)
-					return i;
-				break;
-			case PET_CATCH:
-				if(pet_db[i].itemID == key)
-					return i;
-				break;
-			case PET_EGG:
-				if(pet_db[i].EggID == key)
-					return i;
-				break;
-			case PET_EQUIP:
-				if(pet_db[i].AcceID == key)
-					return i;
-				break;
-			case PET_FOOD:
-				if(pet_db[i].FoodID == key)
-					return i;
-				break;
-			default:
-				return -1;
-		}
-	}
-	return -1;
-}
-
-int pet_hungry_timer_delete(struct map_session_data *sd)
-{
-	nullpo_retr(0, sd);
-
-	if(sd->pet_hungry_timer != -1) {
-		delete_timer(sd->pet_hungry_timer,pet_hungry);
-		sd->pet_hungry_timer = -1;
-	}
-
-	return 0;
-}
-
-int pet_remove_map(struct map_session_data *sd)
-{
-	nullpo_retr(0, sd);
-
-	if(sd->status.pet_id && sd->pd) {
-
-		struct pet_data *pd=sd->pd; // [Valaris]
-		if(pd->skillbonustimer!=-1) pd->skillbonustimer=-1;
-		if(pd->skillbonusduration!=-1) pd->skillbonusduration=-1;
-		if(pd->skilltype !=-1) pd->skilltype=-1;
-		if(pd->skillval !=-1) pd->skillval=-1;
-		if(pd->skilltimer!=-1) pd->skilltimer=-1;
-		if(pd->skillduration!=-1) pd->skillduration=-1;
-		if(pd->skillbonustype!=-1) pd->skillbonustype=-1;
-		if(pd->skillbonusval!=-1) pd->skillbonusval=-1;
-		if(sd->perfect_hiding==1) sd->perfect_hiding=0;	// end additions		
-
-		pet_changestate(sd->pd,MS_IDLE,0);
-		if(sd->pet_hungry_timer != -1)
-			pet_hungry_timer_delete(sd);
-		clif_clearchar_area(&sd->pd->bl,0);
-		map_delblock(&sd->pd->bl);
-		map_deliddb(&sd->pd->bl);
-		map_freeblock(sd->pd);
-	}
-	return 0;
-}
-struct delay_item_drop {
-	int m,x,y;
-	int nameid,amount;
-	struct map_session_data *first_sd,*second_sd,*third_sd;
-};
-
-struct delay_item_drop2 {
-	int m,x,y;
-	struct item item_data;
-	struct map_session_data *first_sd,*second_sd,*third_sd;
-};
-
-int pet_performance(struct map_session_data *sd)
-{
-	struct pet_data *pd;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, pd=sd->pd);
-
-	pet_stop_walking(pd,2000<<8);
-	clif_pet_performance(&pd->bl,rand()%pet_performance_val(sd) + 1);
-	// ���[�g����Item�𗎂Ƃ�����
-	pet_lootitem_drop(pd,NULL);
-
-	return 0;
-}
-
-int pet_return_egg(struct map_session_data *sd)
-{
-	struct item tmp_item;
-	int flag;
-
-	nullpo_retr(0, sd);
-
-	if(sd->status.pet_id && sd->pd) {
-		struct pet_data *pd=sd->pd;
-		pet_remove_map(sd);
-		sd->status.pet_id = 0;
-		sd->pd = NULL;
-
-		if(sd->petDB == NULL)
-			return 1;
-		sd->pet.incuvate = 1;
-		memset(&tmp_item,0,sizeof(tmp_item));
-		tmp_item.nameid = sd->petDB->EggID;
-		tmp_item.identify = 1;
-		tmp_item.card[0] = 0xff00;
-		*((long *)(&tmp_item.card[1])) = sd->pet.pet_id;
-		tmp_item.card[3] = sd->pet.rename_flag;
-		if((flag = pc_additem(sd,&tmp_item,1))) {
-			clif_additem(sd,0,0,flag);
-			map_addflooritem(&tmp_item,1,sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
-		}
-		if(battle_config.pet_status_support && sd->pet.intimate > 0) {
-			if(sd->bl.prev != NULL)
-				pc_calcstatus(sd,0);
-			else
-				pc_calcstatus(sd,2);
-		}
-		// ���[�g����Item�𗎂Ƃ�����
-		pet_lootitem_drop(pd,sd);
-
-		intif_save_petdata(sd->status.account_id,&sd->pet);
-		pc_makesavestatus(sd);
-		chrif_save(sd);
-		storage_storage_save(sd);
-
-		sd->petDB = NULL;
-	}
-
-	return 0;
-}
-
-int pet_data_init(struct map_session_data *sd)
-{
-	struct pet_data *pd;
-	int i=0,interval=0;
-
-	nullpo_retr(1, sd);
-
-	if(sd->status.account_id != sd->pet.account_id || sd->status.char_id != sd->pet.char_id ||
-		sd->status.pet_id != sd->pet.pet_id) {
-		sd->status.pet_id = 0;
-		return 1;
-	}
-
-	i = search_petDB_index(sd->pet.class,PET_CLASS);
-	if(i < 0) {
-		sd->status.pet_id = 0;
-		return 1;
-	}
-	sd->petDB = &pet_db[i];
-	sd->pd = pd = (struct pet_data *)aCalloc(1,sizeof(struct pet_data));
-
-	pd->bl.m = sd->bl.m;
-	pd->bl.prev = pd->bl.next = NULL;
-	pd->bl.x = pd->to_x = sd->bl.x;
-	pd->bl.y = pd->to_y = sd->bl.y;
-	pet_calc_pos(pd,sd->bl.x,sd->bl.y,sd->dir);
-	pd->bl.x = pd->to_x;
-	pd->bl.y = pd->to_y;
-	pd->bl.id = npc_get_new_npc_id();
-	memcpy(pd->name,sd->pet.name,24);
-	pd->class = sd->pet.class;
-	pd->equip = sd->pet.equip;
-	pd->dir = sd->dir;
-	pd->speed = sd->petDB->speed;
-	pd->bl.subtype = MONS;
-	pd->bl.type = BL_PET;
-	memset(&pd->state,0,sizeof(pd->state));
-	pd->state.state = MS_IDLE;
-	pd->state.change_walk_target = 0;
-	pd->timer = -1;
-	pd->target_id = 0;
-	pd->move_fail_count = 0;
-	pd->next_walktime = pd->attackabletime = pd->last_thinktime = gettick();
-	pd->msd = sd;
-
-	map_addiddb(&pd->bl);
-
-	if(sd->pet_hungry_timer != -1)
-		pet_hungry_timer_delete(sd);
-	if(battle_config.pet_hungry_delay_rate != 100)
-		interval = (sd->petDB->hungry_delay*battle_config.pet_hungry_delay_rate)/100;
-	else
-		interval = sd->petDB->hungry_delay;
-	if(interval <= 0)
-		interval = 1;
-	sd->pet_hungry_timer = add_timer(gettick()+interval,pet_hungry,sd->bl.id,0);
-	pd->lootitem=(struct item *)aCalloc(PETLOOT_SIZE,sizeof(struct item));
-	pd->lootitem_count = 0;
-	pd->lootitem_weight = 0;
-	pd->lootitem_timer = gettick();
-	return 0;
-}
-
-int pet_birth_process(struct map_session_data *sd)
-{
-	nullpo_retr(1, sd);
-
-	if(sd->status.pet_id && sd->pet.incuvate == 1) {
-		sd->status.pet_id = 0;
-		return 1;
-	}
-
-	sd->pet.incuvate = 0;
-	sd->pet.account_id = sd->status.account_id;
-	sd->pet.char_id = sd->status.char_id;
-	sd->status.pet_id = sd->pet.pet_id;
-	if(pet_data_init(sd)) {
-		sd->status.pet_id = 0;
-		sd->pet.incuvate = 1;
-		sd->pet.account_id = 0;
-		sd->pet.char_id = 0;
-		return 1;
-	}
-
-	intif_save_petdata(sd->status.account_id,&sd->pet);
-	pc_makesavestatus(sd);
-	chrif_save(sd);
-	storage_storage_save(sd);
-	map_addblock(&sd->pd->bl);
-	clif_spawnpet(sd->pd);
-	clif_send_petdata(sd,0,0);
-	clif_send_petdata(sd,5,0x14);
-	clif_pet_equip(sd->pd,sd->pet.equip);
-	clif_send_petstatus(sd);
-
-	return 0;
-}
-
-int pet_recv_petdata(int account_id,struct s_pet *p,int flag)
-{
-	struct map_session_data *sd;
-
-	sd = map_id2sd(account_id);
-	if(sd == NULL)
-		return 1;
-	if(flag == 1) {
-		sd->status.pet_id = 0;
-		return 1;
-	}
-	memcpy(&sd->pet,p,sizeof(struct s_pet));
-	if(sd->pet.incuvate == 1)
-		pet_birth_process(sd);
-	else {
-		pet_data_init(sd);
-		if(sd->bl.prev != NULL) {
-			map_addblock(&sd->pd->bl);
-			clif_spawnpet(sd->pd);
-			clif_send_petdata(sd,0,0);
-			clif_send_petdata(sd,5,0x14);
-//			clif_pet_equip(sd->pd,sd->pet.equip);
-			clif_send_petstatus(sd);
-		}
-	}
-	if(battle_config.pet_status_support && sd->pet.intimate > 0) {
-		if(sd->bl.prev != NULL)
-			pc_calcstatus(sd,0);
-		else
-			pc_calcstatus(sd,2);
-	}
-
-	return 0;
-}
-
-int pet_select_egg(struct map_session_data *sd,short egg_index)
-{
-	nullpo_retr(0, sd);
-
-	if(sd->status.inventory[egg_index].card[0] == (short)0xff00)
-		intif_request_petdata(sd->status.account_id,sd->status.char_id,*((long *)&sd->status.inventory[egg_index].card[1]));
-	else {
-		if(battle_config.error_log)
-			printf("wrong egg item inventory %d\n",egg_index);
-	}
-	pc_delitem(sd,egg_index,1,0);
-
-	return 0;
-}
-
-int pet_catch_process1(struct map_session_data *sd,int target_class)
-{
-	nullpo_retr(0, sd);
-
-	sd->catch_target_class = target_class;
-	clif_catch_process(sd);
-
-	return 0;
-}
-
-int pet_catch_process2(struct map_session_data *sd,int target_id)
-{
-	struct mob_data *md;
-	int i=0,pet_catch_rate=0;
-
-	nullpo_retr(1, sd);
-
-	md=(struct mob_data*)map_id2bl(target_id);
-	if(!md){
-		clif_pet_rulet(sd,0);
-		return 1;
-	}
-
-	i = search_petDB_index(md->class,PET_CLASS);
-	if(md == NULL || md->bl.type != BL_MOB || md->bl.prev == NULL || i < 0 || sd->catch_target_class != md->class) {
-		clif_pet_rulet(sd,0);
-		return 1;
-	}
-
-	//target_id�ɂ��G��������
-//	if(battle_config.etc_log)
-//		printf("mob_id = %d, mob_class = %d\n",md->bl.id,md->class);
-		//�����̏ꍇ
-	pet_catch_rate = (pet_db[i].capture + (sd->status.base_level - mob_db[md->class].lv)*30 + sd->paramc[5]*20)*(200 - md->hp*100/mob_db[md->class].max_hp)/100;
-	if(pet_catch_rate < 1) pet_catch_rate = 1;
-	if(battle_config.pet_catch_rate != 100)
-		pet_catch_rate = (pet_catch_rate*battle_config.pet_catch_rate)/100;
-
-	if(rand()%10000 < pet_catch_rate) {
-		mob_catch_delete(md,0);
-		clif_pet_rulet(sd,1);
-//		if(battle_config.etc_log)
-//			printf("rulet success %d\n",target_id);
-		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);
-	}
-	else
-		clif_pet_rulet(sd,0);
-
-	return 0;
-}
-
-int pet_get_egg(int account_id,int pet_id,int flag)
-{
-	struct map_session_data *sd;
-	struct item tmp_item;
-	int i=0,ret=0;
-
-	if(!flag) {
-		sd = map_id2sd(account_id);
-		if(sd == NULL)
-			return 1;
-
-		i = search_petDB_index(sd->catch_target_class,PET_CLASS);
-		if(i >= 0) {
-			memset(&tmp_item,0,sizeof(tmp_item));
-			tmp_item.nameid = pet_db[i].EggID;
-			tmp_item.identify = 1;
-			tmp_item.card[0] = 0xff00;
-			*((long *)(&tmp_item.card[1])) = pet_id;
-			tmp_item.card[3] = sd->pet.rename_flag;
-			if((ret = pc_additem(sd,&tmp_item,1))) {
-				clif_additem(sd,0,0,ret);
-				map_addflooritem(&tmp_item,1,sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
-			}
-		}
-		else
-			intif_delete_petdata(pet_id);
-	}
-
-	return 0;
-}
-
-int pet_menu(struct map_session_data *sd,int menunum)
-{
-	nullpo_retr(0, sd);
-
-	switch(menunum) {
-		case 0:
-			clif_send_petstatus(sd);
-			break;
-		case 1:
-			pet_food(sd);
-			break;
-		case 2:
-			pet_performance(sd);
-			break;
-		case 3:
-			pet_return_egg(sd);
-			break;
-		case 4:
-			pet_unequipitem(sd);
-			break;
-	}
-	return 0;
-}
-
-int pet_change_name(struct map_session_data *sd,char *name)
-{
-	int i;
-	
-	nullpo_retr(1, sd);
-
-	if(sd->pet.rename_flag == 1 && battle_config.pet_rename == 0)
-		return 1;
-
-	for(i=0;i<24 && name[i];i++){
-		if( !(name[i]&0xe0) || name[i]==0x7f)
-			return 1;
-	}
-
-	pet_stop_walking(sd->pd,1);
-	memcpy(sd->pet.name,name,24);
-	memcpy(sd->pd->name,name,24);
-	clif_clearchar_area(&sd->pd->bl,0);
-	clif_spawnpet(sd->pd);
-	clif_send_petdata(sd,0,0);
-	clif_send_petdata(sd,5,0x14);
-	sd->pet.rename_flag = 1;
-	clif_pet_equip(sd->pd,sd->pet.equip);
-	clif_send_petstatus(sd);
-
-	return 0;
-}
-
-int pet_equipitem(struct map_session_data *sd,int index)
-{
-	int nameid;
-
-	nullpo_retr(1, sd);
-
-	nameid = sd->status.inventory[index].nameid;
-	if(sd->petDB == NULL)
-		return 1;
-	if(sd->petDB->AcceID == 0 || nameid != sd->petDB->AcceID || sd->pet.equip != 0) {
-		clif_equipitemack(sd,0,0,0);
-		return 1;
-	}
-	else {
-		pc_delitem(sd,index,1,0);
-		sd->pet.equip = sd->pd->equip = nameid;
-		pc_calcstatus(sd,0);
-		clif_pet_equip(sd->pd,nameid);
-	}
-
-	return 0;
-}
-
-int pet_unequipitem(struct map_session_data *sd)
-{
-	struct item tmp_item;
-	int nameid,flag;
-
-	nullpo_retr(1, sd);
-
-	if(sd->petDB == NULL)
-		return 1;
-	if(sd->pet.equip == 0)
-		return 1;
-
-	nameid = sd->pet.equip;
-	sd->pet.equip = sd->pd->equip = 0;
-	pc_calcstatus(sd,0);
-	clif_pet_equip(sd->pd,0);
-	memset(&tmp_item,0,sizeof(tmp_item));
-	tmp_item.nameid = nameid;
-	tmp_item.identify = 1;
-	if((flag = pc_additem(sd,&tmp_item,1))) {
-		clif_additem(sd,0,0,flag);
-		map_addflooritem(&tmp_item,1,sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
-	}
-
-	return 0;
-}
-
-int pet_food(struct map_session_data *sd)
-{
-	int i,k,t;
-
-	nullpo_retr(1, sd);
-
-	if(sd->petDB == NULL)
-		return 1;
-	i=pc_search_inventory(sd,sd->petDB->FoodID);
-	if(i < 0) {
-		clif_pet_food(sd,sd->petDB->FoodID,0);
-		return 1;
-	}
-	pc_delitem(sd,i,1,0);
-	t = sd->pet.intimate;
-	if(sd->pet.hungry > 90)
-		sd->pet.intimate -= sd->petDB->r_full;
-	else if(sd->pet.hungry > 75) {
-		if(battle_config.pet_friendly_rate != 100)
-			k = (sd->petDB->r_hungry * battle_config.pet_friendly_rate)/100;
-		else
-			k = sd->petDB->r_hungry;
-		k = k >> 1;
-		if(k <= 0)
-			k = 1;
-		sd->pet.intimate += k;
-	}
-	else {
-		if(battle_config.pet_friendly_rate != 100)
-			k = (sd->petDB->r_hungry * battle_config.pet_friendly_rate)/100;
-		else
-			k = sd->petDB->r_hungry;
-		sd->pet.intimate += k;
-	}
-	if(sd->pet.intimate <= 0) {
-		sd->pet.intimate = 0;
-		if(battle_config.pet_status_support && t > 0) {
-			if(sd->bl.prev != NULL)
-				pc_calcstatus(sd,0);
-			else
-				pc_calcstatus(sd,2);
-		}
-	}
-	else if(sd->pet.intimate > 1000)
-		sd->pet.intimate = 1000;
-	sd->pet.hungry += sd->petDB->fullness;
-	if(sd->pet.hungry > 100)
-		sd->pet.hungry = 100;
-
-	clif_send_petdata(sd,2,sd->pet.hungry);
-	clif_send_petdata(sd,1,sd->pet.intimate);
-	clif_pet_food(sd,sd->petDB->FoodID,1);
-
-	return 0;
-}
-
-static int pet_randomwalk(struct pet_data *pd,int tick)
-{
-	const int retrycount=20;
-	int speed;
-
-	nullpo_retr(0, pd);
-
-	speed = battle_get_speed(&pd->bl);
-
-	if(DIFF_TICK(pd->next_walktime,tick) < 0){
-		int i,x,y,c,d=12-pd->move_fail_count;
-		if(d<5) d=5;
-		for(i=0;i<retrycount;i++){
-			int r=rand();
-			x=pd->bl.x+r%(d*2+1)-d;
-			y=pd->bl.y+r/(d*2+1)%(d*2+1)-d;
-			if((c=map_getcell(pd->bl.m,x,y))!=1 && c!=5 && pet_walktoxy(pd,x,y)==0){
-				pd->move_fail_count=0;
-				break;
-			}
-			if(i+1>=retrycount){
-				pd->move_fail_count++;
-				if(pd->move_fail_count>1000){
-					if(battle_config.error_log)
-						printf("PET cant move. hold position %d, class = %d\n",pd->bl.id,pd->class);
-					pd->move_fail_count=0;
-					pet_changestate(pd,MS_DELAY,60000);
-					return 0;
-				}
-			}
-		}
-		for(i=c=0;i<pd->walkpath.path_len;i++){
-			if(pd->walkpath.path[i]&1)
-				c+=speed*14/10;
-			else
-				c+=speed;
-		}
-		pd->next_walktime = tick+rand()%3000+3000+c;
-
-		return 1;
-	}
-	return 0;
-}
-
-static int pet_unlocktarget(struct pet_data *pd)
-{
-	nullpo_retr(0, pd);
-
-	pd->target_id=0;
-
-	return 0;
-}
-
-static int pet_ai_sub_hard(struct pet_data *pd,unsigned int tick)
-{
-	struct map_session_data *sd = pd->msd;
-	struct mob_data *md = NULL;
-	int dist,i=0,dx,dy,ret;
-	int mode,race;
-
-	nullpo_retr(0, pd);
-
-	sd = pd->msd;
-
-	if(pd->bl.prev == NULL || sd == NULL || sd->bl.prev == NULL)
-		return 0;
-
-	if(DIFF_TICK(tick,pd->last_thinktime) < MIN_PETTHINKTIME)
-		return 0;
-	pd->last_thinktime=tick;
-
-	if(pd->state.state == MS_DELAY || pd->bl.m != sd->bl.m)
-		return 0;
-	// �y�b�g�ɂ�郋�[�g
-	if(!pd->target_id && pd->lootitem_count < PETLOOT_SIZE && pd->lootitem_count < pd->lootmax && pd->loot==1 && DIFF_TICK(gettick(),pd->lootitem_timer)>0)
-		map_foreachinarea(pet_ai_sub_hard_lootsearch,pd->bl.m,
-						  pd->bl.x-AREA_SIZE*2,pd->bl.y-AREA_SIZE*2,
-						  pd->bl.x+AREA_SIZE*2,pd->bl.y+AREA_SIZE*2,
-						  BL_ITEM,pd,&i);
-
-	if(sd->pet.intimate > 0) {
-		dist = distance(sd->bl.x,sd->bl.y,pd->bl.x,pd->bl.y);
-		if(dist > 12) {
-			if(pd->target_id > 0)
-				pet_unlocktarget(pd);
-			if(pd->timer != -1 && pd->state.state == MS_WALK && distance(pd->to_x,pd->to_y,sd->bl.x,sd->bl.y) < 3)
-				return 0;
-			pd->speed = (sd->speed>>1);
-			if(pd->speed <= 0)
-				pd->speed = 1;
-			pet_calc_pos(pd,sd->bl.x,sd->bl.y,sd->dir);
-			if(pet_walktoxy(pd,pd->to_x,pd->to_y))
-				pet_randomwalk(pd,tick);
-		}
-		else if(pd->target_id - MAX_FLOORITEM > 0) {
-			mode=mob_db[pd->class].mode;
-			race=mob_db[pd->class].race;
-			md=(struct mob_data *)map_id2bl(pd->target_id);
-			if(md == NULL || md->bl.type != BL_MOB || pd->bl.m != md->bl.m || md->bl.prev == NULL ||
-				distance(pd->bl.x,pd->bl.y,md->bl.x,md->bl.y) > 13)
-				pet_unlocktarget(pd);
-			else if(mob_db[pd->class].mexp <= 0 && !(mode&0x20) && (md->option & 0x06 && race!=4 && race!=6) )
-				pet_unlocktarget(pd);
-			else if(!battle_check_range(&pd->bl,&md->bl,mob_db[pd->class].range)){
-				if(pd->timer != -1 && pd->state.state == MS_WALK && distance(pd->to_x,pd->to_y,md->bl.x,md->bl.y) < 2)
-					return 0;
-				if( !pet_can_reach(pd,md->bl.x,md->bl.y))
-					pet_unlocktarget(pd);
-				else {
-					i=0;
-					pd->speed = battle_get_speed(&pd->bl);
-					do {
-						if(i==0) {	// �ŏ���AEGIS�Ɠ������@�Ō���
-							dx=md->bl.x - pd->bl.x;
-							dy=md->bl.y - pd->bl.y;
-							if(dx<0) dx++;
-							else if(dx>0) dx--;
-							if(dy<0) dy++;
-							else if(dy>0) dy--;
-						}
-						else {	// ���߂Ȃ�Athena��(�����_��)
-							dx=md->bl.x - pd->bl.x + rand()%3 - 1;
-							dy=md->bl.y - pd->bl.y + rand()%3 - 1;
-						}
-						ret=pet_walktoxy(pd,pd->bl.x+dx,pd->bl.y+dy);
-						i++;
-					} while(ret && i<5);
-
-					if(ret) { // �ړ��s�”\�ȏ�����̍U���Ȃ�2������
-						if(dx<0) dx=2;
-						else if(dx>0) dx=-2;
-						if(dy<0) dy=2;
-						else if(dy>0) dy=-2;
-						pet_walktoxy(pd,pd->bl.x+dx,pd->bl.y+dy);
-					}
-				}
-			}
-			else {
-				if(pd->state.state==MS_WALK)
-					pet_stop_walking(pd,1);
-				if(pd->state.state==MS_ATTACK)
-					return 0;
-				pet_changestate(pd,MS_ATTACK,0);
-			}
-		}
-		else if(pd->target_id > 0){	// ���[�g����
-			struct block_list *bl_item;
-			struct flooritem_data *fitem;
-
-			bl_item = map_id2bl(pd->target_id);
-			if(bl_item == NULL || bl_item->type != BL_ITEM ||bl_item->m != pd->bl.m ||
-				 (dist=distance(pd->bl.x,pd->bl.y,bl_item->x,bl_item->y))>=5){
-				 // �������邩�A�C�e�����Ȃ��Ȃ���
- 				pet_unlocktarget(pd);
-			}
-			else if(dist){
-				if(pd->timer != -1 && pd->state.state!=MS_ATTACK && (DIFF_TICK(pd->next_walktime,tick)<0 || distance(pd->to_x,pd->to_y,bl_item->x,bl_item->y) <= 0))
-					return 0; // ���Ɉړ���
-
-				pd->next_walktime=tick+500;
-				dx=bl_item->x - pd->bl.x;
-				dy=bl_item->y - pd->bl.y;
-
-				ret=pet_walktoxy(pd,pd->bl.x+dx,pd->bl.y+dy);
-			}
-			else{	// �A�C�e���܂ł��ǂ蒅����
-				fitem = (struct flooritem_data *)bl_item;
-				if(pd->state.state==MS_ATTACK)
-					return 0; // �U����
-				if(pd->state.state==MS_WALK){	// ���s���Ȃ��~
-					pet_stop_walking(pd,1);
-				}
-				if(pd->lootitem_count < PETLOOT_SIZE && pd->lootitem_count < pd->lootmax){
-					memcpy(&pd->lootitem[pd->lootitem_count++],&fitem->item_data,sizeof(pd->lootitem[0]));
-					pd->lootitem_weight += itemdb_search(fitem->item_data.nameid)->weight*fitem->item_data.amount;
-				}
-				else if(pd->lootitem_count >= PETLOOT_SIZE || pd->lootitem_count >=pd->lootmax) {
-					pet_unlocktarget(pd);
-					return 0;
-				}
-				else {
-					if(pd->lootitem[0].card[0] == (short)0xff00)
-						intif_delete_petdata(*((long *)(&pd->lootitem[0].card[1])));
-					for(i=0;i<PETLOOT_SIZE-1;i++)
-						memcpy(&pd->lootitem[i],&pd->lootitem[i+1],sizeof(pd->lootitem[0]));
-					memcpy(&pd->lootitem[PETLOOT_SIZE-1],&fitem->item_data,sizeof(pd->lootitem[0]));
-				}
-				map_clearflooritem(bl_item->id);
-				pet_unlocktarget(pd);
-			}
-		}
-		else {
-			if(dist <= 3 || (pd->timer != -1 && pd->state.state == MS_WALK && distance(pd->to_x,pd->to_y,sd->bl.x,sd->bl.y) < 3) )
-				return 0;
-			pd->speed = battle_get_speed(&pd->bl);
-			pet_calc_pos(pd,sd->bl.x,sd->bl.y,sd->dir);
-			if(pet_walktoxy(pd,pd->to_x,pd->to_y))
-				pet_randomwalk(pd,tick);
-		}
-	}
-	else {
-		pd->speed = battle_get_speed(&pd->bl);
-		if(pd->state.state == MS_ATTACK)
-			pet_stopattack(pd);
-		pet_randomwalk(pd,tick);
-	}
-
-	return 0;
-}
-
-static int pet_ai_sub_foreachclient(struct map_session_data *sd,va_list ap)
-{
-	unsigned int tick;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, ap);
-
-	tick=va_arg(ap,unsigned int);
-	if(sd->status.pet_id && sd->pd && sd->petDB)
-		pet_ai_sub_hard(sd->pd,tick);
-
-	return 0;
-}
-
-static int pet_ai_hard(int tid,unsigned int tick,int id,int data)
-{
-	clif_foreachclient(pet_ai_sub_foreachclient,tick);
-
-	return 0;
-}
-
-int pet_ai_sub_hard_lootsearch(struct block_list *bl,va_list ap)
-{
-	struct pet_data* pd;
-	int dist,*itc;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, pd=va_arg(ap,struct pet_data *));
-	nullpo_retr(0, itc=va_arg(ap,int *));
-
-	if(!pd->target_id){
-		struct flooritem_data *fitem = (struct flooritem_data *)bl;
-		struct map_session_data *sd = NULL;
-		// ���[�g������
-		if(fitem && fitem->first_get_id>0)
-			sd = map_id2sd(fitem->first_get_id);
-		// Removed [Valaris]
-		//if((pd->lootitem_weight + (itemdb_search(fitem->item_data.))->weight * fitem->item_data.amount) > battle_config.pet_weight)
-		//	return 0;
-
-		if(!pd->lootitem || (pd->lootitem_count >= PETLOOT_SIZE) || (pd->lootitem_count >= pd->lootmax) || (sd && sd->pd != pd))
-			return 0;
-		if(bl->m == pd->bl.m && (dist=distance(pd->bl.x,pd->bl.y,bl->x,bl->y))<5){
-			if( pet_can_reach(pd,bl->x,bl->y)		// ���B�”\������
-				 && rand()%1000<1000/(++(*itc)) ){	// �͈͓�PC�œ��m���ɂ���
-				pd->target_id=bl->id;
-			}
-		}
-	}
-	return 0;
-}
-int pet_lootitem_drop(struct pet_data *pd,struct map_session_data *sd)
-{
-	int i,flag=0;
-
-	if(pd){
-		if(pd->lootitem) {
-			for(i=0;i<pd->lootitem_count;i++) {
-				struct delay_item_drop2 *ditem;
-
-				ditem=(struct delay_item_drop2 *)aCalloc(1,sizeof(struct delay_item_drop2));
-				memcpy(&ditem->item_data,&pd->lootitem[i],sizeof(pd->lootitem[0]));
-				ditem->m = pd->bl.m;
-				ditem->x = pd->bl.x;
-				ditem->y = pd->bl.y;
-				ditem->first_sd = 0;
-				ditem->second_sd = 0;
-				ditem->third_sd = 0;
-				// ���Ƃ��Ȃ��Œ���PC��Item����
-				if(sd){
-					if((flag = pc_additem(sd,&ditem->item_data,ditem->item_data.amount))){
-						clif_additem(sd,0,0,flag);
-						map_addflooritem(&ditem->item_data,ditem->item_data.amount,ditem->m,ditem->x,ditem->y,ditem->first_sd,ditem->second_sd,ditem->third_sd,0);
-					}
-					free(ditem);
-				}
-				else
-					add_timer(gettick()+540+i,pet_delay_item_drop2,(int)ditem,0);
-			}
-			pd->lootitem=NULL;
-			pd->lootitem=(struct item *)aCalloc(PETLOOT_SIZE,sizeof(struct item));
-			pd->lootitem_count = 0;
-			pd->lootitem_weight = 0;
-			pd->lootitem_timer = gettick()+10000;	//	10*1000ms�̊ԏE��Ȃ�
-		}
-	}
-	return 1;
-}
-
-int pet_delay_item_drop2(int tid,unsigned int tick,int id,int data)
-{
-	struct delay_item_drop2 *ditem;
-
-	ditem=(struct delay_item_drop2 *)id;
-
-	map_addflooritem(&ditem->item_data,ditem->item_data.amount,ditem->m,ditem->x,ditem->y,ditem->first_sd,ditem->second_sd,ditem->third_sd,0);
-
-	free(ditem);
-	return 0;
-}
-
-/*==========================================
- * pet bonus giving skills [Valaris]
- *------------------------------------------
- */ 
-
-int pet_skill_bonus(struct map_session_data *sd,struct pet_data *pd,int type,int val,int duration,int timer,int data)
-{
-	if(pd==NULL || sd==NULL)
-		return 1;
-
-	pd->skillbonustype=type;
-	pd->skillbonusval=val;
-	pd->skillduration=duration;
-	pd->skilltimer=timer;
-
-	pd->skillbonustimer=add_timer(gettick()+pd->skilltimer*1000,pet_skill_bonus_timer,sd->bl.id,0);
-
-	return 0;
-
-}
-
-int pet_skill_bonus_timer(int tid,unsigned int tick,int id,int data)
-{
-	struct map_session_data *sd=(struct map_session_data*)map_id2bl(id);
-	struct pet_data *pd;
-	
-	if(sd==NULL || sd->bl.type!=BL_PC)
-		return 1;
-	
-	pd=sd->pd;
-
-	if(pd==NULL || pd->bl.type!=BL_PET)
-		return 1;
-
-	if(pd->skillbonustimer != tid)
-		return 0;
-
-	pd->skillbonustimer=-1;
-	
-	pc_bonus(sd,pd->skillbonustype,pd->skillbonusval);
-	if(pd->skillbonustype < 56) clif_updatestatus(sd,pd->skillbonustype);
-	pd->skillbonusduration=add_timer(gettick()+pd->skillduration*1000,pet_skill_bonus_duration,sd->bl.id,0);
-	
-	return 0;
-}
-
-int pet_skill_bonus_duration(int tid,unsigned int tick,int id,int data)
-{
-	struct map_session_data *sd=(struct map_session_data*)map_id2bl(id);
-	struct pet_data *pd;
-
-	if(sd==NULL || sd->bl.type!=BL_PC)
-		return 1;
-
-	pd=sd->pd;
-
-	if(pd==NULL || pd->bl.type!=BL_PET)
-		return 1;
-
-	if(pd->skillbonusduration != tid)
-		return 0;
-
-	pd->skillbonusduration=-1;
-
-	pc_bonus(sd,pd->skillbonustype,-pd->skillbonusval);
-	if(pd->skillbonustype < 56) clif_updatestatus(sd,pd->skillbonustype);
-
-	pet_skill_bonus(sd,pd,pd->skillbonustype,pd->skillbonusval,pd->skillduration,pd->skilltimer,0);
-
-	return 0;
-}
-
-int pet_recovery_timer(int tid,unsigned int tick,int id,int data)
-{
-	struct map_session_data *sd=(struct map_session_data*)map_id2bl(id);
-	struct pet_data *pd;
-	
-	if(sd==NULL || sd->bl.type!=BL_PC)
-		return 1;
-	
-	pd=sd->pd;
-
-	if(pd==NULL || pd->bl.type!=BL_PET)
-		return 1;
-
-	if(pd->skillbonustimer != tid)
-		return 0;
-
-	if(sd->sc_data[pd->skilltype].timer != -1)
-		skill_status_change_end(&sd->bl,pd->skilltype,-1);
-
-	pd->skillbonustimer=add_timer(gettick()+pd->skilltimer*1000,pet_recovery_timer,sd->bl.id,0);
-	
-	return 0;
-}
-
-int pet_heal_timer(int tid,unsigned int tick,int id,int data)
-{
-	struct map_session_data *sd=(struct map_session_data*)map_id2bl(id);
-	struct pet_data *pd;
-	
-	if(sd==NULL || sd->bl.type!=BL_PC)
-		return 1;
-	
-	pd=sd->pd;
-
-	if(pd==NULL || pd->bl.type!=BL_PET)
-		return 1;
-
-	if(pd->skillbonustimer != tid)
-		return 0;
-
-	if(sd->status.hp < sd->status.max_hp * pd->skilltype/100) {
-		clif_skill_nodamage(&pd->bl,&sd->bl,AL_HEAL,pd->skillval,1);
-		pc_heal(sd,pd->skillval,0);
-    	}
-	
-	pd->skillbonustimer=add_timer(gettick()+pd->skilltimer*1000,pet_heal_timer,sd->bl.id,0);
-	
-	return 0;
-}
-
-int pet_mag_timer(int tid,unsigned int tick,int id,int data)
-{
-	struct pet_data *pd;
-	struct map_session_data *sd=(struct map_session_data*)map_id2bl(id);
-	
-	if(sd==NULL || sd->bl.type!=BL_PC)
-		return 1;
-	
-	pd=sd->pd;
-
-	if(pd==NULL || pd->bl.type!=BL_PET)
-		return 1;
-
-	if(pd->skillbonustimer != tid)
-		return 0;
-
-	if(sd->status.hp < sd->status.max_hp * pd->skilltype/100 && sd->status.sp < sd->status.max_sp * pd->skillduration/100) {
-		clif_skill_nodamage(&pd->bl,&sd->bl,PR_MAGNIFICAT,pd->skillval,1);
-		skill_status_change_start(&sd->bl,SkillStatusChangeTable[PR_MAGNIFICAT],pd->skillval,0,0,0,skill_get_time(PR_MAGNIFICAT,pd->skillval),0 );
-  	}
-	
-	pd->skillbonustimer=add_timer(gettick()+pd->skilltimer*1000,pet_mag_timer,sd->bl.id,0);
-	
-	return 0;
-}
-
-int pet_skillattack_timer(int tid,unsigned int tick,int id,int data)
-{
-	struct mob_data *md;
-	struct map_session_data *sd=(struct map_session_data*)map_id2bl(id);
-	struct pet_data *pd;
-
-	if(sd==NULL || sd->bl.type!=BL_PC)
-		return 1;
-	
-	pd=sd->pd;
-
-	if(pd==NULL || pd->bl.type!=BL_PET)
-		return 1;
-
-	if(pd->skillbonustimer != tid)
-		return 0;
-
-	md=(struct mob_data *)map_id2bl(sd->attacktarget);
-	if(md == NULL || md->bl.type != BL_MOB || pd->bl.m != md->bl.m || md->bl.prev == NULL ||
-		distance(pd->bl.x,pd->bl.y,md->bl.x,md->bl.y) > 6) {
-		pd->target_id=0;
-		pd->skillbonustimer=add_timer(gettick()+100,pet_skillattack_timer,sd->bl.id,pd->skillduration);
-		return 0;
-	}
-
-	if(md && rand()%100 < sd->pet.intimate*pd->skilltimer/100 ) {
-		if(pd->skilltype==6 || pd->skilltype==176) {
-			skill_castend_nodamage_id(&pd->bl,&md->bl,pd->skilltype,pd->skillval,tick,0);
-		}
-		
-		else if(pd->skilltype==110){
-			skill_castend_pos2(&pd->bl,md->bl.x,md->bl.y,pd->skilltype,pd->skillval,tick,0);
-		}
-		
-		else if(pd->skilltype==91) {
-			skill_castend_pos2(&pd->bl,md->bl.x,md->bl.y,pd->skilltype,pd->skillval+rand()%100,tick,0);
-		}	
-		else 
-			skill_castend_damage_id(&pd->bl,&md->bl,pd->skilltype,pd->skillval,tick,0);
-		pd->skillbonustimer=add_timer(gettick()+1000,pet_skillattack_timer,sd->bl.id,0);
-		return 0;
-	}
-
-	pd->skillbonustimer=add_timer(gettick()+100,pet_skillattack_timer,sd->bl.id,0);
-	
-	return 0;
-}
-
-/*==========================================
- *�y�b�g�f�[�^�ǂݍ���
- *------------------------------------------
- */ 
-int read_petdb()
-{
-	FILE *fp;
-	char line[1024];
-	int i;
-	int j=0;
-	char *filename[]={"db/pet_db.txt","db/pet_db2.txt"};
-	
-	memset(pet_db,0,sizeof(pet_db));
-	for(i=0;i<2;i++){
-		fp=fopen(filename[i],"r");
-		if(fp==NULL){
-			if(i>0)
-				continue;
-			printf("can't read %s\n",filename[i]);
-			return -1;
-		}
-		while(fgets(line,1020,fp)){
-			int nameid,i;
-			char *str[32],*p,*np;
-
-			if(line[0] == '/' && line[1] == '/')
-				continue;
-
-			for(i=0,p=line;i<20;i++){
-				if((np=strchr(p,','))!=NULL){
-					str[i]=p;
-					*np=0;
-					p=np+1;
-				} else {
-					str[i]=p;
-					p+=strlen(p);
-				}
-			}
-
-			nameid=atoi(str[0]);
-			if(nameid<=0 || nameid>2000)
-				continue;
-		
-			//MobID,Name,JName,ItemID,EggID,AcceID,FoodID,"Fullness (1��̉a�ł̖����x������%)","HungryDeray (/min)","R_Hungry (�󕠎��a���e���x������%)","R_Full (�ƂĂ��������a���e���x������%)","Intimate (�ߊl���e���x%)","Die (���S���e���x������%)","Capture (�ߊl��%)",(Name)
-			pet_db[j].class = nameid;
-			memcpy(pet_db[j].name,str[1],24);
-			memcpy(pet_db[j].jname,str[2],24);
-			pet_db[j].itemID=atoi(str[3]);
-			pet_db[j].EggID=atoi(str[4]);
-			pet_db[j].AcceID=atoi(str[5]);
-			pet_db[j].FoodID=atoi(str[6]);
-			pet_db[j].fullness=atoi(str[7]);
-			pet_db[j].hungry_delay=atoi(str[8])*1000;
-			pet_db[j].r_hungry=atoi(str[9]);
-			if(pet_db[j].r_hungry <= 0)
-				pet_db[j].r_hungry=1;
-			pet_db[j].r_full=atoi(str[10]);
-			pet_db[j].intimate=atoi(str[11]);
-			pet_db[j].die=atoi(str[12]);
-			pet_db[j].capture=atoi(str[13]);
-			pet_db[j].speed=atoi(str[14]);
-			pet_db[j].s_perfor=(char)atoi(str[15]);
-			pet_db[j].talk_convert_class=atoi(str[16]);
-			pet_db[j].attack_rate=atoi(str[17]);
-			pet_db[j].defence_attack_rate=atoi(str[18]);
-			pet_db[j].change_target_rate=atoi(str[19]);
-			pet_db[j].script = NULL;
-			if((np=strchr(p,'{'))==NULL)
-				continue;
-			pet_db[j].script = parse_script(np,0);
-			j++;
-		}
-		fclose(fp);
-		printf("read %s done (count=%d)\n",filename[i],j);
-	}
-	return 0;
-}
-
-/*==========================================
- * �X�L���֌W����������
- *------------------------------------------
- */
-int do_init_pet(void)
-{
-	read_petdb();
-
-	add_timer_func_list(pet_timer,"pet_timer");
-	add_timer_func_list(pet_hungry,"pet_hungry");
-	add_timer_func_list(pet_ai_hard,"pet_ai_hard");
-	add_timer_func_list(pet_skill_bonus_timer,"pet_skill_bonus_timer"); // [Valaris]
-	add_timer_func_list(pet_skill_bonus_duration,"pet_skill_bonus_duration"); // [Valaris]
-	add_timer_func_list(pet_recovery_timer,"pet_recovery_timer"); // [Valaris]
-	add_timer_func_list(pet_mag_timer,"pet_mag_timer"); // [Valaris]
-	add_timer_func_list(pet_heal_timer,"pet_heal_timer"); // [Valaris]
-	add_timer_func_list(pet_skillattack_timer,"pet_skillattack_timer"); // [Valaris]
-	add_timer_interval(gettick()+MIN_PETTHINKTIME,pet_ai_hard,0,0,MIN_PETTHINKTIME);
-
-	return 0;
-}
-
diff --git a/misc/src/map/pet.h b/misc/src/map/pet.h
deleted file mode 100644
index 365a449..0000000
--- a/misc/src/map/pet.h
+++ /dev/null
@@ -1,69 +0,0 @@
-// $Id: pet.h,v 1.2 2004/09/25 05:32:18 MouseJstr Exp $
-#ifndef _PET_H_
-#define _PET_H_
-
-#define MAX_PET_DB	100
-#define PETLOOT_SIZE	20 // [Valaris]
-
-struct pet_db {
-	int	class;
-	char name[24],jname[24];
-	int itemID;
-	int EggID;
-	int AcceID;
-	int FoodID;
-	int fullness;
-	int hungry_delay;
-	int r_hungry;
-	int r_full;
-	int intimate;
-	int die;
-	int capture;
-	int speed;
-	char s_perfor;
-	int talk_convert_class;
-	int attack_rate;
-	int defence_attack_rate;
-	int change_target_rate;
-	char *script;
-};
-extern struct pet_db pet_db[MAX_PET_DB];
-
-enum { PET_CLASS,PET_CATCH,PET_EGG,PET_EQUIP,PET_FOOD };
-
-int pet_hungry_val(struct map_session_data *sd);
-int pet_target_check(struct map_session_data *sd,struct block_list *bl,int type);
-int pet_stopattack(struct pet_data *pd);
-int pet_changestate(struct pet_data *pd,int state,int type);
-int pet_walktoxy(struct pet_data *pd,int x,int y);
-int pet_stop_walking(struct pet_data *pd,int type);
-int search_petDB_index(int key,int type);
-int pet_hungry_timer_delete(struct map_session_data *sd);
-int pet_remove_map(struct map_session_data *sd);
-int pet_data_init(struct map_session_data *sd);
-int pet_birth_process(struct map_session_data *sd);
-int pet_recv_petdata(int account_id,struct s_pet *p,int flag);
-int pet_select_egg(struct map_session_data *sd,short egg_index);
-int pet_catch_process1(struct map_session_data *sd,int target_class);
-int pet_catch_process2(struct map_session_data *sd,int target_id);
-int pet_get_egg(int account_id,int pet_id,int flag);
-int pet_menu(struct map_session_data *sd,int menunum);
-int pet_change_name(struct map_session_data *sd,char *name);
-int pet_equipitem(struct map_session_data *sd,int index);
-int pet_unequipitem(struct map_session_data *sd);
-int pet_food(struct map_session_data *sd);
-int pet_lootitem_drop(struct pet_data *pd,struct map_session_data *sd);
-int pet_delay_item_drop2(int tid,unsigned int tick,int id,int data);
-int pet_ai_sub_hard_lootsearch(struct block_list *bl,va_list ap);
-int pet_skill_bonus(struct map_session_data *sd,struct pet_data *pd,int type,int val,int duration,int timer,int data); 
-int pet_skill_bonus_timer(int tid,unsigned int tick,int id,int data); // [Valaris]
-int pet_skill_bonus_duration(int tid,unsigned int tick,int id,int data); // [Valaris]
-int pet_recovery_timer(int tid,unsigned int tick,int id,int data); // [Valaris]
-int pet_mag_timer(int tid,unsigned int tick,int id,int data); // [Valaris]
-int pet_heal_timer(int tid,unsigned int tick,int id,int data); // [Valaris]
-int pet_skillattack_timer(int tid,unsigned int tick,int id,int data); // [Valaris]
-
-int do_init_pet(void);
-
-#endif
-
diff --git a/misc/src/map/script.c b/misc/src/map/script.c
deleted file mode 100644
index a9a171b..0000000
--- a/misc/src/map/script.c
+++ /dev/null
@@ -1,6700 +0,0 @@
-// $Id: script.c 148 2004-09-30 14:05:37Z MouseJstr $
-//#define DEBUG_FUNCIN
-//#define DEBUG_DISP
-//#define DEBUG_RUN
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#ifndef LCCWIN32
-#include <sys/time.h>
-#endif
-
-#include <time.h>
-
-#include "socket.h"
-#include "timer.h"
-#include "malloc.h"
-#include "lock.h"
-
-#include "map.h"
-#include "clif.h"
-#include "chrif.h"
-#include "itemdb.h"
-#include "pc.h"
-#include "script.h"
-#include "storage.h"
-#include "mob.h"
-#include "npc.h"
-#include "pet.h"
-#include "intif.h"
-#include "db.h"
-#include "skill.h"
-#include "chat.h"
-#include "battle.h"
-#include "party.h"
-#include "guild.h"
-#include "lock.h"
-#include "atcommand.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-#define SCRIPT_BLOCK_SIZE 256
-enum { LABEL_NEXTLINE=1,LABEL_START };
-static unsigned char * script_buf;
-static int script_pos,script_size;
-
-char *str_buf;
-int str_pos,str_size;
-static struct {
-	int type;
-	int str;
-	int backpatch;
-	int label;
-	int (*func)();
-	int val;
-	int next;
-} *str_data;
-int str_num=LABEL_START,str_data_size;
-int str_hash[16];
-
-static struct dbt *mapreg_db=NULL;
-static struct dbt *mapregstr_db=NULL;
-static int mapreg_dirty=-1;
-char mapreg_txt[256]="save/mapreg.txt";
-#define MAPREG_AUTOSAVE_INTERVAL	(10*1000)
-
-static struct dbt *scriptlabel_db=NULL;
-static struct dbt *userfunc_db=NULL;
-
-struct dbt* script_get_label_db(){ return scriptlabel_db; }
-struct dbt* script_get_userfunc_db(){ if(!userfunc_db) userfunc_db=strdb_init(50); return userfunc_db; }
-
-int scriptlabel_final(void *k,void *d,va_list ap){ return 0; }
-static char pos[11][100] = {"��","��","����","�E��","���[�u","�C","�A�N�Z�T���[1","�A�N�Z�T���[2","��2","��3","�������Ă��Ȃ�"};
-
-static struct Script_Config {
-	int warn_func_no_comma;
-	int warn_cmd_no_comma;
-	int warn_func_mismatch_paramnum;
-	int warn_cmd_mismatch_paramnum;
-	int check_cmdcount;
-	int check_gotocount;
-} script_config;
-static int parse_cmd_if=0;
-static int parse_cmd;
-
-/*==========================================
- * ���[�J���v���g�^�C�v�錾 (�K�v�ȕ��̂�)
- *------------------------------------------
- */
-unsigned char* parse_subexpr(unsigned char *,int);
-int buildin_mes(struct script_state *st);
-int buildin_goto(struct script_state *st);
-int buildin_callsub(struct script_state *st);
-int buildin_callfunc(struct script_state *st);
-int buildin_return(struct script_state *st);
-int buildin_getarg(struct script_state *st);
-int buildin_next(struct script_state *st);
-int buildin_close(struct script_state *st);
-int buildin_close2(struct script_state *st);
-int buildin_menu(struct script_state *st);
-int buildin_rand(struct script_state *st);
-int buildin_warp(struct script_state *st);
-int buildin_areawarp(struct script_state *st);
-int buildin_heal(struct script_state *st);
-int buildin_itemheal(struct script_state *st);
-int buildin_percentheal(struct script_state *st);
-int buildin_jobchange(struct script_state *st);
-int buildin_input(struct script_state *st);
-int buildin_setlook(struct script_state *st);
-int buildin_set(struct script_state *st);
-int buildin_setarray(struct script_state *st);
-int buildin_cleararray(struct script_state *st);
-int buildin_copyarray(struct script_state *st);
-int buildin_getarraysize(struct script_state *st);
-int buildin_deletearray(struct script_state *st);
-int buildin_getelementofarray(struct script_state *st);
-int buildin_if(struct script_state *st);
-int buildin_getitem(struct script_state *st);
-int buildin_getitem2(struct script_state *st);
-int buildin_makeitem(struct script_state *st);
-int buildin_delitem(struct script_state *st);
-int buildin_viewpoint(struct script_state *st);
-int buildin_countitem(struct script_state *st);
-int buildin_checkweight(struct script_state *st);
-int buildin_readparam(struct script_state *st);
-int buildin_getcharid(struct script_state *st);
-int buildin_getpartyname(struct script_state *st);
-int buildin_getpartymember(struct script_state *st);
-int buildin_getguildname(struct script_state *st);
-int buildin_getguildmaster(struct script_state *st);
-int buildin_getguildmasterid(struct script_state *st);
-int buildin_strcharinfo(struct script_state *st);
-int buildin_getequipid(struct script_state *st);
-int buildin_getequipname(struct script_state *st);
-int buildin_getbrokenid(struct script_state *st); // [Valaris]
-int buildin_repair(struct script_state *st); // [Valaris]
-int buildin_getequipisequiped(struct script_state *st);
-int buildin_getequipisenableref(struct script_state *st);
-int buildin_getequipisidentify(struct script_state *st);
-int buildin_getequiprefinerycnt(struct script_state *st);
-int buildin_getequipweaponlv(struct script_state *st);
-int buildin_getequippercentrefinery(struct script_state *st);
-int buildin_successrefitem(struct script_state *st);
-int buildin_failedrefitem(struct script_state *st);
-int buildin_cutin(struct script_state *st);
-int buildin_cutincard(struct script_state *st);
-int buildin_statusup(struct script_state *st);
-int buildin_statusup2(struct script_state *st);
-int buildin_bonus(struct script_state *st);
-int buildin_bonus2(struct script_state *st);
-int buildin_bonus3(struct script_state *st);
-int buildin_skill(struct script_state *st);
-int buildin_guildskill(struct script_state *st);
-int buildin_getskilllv(struct script_state *st);
-int buildin_getgdskilllv(struct script_state *st);
-int buildin_basicskillcheck(struct script_state *st);
-int buildin_getgmlevel(struct script_state *st);
-int buildin_end(struct script_state *st);
-int buildin_checkoption(struct script_state *st);
-int buildin_setoption(struct script_state *st);
-int buildin_setcart(struct script_state *st);
-int buildin_checkcart(struct script_state *st); // check cart [Valaris]
-int buildin_setfalcon(struct script_state *st);
-int buildin_checkfalcon(struct script_state *st); // check falcon [Valaris]
-int buildin_setriding(struct script_state *st);
-int buildin_checkriding(struct script_state *st); // check for pecopeco [Valaris]
-int buildin_savepoint(struct script_state *st);
-int buildin_gettimetick(struct script_state *st);
-int buildin_gettime(struct script_state *st);
-int buildin_gettimestr(struct script_state *st);
-int buildin_openstorage(struct script_state *st);
-int buildin_guildopenstorage(struct script_state *st);
-int buildin_itemskill(struct script_state *st);
-int buildin_produce(struct script_state *st);
-int buildin_monster(struct script_state *st);
-int buildin_areamonster(struct script_state *st);
-int buildin_killmonster(struct script_state *st);
-int buildin_killmonsterall(struct script_state *st);
-int buildin_doevent(struct script_state *st);
-int buildin_donpcevent(struct script_state *st);
-int buildin_addtimer(struct script_state *st);
-int buildin_deltimer(struct script_state *st);
-int buildin_addtimercount(struct script_state *st);
-int buildin_initnpctimer(struct script_state *st);
-int buildin_stopnpctimer(struct script_state *st);
-int buildin_startnpctimer(struct script_state *st);
-int buildin_setnpctimer(struct script_state *st);
-int buildin_getnpctimer(struct script_state *st);
-int buildin_announce(struct script_state *st);
-int buildin_mapannounce(struct script_state *st);
-int buildin_areaannounce(struct script_state *st);
-int buildin_getusers(struct script_state *st);
-int buildin_getmapusers(struct script_state *st);
-int buildin_getareausers(struct script_state *st);
-int buildin_getareadropitem(struct script_state *st);
-int buildin_enablenpc(struct script_state *st);
-int buildin_disablenpc(struct script_state *st);
-int buildin_enablearena(struct script_state *st);	// Added by RoVeRT
-int buildin_disablearena(struct script_state *st);	// Added by RoVeRT
-int buildin_hideoffnpc(struct script_state *st);
-int buildin_hideonnpc(struct script_state *st);
-int buildin_sc_start(struct script_state *st);
-int buildin_sc_start2(struct script_state *st);
-int buildin_sc_end(struct script_state *st);
-int buildin_getscrate(struct script_state *st);
-int buildin_debugmes(struct script_state *st);
-int buildin_catchpet(struct script_state *st);
-int buildin_birthpet(struct script_state *st);
-int buildin_resetlvl(struct script_state *st);
-int buildin_resetstatus(struct script_state *st);
-int buildin_resetskill(struct script_state *st);
-int buildin_changebase(struct script_state *st);
-int buildin_changesex(struct script_state *st);
-int buildin_waitingroom(struct script_state *st);
-int buildin_delwaitingroom(struct script_state *st);
-int buildin_enablewaitingroomevent(struct script_state *st);
-int buildin_disablewaitingroomevent(struct script_state *st);
-int buildin_getwaitingroomstate(struct script_state *st);
-int buildin_warpwaitingpc(struct script_state *st);
-int buildin_attachrid(struct script_state *st);
-int buildin_detachrid(struct script_state *st);
-int buildin_isloggedin(struct script_state *st);
-int buildin_setmapflagnosave(struct script_state *st);
-int buildin_setmapflag(struct script_state *st);
-int buildin_removemapflag(struct script_state *st);
-int buildin_pvpon(struct script_state *st);
-int buildin_pvpoff(struct script_state *st);
-int buildin_gvgon(struct script_state *st);
-int buildin_gvgoff(struct script_state *st);
-int buildin_emotion(struct script_state *st);
-int buildin_maprespawnguildid(struct script_state *st);
-int buildin_agitstart(struct script_state *st);		// <Agit>
-int buildin_agitend(struct script_state *st);
-int buildin_agitcheck(struct script_state *st);  // <Agitcheck>
-int buildin_flagemblem(struct script_state *st);		// Flag Emblem
-int buildin_getcastlename(struct script_state *st);
-int buildin_getcastledata(struct script_state *st);
-int buildin_setcastledata(struct script_state *st);
-int buildin_requestguildinfo(struct script_state *st);
-int buildin_getequipcardcnt(struct script_state *st);
-int buildin_successremovecards(struct script_state *st);
-int buildin_failedremovecards(struct script_state *st);
-int buildin_marriage(struct script_state *st);
-int buildin_wedding_effect(struct script_state *st);
-int buildin_divorce(struct script_state *st);
-int buildin_getitemname(struct script_state *st);
-int buildin_makepet(struct script_state *st);
-int buildin_getexp(struct script_state *st);
-int buildin_getinventorylist(struct script_state *st);
-int buildin_getskilllist(struct script_state *st);
-int buildin_clearitem(struct script_state *st);
-int buildin_classchange(struct script_state *st);
-int buildin_misceffect(struct script_state *st);
-int buildin_soundeffect(struct script_state *st);
-int buildin_setcastledata(struct script_state *st);
-int buildin_mapwarp(struct script_state *st);
-int buildin_inittimer(struct script_state *st);
-int buildin_stoptimer(struct script_state *st);
-int buildin_cmdothernpc(struct script_state *st);
-int buildin_mobcount(struct script_state *st);
-int buildin_strmobinfo(struct script_state *st); // Script for displaying mob info [Valaris]
-int buildin_guardian(struct script_state *st); // Script for displaying mob info [Valaris]
-int buildin_guardianinfo(struct script_state *st); // Script for displaying mob info [Valaris]
-int buildin_petskillbonus(struct script_state *st); // petskillbonus [Valaris]
-int buildin_petrecovery(struct script_state *st); // pet skill for curing status [Valaris]
-int buildin_petloot(struct script_state *st); // pet looting [Valaris]
-int buildin_petheal(struct script_state *st); // pet healing [Valaris]
-int buildin_petmag(struct script_state *st); // pet magnificat [Valaris]
-int buildin_petskillattack(struct script_state *st); // pet skill attacks [Valaris]
-int buildin_npcskilleffect(struct script_state *st); // skill effects for npcs [Valaris]
-int buildin_specialeffect(struct script_state *st); // special effect script [Valaris]
-int buildin_specialeffect2(struct script_state *st); // special effect script [Valaris]
-int buildin_nude(struct script_state *st); // nude [Valaris]
-int buildin_gmcommand(struct script_state *st); // [MouseJstr]
-int buildin_movenpc(struct script_state *st); // [MouseJstr]
-int buildin_message(struct script_state *st); // [MouseJstr]
-int buildin_npctalk(struct script_state *st); // [Valaris]
-int buildin_hasitems(struct script_state *st); // [Valaris]
-int buildin_getlook(struct script_state *st);	//Lorky [Lupus]
-int buildin_getsavepoint(struct script_state *st);	//Lorky [Lupus]
-
-
-void push_val(struct script_stack *stack,int type,int val);
-int run_func(struct script_state *st);
-
-int mapreg_setreg(int num,int val);
-int mapreg_setregstr(int num,const char *str);
-
-struct {
-	int (*func)();
-	char *name;
-	char *arg;
-} buildin_func[]={
-	{buildin_mes,"mes","s"},
-	{buildin_next,"next",""},
-	{buildin_close,"close",""},
-	{buildin_close2,"close2",""},
-	{buildin_menu,"menu","*"},
-	{buildin_goto,"goto","l"},
-	{buildin_callsub,"callsub","i*"},
-	{buildin_callfunc,"callfunc","s*"},
-	{buildin_return,"return","*"},
-	{buildin_getarg,"getarg","i"},
-	{buildin_jobchange,"jobchange","i*"},
-	{buildin_input,"input","*"},
-	{buildin_warp,"warp","sii"},
-	{buildin_areawarp,"areawarp","siiiisii"},
-	{buildin_setlook,"setlook","ii"},
-	{buildin_set,"set","ii"},
-	{buildin_setarray,"setarray","ii*"},
-	{buildin_cleararray,"cleararray","iii"},
-	{buildin_copyarray,"copyarray","iii"},
-	{buildin_getarraysize,"getarraysize","i"},
-	{buildin_deletearray,"deletearray","ii"},
-	{buildin_getelementofarray,"getelementofarray","ii"},
-	{buildin_if,"if","i*"},
-	{buildin_getitem,"getitem","ii**"},
-	{buildin_getitem2,"getitem2","iiiiiiiii*"},
-	{buildin_makeitem,"makeitem","iisii"},
-	{buildin_delitem,"delitem","ii"},
-	{buildin_cutin,"cutin","si"},
-	{buildin_cutincard,"cutincard","i"},
-	{buildin_viewpoint,"viewpoint","iiiii"},
-	{buildin_heal,"heal","ii"},
-	{buildin_itemheal,"itemheal","ii"},
-	{buildin_percentheal,"percentheal","ii"},
-	{buildin_rand,"rand","i*"},
-	{buildin_countitem,"countitem","i"},
-	{buildin_checkweight,"checkweight","ii"},
-	{buildin_readparam,"readparam","i*"},
-	{buildin_getcharid,"getcharid","i*"},
-	{buildin_getpartyname,"getpartyname","i"},
-	{buildin_getpartymember,"getpartymember","i"},
-	{buildin_getguildname,"getguildname","i"},
-	{buildin_getguildmaster,"getguildmaster","i"},
-	{buildin_getguildmasterid,"getguildmasterid","i"},
-	{buildin_strcharinfo,"strcharinfo","i"},
-	{buildin_getequipid,"getequipid","i"},
-	{buildin_getequipname,"getequipname","i"},
-	{buildin_getbrokenid,"getbrokenid","i"}, // [Valaris]
-	{buildin_repair,"repair","i"}, // [Valaris]
-	{buildin_getequipisequiped,"getequipisequiped","i"},
-	{buildin_getequipisenableref,"getequipisenableref","i"},
-	{buildin_getequipisidentify,"getequipisidentify","i"},
-	{buildin_getequiprefinerycnt,"getequiprefinerycnt","i"},
-	{buildin_getequipweaponlv,"getequipweaponlv","i"},
-	{buildin_getequippercentrefinery,"getequippercentrefinery","i"},
-	{buildin_successrefitem,"successrefitem","i"},
-	{buildin_failedrefitem,"failedrefitem","i"},
-	{buildin_statusup,"statusup","i"},
-	{buildin_statusup2,"statusup2","ii"},
-	{buildin_bonus,"bonus","ii"},
-	{buildin_bonus2,"bonus2","iii"},
-	{buildin_bonus3,"bonus3","iiii"},
-	{buildin_skill,"skill","ii*"},
-	{buildin_guildskill,"guildskill","ii"},
-	{buildin_getskilllv,"getskilllv","i"},
-	{buildin_getgdskilllv,"getgdskilllv","ii"},
-	{buildin_basicskillcheck,"basicskillcheck","*"},
-	{buildin_getgmlevel,"getgmlevel","*"},
-	{buildin_end,"end",""},
-	{buildin_end,"break",""},
-	{buildin_checkoption,"checkoption","i"},
-	{buildin_setoption,"setoption","i"},
-	{buildin_setcart,"setcart",""},
-	{buildin_checkcart,"checkcart","*"},		//fixed by Lupus (added '*')
-	{buildin_setfalcon,"setfalcon",""},
-	{buildin_checkfalcon,"checkfalcon","*"},	//fixed by Lupus (fixed wrong pointer, added '*')
-	{buildin_setriding,"setriding",""},
-	{buildin_checkriding,"checkriding","*"},	//fixed by Lupus (fixed wrong pointer, added '*')
-	{buildin_savepoint,"save","sii"},
-	{buildin_savepoint,"savepoint","sii"},
-	{buildin_gettimetick,"gettimetick","i"},
-	{buildin_gettime,"gettime","i"},
-	{buildin_gettimestr,"gettimestr","si"},
-	{buildin_openstorage,"openstorage",""},
-	{buildin_guildopenstorage,"guildopenstorage","*"},
-	{buildin_itemskill,"itemskill","iis"},
-	{buildin_produce,"produce","i"},
-	{buildin_monster,"monster","siisii*"},
-	{buildin_areamonster,"areamonster","siiiisii*"},
-	{buildin_killmonster,"killmonster","ss"},
-	{buildin_killmonsterall,"killmonsterall","s"},
-	{buildin_doevent,"doevent","s"},
-	{buildin_donpcevent,"donpcevent","s"},
-	{buildin_addtimer,"addtimer","is"},
-	{buildin_deltimer,"deltimer","s"},
-	{buildin_addtimercount,"addtimercount","si"},
-	{buildin_initnpctimer,"initnpctimer","*"},
-	{buildin_stopnpctimer,"stopnpctimer","*"},
-	{buildin_startnpctimer,"startnpctimer","*"},
-	{buildin_setnpctimer,"setnpctimer","*"},
-	{buildin_getnpctimer,"getnpctimer","i*"},
-	{buildin_announce,"announce","si"},
-	{buildin_mapannounce,"mapannounce","ssi"},
-	{buildin_areaannounce,"areaannounce","siiiisi"},
-	{buildin_getusers,"getusers","i"},
-	{buildin_getmapusers,"getmapusers","s"},
-	{buildin_getareausers,"getareausers","siiii"},
-	{buildin_getareadropitem,"getareadropitem","siiiii"},
-	{buildin_enablenpc,"enablenpc","s"},
-	{buildin_disablenpc,"disablenpc","s"},
-	{buildin_enablearena,"enablearena",""},		// Added by RoVeRT
-	{buildin_disablearena,"disablearena",""},	// Added by RoVeRT
-	{buildin_hideoffnpc,"hideoffnpc","s"},
-	{buildin_hideonnpc,"hideonnpc","s"},
-	{buildin_sc_start,"sc_start","iii*"},
-	{buildin_sc_start2,"sc_start2","iiii*"},
-	{buildin_sc_end,"sc_end","i"},
-	{buildin_getscrate,"getscrate","ii*"},
-	{buildin_debugmes,"debugmes","s"},
-	{buildin_catchpet,"pet","i"},
-	{buildin_birthpet,"bpet",""},
-	{buildin_resetlvl,"resetlvl","i"},
-	{buildin_resetstatus,"resetstatus",""},
-	{buildin_resetskill,"resetskill",""},
-	{buildin_changebase,"changebase","i"},
-	{buildin_changesex,"changesex",""},
-	{buildin_waitingroom,"waitingroom","si*"},
-	{buildin_warpwaitingpc,"warpwaitingpc","sii"},
-	{buildin_delwaitingroom,"delwaitingroom","*"},
-	{buildin_enablewaitingroomevent,"enablewaitingroomevent","*"},
-	{buildin_disablewaitingroomevent,"disablewaitingroomevent","*"},
-	{buildin_getwaitingroomstate,"getwaitingroomstate","i*"},
-	{buildin_warpwaitingpc,"warpwaitingpc","sii*"},
-	{buildin_attachrid,"attachrid","i"},
-	{buildin_detachrid,"detachrid",""},
-	{buildin_isloggedin,"isloggedin","i"},
-	{buildin_setmapflagnosave,"setmapflagnosave","ssii"},
-	{buildin_setmapflag,"setmapflag","si"},
-	{buildin_removemapflag,"removemapflag","si"},
-	{buildin_pvpon,"pvpon","s"},
-	{buildin_pvpoff,"pvpoff","s"},
-	{buildin_gvgon,"gvgon","s"},
-	{buildin_gvgoff,"gvgoff","s"},
-	{buildin_emotion,"emotion","i"},
-	{buildin_maprespawnguildid,"maprespawnguildid","sii"},
-	{buildin_agitstart,"agitstart",""},	// <Agit>
-	{buildin_agitend,"agitend",""},
-	{buildin_agitcheck,"agitcheck","i"},   // <Agitcheck>
-	{buildin_flagemblem,"flagemblem","i"},	// Flag Emblem
-	{buildin_getcastlename,"getcastlename","s"},
-	{buildin_getcastledata,"getcastledata","si*"},
-	{buildin_setcastledata,"setcastledata","sii"},
-	{buildin_requestguildinfo,"requestguildinfo","i*"},
-	{buildin_getequipcardcnt,"getequipcardcnt","i"},
-	{buildin_successremovecards,"successremovecards","i"},
-	{buildin_failedremovecards,"failedremovecards","ii"},
-	{buildin_marriage,"marriage","s"},
-	{buildin_wedding_effect,"wedding",""},
-	{buildin_divorce,"divorce",""},
-	{buildin_getitemname,"getitemname","i"},
-	{buildin_makepet,"makepet","i"},
-	{buildin_getexp,"getexp","ii"},
-	{buildin_getinventorylist,"getinventorylist",""},
-	{buildin_getskilllist,"getskilllist",""},
-	{buildin_clearitem,"clearitem",""},
-	{buildin_classchange,"classchange","ii"},
-	{buildin_misceffect,"misceffect","i"},
-	{buildin_soundeffect,"soundeffect","si"},
-	{buildin_strmobinfo,"strmobinfo","ii"},	// display mob data [Valaris]
-	{buildin_guardian,"guardian","siisii*i"},	// summon guardians
-	{buildin_guardianinfo,"guardianinfo","i"},	// display guardian data [Valaris]
-	{buildin_petskillbonus,"petskillbonus","iiii"}, // [Valaris]
-	{buildin_petrecovery,"petrecovery","ii"}, // [Valaris]
-	{buildin_petloot,"petloot","i"}, // [Valaris]
-	{buildin_petheal,"petheal","iii"}, // [Valaris]
-	{buildin_petmag,"petmag","iiii"}, // [Valaris]
-	{buildin_petskillattack,"petskillattack","iiii"}, // [Valaris]
-	{buildin_npcskilleffect,"npcskilleffect","iiii"}, // npc skill effect [Valaris]
-	{buildin_specialeffect,"specialeffect","i"}, // npc skill effect [Valaris]
-	{buildin_specialeffect2,"specialeffect2","i"}, // skill effect on players[Valaris]
-	{buildin_nude,"nude",""}, // nude command [Valaris]
-	{buildin_mapwarp,"mapwarp","ssii"},		// Added by RoVeRT
-	{buildin_inittimer,"inittimer",""},
-	{buildin_stoptimer,"stoptimer",""},
-	{buildin_cmdothernpc,"cmdothernpc","ss"},
-	{buildin_gmcommand,"gmcommand","*"}, // [MouseJstr]
-//	{buildin_movenpc,"movenpc","siis"}, // [MouseJstr]
-	{buildin_message,"message","s*"}, // [MouseJstr]
-	{buildin_npctalk,"npctalk","*"}, // [Valaris]
-	{buildin_hasitems,"hasitems","*"}, // [Valaris]
-	{buildin_mobcount,"mobcount","ss"},
-        {buildin_getlook,"getlook","i"},                
-        {buildin_getsavepoint,"getsavepoint","i"},              // End Additions
-	{NULL,NULL,NULL},
-};
-int buildin_message(struct script_state *st); // [MouseJstr]
-
-
-enum {
-	C_NOP,C_POS,C_INT,C_PARAM,C_FUNC,C_STR,C_CONSTSTR,C_ARG,
-	C_NAME,C_EOL, C_RETINFO,
-
-	C_LOR,C_LAND,C_LE,C_LT,C_GE,C_GT,C_EQ,C_NE,   //operator
-	C_XOR,C_OR,C_AND,C_ADD,C_SUB,C_MUL,C_DIV,C_MOD,C_NEG,C_LNOT,C_NOT,C_R_SHIFT,C_L_SHIFT
-};
-
-/*==========================================
- * ������̃n�b�V�����v�Z
- *------------------------------------------
- */
-static int calc_hash(const unsigned char *p)
-{
-	int h=0;
-	while(*p){
-		h=(h<<1)+(h>>3)+(h>>5)+(h>>8);
-		h+=*p++;
-	}
-	return h&15;
-}
-
-/*==========================================
- * str_data�̒��ɖ��O�����邩��������
- *------------------------------------------
- */
-// �����̂ł���Δԍ��A�������-1
-static int search_str(const unsigned char *p)
-{
-	int i;
-	i=str_hash[calc_hash(p)];
-	while(i){
-		if(strcmp(str_buf+str_data[i].str,p)==0){
-			return i;
-		}
-		i=str_data[i].next;
-	}
-	return -1;
-}
-
-/*==========================================
- * str_data�ɖ��O��o�^
- *------------------------------------------
- */
-// �����̂ł���Δԍ��A������Γo�^���ĐV�K�ԍ�
-static int add_str(const unsigned char *p)
-{
-	int i;
-	char *lowcase;
-
-	lowcase=strdup(p);
-	for(i=0;lowcase[i];i++)
-		lowcase[i]=tolower(lowcase[i]);
-	if((i=search_str(lowcase))>=0){
-		free(lowcase);
-		return i;
-	}
-	free(lowcase);
-
-	i=calc_hash(p);
-	if(str_hash[i]==0){
-		str_hash[i]=str_num;
-	} else {
-		i=str_hash[i];
-		for(;;){
-			if(strcmp(str_buf+str_data[i].str,p)==0){
-				return i;
-			}
-			if(str_data[i].next==0)
-				break;
-			i=str_data[i].next;
-		}
-		str_data[i].next=str_num;
-	}
-	if(str_num>=str_data_size){
-		str_data_size+=128;
-		str_data=aRealloc(str_data,sizeof(str_data[0])*str_data_size);
-		memset(str_data + (str_data_size - 128), '\0', 128);
-	}
-	while(str_pos+strlen(p)+1>=str_size){
-		str_size+=256;
-		str_buf=(char *)aRealloc(str_buf,str_size);
-		memset(str_buf + (str_size - 256), '\0', 256);
-	}
-	strcpy(str_buf+str_pos,p);
-	str_data[str_num].type=C_NOP;
-	str_data[str_num].str=str_pos;
-	str_data[str_num].next=0;
-	str_data[str_num].func=NULL;
-	str_data[str_num].backpatch=-1;
-	str_data[str_num].label=-1;
-	str_pos+=strlen(p)+1;
-	return str_num++;
-}
-
-
-/*==========================================
- * �X�N���v�g�o�b�t�@�T�C�Y�̊m�F�Ɗg��
- *------------------------------------------
- */
-static void check_script_buf(int size)
-{
-	if(script_pos+size>=script_size){
-		script_size+=SCRIPT_BLOCK_SIZE;
-		script_buf=(char *)aRealloc(script_buf,script_size);
-		memset(script_buf + script_size - SCRIPT_BLOCK_SIZE, '\0',
-			SCRIPT_BLOCK_SIZE);
-	}
-}
-
-/*==========================================
- * �X�N���v�g�o�b�t�@�ɂP�o�C�g��������
- *------------------------------------------
- */
-static void add_scriptb(int a)
-{
-	check_script_buf(1);
-	script_buf[script_pos++]=a;
-}
-
-/*==========================================
- * �X�N���v�g�o�b�t�@�Ƀf�[�^�^�C�v����������
- *------------------------------------------
- */
-static void add_scriptc(int a)
-{
-	while(a>=0x40){
-		add_scriptb((a&0x3f)|0x40);
-		a=(a-0x40)>>6;
-	}
-	add_scriptb(a&0x3f);
-}
-
-/*==========================================
- * �X�N���v�g�o�b�t�@�ɐ�������������
- *------------------------------------------
- */
-static void add_scripti(int a)
-{
-	while(a>=0x40){
-		add_scriptb(a|0xc0);
-		a=(a-0x40)>>6;
-	}
-	add_scriptb(a|0x80);
-}
-
-/*==========================================
- * �X�N���v�g�o�b�t�@�Ƀ��x��/�ϐ�/�֐�����������
- *------------------------------------------
- */
-// �ő�16M�܂�
-static void add_scriptl(int l)
-{
-	int backpatch = str_data[l].backpatch;
-
-	switch(str_data[l].type){
-	case C_POS:
-		add_scriptc(C_POS);
-		add_scriptb(str_data[l].label);
-		add_scriptb(str_data[l].label>>8);
-		add_scriptb(str_data[l].label>>16);
-		break;
-	case C_NOP:
-		// ���x���̉”\��������̂�backpatch�p�f�[�^���ߍ���
-		add_scriptc(C_NAME);
-		str_data[l].backpatch=script_pos;
-		add_scriptb(backpatch);
-		add_scriptb(backpatch>>8);
-		add_scriptb(backpatch>>16);
-		break;
-	case C_INT:
-		add_scripti(str_data[l].val);
-		break;
-	default:
-		// �������̗p�r�Ɗm�肵�Ă�̂Ő��������̂܂�
-		add_scriptc(C_NAME);
-		add_scriptb(l);
-		add_scriptb(l>>8);
-		add_scriptb(l>>16);
-		break;
-	}
-}
-
-/*==========================================
- * ���x������������
- *------------------------------------------
- */
-void set_label(int l,int pos)
-{
-	int i,next;
-
-	str_data[l].type=C_POS;
-	str_data[l].label=pos;
-	for(i=str_data[l].backpatch;i>=0 && i!=0x00ffffff;){
-		next=(*(int*)(script_buf+i)) & 0x00ffffff;
-		script_buf[i-1]=C_POS;
-		script_buf[i]=pos;
-		script_buf[i+1]=pos>>8;
-		script_buf[i+2]=pos>>16;
-		i=next;
-	}
-}
-
-/*==========================================
- * �X�y�[�X/�R�����g�ǂݔ�΂�
- *------------------------------------------
- */
-static unsigned char *skip_space(unsigned char *p)
-{
-	while(1){
-		while(isspace(*p))
-			p++;
-		if(p[0]=='/' && p[1]=='/'){
-			while(*p && *p!='\n')
-				p++;
-		} else if(p[0]=='/' && p[1]=='*'){
-			p++;
-			while(*p && (p[-1]!='*' || p[0]!='/'))
-				p++;
-			if(*p) p++;
-		} else
-			break;
-	}
-	return p;
-}
-
-/*==========================================
- * �P�P��X�L�b�v
- *------------------------------------------
- */
-static unsigned char *skip_word(unsigned char *p)
-{
-	// prefix
-	if(*p=='$') p++;	// MAP�I�����L�ϐ��p
-	if(*p=='@') p++;	// �ꎞ�I�ϐ��p(like weiss)
-	if(*p=='#') p++;	// account�ϐ��p
-	if(*p=='#') p++;	// ���[���haccount�ϐ��p
-	if(*p=='l') p++;	// �ꎞ�I�ϐ��p(like weiss)
-
-	while(isalnum(*p)||*p=='_'|| *p>=0x81)
-		if(*p>=0x81 && p[1]){
-			p+=2;
-		} else
-			p++;
-
-	// postfix
-	if(*p=='$') p++;	// ������ϐ�
-
-	return p;
-}
-
-static unsigned char *startptr;
-static int startline;
-
-/*==========================================
- * �G���[���b�Z�[�W�o��
- *------------------------------------------
- */
-static void disp_error_message(const char *mes,const unsigned char *pos)
-{
-	int line,c=0,i;
-	unsigned char *p,*linestart,*lineend;
-
-	for(line=startline,p=startptr;p && *p;line++){
-		linestart=p;
-		lineend=strchr(p,'\n');
-		if(lineend){
-			c=*lineend;
-			*lineend=0;
-		}
-		if(lineend==NULL || pos<lineend){
-			printf("%s line %d : ",mes,line);
-			for(i=0;(linestart[i]!='\r') && (linestart[i]!='\n') && linestart[i];i++){
-				if(linestart+i!=pos)
-					printf("%c",linestart[i]);
-				else
-					printf("\'%c\'",linestart[i]);
-			}
-			printf("\a\n");
-			if(lineend)
-				*lineend=c;
-			return;
-		}
-		*lineend=c;
-		p=lineend+1;
-	}
-}
-
-/*==========================================
- * ���̉��
- *------------------------------------------
- */
-unsigned char* parse_simpleexpr(unsigned char *p)
-{
-	int i;
-	p=skip_space(p);
-
-#ifdef DEBUG_FUNCIN
-	if(battle_config.etc_log)
-		printf("parse_simpleexpr %s\n",p);
-#endif
-	if(*p==';' || *p==','){
-		disp_error_message("unexpected expr end",p);
-		exit(1);
-	}
-	if(*p=='('){
-
-		p=parse_subexpr(p+1,-1);
-		p=skip_space(p);
-		if((*p++)!=')'){
-			disp_error_message("unmatch ')'",p);
-			exit(1);
-		}
-	} else if(isdigit(*p) || ((*p=='-' || *p=='+') && isdigit(p[1]))){
-		char *np;
-		i=strtoul(p,&np,0);
-		add_scripti(i);
-		p=np;
-	} else if(*p=='"'){
-		add_scriptc(C_STR);
-		p++;
-		while(*p && *p!='"'){
-			if(p[-1]<=0x7e && *p=='\\')
-				p++;
-			else if(*p=='\n'){
-				disp_error_message("unexpected newline @ string",p);
-				exit(1);
-			}
-			add_scriptb(*p++);
-		}
-		if(!*p){
-			disp_error_message("unexpected eof @ string",p);
-			exit(1);
-		}
-		add_scriptb(0);
-		p++;	//'"'
-	} else {
-		int c,l;
-		char *p2;
-		// label , register , function etc
-		if(skip_word(p)==p){
-			disp_error_message("unexpected character",p);
-			exit(1);
-		}
-		p2=skip_word(p);
-		c=*p2;	*p2=0;	// ���O��add_str����
-		l=add_str(p);
-
-		parse_cmd=l;	// warn_*_mismatch_paramnum�̂��߂ɕK�v
-		if(l==search_str("if"))	// warn_cmd_no_comma�̂��߂ɕK�v
-			parse_cmd_if++;
-/*
-		// �p�~�\���l14/l15,����уv���t�B�b�N�X���̌x��
-		if(	strcmp(str_buf+str_data[l].str,"l14")==0 ||
-			strcmp(str_buf+str_data[l].str,"l15")==0 ){
-			disp_error_message("l14 and l15 is DEPRECATED. use @menu instead of l15.",p);
-		}else if(str_buf[str_data[l].str]=='l'){
-			disp_error_message("prefix 'l' is DEPRECATED. use prefix '@' instead.",p2);
-		}
-*/
-		*p2=c;	p=p2;
-
-		if(str_data[l].type!=C_FUNC && c=='['){
-			// array(name[i] => getelementofarray(name,i) )
-			add_scriptl(search_str("getelementofarray"));
-			add_scriptc(C_ARG);
-			add_scriptl(l);
-			p=parse_subexpr(p+1,-1);
-			p=skip_space(p);
-			if((*p++)!=']'){
-				disp_error_message("unmatch ']'",p);
-				exit(1);
-			}
-			add_scriptc(C_FUNC);
-		}else
-			add_scriptl(l);
-
-	}
-
-#ifdef DEBUG_FUNCIN
-	if(battle_config.etc_log)
-		printf("parse_simpleexpr end %s\n",p);
-#endif
-	return p;
-}
-
-/*==========================================
- * ���̉��
- *------------------------------------------
- */
-unsigned char* parse_subexpr(unsigned char *p,int limit)
-{
-	int op,opl,len;
-	char *tmpp;
-
-#ifdef DEBUG_FUNCIN
-	if(battle_config.etc_log)
-		printf("parse_subexpr %s\n",p);
-#endif
-	p=skip_space(p);
-
-	if(*p=='-'){
-		tmpp=skip_space(p+1);
-		if(*tmpp==';' || *tmpp==','){
-			add_scriptl(LABEL_NEXTLINE);
-			p++;
-			return p;
-		}
-	}
-	tmpp=p;
-	if((op=C_NEG,*p=='-') || (op=C_LNOT,*p=='!') || (op=C_NOT,*p=='~')){
-		p=parse_subexpr(p+1,100);
-		add_scriptc(op);
-	} else
-		p=parse_simpleexpr(p);
-	p=skip_space(p);
-	while(((op=C_ADD,opl=6,len=1,*p=='+') ||
-		   (op=C_SUB,opl=6,len=1,*p=='-') ||
-		   (op=C_MUL,opl=7,len=1,*p=='*') ||
-		   (op=C_DIV,opl=7,len=1,*p=='/') ||
-		   (op=C_MOD,opl=7,len=1,*p=='%') ||
-		   (op=C_FUNC,opl=8,len=1,*p=='(') ||
-		   (op=C_LAND,opl=1,len=2,*p=='&' && p[1]=='&') ||
-		   (op=C_AND,opl=5,len=1,*p=='&') ||
-		   (op=C_LOR,opl=0,len=2,*p=='|' && p[1]=='|') ||
-		   (op=C_OR,opl=4,len=1,*p=='|') ||
-		   (op=C_XOR,opl=3,len=1,*p=='^') ||
-		   (op=C_EQ,opl=2,len=2,*p=='=' && p[1]=='=') ||
-		   (op=C_NE,opl=2,len=2,*p=='!' && p[1]=='=') ||
-		   (op=C_R_SHIFT,opl=5,len=2,*p=='>' && p[1]=='>') ||
-		   (op=C_GE,opl=2,len=2,*p=='>' && p[1]=='=') ||
-		   (op=C_GT,opl=2,len=1,*p=='>') ||
-		   (op=C_L_SHIFT,opl=5,len=2,*p=='<' && p[1]=='<') ||
-		   (op=C_LE,opl=2,len=2,*p=='<' && p[1]=='=') ||
-		   (op=C_LT,opl=2,len=1,*p=='<')) && opl>limit){
-		p+=len;
-		if(op==C_FUNC){
-			int i=0,func=parse_cmd;
-			const char *plist[128];
-
-			if( str_data[func].type!=C_FUNC ){
-				disp_error_message("expect function",tmpp);
-				exit(0);
-			}
-
-			add_scriptc(C_ARG);
-			do {
-				plist[i]=p;
-				p=parse_subexpr(p,-1);
-				p=skip_space(p);
-				if(*p==',') p++;
-				else if(*p!=')' && script_config.warn_func_no_comma){
-					disp_error_message("expect ',' or ')' at func params",p);
-				}
-				p=skip_space(p);
-				i++;
-			} while(*p && *p!=')' && i<128);
-			plist[i]=p;
-			if(*(p++)!=')'){
-				disp_error_message("func request '(' ')'",p);
-				exit(1);
-			}
-
-			if( str_data[func].type==C_FUNC && script_config.warn_func_mismatch_paramnum){
-				const char *arg=buildin_func[str_data[func].val].arg;
-				int j=0;
-				for(j=0;arg[j];j++) if(arg[j]=='*')break;
-				if( (arg[j]==0 && i!=j) || (arg[j]=='*' && i<j) ){
-					disp_error_message("illegal number of parameters",plist[(i<j)?i:j]);
-				}
-			}
-		} else {
-			p=parse_subexpr(p,opl);
-		}
-		add_scriptc(op);
-		p=skip_space(p);
-	}
-#ifdef DEBUG_FUNCIN
-	if(battle_config.etc_log)
-		printf("parse_subexpr end %s\n",p);
-#endif
-	return p;  /* return first untreated operator */
-}
-
-/*==========================================
- * ���̕]��
- *------------------------------------------
- */
-unsigned char* parse_expr(unsigned char *p)
-{
-#ifdef DEBUG_FUNCIN
-	if(battle_config.etc_log)
-		printf("parse_expr %s\n",p);
-#endif
-	switch(*p){
-	case ')': case ';': case ':': case '[': case ']':
-	case '}':
-		disp_error_message("unexpected char",p);
-		exit(1);
-	}
-	p=parse_subexpr(p,-1);
-#ifdef DEBUG_FUNCIN
-	if(battle_config.etc_log)
-		printf("parse_expr end %s\n",p);
-#endif
-	return p;
-}
-
-/*==========================================
- * �s�̉��
- *------------------------------------------
- */
-unsigned char* parse_line(unsigned char *p)
-{
-	int i=0,cmd;
-	const char *plist[128];
-	char *p2;
-
-	p=skip_space(p);
-	if(*p==';')
-		return p;
-
-	parse_cmd_if=0;	// warn_cmd_no_comma�̂��߂ɕK�v
-
-	// �ŏ��͊֐���
-	p2=p;
-	p=parse_simpleexpr(p);
-	p=skip_space(p);
-
-	cmd=parse_cmd;
-	if( str_data[cmd].type!=C_FUNC ){
-		disp_error_message("expect command",p2);
-//		exit(0);
-	}
-
-	add_scriptc(C_ARG);
-	while(p && *p && *p!=';' && i<128){
-		plist[i]=p;
-
-		p=parse_expr(p);
-		p=skip_space(p);
-		// ������؂��,����
-		if(*p==',') p++;
-		else if(*p!=';' && script_config.warn_cmd_no_comma && parse_cmd_if*2<=i ){
-			disp_error_message("expect ',' or ';' at cmd params",p);
-		}
-		p=skip_space(p);
-		i++;
-	}
-	plist[i]=p;
-	if(!p || *(p++)!=';'){
-		disp_error_message("need ';'",p);
-		exit(1);
-	}
-	add_scriptc(C_FUNC);
-
-	if( str_data[cmd].type==C_FUNC && script_config.warn_cmd_mismatch_paramnum){
-		const char *arg=buildin_func[str_data[cmd].val].arg;
-		int j=0;
-		for(j=0;arg[j];j++) if(arg[j]=='*')break;
-		if( (arg[j]==0 && i!=j) || (arg[j]=='*' && i<j) ){
-			disp_error_message("illegal number of parameters",plist[(i<j)?i:j]);
-		}
-	}
-
-
-	return p;
-}
-
-/*==========================================
- * �g�ݍ��݊֐��̒lj�
- *------------------------------------------
- */
-static void add_buildin_func(void)
-{
-	int i,n;
-	for(i=0;buildin_func[i].func;i++){
-		n=add_str(buildin_func[i].name);
-		str_data[n].type=C_FUNC;
-		str_data[n].val=i;
-		str_data[n].func=buildin_func[i].func;
-	}
-}
-
-/*==========================================
- * �萔�f�[�^�x�[�X�̓ǂݍ���
- *------------------------------------------
- */
-static void read_constdb(void)
-{
-	FILE *fp;
-	char line[1024],name[1024];
-	int val,n,i,type;
-
-	fp=fopen("db/const.txt","r");
-	if(fp==NULL){
-		printf("can't read db/const.txt\n");
-		return ;
-	}
-	while(fgets(line,1020,fp)){
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		type=0;
-		if(sscanf(line,"%[A-Za-z0-9_],%d,%d",name,&val,&type)>=2 ||
-		   sscanf(line,"%[A-Za-z0-9_] %d %d",name,&val,&type)>=2){
-			for(i=0;name[i];i++)
-				name[i]=tolower(name[i]);
-			n=add_str(name);
-			if(type==0)
-				str_data[n].type=C_INT;
-			else
-				str_data[n].type=C_PARAM;
-			str_data[n].val=val;
-		}
-	}
-	fclose(fp);
-}
-
-/*==========================================
- * �X�N���v�g�̉��
- *------------------------------------------
- */
-unsigned char* parse_script(unsigned char *src,int line)
-{
-	unsigned char *p,*tmpp;
-	int i;
-	static int first=1;
-
-	if(first){
-		add_buildin_func();
-		read_constdb();
-	}
-	first=0;
-	script_buf=(unsigned char *)aCalloc(SCRIPT_BLOCK_SIZE,sizeof(unsigned char));
-	script_pos=0;
-	script_size=SCRIPT_BLOCK_SIZE;
-	str_data[LABEL_NEXTLINE].type=C_NOP;
-	str_data[LABEL_NEXTLINE].backpatch=-1;
-	str_data[LABEL_NEXTLINE].label=-1;
-	for(i=LABEL_START;i<str_num;i++){
-		if(str_data[i].type==C_POS || str_data[i].type==C_NAME){
-			str_data[i].type=C_NOP;
-			str_data[i].backpatch=-1;
-			str_data[i].label=-1;
-		}
-	}
-
-	// �O���plabel db�̏�����
-	if(scriptlabel_db!=NULL)
-		strdb_final(scriptlabel_db,scriptlabel_final);
-	scriptlabel_db=strdb_init(50);
-
-	// for error message
-	startptr = src;
-	startline = line;
-
-	p=src;
-	p=skip_space(p);
-	if(*p!='{'){
-		disp_error_message("not found '{'",p);
-		return NULL;
-	}
-	for(p++;p && *p && *p!='}';){
-		p=skip_space(p);
-		// label�������ꏈ��
-		tmpp=skip_space(skip_word(p));
-		if(*tmpp==':'){
-			int l,c;
-
-			c=*skip_word(p);
-			*skip_word(p)=0;
-			l=add_str(p);
-			if(str_data[l].label!=-1){
-				*skip_word(p)=c;
-				disp_error_message("dup label ",p);
-				exit(1);
-			}
-			set_label(l,script_pos);
-			strdb_insert(scriptlabel_db,p,script_pos);	// �O���plabel db�o�^
-			*skip_word(p)=c;
-			p=tmpp+1;
-			continue;
-		}
-
-		// ���͑S���ꏏ����
-		p=parse_line(p);
-		p=skip_space(p);
-		add_scriptc(C_EOL);
-
-		set_label(LABEL_NEXTLINE,script_pos);
-		str_data[LABEL_NEXTLINE].type=C_NOP;
-		str_data[LABEL_NEXTLINE].backpatch=-1;
-		str_data[LABEL_NEXTLINE].label=-1;
-	}
-
-	add_scriptc(C_NOP);
-
-	script_size = script_pos;
-	script_buf=(char *)aRealloc(script_buf,script_pos + 1);
-
-	// �������̃��x��������
-	for(i=LABEL_START;i<str_num;i++){
-		if(str_data[i].type==C_NOP){
-			int j,next;
-			str_data[i].type=C_NAME;
-			str_data[i].label=i;
-			for(j=str_data[i].backpatch;j>=0 && j!=0x00ffffff;){
-				next=(*(int*)(script_buf+j)) & 0x00ffffff;
-				script_buf[j]=i;
-				script_buf[j+1]=i>>8;
-				script_buf[j+2]=i>>16;
-				j=next;
-			}
-		}
-	}
-
-#ifdef DEBUG_DISP
-	for(i=0;i<script_pos;i++){
-		if((i&15)==0) printf("%04x : ",i);
-		printf("%02x ",script_buf[i]);
-		if((i&15)==15) printf("\n");
-	}
-	printf("\n");
-#endif
-
-	return script_buf;
-}
-
-//
-// ���s�n
-//
-enum {STOP=1,END,RERUNLINE,GOTO,RETFUNC};
-
-/*==========================================
- * rid����sd�ւ̉���
- *------------------------------------------
- */
-struct map_session_data *script_rid2sd(struct script_state *st)
-{
-	struct map_session_data *sd=map_id2sd(st->rid);
-	if(!sd){
-		printf("script_rid2sd: fatal error ! player not attached!\n");
-	}
-	return sd;
-}
-
-
-/*==========================================
- * �ϐ��̓ǂݎ��
- *------------------------------------------
- */
-int get_val(struct script_state*st,struct script_data* data)
-{
-	struct map_session_data *sd=NULL;
-	if(data->type==C_NAME){
-		char *name=str_buf+str_data[data->u.num&0x00ffffff].str;
-		char prefix=*name;
-		char postfix=name[strlen(name)-1];
-
-		if(prefix!='$'){
-			if((sd=script_rid2sd(st))==NULL)
-				printf("get_val error name?:%s\n",name);
-		}
-		if(postfix=='$'){
-
-			data->type=C_CONSTSTR;
-			if( prefix=='@' || prefix=='l' ){
-				if(sd)
-				data->u.str = pc_readregstr(sd,data->u.num);
-			}else if(prefix=='$'){
-				data->u.str = (char *)numdb_search(mapregstr_db,data->u.num);
-			}else{
-				printf("script: get_val: illegal scope string variable.\n");
-				data->u.str = "!!ERROR!!";
-			}
-			if( data->u.str == NULL )
-				data->u.str ="";
-
-		}else{
-
-			data->type=C_INT;
-			if(str_data[data->u.num&0x00ffffff].type==C_INT){
-				data->u.num = str_data[data->u.num&0x00ffffff].val;
-			}else if(str_data[data->u.num&0x00ffffff].type==C_PARAM){
-				if(sd)
-				data->u.num = pc_readparam(sd,str_data[data->u.num&0x00ffffff].val);
-			}else if(prefix=='@' || prefix=='l'){
-				if(sd)
-				data->u.num = pc_readreg(sd,data->u.num);
-			}else if(prefix=='$'){
-				data->u.num = (int)numdb_search(mapreg_db,data->u.num);
-			}else if(prefix=='#'){
-				if( name[1]=='#'){
-					if(sd)
-					data->u.num = pc_readaccountreg2(sd,name);
-				}else{
-					if(sd)
-					data->u.num = pc_readaccountreg(sd,name);
-				}
-			}else{
-				if(sd)
-				data->u.num = pc_readglobalreg(sd,name);
-			}
-		}
-	}
-	return 0;
-}
-/*==========================================
- * �ϐ��̓ǂݎ��2
- *------------------------------------------
- */
-void* get_val2(struct script_state*st,int num)
-{
-	struct script_data dat;
-	dat.type=C_NAME;
-	dat.u.num=num;
-	get_val(st,&dat);
-	if( dat.type==C_INT ) return (void*)dat.u.num;
-	else return (void*)dat.u.str;
-}
-
-/*==========================================
- * �ϐ��ݒ�p
- *------------------------------------------
- */
-static int set_reg(struct map_session_data *sd,int num,char *name,void *v)
-{
-	char prefix=*name;
-	char postfix=name[strlen(name)-1];
-
-	if( postfix=='$' ){
-		char *str=(char*)v;
-		if( prefix=='@' || prefix=='l'){
-			pc_setregstr(sd,num,str);
-		}else if(prefix=='$') {
-			mapreg_setregstr(num,str);
-		}else{
-			printf("script: set_reg: illegal scope string variable !");
-		}
-	}else{
-		// ���l
-		int val = (int)v;
-		if(str_data[num&0x00ffffff].type==C_PARAM){
-			pc_setparam(sd,str_data[num&0x00ffffff].val,val);
-		}else if(prefix=='@' || prefix=='l') {
-			pc_setreg(sd,num,val);
-		}else if(prefix=='$') {
-			mapreg_setreg(num,val);
-		}else if(prefix=='#') {
-			if( name[1]=='#' )
-				pc_setaccountreg2(sd,name,val);
-			else
-				pc_setaccountreg(sd,name,val);
-		}else{
-			pc_setglobalreg(sd,name,val);
-		}
-	}
-	return 0;
-}
-
-/*==========================================
- * ������ւ̕ϊ�
- *------------------------------------------
- */
-char* conv_str(struct script_state *st,struct script_data *data)
-{
-	get_val(st,data);
-	if(data->type==C_INT){
-		char *buf;
-		buf=(char *)aCalloc(16,sizeof(char));
-		sprintf(buf,"%d",data->u.num);
-		data->type=C_STR;
-		data->u.str=buf;
-#if 1
-	} else if(data->type==C_NAME){
-		// �e���|�����B�{�������͂�
-		data->type=C_CONSTSTR;
-		data->u.str=str_buf+str_data[data->u.num].str;
-#endif
-	}
-	return data->u.str;
-}
-
-/*==========================================
- * ���l�֕ϊ�
- *------------------------------------------
- */
-int conv_num(struct script_state *st,struct script_data *data)
-{
-	char *p;
-	get_val(st,data);
-	if(data->type==C_STR || data->type==C_CONSTSTR){
-		p=data->u.str;
-		data->u.num = atoi(p);
-		if(data->type==C_STR)
-			free(p);
-		data->type=C_INT;
-	}
-	return data->u.num;
-}
-
-/*==========================================
- * �X�^�b�N�֐��l���v�b�V��
- *------------------------------------------
- */
-void push_val(struct script_stack *stack,int type,int val)
-{
-	if(stack->sp >= stack->sp_max){
-		stack->sp_max += 64;
-		stack->stack_data = (struct script_data *)aRealloc(stack->stack_data,
-			sizeof(stack->stack_data[0]) * stack->sp_max);
-		memset(stack->stack_data + (stack->sp_max - 64), 0,
-			64 * sizeof(*(stack->stack_data)));
-	}
-//	if(battle_config.etc_log)
-//		printf("push (%d,%d)-> %d\n",type,val,stack->sp);
-	stack->stack_data[stack->sp].type=type;
-	stack->stack_data[stack->sp].u.num=val;
-	stack->sp++;
-}
-
-/*==========================================
- * �X�^�b�N�֕�������v�b�V��
- *------------------------------------------
- */
-void push_str(struct script_stack *stack,int type,unsigned char *str)
-{
-	if(stack->sp>=stack->sp_max){
-		stack->sp_max += 64;
-		stack->stack_data = (struct script_data *)aRealloc(stack->stack_data,
-			sizeof(stack->stack_data[0]) * stack->sp_max);
-		memset(stack->stack_data + (stack->sp_max - 64), '\0',
-			64 * sizeof(*(stack->stack_data)));
-	}
-//	if(battle_config.etc_log)
-//		printf("push (%d,%x)-> %d\n",type,str,stack->sp);
-	stack->stack_data[stack->sp].type=type;
-	stack->stack_data[stack->sp].u.str=str;
-	stack->sp++;
-}
-
-/*==========================================
- * �X�^�b�N�֕������v�b�V��
- *------------------------------------------
- */
-void push_copy(struct script_stack *stack,int pos)
-{
-	switch(stack->stack_data[pos].type){
-	case C_CONSTSTR:
-		push_str(stack,C_CONSTSTR,stack->stack_data[pos].u.str);
-		break;
-	case C_STR:
-		push_str(stack,C_STR,strdup(stack->stack_data[pos].u.str));
-		break;
-	default:
-		push_val(stack,stack->stack_data[pos].type,stack->stack_data[pos].u.num);
-		break;
-	}
-}
-
-/*==========================================
- * �X�^�b�N����|�b�v
- *------------------------------------------
- */
-void pop_stack(struct script_stack* stack,int start,int end)
-{
-	int i;
-	for(i=start;i<end;i++){
-		if(stack->stack_data[i].type==C_STR){
-			free(stack->stack_data[i].u.str);
-		}
-	}
-	if(stack->sp>end){
-		memmove(&stack->stack_data[start],&stack->stack_data[end],sizeof(stack->stack_data[0])*(stack->sp-end));
-	}
-	stack->sp-=end-start;
-}
-
-//
-// ���ߍ��݊֐�
-//
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_mes(struct script_state *st)
-{
-	conv_str(st,& (st->stack->stack_data[st->start+2]));
-	clif_scriptmes(script_rid2sd(st),st->oid,st->stack->stack_data[st->start+2].u.str);
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_goto(struct script_state *st)
-{
-	int pos;
-
-	if( st->stack->stack_data[st->start+2].type!=C_POS ){
-		printf("script: goto: not label !\n");
-		st->state=END;
-		return 0;
-	}
-
-	pos=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	st->pos=pos;
-	st->state=GOTO;
-	return 0;
-}
-
-/*==========================================
- * ���[�U�[��`�֐��̌Ăяo��
- *------------------------------------------
- */
-int buildin_callfunc(struct script_state *st)
-{
-	char *scr;
-	char *str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-
-	if( (scr=strdb_search(script_get_userfunc_db(),str)) ){
-		int i,j;
-		for(i=st->start+3,j=0;i<st->end;i++,j++)
-			push_copy(st->stack,i);
-
-		push_val(st->stack,C_INT,j);				// �����̐����v�b�V��
-		push_val(st->stack,C_INT,st->defsp);	// ���݂̊�X�^�b�N�|�C���^���v�b�V��
-		push_val(st->stack,C_INT,(int)st->script);	// ���݂̃X�N���v�g���v�b�V��
-		push_val(st->stack,C_RETINFO,st->pos);		// ���݂̃X�N���v�g�ʒu���v�b�V��
-
-		st->pos=0;
-		st->script=scr;
-		st->defsp=st->start+4+j;
-		st->state=GOTO;
-	}else{
-		printf("script:callfunc: function not found! [%s]\n",str);
-		st->state=END;
-	}
-	return 0;
-}
-/*==========================================
- * �T�u���[�e�B���̌Ăяo��
- *------------------------------------------
- */
-int buildin_callsub(struct script_state *st)
-{
-	int pos=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	int i,j;
-	for(i=st->start+3,j=0;i<st->end;i++,j++)
-		push_copy(st->stack,i);
-
-	push_val(st->stack,C_INT,j);				// �����̐����v�b�V��
-	push_val(st->stack,C_INT,st->defsp);	// ���݂̊�X�^�b�N�|�C���^���v�b�V��
-	push_val(st->stack,C_INT,(int)st->script);	// ���݂̃X�N���v�g���v�b�V��
-	push_val(st->stack,C_RETINFO,st->pos);		// ���݂̃X�N���v�g�ʒu���v�b�V��
-
-	st->pos=pos;
-	st->defsp=st->start+4+j;
-	st->state=GOTO;
-	return 0;
-}
-
-/*==========================================
- * �����̏���
- *------------------------------------------
- */
-int buildin_getarg(struct script_state *st)
-{
-	int num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	int max,stsp;
-	if( st->defsp<4 || st->stack->stack_data[st->defsp-1].type!=C_RETINFO ){
-		printf("script:getarg without callfunc or callsub!\n");
-		st->state=END;
-		return 0;
-	}
-	max=conv_num(st,& (st->stack->stack_data[st->defsp-4]));
-	stsp=st->defsp - max -4;
-	if( num >= max ){
-		printf("script:getarg arg1(%d) out of range(%d) !\n",num,max);
-		st->state=END;
-		return 0;
-	}
-	push_copy(st->stack,stsp+num);
-	return 0;
-}
-
-/*==========================================
- * �T�u���[�`��/���[�U�[��`�֐��̏I��
- *------------------------------------------
- */
-int buildin_return(struct script_state *st)
-{
-	if(st->end>st->start+2){	// �߂�l�L��
-		push_copy(st->stack,st->start+2);
-	}
-	st->state=RETFUNC;
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_next(struct script_state *st)
-{
-	st->state=STOP;
-	clif_scriptnext(script_rid2sd(st),st->oid);
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_close(struct script_state *st)
-{
-	st->state=END;
-	clif_scriptclose(script_rid2sd(st),st->oid);
-	return 0;
-}
-int buildin_close2(struct script_state *st)
-{
-	st->state=STOP;
-	clif_scriptclose(script_rid2sd(st),st->oid);
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_menu(struct script_state *st)
-{
-	char *buf;
-	int len,i;
-	struct map_session_data *sd;
-	
-	sd=script_rid2sd(st);
-
-	if(sd->state.menu_or_input==0){
-		st->state=RERUNLINE;
-		sd->state.menu_or_input=1;
-		for(i=st->start+2,len=16;i<st->end;i+=2){
-			conv_str(st,& (st->stack->stack_data[i]));
-			len+=strlen(st->stack->stack_data[i].u.str)+1;
-		}
-		buf=(char *)aCalloc(len,sizeof(char));
-		buf[0]=0;
-		for(i=st->start+2,len=0;i<st->end;i+=2){
-			strcat(buf,st->stack->stack_data[i].u.str);
-			strcat(buf,":");
-		}
-		clif_scriptmenu(script_rid2sd(st),st->oid,buf);
-		free(buf);
-	} else if(sd->npc_menu==0xff){	// cansel
-		sd->state.menu_or_input=0;
-		st->state=END;
-	} else {	// goto����
-		// ragemu�݊��̂���
-		pc_setreg(sd,add_str("l15"),sd->npc_menu);
-		pc_setreg(sd,add_str("@menu"),sd->npc_menu);
-		sd->state.menu_or_input=0;
-		if(sd->npc_menu>0 && sd->npc_menu<(st->end-st->start)/2){
-			int pos;
-			if( st->stack->stack_data[st->start+sd->npc_menu*2+1].type!=C_POS ){
-				printf("script: menu: not label !\n");
-				st->state=END;
-				return 0;
-			}
-			pos=conv_num(st,& (st->stack->stack_data[st->start+sd->npc_menu*2+1]));
-			st->pos=pos;
-			st->state=GOTO;
-		}
-	}
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_rand(struct script_state *st)
-{
-	int range,min,max;
-
-	if(st->end>st->start+3){
-		min=conv_num(st,& (st->stack->stack_data[st->start+2]));
-		max=conv_num(st,& (st->stack->stack_data[st->start+3]));
-		if(max<min){
-			int tmp;
-			tmp=min;
-			min=max;
-			max=tmp;
-		}
-		range=max-min+1;
-		push_val(st->stack,C_INT,rand()%range+min);
-	} else {
-		range=conv_num(st,& (st->stack->stack_data[st->start+2]));
-		push_val(st->stack,C_INT,rand()%range);
-	}
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_warp(struct script_state *st)
-{
-	int x,y;
-	char *str;
-	struct map_session_data *sd=script_rid2sd(st);
-
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	x=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	y=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	if(strcmp(str,"Random")==0)
-		pc_randomwarp(sd,3);
-	else if(strcmp(str,"SavePoint")==0){
-		if(map[sd->bl.m].flag.noreturn)	// ���֎~
-			return 0;
-
-		pc_setpos(sd,sd->status.save_point.map,
-			sd->status.save_point.x,sd->status.save_point.y,3);
-	}else if(strcmp(str,"Save")==0){
-		if(map[sd->bl.m].flag.noreturn)	// ���֎~
-			return 0;
-
-		pc_setpos(sd,sd->status.save_point.map,
-			sd->status.save_point.x,sd->status.save_point.y,3);
-	}else
-		pc_setpos(sd,str,x,y,0);
-	return 0;
-}
-/*==========================================
- * �G���A�w�胏�[�v
- *------------------------------------------
- */
-int buildin_areawarp_sub(struct block_list *bl,va_list ap)
-{
-	int x,y;
-	char *map;
-	map=va_arg(ap, char *);
-	x=va_arg(ap,int);
-	y=va_arg(ap,int);
-	if(strcmp(map,"Random")==0)
-		pc_randomwarp((struct map_session_data *)bl,3);
-	else
-		pc_setpos((struct map_session_data *)bl,map,x,y,0);
-	return 0;
-}
-int buildin_areawarp(struct script_state *st)
-{
-	int x,y,m;
-	char *str;
-	char *mapname;
-	int x0,y0,x1,y1;
-
-	mapname=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	x0=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	y0=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	x1=conv_num(st,& (st->stack->stack_data[st->start+5]));
-	y1=conv_num(st,& (st->stack->stack_data[st->start+6]));
-	str=conv_str(st,& (st->stack->stack_data[st->start+7]));
-	x=conv_num(st,& (st->stack->stack_data[st->start+8]));
-	y=conv_num(st,& (st->stack->stack_data[st->start+9]));
-
-	if( (m=map_mapname2mapid(mapname))< 0)
-		return 0;
-
-	map_foreachinarea(buildin_areawarp_sub,
-		m,x0,y0,x1,y1,BL_PC,	str,x,y );
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_heal(struct script_state *st)
-{
-	int hp,sp;
-
-	hp=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sp=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	pc_heal(script_rid2sd(st),hp,sp);
-	return 0;
-}
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_itemheal(struct script_state *st)
-{
-	int hp,sp;
-
-	hp=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sp=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	pc_itemheal(script_rid2sd(st),hp,sp);
-	return 0;
-}
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_percentheal(struct script_state *st)
-{
-	int hp,sp;
-
-	hp=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sp=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	pc_percentheal(script_rid2sd(st),hp,sp);
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_jobchange(struct script_state *st)
-{
-	int job, upper=-1;
-
-	job=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	if( st->end>st->start+3 )
-		upper=conv_num(st,& (st->stack->stack_data[st->start+3]));
-
-	if ((job >= 0 && job < MAX_PC_CLASS))
-		pc_jobchange(script_rid2sd(st),job, upper);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_input(struct script_state *st)
-{
-	struct map_session_data *sd=NULL;
-	int num=(st->end>st->start+2)?st->stack->stack_data[st->start+2].u.num:0;
-	char *name=(st->end>st->start+2)?str_buf+str_data[num&0x00ffffff].str:"";
-//	char prefix=*name;
-	char postfix=name[strlen(name)-1];
-
-	sd=script_rid2sd(st);
-	if(sd->state.menu_or_input){
-		sd->state.menu_or_input=0;
-		if( postfix=='$' ){
-			// ������
-			if(st->end>st->start+2){ // ����1��
-				set_reg(sd,num,name,(void*)sd->npc_str);
-			}else{
-				printf("buildin_input: string discarded !!\n");
-			}
-		}else{
-
-			//commented by Lupus (check Value Number Input fix in clif.c)
-			//** Fix by fritz :X keeps people from abusing old input bugs
-			if(sd->npc_amount < 0) //** If input amount is less then 0
-			{
-				clif_tradecancelled(sd);	// added "Deal has been cancelled" message by Valaris
-				buildin_close(st); //** close
-			}
-
-			// ���l
-			if(st->end>st->start+2){ // ����1��
-				set_reg(sd,num,name,(void*)sd->npc_amount);
-			} else {
-				// ragemu�݊��̂���
-				pc_setreg(sd,add_str("l14"),sd->npc_amount);
-			}
-		}
-	} else {
-		st->state=RERUNLINE;
-		if(postfix=='$')clif_scriptinputstr(sd,st->oid);
-		else			clif_scriptinput(sd,st->oid);
-		sd->state.menu_or_input=1;
-	}
-	return 0;
-}
-
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_if(struct script_state *st)
-{
-	int sel,i;
-
-	sel=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	if(!sel)
-		return 0;
-
-	// �֐������R�s�[
-	push_copy(st->stack,st->start+3);
-	// �ԂɈ����}�[�J������
-	push_val(st->stack,C_ARG,0);
-	// �c��̈������R�s�[
-	for(i=st->start+4;i<st->end;i++){
-		push_copy(st->stack,i);
-	}
-	run_func(st);
-
-	return 0;
-}
-
-
-/*==========================================
- * �ϐ��ݒ�
- *------------------------------------------
- */
-int buildin_set(struct script_state *st)
-{
-	struct map_session_data *sd=NULL;
-	int num=st->stack->stack_data[st->start+2].u.num;
-	char *name=str_buf+str_data[num&0x00ffffff].str;
-	char prefix=*name;
-	char postfix=name[strlen(name)-1];
-
-	if( st->stack->stack_data[st->start+2].type!=C_NAME ){
-		printf("script: buildin_set: not name\n");
-		return 0;
-	}
-
-	if( prefix!='$' )
-		sd=script_rid2sd(st);
-
-
-	if( postfix=='$' ){
-		// ������
-		char *str = conv_str(st,& (st->stack->stack_data[st->start+3]));
-		set_reg(sd,num,name,(void*)str);
-	}else{
-		// ���l
-		int val = conv_num(st,& (st->stack->stack_data[st->start+3]));
-		set_reg(sd,num,name,(void*)val);
-	}
-
-	return 0;
-}
-/*==========================================
- * �z��ϐ��ݒ�
- *------------------------------------------
- */
-int buildin_setarray(struct script_state *st)
-{
-	struct map_session_data *sd=NULL;
-	int num=st->stack->stack_data[st->start+2].u.num;
-	char *name=str_buf+str_data[num&0x00ffffff].str;
-	char prefix=*name;
-	char postfix=name[strlen(name)-1];
-	int i,j;
-
-	if( prefix!='$' && prefix!='@' ){
-		printf("buildin_setarray: illegal scope !\n");
-		return 0;
-	}
-	if( prefix!='$' )
-		sd=script_rid2sd(st);
-
-	for(j=0,i=st->start+3; i<st->end && j<128;i++,j++){
-		void *v;
-		if( postfix=='$' )
-			v=(void*)conv_str(st,& (st->stack->stack_data[i]));
-		else
-			v=(void*)conv_num(st,& (st->stack->stack_data[i]));
-		set_reg( sd, num+(j<<24), name, v);
-	}
-	return 0;
-}
-/*==========================================
- * �z��ϐ��N���A
- *------------------------------------------
- */
-int buildin_cleararray(struct script_state *st)
-{
-	struct map_session_data *sd=NULL;
-	int num=st->stack->stack_data[st->start+2].u.num;
-	char *name=str_buf+str_data[num&0x00ffffff].str;
-	char prefix=*name;
-	char postfix=name[strlen(name)-1];
-	int sz=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	int i;
-	void *v;
-
-	if( prefix!='$' && prefix!='@' ){
-		printf("buildin_cleararray: illegal scope !\n");
-		return 0;
-	}
-	if( prefix!='$' )
-		sd=script_rid2sd(st);
-
-	if( postfix=='$' )
-		v=(void*)conv_str(st,& (st->stack->stack_data[st->start+3]));
-	else
-		v=(void*)conv_num(st,& (st->stack->stack_data[st->start+3]));
-
-	for(i=0;i<sz;i++)
-		set_reg(sd,num+(i<<24),name,v);
-	return 0;
-}
-/*==========================================
- * �z��ϐ��R�s�[
- *------------------------------------------
- */
-int buildin_copyarray(struct script_state *st)
-{
-	struct map_session_data *sd=NULL;
-	int num=st->stack->stack_data[st->start+2].u.num;
-	char *name=str_buf+str_data[num&0x00ffffff].str;
-	char prefix=*name;
-	char postfix=name[strlen(name)-1];
-	int num2=st->stack->stack_data[st->start+3].u.num;
-	char *name2=str_buf+str_data[num2&0x00ffffff].str;
-	char prefix2=*name2;
-	char postfix2=name2[strlen(name2)-1];
-	int sz=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	int i;
-
-	if( prefix!='$' && prefix!='@' && prefix2!='$' && prefix2!='@' ){
-		printf("buildin_copyarray: illegal scope !\n");
-		return 0;
-	}
-	if( (postfix=='$' || postfix2=='$') && postfix!=postfix2 ){
-		printf("buildin_copyarray: type mismatch !\n");
-		return 0;
-	}
-	if( prefix!='$' || prefix2!='$' )
-		sd=script_rid2sd(st);
-
-
-	for(i=0;i<sz;i++)
-		set_reg(sd,num+(i<<24),name, get_val2(st,num2+(i<<24)) );
-	return 0;
-}
-/*==========================================
- * �z��ϐ��̃T�C�Y����
- *------------------------------------------
- */
-static int getarraysize(struct script_state *st,int num,int postfix)
-{
-	int i=(num>>24),c=i;
-	for(;i<128;i++){
-		void *v=get_val2(st,num+(i<<24));
-		if(postfix=='$' && *((char*)v) ) c=i;
-		if(postfix!='$' && (int)v )c=i;
-	}
-	return c+1;
-}
-int buildin_getarraysize(struct script_state *st)
-{
-	int num=st->stack->stack_data[st->start+2].u.num;
-	char *name=str_buf+str_data[num&0x00ffffff].str;
-	char prefix=*name;
-	char postfix=name[strlen(name)-1];
-
-	if( prefix!='$' && prefix!='@' ){
-		printf("buildin_copyarray: illegal scope !\n");
-		return 0;
-	}
-
-	push_val(st->stack,C_INT,getarraysize(st,num,postfix) );
-	return 0;
-}
-/*==========================================
- * �z��ϐ�����v�f�폜
- *------------------------------------------
- */
-int buildin_deletearray(struct script_state *st)
-{
-	struct map_session_data *sd=NULL;
-	int num=st->stack->stack_data[st->start+2].u.num;
-	char *name=str_buf+str_data[num&0x00ffffff].str;
-	char prefix=*name;
-	char postfix=name[strlen(name)-1];
-	int count=1;
-	int i,sz=getarraysize(st,num,postfix)-(num>>24)-count+1;
-
-
-	if( (st->end > st->start+3) )
-		count=conv_num(st,& (st->stack->stack_data[st->start+3]));
-
-	if( prefix!='$' && prefix!='@' ){
-		printf("buildin_deletearray: illegal scope !\n");
-		return 0;
-	}
-	if( prefix!='$' )
-		sd=script_rid2sd(st);
-
-	for(i=0;i<sz;i++){
-		set_reg(sd,num+(i<<24),name, get_val2(st,num+((i+count)<<24) ) );
-	}
-	for(;i<(128-(num>>24));i++){
-		if( postfix!='$' ) set_reg(sd,num+(i<<24),name, 0);
-		if( postfix=='$' ) set_reg(sd,num+(i<<24),name, "");
-	}
-	return 0;
-}
-
-/*==========================================
- * �w��v�f��\���l(�L�[)����������
- *------------------------------------------
- */
-int buildin_getelementofarray(struct script_state *st)
-{
-	if( st->stack->stack_data[st->start+2].type==C_NAME ){
-		int i=conv_num(st,& (st->stack->stack_data[st->start+3]));
-		if(i>127 || i<0){
-			printf("script: getelementofarray (operator[]): param2 illegal number %d\n",i);
-			push_val(st->stack,C_INT,0);
-		}else{
-			push_val(st->stack,C_NAME,
-				(i<<24) | st->stack->stack_data[st->start+2].u.num );
-		}
-	}else{
-		printf("script: getelementofarray (operator[]): param1 not name !\n");
-		push_val(st->stack,C_INT,0);
-	}
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_setlook(struct script_state *st)
-{
-	int type,val;
-
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	val=conv_num(st,& (st->stack->stack_data[st->start+3]));
-
-	pc_changelook(script_rid2sd(st),type,val);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_cutin(struct script_state *st)
-{
-	int type;
-
-	conv_str(st,& (st->stack->stack_data[st->start+2]));
-	type=conv_num(st,& (st->stack->stack_data[st->start+3]));
-
-	clif_cutin(script_rid2sd(st),st->stack->stack_data[st->start+2].u.str,type);
-
-	return 0;
-}
-/*==========================================
- * �J�[�h�̃C���X�g��\������
- *------------------------------------------
- */
-int buildin_cutincard(struct script_state *st)
-{
-	int itemid;
-
-	itemid=conv_num(st,& (st->stack->stack_data[st->start+2]));
-
-	clif_cutin(script_rid2sd(st),itemdb_search(itemid)->cardillustname,4);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_viewpoint(struct script_state *st)
-{
-	int type,x,y,id,color;
-
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	x=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	y=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	id=conv_num(st,& (st->stack->stack_data[st->start+5]));
-	color=conv_num(st,& (st->stack->stack_data[st->start+6]));
-
-	clif_viewpoint(script_rid2sd(st),st->oid,type,x,y,id,color);
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_countitem(struct script_state *st)
-{
-	int nameid=0,count=0,i;
-	struct map_session_data *sd;
-
-	struct script_data *data;
-
-	sd = script_rid2sd(st);
-
-	data=&(st->stack->stack_data[st->start+2]);
-	get_val(st,data);
-	if( data->type==C_STR || data->type==C_CONSTSTR ){
-		const char *name=conv_str(st,data);
-		struct item_data *item_data;
-		if( (item_data = itemdb_searchname(name)) != NULL)
-			nameid=item_data->nameid;
-	}else
-		nameid=conv_num(st,data);
-
-	if (nameid>=500) //if no such ID then skip this iteration
-		for(i=0;i<MAX_INVENTORY;i++){
-			if(sd->status.inventory[i].nameid==nameid)
-				count+=sd->status.inventory[i].amount;
-		}
-	else{
-		if(battle_config.error_log)
-			printf("wrong item ID : countitem(%i)\n",nameid);
-	}
-	push_val(st->stack,C_INT,count);
-
-	return 0;
-}
-
-/*==========================================
- * �d�ʃ`�F�b�N
- *------------------------------------------
- */
-int buildin_checkweight(struct script_state *st)
-{
-	int nameid=0,amount;
-	struct map_session_data *sd;
-	struct script_data *data;
-
-	sd = script_rid2sd(st);
-
-	data=&(st->stack->stack_data[st->start+2]);
-	get_val(st,data);
-	if( data->type==C_STR || data->type==C_CONSTSTR ){
-		const char *name=conv_str(st,data);
-		struct item_data *item_data = itemdb_searchname(name);
-		if( item_data )
-			nameid=item_data->nameid;
-	}else
-		nameid=conv_num(st,data);
-
-	amount=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	if ( amount<=0 || nameid<500 ) { //if get wrong item ID or amount<=0, don't count weight of non existing items
-		push_val(st->stack,C_INT,0);
-	}
-
-	sd=script_rid2sd(st);
-	if(itemdb_weight(nameid)*amount + sd->weight > sd->max_weight){
-		push_val(st->stack,C_INT,0);
-	} else {
-		push_val(st->stack,C_INT,1);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_getitem(struct script_state *st)
-{
-	int nameid,amount,flag = 0;
-	struct item item_tmp;
-	struct map_session_data *sd;
-	struct script_data *data;
-
-	sd = script_rid2sd(st);
-
-	data=&(st->stack->stack_data[st->start+2]);
-	get_val(st,data);
-	if( data->type==C_STR || data->type==C_CONSTSTR ){
-		const char *name=conv_str(st,data);
-		struct item_data *item_data = itemdb_searchname(name);
-		nameid=512; //Apple item ID
-		if( item_data != NULL)
-			nameid=item_data->nameid;
-	}else
-		nameid=conv_num(st,data);
-
-	if ( ( amount=conv_num(st,& (st->stack->stack_data[st->start+3])) ) <= 0) {
-		return 0; //return if amount <=0, skip the useles iteration
-	}
-	//Violet Box, Blue Box, etc - random item pick
-	if(nameid<0) { // �����_��
-		nameid=itemdb_searchrandomid(-nameid);
-		flag = 1;
-	}
-
-	if(nameid > 0) {
-		memset(&item_tmp,0,sizeof(item_tmp));
-		item_tmp.nameid=nameid;
-		if(!flag)
-			item_tmp.identify=1;
-		else
-			item_tmp.identify=!itemdb_isequip3(nameid);
-		if( st->end>st->start+5 ) //�A�C�e�����w�肵��ID�ɓn��
-			sd=map_id2sd(conv_num(st,& (st->stack->stack_data[st->start+5])));
-		if(sd == NULL) //�A�C�e����n�����肪���Ȃ������炨�A��
-			return 0;
-		if((flag = pc_additem(sd,&item_tmp,amount))) {
-			clif_additem(sd,0,0,flag);
-			map_addflooritem(&item_tmp,amount,sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
-		}
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_getitem2(struct script_state *st)
-{
-	int nameid,amount,flag = 0;
-	int iden,ref,attr,c1,c2,c3,c4;
-	struct item_data *item_data;
-	struct item item_tmp;
-	struct map_session_data *sd;
-	struct script_data *data;
-
-	sd = script_rid2sd(st);
-
-	data=&(st->stack->stack_data[st->start+2]);
-	get_val(st,data);
-	if( data->type==C_STR || data->type==C_CONSTSTR ){
-		const char *name=conv_str(st,data);
-		struct item_data *item_data = itemdb_searchname(name);
-		nameid=512; //Apple item ID
-		if( item_data )
-			nameid=item_data->nameid;
-	}else
-		nameid=conv_num(st,data);
-
-	amount=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	iden=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	ref=conv_num(st,& (st->stack->stack_data[st->start+5]));
-	attr=conv_num(st,& (st->stack->stack_data[st->start+6]));
-	c1=conv_num(st,& (st->stack->stack_data[st->start+7]));
-	c2=conv_num(st,& (st->stack->stack_data[st->start+8]));
-	c3=conv_num(st,& (st->stack->stack_data[st->start+9]));
-	c4=conv_num(st,& (st->stack->stack_data[st->start+10]));
-	if( st->end>st->start+11 ) //�A�C�e�����w�肵��ID�ɓn��
-		sd=map_id2sd(conv_num(st,& (st->stack->stack_data[st->start+11])));
-	if(sd == NULL) //�A�C�e����n�����肪���Ȃ������炨�A��
-		return 0;
-
-	if(nameid<0) { // �����_��
-		nameid=itemdb_searchrandomid(-nameid);
-		flag = 1;
-	}
-
-	if(nameid > 0) {
-		memset(&item_tmp,0,sizeof(item_tmp));
-		item_data=itemdb_search(nameid);
-		if(item_data->type==4 || item_data->type==5){
-			if(ref > 10) ref = 10;
-		}
-		else if(item_data->type==7) {
-			iden = 1;
-			ref = 0;
-		}
-		else {
-			iden = 1;
-			ref = attr = 0;
-		}
-
-		item_tmp.nameid=nameid;
-		if(!flag)
-			item_tmp.identify=iden;
-		else if(item_data->type==4 || item_data->type==5)
-			item_tmp.identify=0;
-		item_tmp.refine=ref;
-		item_tmp.attribute=attr;
-		item_tmp.card[0]=c1;
-		item_tmp.card[1]=c2;
-		item_tmp.card[2]=c3;
-		item_tmp.card[3]=c4;
-		if((flag = pc_additem(sd,&item_tmp,amount))) {
-			clif_additem(sd,0,0,flag);
-			map_addflooritem(&item_tmp,amount,sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
-		}
-	}
-
-	return 0;
-}
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_makeitem(struct script_state *st)
-{
-	int nameid,amount,flag = 0;
-	int x,y,m;
-	char *mapname;
-	struct item item_tmp;
-	struct map_session_data *sd;
-	struct script_data *data;
-
-	sd = script_rid2sd(st);
-
-	data=&(st->stack->stack_data[st->start+2]);
-	get_val(st,data);
-	if( data->type==C_STR || data->type==C_CONSTSTR ){
-		const char *name=conv_str(st,data);
-		struct item_data *item_data = itemdb_searchname(name);
-		nameid=512; //Apple Item ID
-		if( item_data )
-			nameid=item_data->nameid;
-	}else
-		nameid=conv_num(st,data);
-
-	amount=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	mapname	=conv_str(st,& (st->stack->stack_data[st->start+4]));
-	x	=conv_num(st,& (st->stack->stack_data[st->start+5]));
-	y	=conv_num(st,& (st->stack->stack_data[st->start+6]));
-
-	if( sd && strcmp(mapname,"this")==0)
-		m=sd->bl.m;
-	else
-		m=map_mapname2mapid(mapname);
-
-	if(nameid<0) { // �����_��
-		nameid=itemdb_searchrandomid(-nameid);
-		flag = 1;
-	}
-
-	if(nameid > 0) {
-		memset(&item_tmp,0,sizeof(item_tmp));
-		item_tmp.nameid=nameid;
-		if(!flag)
-			item_tmp.identify=1;
-		else
-			item_tmp.identify=!itemdb_isequip3(nameid);
-
-//		clif_additem(sd,0,0,flag);
-		map_addflooritem(&item_tmp,amount,m,x,y,NULL,NULL,NULL,0);
-	}
-
-	return 0;
-}
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_delitem(struct script_state *st)
-{
-	int nameid=0,amount,i;
-	struct map_session_data *sd;
-	struct script_data *data;
-
-	sd = script_rid2sd(st);
-
-	data=&(st->stack->stack_data[st->start+2]);
-	get_val(st,data);
-	if( data->type==C_STR || data->type==C_CONSTSTR ){
-		const char *name=conv_str(st,data);
-		struct item_data *item_data = itemdb_searchname(name);
-		//nameid=512;
-		if( item_data )
-			nameid=item_data->nameid;
-	}else
-		nameid=conv_num(st,data);
-
-	amount=conv_num(st,& (st->stack->stack_data[st->start+3]));
-
-	if (nameid<500 || amount<=0 ) {//by Lupus. Don't run FOR if u got wrong item ID or amount<=0
-		//printf("wrong item ID or amount<=0 : delitem %i,\n",nameid,amount);
-		return 0;
-	}
-	sd=script_rid2sd(st);
-
-	for(i=0;i<MAX_INVENTORY;i++){
-		if(sd->status.inventory[i].nameid<=0 || sd->inventory_data[i] == NULL ||
-		   sd->inventory_data[i]->type!=7 ||
-		   sd->status.inventory[i].amount<=0)
-			continue;
-		if(sd->status.inventory[i].nameid == nameid){
-			if(sd->status.inventory[i].card[0] == (short)0xff00){
-				if(search_petDB_index(nameid, PET_EGG) >= 0){
-					intif_delete_petdata(*((long *)(&sd->status.inventory[i].card[1])));
-					break;
-				}
-			}
-		}
-	}
-	for(i=0;i<MAX_INVENTORY;i++){
-		if(sd->status.inventory[i].nameid==nameid){
-			if(sd->status.inventory[i].amount>=amount){
-				pc_delitem(sd,i,amount,0);
-				break;
-			} else {
-				amount-=sd->status.inventory[i].amount;
-				if(amount==0)
-					amount=sd->status.inventory[i].amount;
-				pc_delitem(sd,i,amount,0);
-				break;
-			}
-		}
-	}
-
-	return 0;
-}
-
-/*==========================================
- *�L�����֌W�̃p�����[�^�擾
- *------------------------------------------
- */
-int buildin_readparam(struct script_state *st)
-{
-	int type;
-	struct map_session_data *sd;
-
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	if( st->end>st->start+3 )
-		sd=map_nick2sd(conv_str(st,& (st->stack->stack_data[st->start+3])));
-	else
-	sd=script_rid2sd(st);
-
-	if(sd==NULL){
-		push_val(st->stack,C_INT,-1);
-		return 0;
-	}
-
-	push_val(st->stack,C_INT,pc_readparam(sd,type));
-
-	return 0;
-}
-/*==========================================
- *�L�����֌W��ID�擾
- *------------------------------------------
- */
-int buildin_getcharid(struct script_state *st)
-{
-	int num;
-	struct map_session_data *sd;
-
-	num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	if( st->end>st->start+3 )
-		sd=map_nick2sd(conv_str(st,& (st->stack->stack_data[st->start+3])));
-	else
-	sd=script_rid2sd(st);
-	if(sd==NULL){
-		push_val(st->stack,C_INT,-1);
-		return 0;
-	}
-	if(num==0)
-		push_val(st->stack,C_INT,sd->status.char_id);
-	if(num==1)
-		push_val(st->stack,C_INT,sd->status.party_id);
-	if(num==2)
-		push_val(st->stack,C_INT,sd->status.guild_id);
-	if(num==3)
-		push_val(st->stack,C_INT,sd->status.account_id);
-	return 0;
-}
-/*==========================================
- *�w��ID��PT���擾
- *------------------------------------------
- */
-char *buildin_getpartyname_sub(int party_id)
-{
-	struct party *p;
-
-	p=NULL;
-	p=party_search(party_id);
-
-	if(p!=NULL){
-		char *buf;
-		buf=(char *)aCalloc(24,sizeof(char));
-		strcpy(buf,p->name);
-		return buf;
-	}
-
-	return 0;
-}
-int buildin_getpartyname(struct script_state *st)
-{
-	char *name;
-	int party_id;
-
-	party_id=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	name=buildin_getpartyname_sub(party_id);
-	if(name!=0)
-		push_str(st->stack,C_STR,name);
-	else
-		push_str(st->stack,C_CONSTSTR,"null");
-
-	return 0;
-}
-/*==========================================
- *�w��ID��PT�l���ƃ����o�[ID�擾
- *------------------------------------------
- */
-int buildin_getpartymember(struct script_state *st)
-{
-	struct party *p;
-	int i,j=0;
-
-	p=NULL;
-	p=party_search(conv_num(st,& (st->stack->stack_data[st->start+2])));
-
-	if(p!=NULL){
-		for(i=0;i<MAX_PARTY;i++){
-			if(p->member[i].account_id){
-//				printf("name:%s %d\n",p->member[i].name,i);
-				mapreg_setregstr(add_str("$@partymembername$")+(i<<24),p->member[i].name);
-				j++;
-			}
-		}
-	}
-	mapreg_setreg(add_str("$@partymembercount"),j);
-
-	return 0;
-}
-/*==========================================
- *�w��ID�̃M���h���擾
- *------------------------------------------
- */
-char *buildin_getguildname_sub(int guild_id)
-{
-	struct guild *g=NULL;
-	g=guild_search(guild_id);
-
-	if(g!=NULL){
-		char *buf;
-		buf=(char *)aCalloc(24,sizeof(char));
-		strcpy(buf,g->name);
-		return buf;
-	}
-	return 0;
-}
-int buildin_getguildname(struct script_state *st)
-{
-	char *name;
-	int guild_id=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	name=buildin_getguildname_sub(guild_id);
-	if(name!=0)
-		push_str(st->stack,C_STR,name);
-	else
-		push_str(st->stack,C_CONSTSTR,"null");
-	return 0;
-}
-
-/*==========================================
- *�w��ID��GuildMaster���擾
- *------------------------------------------
- */
-char *buildin_getguildmaster_sub(int guild_id)
-{
-	struct guild *g=NULL;
-	g=guild_search(guild_id);
-
-	if(g!=NULL){
-		char *buf;
-		buf=(char *)aCalloc(24,sizeof(char));
-		strncpy(buf,g->master, 23);
-		return buf;
-	}
-
-	return 0;
-}
-int buildin_getguildmaster(struct script_state *st)
-{
-	char *master;
-	int guild_id=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	master=buildin_getguildmaster_sub(guild_id);
-	if(master!=0)
-		push_str(st->stack,C_STR,master);
-	else
-		push_str(st->stack,C_CONSTSTR,"null");
-	return 0;
-}
-
-int buildin_getguildmasterid(struct script_state *st)
-{
-	char *master;
-	struct map_session_data *sd=NULL;
-	int guild_id=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	master=buildin_getguildmaster_sub(guild_id);
-	if(master!=0){
-		if((sd=map_nick2sd(master)) == NULL){
-			push_val(st->stack,C_INT,0);
-			return 0;
-		}
-		push_val(st->stack,C_INT,sd->status.char_id);
-	}else{
-		push_val(st->stack,C_INT,0);
-	}
-	return 0;
-}
-
-/*==========================================
- * �L�����N�^�̖��O
- *------------------------------------------
- */
-int buildin_strcharinfo(struct script_state *st)
-{
-	struct map_session_data *sd;
-	int num;
-
-	sd=script_rid2sd(st);
-	num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	if(num==0){
-		char *buf;
-		buf=(char *)aCalloc(24,sizeof(char));
-		strncpy(buf,sd->status.name, 23);
-		push_str(st->stack,C_STR,buf);
-	}
-	if(num==1){
-		char *buf;
-		buf=buildin_getpartyname_sub(sd->status.party_id);
-		if(buf!=0)
-			push_str(st->stack,C_STR,buf);
-		else
-			push_str(st->stack,C_CONSTSTR,"");
-	}
-	if(num==2){
-		char *buf;
-		buf=buildin_getguildname_sub(sd->status.guild_id);
-		if(buf!=0)
-			push_str(st->stack,C_STR,buf);
-		else
-			push_str(st->stack,C_CONSTSTR,"");
-	}
-
-	return 0;
-}
-
-unsigned int equip[10]={0x0100,0x0010,0x0020,0x0002,0x0004,0x0040,0x0008,0x0080,0x0200,0x0001};
-
-/*==========================================
- * GetEquipID(Pos);     Pos: 1-10
- *------------------------------------------
- */
-int buildin_getequipid(struct script_state *st)
-{
-	int i,num;
-	struct map_session_data *sd;
-	struct item_data* item;
-
-	sd=script_rid2sd(st);
-	if(sd == NULL)
-	{
-		printf("getequipid: sd == NULL\n");
-		return 0;
-	}
-	num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	i=pc_checkequip(sd,equip[num-1]);
-	if(i >= 0){
-		item=sd->inventory_data[i];
-		if(item)
-			push_val(st->stack,C_INT,item->nameid);
-		else
-			push_val(st->stack,C_INT,0);
-	}else{
-		push_val(st->stack,C_INT,-1);
-	}
-	return 0;
-}
-
-/*==========================================
- * ������������i���B���j���[�p�j
- *------------------------------------------
- */
-int buildin_getequipname(struct script_state *st)
-{
-	int i,num;
-	struct map_session_data *sd;
-	struct item_data* item;
-	char *buf;
-
-	buf=(char *)aCalloc(64,sizeof(char));
-	sd=script_rid2sd(st);
-	num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	i=pc_checkequip(sd,equip[num-1]);
-	if(i >= 0){
-		item=sd->inventory_data[i];
-		if(item)
-			sprintf(buf,"%s-[%s]",pos[num-1],item->jname);
-		else
-			sprintf(buf,"%s-[%s]",pos[num-1],pos[10]);
-	}else{
-		sprintf(buf,"%s-[%s]",pos[num-1],pos[10]);
-	}
-	push_str(st->stack,C_STR,buf);
-
-	return 0;
-}
-
-/*==========================================
- * getbrokenid [Valaris]
- *------------------------------------------
- */
-int buildin_getbrokenid(struct script_state *st)
-{
-	int i,num,id=0,brokencounter=0;
-	struct map_session_data *sd;
-	
-	sd=script_rid2sd(st);
-	
-	num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	for(i=0; i<MAX_INVENTORY; i++) {
-		if(sd->status.inventory[i].broken==1){
-				brokencounter++;
-				if(num==brokencounter){
-					id=sd->status.inventory[i].nameid;
-					break;
-				}
-		}
-	}
-	
-	push_val(st->stack,C_INT,id);
-
-	return 0;
-}
-
-/*==========================================
- * repair [Valaris]
- *------------------------------------------
- */
-int buildin_repair(struct script_state *st)
-{
-	int i,num;
-	int repaircounter=0;
-	struct map_session_data *sd;
-
-
-	sd=script_rid2sd(st);
-	
-	num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	for(i=0; i<MAX_INVENTORY; i++) {
-		if(sd->status.inventory[i].broken==1){
-				repaircounter++;
-				if(num==repaircounter){
-					sd->status.inventory[i].broken=0;
-					clif_equiplist(sd);
-					clif_produceeffect(sd, 0, sd->status.inventory[i].nameid);
-					clif_misceffect(&sd->bl, 3);
-					clif_displaymessage(sd->fd,"Item has been repaired.");
-					break;
-				}
-		}
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �����`�F�b�N
- *------------------------------------------
- */
-int buildin_getequipisequiped(struct script_state *st)
-{
-	int i,num;
-	struct map_session_data *sd;
-
-	num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sd=script_rid2sd(st);
-	i=pc_checkequip(sd,equip[num-1]);
-	if(i >= 0){
-		push_val(st->stack,C_INT,1);
-	}else{
-		push_val(st->stack,C_INT,0);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �����i���B�”\�`�F�b�N
- *------------------------------------------
- */
-int buildin_getequipisenableref(struct script_state *st)
-{
-	int i,num;
-	struct map_session_data *sd;
-
-	num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sd=script_rid2sd(st);
-	i=pc_checkequip(sd,equip[num-1]);
-	if(i >= 0 && num<7 && sd->inventory_data[i] && (num!=1 || sd->inventory_data[i]->def > 1
-	             || (sd->inventory_data[i]->def==1 && sd->inventory_data[i]->equip_script==NULL)
-	             || (sd->inventory_data[i]->def<=0 && sd->inventory_data[i]->equip_script!=NULL))
-	   ){
-		push_val(st->stack,C_INT,1);
-	}else{
-		push_val(st->stack,C_INT,0);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �����i�Ӓ�`�F�b�N
- *------------------------------------------
- */
-int buildin_getequipisidentify(struct script_state *st)
-{
-	int i,num;
-	struct map_session_data *sd;
-
-	num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sd=script_rid2sd(st);
-	i=pc_checkequip(sd,equip[num-1]);
-	if(i >= 0)
-		push_val(st->stack,C_INT,sd->status.inventory[i].identify);
-	else
-		push_val(st->stack,C_INT,0);
-
-	return 0;
-}
-
-/*==========================================
- * �����i���B�x
- *------------------------------------------
- */
-int buildin_getequiprefinerycnt(struct script_state *st)
-{
-	int i,num;
-	struct map_session_data *sd;
-
-	num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sd=script_rid2sd(st);
-	i=pc_checkequip(sd,equip[num-1]);
-	if(i >= 0)
-		push_val(st->stack,C_INT,sd->status.inventory[i].refine);
-	else
-		push_val(st->stack,C_INT,0);
-
-	return 0;
-}
-
-/*==========================================
- * �����i����LV
- *------------------------------------------
- */
-int buildin_getequipweaponlv(struct script_state *st)
-{
-	int i,num;
-	struct map_session_data *sd;
-
-	num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sd=script_rid2sd(st);
-	i=pc_checkequip(sd,equip[num-1]);
-	if(i >= 0 && sd->inventory_data[i])
-		push_val(st->stack,C_INT,sd->inventory_data[i]->wlv);
-	else
-		push_val(st->stack,C_INT,0);
-
-	return 0;
-}
-
-/*==========================================
- * �����i���B������
- *------------------------------------------
- */
-int buildin_getequippercentrefinery(struct script_state *st)
-{
-	int i,num;
-	struct map_session_data *sd;
-
-	num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sd=script_rid2sd(st);
-	i=pc_checkequip(sd,equip[num-1]);
-	if(i >= 0)
-		push_val(st->stack,C_INT,pc_percentrefinery(sd,&sd->status.inventory[i]));
-	else
-		push_val(st->stack,C_INT,0);
-
-	return 0;
-}
-
-/*==========================================
- * ���B����
- *------------------------------------------
- */
-int buildin_successrefitem(struct script_state *st)
-{
-	int i,num,ep;
-	struct map_session_data *sd;
-
-	num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sd=script_rid2sd(st);
-	i=pc_checkequip(sd,equip[num-1]);
-	if(i >= 0) {
-		ep=sd->status.inventory[i].equip;
-
-		sd->status.inventory[i].refine++;
-		pc_unequipitem(sd,i,0);
-		clif_refine(sd->fd,sd,0,i,sd->status.inventory[i].refine);
-		clif_delitem(sd,i,1);
-		clif_additem(sd,i,1,0);
-		pc_equipitem(sd,i,ep);
-		clif_misceffect(&sd->bl,3);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * ���B���s
- *------------------------------------------
- */
-int buildin_failedrefitem(struct script_state *st)
-{
-	int i,num;
-	struct map_session_data *sd;
-
-	num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sd=script_rid2sd(st);
-	i=pc_checkequip(sd,equip[num-1]);
-	if(i >= 0) {
-		sd->status.inventory[i].refine = 0;
-		pc_unequipitem(sd,i,0);
-		// ���B���s�G�t�F�N�g�̃p�P�b�g
-		clif_refine(sd->fd,sd,1,i,sd->status.inventory[i].refine);
-		pc_delitem(sd,i,1,0);
-		// ���̐l�ɂ����s��ʒm
-		clif_misceffect(&sd->bl,2);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_statusup(struct script_state *st)
-{
-	int type;
-	struct map_session_data *sd;
-
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sd=script_rid2sd(st);
-	pc_statusup(sd,type);
-
-	return 0;
-}
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_statusup2(struct script_state *st)
-{
-	int type,val;
-	struct map_session_data *sd;
-
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	val=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	sd=script_rid2sd(st);
-	pc_statusup2(sd,type,val);
-
-	return 0;
-}
-/*==========================================
- * �����i�ɂ��\�͒l�{�[�i�X
- *------------------------------------------
- */
-int buildin_bonus(struct script_state *st)
-{
-	int type,val;
-	struct map_session_data *sd;
-
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	val=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	sd=script_rid2sd(st);
-	pc_bonus(sd,type,val);
-
-	return 0;
-}
-/*==========================================
- * �����i�ɂ��\�͒l�{�[�i�X
- *------------------------------------------
- */
-int buildin_bonus2(struct script_state *st)
-{
-	int type,type2,val;
-	struct map_session_data *sd;
-
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	type2=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	val=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	sd=script_rid2sd(st);
-	pc_bonus2(sd,type,type2,val);
-
-	return 0;
-}
-/*==========================================
- * �����i�ɂ��\�͒l�{�[�i�X
- *------------------------------------------
- */
-int buildin_bonus3(struct script_state *st)
-{
-	int type,type2,type3,val;
-	struct map_session_data *sd;
-
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	type2=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	type3=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	val=conv_num(st,& (st->stack->stack_data[st->start+5]));
-	sd=script_rid2sd(st);
-	pc_bonus3(sd,type,type2,type3,val);
-
-	return 0;
-}
-/*==========================================
- * �X�L������
- *------------------------------------------
- */
-int buildin_skill(struct script_state *st)
-{
-	int id,level,flag=1;
-	struct map_session_data *sd;
-
-	id=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	level=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	if( st->end>st->start+4 )
-		flag=conv_num(st,&(st->stack->stack_data[st->start+4]) );
-	sd=script_rid2sd(st);
-	pc_skill(sd,id,level,flag);
-
-	return 0;
-}
-/*==========================================
- * �M���h�X�L���擾
- *------------------------------------------
- */
-int buildin_guildskill(struct script_state *st)
-{
-	int id,level;
-	struct map_session_data *sd;
-	int i=0;
-
-	id=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	level=conv_num(st,& (st->stack->stack_data[st->start+3]));
-//	if( st->end>st->start+4 )
-//		flag=conv_num(st,&(st->stack->stack_data[st->start+4]) );
-	sd=script_rid2sd(st);
-	for(i=0;i<level;i++)
-		guild_skillup(sd,id);
-
-	return 0;
-}
-/*==========================================
- * �X�L�����x������
- *------------------------------------------
- */
-int buildin_getskilllv(struct script_state *st)
-{
-	int id=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	push_val(st->stack,C_INT, pc_checkskill( script_rid2sd(st) ,id) );
-	return 0;
-}
-/*==========================================
- * getgdskilllv(Guild_ID, Skill_ID);               
- * skill_id = 10000 : GD_APPROVAL                      
- *            10001 : GD_KAFRACONTACT                  
- *            10002 : GD_GUARDIANRESEARCH              
- *            10003 : GD_CHARISMA                      
- *            10004 : GD_EXTENSION                     
- *------------------------------------------
- */
-int buildin_getgdskilllv(struct script_state *st)  
-{
-        int guild_id=conv_num(st,& (st->stack->stack_data[st->start+2]));
-        int skill_id=conv_num(st,& (st->stack->stack_data[st->start+3]));
-        struct guild *g=guild_search(guild_id);
-	push_val(st->stack,C_INT, (g==NULL)?-1:guild_checkskill(g,skill_id) );
-	return 0;
-/*
-	struct map_session_data *sd=NULL;
-	struct guild *g=NULL;
-	int skill_id;
-
-	skill_id=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sd=script_rid2sd(st);
-	if(sd && sd->status.guild_id > 0) g=guild_search(sd->status.guild_id);
-	if(sd && g) {
-		push_val(st->stack,C_INT, guild_checkskill(g,skill_id+9999) );
-	} else {
-		push_val(st->stack,C_INT,-1);
-	}
-	return 0;
-*/
-}
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_basicskillcheck(struct script_state *st)
-{
-	push_val(st->stack,C_INT, battle_config.basic_skill_check);
-	return 0;
-}
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_getgmlevel(struct script_state *st)
-{
-	push_val(st->stack,C_INT, pc_isGM(script_rid2sd(st)));
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_end(struct script_state *st)
-{
-	st->state = END;
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_checkoption(struct script_state *st)
-{
-	int type;
-	struct map_session_data *sd;
-
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sd=script_rid2sd(st);
-
-	if(sd->status.option & type){
-		push_val(st->stack,C_INT,1);
-	} else {
-		push_val(st->stack,C_INT,0);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_setoption(struct script_state *st)
-{
-	int type;
-	struct map_session_data *sd;
-
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sd=script_rid2sd(st);
-	pc_setoption(sd,type);
-
-	return 0;
-}
-
-/*==========================================
- * Checkcart [Valaris]
- *------------------------------------------
- */
-
-int buildin_checkcart(struct script_state *st)
-{
-	struct map_session_data *sd;
-
-	sd=script_rid2sd(st);
-
-	if(pc_iscarton(sd)){
-		push_val(st->stack,C_INT,1);
-	} else {
-		push_val(st->stack,C_INT,0);
-	}
-	return 0;
-}
-
-/*==========================================
- * �J�[�g��t����
- *------------------------------------------
- */
-int buildin_setcart(struct script_state *st)
-{
-	struct map_session_data *sd;
-
-	sd=script_rid2sd(st);
-	pc_setcart(sd,1);
-
-	return 0;
-}
-
-/*==========================================
- * checkfalcon [Valaris]
- *------------------------------------------
- */
-
-int buildin_checkfalcon(struct script_state *st)
-{
-	struct map_session_data *sd;
-
-	sd=script_rid2sd(st);
-
-	if(pc_isfalcon(sd)){
-		push_val(st->stack,C_INT,1);
-	} else {
-		push_val(st->stack,C_INT,0);
-	}
-
-	return 0;
-}
-
-
-/*==========================================
- * ���t����
- *------------------------------------------
- */
-int buildin_setfalcon(struct script_state *st)
-{
-	struct map_session_data *sd;
-
-	sd=script_rid2sd(st);
-	pc_setfalcon(sd);
-
-	return 0;
-}
-
-/*==========================================
- * Checkcart [Valaris]
- *------------------------------------------
- */
-
-int buildin_checkriding(struct script_state *st)
-{
-	struct map_session_data *sd;
-
-	sd=script_rid2sd(st);
-
-	if(pc_isriding(sd)){
-		push_val(st->stack,C_INT,1);
-	} else {
-		push_val(st->stack,C_INT,0);
-	}
-
-	return 0;
-}
-
-
-/*==========================================
- * �y�R�y�R���
- *------------------------------------------
- */
-int buildin_setriding(struct script_state *st)
-{
-	struct map_session_data *sd;
-
-	sd=script_rid2sd(st);
-	pc_setriding(sd);
-
-	return 0;
-}
-
-/*==========================================
- *	�Z�[�u�|�C���g�̕ۑ�
- *------------------------------------------
- */
-int buildin_savepoint(struct script_state *st)
-{
-	int x,y;
-	char *str;
-
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	x=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	y=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	pc_setsavepoint(script_rid2sd(st),str,x,y);
-	return 0;
-}
-
-/*==========================================
- * GetTimeTick(0: System Tick, 1: Time Second Tick)
- *------------------------------------------
- */
-int buildin_gettimetick(struct script_state *st)	/* Asgard Version */
-{
-	int type;
-	time_t timer;
-	struct tm *t;
-
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-
-	switch(type){
-	case 1:
-		//type 1:(Second Ticks: 0-86399, 00:00:00-23:59:59)
-		time(&timer);
-		t=localtime(&timer);
-		push_val(st->stack,C_INT,((t->tm_hour)*3600+(t->tm_min)*60+t->tm_sec));
-		break;
-	case 0:
-	default:
-		//type 0:(System Ticks)
-		push_val(st->stack,C_INT,gettick());
-		break;
-	}
-	return 0;
-}
-
-/*==========================================
- * GetTime(Type);
- * 1: Sec     2: Min     3: Hour
- * 4: WeekDay     5: MonthDay     6: Month
- * 7: Year
- *------------------------------------------
- */
-int buildin_gettime(struct script_state *st)	/* Asgard Version */
-{
-	int type;
-	time_t timer;
-	struct tm *t;
-
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-
-	time(&timer);
-	t=localtime(&timer);
-
-	switch(type){
-	case 1://Sec(0~59)
-		push_val(st->stack,C_INT,t->tm_sec);
-		break;
-	case 2://Min(0~59)
-		push_val(st->stack,C_INT,t->tm_min);
-		break;
-	case 3://Hour(0~23)
-		push_val(st->stack,C_INT,t->tm_hour);
-		break;
-	case 4://WeekDay(0~6)
-		push_val(st->stack,C_INT,t->tm_wday);
-		break;
-	case 5://MonthDay(01~31)
-		push_val(st->stack,C_INT,t->tm_mday);
-		break;
-	case 6://Month(01~12)
-		push_val(st->stack,C_INT,t->tm_mon+1);
-		break;
-	case 7://Year(20xx)
-		push_val(st->stack,C_INT,t->tm_year+1900);
-		break;
-	default://(format error)
-		push_val(st->stack,C_INT,-1);
-		break;
-	}
-	return 0;
-}
-
-/*==========================================
- * GetTimeStr("TimeFMT", Length);
- *------------------------------------------
- */
-int buildin_gettimestr(struct script_state *st)
-{
-	char *tmpstr;
-	char *fmtstr;
-	int maxlen;
-	time_t now = time(NULL);
-
-	fmtstr=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	maxlen=conv_num(st,& (st->stack->stack_data[st->start+3]));
-
-	tmpstr=(char *)aCalloc(maxlen+1,sizeof(char));
-	strftime(tmpstr,maxlen,fmtstr,localtime(&now));
-	tmpstr[maxlen]='\0';
-
-	push_str(st->stack,C_STR,tmpstr);
-	return 0;
-}
-
-/*==========================================
- * �J�v���q�ɂ��J��
- *------------------------------------------
- */
-int buildin_openstorage(struct script_state *st)
-{
-	storage_storageopen(script_rid2sd(st));
-	return 0;
-}
-
-int buildin_guildopenstorage(struct script_state *st)
-{
-	struct map_session_data *sd=script_rid2sd(st);
-	int ret;
-	ret = storage_guild_storageopen(sd);
-	push_val(st->stack,C_INT,ret);
-	return 0;
-}
-
-/*==========================================
- * �A�C�e���ɂ��X�L������
- *------------------------------------------
- */
-int buildin_itemskill(struct script_state *st)
-{
-	int id,lv;
-	char *str;
-	struct map_session_data *sd=script_rid2sd(st);
-
-	id=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	lv=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	str=conv_str(st,& (st->stack->stack_data[st->start+4]));
-
-	// �r�����ɃX�L���A�C�e���͎g�p�ł��Ȃ�
-	if(sd->skilltimer != -1)
-		return 0;
-
-	sd->skillitem=id;
-	sd->skillitemlv=lv;
-	clif_item_skill(sd,id,lv,str);
-	return 0;
-}
-/*==========================================
- * �A�C�e���쐬
- *------------------------------------------
- */
-int buildin_produce(struct script_state *st)
-{
-	int trigger;
-	struct map_session_data *sd=script_rid2sd(st);
-
-	if(	sd->state.produce_flag == 1) return 0;
-	trigger=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	clif_skill_produce_mix_list(sd,trigger);
-	return 0;
-}
-/*==========================================
- * NPC�Ńy�b�g���
- *------------------------------------------
- */
-int buildin_makepet(struct script_state *st)
-{
-	struct map_session_data *sd = script_rid2sd(st);
-	struct script_data *data;
-	int id,pet_id;
-
-	data=&(st->stack->stack_data[st->start+2]);
-	get_val(st,data);
-
-	id=conv_num(st,data);
-
-	pet_id = search_petDB_index(id, PET_CLASS);
-
-	if (pet_id < 0)
-		pet_id = search_petDB_index(id, PET_EGG);
-	if (pet_id >= 0 && sd) {
-		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, pet_db[pet_id].intimate,
-			100, 0, 1, pet_db[pet_id].jname);
-	}
-
-	return 0;
-}
-/*==========================================
- * NPC�Ōo���l�グ��
- *------------------------------------------
- */
-int buildin_getexp(struct script_state *st)
-{
-	struct map_session_data *sd = script_rid2sd(st);
-	int base=0,job=0;
-
-	base=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	job =conv_num(st,& (st->stack->stack_data[st->start+3]));
-	if(base<0 || job<0)
-		return 0;
-	if(sd)
-		pc_gainexp(sd,base,job);
-
-	return 0;
-}
-
-/*==========================================
- * �����X�^�[����
- *------------------------------------------
- */
-int buildin_monster(struct script_state *st)
-{
-	int class,amount,x,y;
-	char *str,*map,*event="";
-
-	map	=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	x	=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	y	=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	str	=conv_str(st,& (st->stack->stack_data[st->start+5]));
-	class=conv_num(st,& (st->stack->stack_data[st->start+6]));
-	amount=conv_num(st,& (st->stack->stack_data[st->start+7]));
-	if( st->end>st->start+8 )
-		event=conv_str(st,& (st->stack->stack_data[st->start+8]));
-
-	mob_once_spawn(map_id2sd(st->rid),map,x,y,str,class,amount,event);
-	return 0;
-}
-/*==========================================
- * �����X�^�[����
- *------------------------------------------
- */
-int buildin_areamonster(struct script_state *st)
-{
-	int class,amount,x0,y0,x1,y1;
-	char *str,*map,*event="";
-
-	map	=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	x0	=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	y0	=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	x1	=conv_num(st,& (st->stack->stack_data[st->start+5]));
-	y1	=conv_num(st,& (st->stack->stack_data[st->start+6]));
-	str	=conv_str(st,& (st->stack->stack_data[st->start+7]));
-	class=conv_num(st,& (st->stack->stack_data[st->start+8]));
-	amount=conv_num(st,& (st->stack->stack_data[st->start+9]));
-	if( st->end>st->start+10 )
-		event=conv_str(st,& (st->stack->stack_data[st->start+10]));
-
-	mob_once_spawn_area(map_id2sd(st->rid),map,x0,y0,x1,y1,str,class,amount,event);
-	return 0;
-}
-/*==========================================
- * �����X�^�[�폜
- *------------------------------------------
- */
-int buildin_killmonster_sub(struct block_list *bl,va_list ap)
-{
-	char *event=va_arg(ap,char *);
-	int allflag=va_arg(ap,int);
-
-	if(!allflag){
-		if(strcmp(event,((struct mob_data *)bl)->npc_event)==0)
-			mob_delete((struct mob_data *)bl);
-		return 0;
-	}else if(allflag){
-		if(((struct mob_data *)bl)->spawndelay1==-1 && ((struct mob_data *)bl)->spawndelay2==-1)
-			mob_delete((struct mob_data *)bl);
-		return 0;
-	}
-	return 0;
-}
-int buildin_killmonster(struct script_state *st)
-{
-	char *mapname,*event;
-	int m,allflag=0;
-	mapname=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	event=conv_str(st,& (st->stack->stack_data[st->start+3]));
-	if(strcmp(event,"All")==0)
-		allflag = 1;
-
-	if( (m=map_mapname2mapid(mapname))<0 )
-		return 0;
-	map_foreachinarea(buildin_killmonster_sub,
-		m,0,0,map[m].xs,map[m].ys,BL_MOB, event ,allflag);
-	return 0;
-}
-
-int buildin_killmonsterall_sub(struct block_list *bl,va_list ap)
-{
-	mob_delete((struct mob_data *)bl);
-	return 0;
-}
-int buildin_killmonsterall(struct script_state *st)
-{
-	char *mapname;
-	int m;
-	mapname=conv_str(st,& (st->stack->stack_data[st->start+2]));
-
-	if( (m=map_mapname2mapid(mapname))<0 )
-		return 0;
-	map_foreachinarea(buildin_killmonsterall_sub,
-		m,0,0,map[m].xs,map[m].ys,BL_MOB);
-	return 0;
-}
-
-/*==========================================
- * �C�x���g���s
- *------------------------------------------
- */
-int buildin_doevent(struct script_state *st)
-{
-	char *event;
-	event=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	npc_event(map_id2sd(st->rid),event,0);
-	return 0;
-}
-/*==========================================
- * NPC��̃C�x���g���s
- *------------------------------------------
- */
-int buildin_donpcevent(struct script_state *st)
-{
-	char *event;
-	event=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	npc_event_do(event);
-	return 0;
-}
-/*==========================================
- * �C�x���g�^�C�}�[�lj�
- *------------------------------------------
- */
-int buildin_addtimer(struct script_state *st)
-{
-	char *event;
-	int tick;
-	tick=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	event=conv_str(st,& (st->stack->stack_data[st->start+3]));
-	pc_addeventtimer(script_rid2sd(st),tick,event);
-	return 0;
-}
-/*==========================================
- * �C�x���g�^�C�}�[�폜
- *------------------------------------------
- */
-int buildin_deltimer(struct script_state *st)
-{
-	char *event;
-	event=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	pc_deleventtimer(script_rid2sd(st),event);
-	return 0;
-}
-/*==========================================
- * �C�x���g�^�C�}�[�̃J�E���g�l�lj�
- *------------------------------------------
- */
-int buildin_addtimercount(struct script_state *st)
-{
-	char *event;
-	int tick;
-	event=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	tick=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	pc_addeventtimercount(script_rid2sd(st),event,tick);
-	return 0;
-}
-
-/*==========================================
- * NPC�^�C�}�[������
- *------------------------------------------
- */
-int buildin_initnpctimer(struct script_state *st)
-{
-	struct npc_data *nd;
-	if( st->end > st->start+2 )
-		nd=npc_name2id(conv_str(st,& (st->stack->stack_data[st->start+2])));
-	else
-		nd=(struct npc_data *)map_id2bl(st->oid);
-
-	npc_settimerevent_tick(nd,0);
-	npc_timerevent_start(nd);
-	return 0;
-}
-/*==========================================
- * NPC�^�C�}�[�J�n
- *------------------------------------------
- */
-int buildin_startnpctimer(struct script_state *st)
-{
-	struct npc_data *nd;
-	if( st->end > st->start+2 )
-		nd=npc_name2id(conv_str(st,& (st->stack->stack_data[st->start+2])));
-	else
-		nd=(struct npc_data *)map_id2bl(st->oid);
-
-	npc_timerevent_start(nd);
-	return 0;
-}
-/*==========================================
- * NPC�^�C�}�[��~
- *------------------------------------------
- */
-int buildin_stopnpctimer(struct script_state *st)
-{
-	struct npc_data *nd;
-	if( st->end > st->start+2 )
-		nd=npc_name2id(conv_str(st,& (st->stack->stack_data[st->start+2])));
-	else
-		nd=(struct npc_data *)map_id2bl(st->oid);
-
-	npc_timerevent_stop(nd);
-	return 0;
-}
-/*==========================================
- * NPC�^�C�}�[��񏊓�
- *------------------------------------------
- */
-int buildin_getnpctimer(struct script_state *st)
-{
-	struct npc_data *nd;
-	int type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	int val=0;
-	if( st->end > st->start+3 )
-		nd=npc_name2id(conv_str(st,& (st->stack->stack_data[st->start+3])));
-	else
-		nd=(struct npc_data *)map_id2bl(st->oid);
-
-	switch(type){
-	case 0: val=npc_gettimerevent_tick(nd); break;
-	case 1: val= (nd->u.scr.nexttimer>=0); break;
-	case 2: val= nd->u.scr.timeramount; break;
-	}
-	push_val(st->stack,C_INT,val);
-	return 0;
-}
-/*==========================================
- * NPC�^�C�}�[�l�ݒ�
- *------------------------------------------
- */
-int buildin_setnpctimer(struct script_state *st)
-{
-	int tick;
-	struct npc_data *nd;
-	tick=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	if( st->end > st->start+3 )
-		nd=npc_name2id(conv_str(st,& (st->stack->stack_data[st->start+3])));
-	else
-		nd=(struct npc_data *)map_id2bl(st->oid);
-
-	npc_settimerevent_tick(nd,tick);
-	return 0;
-}
-
-/*==========================================
- * �V�̐��A�i�E���X
- *------------------------------------------
- */
-int buildin_announce(struct script_state *st)
-{
-	char *str;
-	int flag;
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	flag=conv_num(st,& (st->stack->stack_data[st->start+3]));
-
-	if(flag&0x0f){
-		struct block_list *bl=(flag&0x08)? map_id2bl(st->oid) :
-			(struct block_list *)script_rid2sd(st);
-		clif_GMmessage(bl,str,strlen(str)+1,flag);
-	}else
-		intif_GMmessage(str,strlen(str)+1,flag);
-	return 0;
-}
-/*==========================================
- * �V�̐��A�i�E���X�i����}�b�v�j
- *------------------------------------------
- */
-int buildin_mapannounce_sub(struct block_list *bl,va_list ap)
-{
-	char *str;
-	int len,flag;
-	str=va_arg(ap,char *);
-	len=va_arg(ap,int);
-	flag=va_arg(ap,int);
-	clif_GMmessage(bl,str,len,flag|3);
-	return 0;
-}
-int buildin_mapannounce(struct script_state *st)
-{
-	char *mapname,*str;
-	int flag,m;
-
-	mapname=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	str=conv_str(st,& (st->stack->stack_data[st->start+3]));
-	flag=conv_num(st,& (st->stack->stack_data[st->start+4]));
-
-	if( (m=map_mapname2mapid(mapname))<0 )
-		return 0;
-	map_foreachinarea(buildin_mapannounce_sub,
-		m,0,0,map[m].xs,map[m].ys,BL_PC, str,strlen(str)+1,flag&0x10);
-	return 0;
-}
-/*==========================================
- * �V�̐��A�i�E���X�i����G���A�j
- *------------------------------------------
- */
-int buildin_areaannounce(struct script_state *st)
-{
-	char *map,*str;
-	int flag,m;
-	int x0,y0,x1,y1;
-
-	map=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	x0=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	y0=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	x1=conv_num(st,& (st->stack->stack_data[st->start+5]));
-	y1=conv_num(st,& (st->stack->stack_data[st->start+6]));
-	str=conv_str(st,& (st->stack->stack_data[st->start+7]));
-	flag=conv_num(st,& (st->stack->stack_data[st->start+8]));
-
-	if( (m=map_mapname2mapid(map))<0 )
-		return 0;
-
-	map_foreachinarea(buildin_mapannounce_sub,
-		m,x0,y0,x1,y1,BL_PC, str,strlen(str)+1,flag&0x10 );
-	return 0;
-}
-/*==========================================
- * ���[�U�[������
- *------------------------------------------
- */
-int buildin_getusers(struct script_state *st)
-{
-	int flag=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	struct block_list *bl=map_id2bl((flag&0x08)?st->oid:st->rid);
-	int val=0;
-	switch(flag&0x07){
-	case 0: val=map[bl->m].users; break;
-	case 1: val=map_getusers(); break;
-	}
-	push_val(st->stack,C_INT,val);
-	return 0;
-}
-/*==========================================
- * �}�b�v�w�胆�[�U�[������
- *------------------------------------------
- */
-int buildin_getmapusers(struct script_state *st)
-{
-	char *str;
-	int m;
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	if( (m=map_mapname2mapid(str))< 0){
-		push_val(st->stack,C_INT,-1);
-		return 0;
-	}
-	push_val(st->stack,C_INT,map[m].users);
-	return 0;
-}
-/*==========================================
- * �G���A�w�胆�[�U�[������
- *------------------------------------------
- */
-int buildin_getareausers_sub(struct block_list *bl,va_list ap)
-{
-	int *users=va_arg(ap,int *);
-	(*users)++;
-	return 0;
-}
-int buildin_getareausers(struct script_state *st)
-{
-	char *str;
-	int m,x0,y0,x1,y1,users=0;
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	x0=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	y0=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	x1=conv_num(st,& (st->stack->stack_data[st->start+5]));
-	y1=conv_num(st,& (st->stack->stack_data[st->start+6]));
-	if( (m=map_mapname2mapid(str))< 0){
-		push_val(st->stack,C_INT,-1);
-		return 0;
-	}
-	map_foreachinarea(buildin_getareausers_sub,
-		m,x0,y0,x1,y1,BL_PC,&users);
-	push_val(st->stack,C_INT,users);
-	return 0;
-}
-
-/*==========================================
- * �G���A�w��h���b�v�A�C�e��������
- *------------------------------------------
- */
-int buildin_getareadropitem_sub(struct block_list *bl,va_list ap)
-{
-	int item=va_arg(ap,int);
-	int *amount=va_arg(ap,int *);
-	struct flooritem_data *drop=(struct flooritem_data *)bl;
-
-	if(drop->item_data.nameid==item)
-		(*amount)+=drop->item_data.amount;
-
-	return 0;
-}
-int buildin_getareadropitem(struct script_state *st)
-{
-	char *str;
-	int m,x0,y0,x1,y1,item,amount=0;
-	struct script_data *data;
-
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	x0=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	y0=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	x1=conv_num(st,& (st->stack->stack_data[st->start+5]));
-	y1=conv_num(st,& (st->stack->stack_data[st->start+6]));
-
-	data=&(st->stack->stack_data[st->start+7]);
-	get_val(st,data);
-	if( data->type==C_STR || data->type==C_CONSTSTR ){
-		const char *name=conv_str(st,data);
-		struct item_data *item_data = itemdb_searchname(name);
-		item=512;
-		if( item_data )
-			item=item_data->nameid;
-	}else
-		item=conv_num(st,data);
-
-	if( (m=map_mapname2mapid(str))< 0){
-		push_val(st->stack,C_INT,-1);
-		return 0;
-	}
-	map_foreachinarea(buildin_getareadropitem_sub,
-		m,x0,y0,x1,y1,BL_ITEM,item,&amount);
-	push_val(st->stack,C_INT,amount);
-	return 0;
-}
-/*==========================================
- * NPC�̗L����
- *------------------------------------------
- */
-int buildin_enablenpc(struct script_state *st)
-{
-	char *str;
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	npc_enable(str,1);
-	return 0;
-}
-/*==========================================
- * NPC�̖�����
- *------------------------------------------
- */
-int buildin_disablenpc(struct script_state *st)
-{
-	char *str;
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	npc_enable(str,0);
-	return 0;
-}
-
-int buildin_enablearena(struct script_state *st)	// Added by RoVeRT
-{
-	struct npc_data *nd=(struct npc_data *)map_id2bl(st->oid);
-	struct chat_data *cd;
-
-
-	if(nd==NULL || (cd=(struct chat_data *)map_id2bl(nd->chat_id))==NULL)
-		return 0;
-
-	npc_enable(nd->name,1);
-	nd->arenaflag=1;
-
-	if(cd->users>=cd->trigger && cd->npc_event[0])
-		npc_timer_event(cd->npc_event);
-
-	return 0;
-}
-int buildin_disablearena(struct script_state *st)	// Added by RoVeRT
-{
-	struct npc_data *nd=(struct npc_data *)map_id2bl(st->oid);
-	nd->arenaflag=0;
-
-	return 0;
-}
-/*==========================================
- * �B��Ă���NPC�̕\��
- *------------------------------------------
- */
-int buildin_hideoffnpc(struct script_state *st)
-{
-	char *str;
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	npc_enable(str,2);
-	return 0;
-}
-/*==========================================
- * NPC���n�C�f�B���O
- *------------------------------------------
- */
-int buildin_hideonnpc(struct script_state *st)
-{
-	char *str;
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	npc_enable(str,4);
-	return 0;
-}
-/*==========================================
- * ��Ԉُ�ɂ�����
- *------------------------------------------
- */
-int buildin_sc_start(struct script_state *st)
-{
-	struct block_list *bl;
-	int type,tick,val1;
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	tick=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	val1=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	if( st->end>st->start+5 ) //�w�肵���L��������Ԉُ�ɂ���
-		bl = map_id2bl(conv_num(st,& (st->stack->stack_data[st->start+5])));
-	else
-	bl = map_id2bl(st->rid);
-	if(bl->type == BL_PC && ((struct map_session_data *)bl)->state.potionpitcher_flag)
-		bl = map_id2bl(((struct map_session_data *)bl)->skilltarget);
-	skill_status_change_start(bl,type,val1,0,0,0,tick,0);
-	return 0;
-}
-
-/*==========================================
- * ��Ԉُ�ɂ�����(�m���w��)
- *------------------------------------------
- */
-int buildin_sc_start2(struct script_state *st)
-{
-	struct block_list *bl;
-	int type,tick,val1,per;
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	tick=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	val1=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	per=conv_num(st,& (st->stack->stack_data[st->start+5]));
-	if( st->end>st->start+6 ) //�w�肵���L��������Ԉُ�ɂ���
-		bl = map_id2bl(conv_num(st,& (st->stack->stack_data[st->start+6])));
-	else
-	bl = map_id2bl(st->rid);
-	if(bl->type == BL_PC && ((struct map_session_data *)bl)->state.potionpitcher_flag)
-		bl = map_id2bl(((struct map_session_data *)bl)->skilltarget);
-	if(rand()%10000 < per)
-	skill_status_change_start(bl,type,val1,0,0,0,tick,0);
-	return 0;
-}
-
-/*==========================================
- * ��Ԉُ킪����
- *------------------------------------------
- */
-int buildin_sc_end(struct script_state *st)
-{
-	struct block_list *bl;
-	int type;
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	bl = map_id2bl(st->rid);
-	if(bl->type == BL_PC && ((struct map_session_data *)bl)->state.potionpitcher_flag)
-		bl = map_id2bl(((struct map_session_data *)bl)->skilltarget);
-	skill_status_change_end(bl,type,-1);
-//	if(battle_config.etc_log)
-//		printf("sc_end : %d %d\n",st->rid,type);
-	return 0;
-}
-/*==========================================
- * ��Ԉُ�ϐ����v�Z�����m����Ԃ�
- *------------------------------------------
- */
-int buildin_getscrate(struct script_state *st)
-{
-	struct block_list *bl;
-	int sc_def=100,sc_def_mdef2,sc_def_vit2,sc_def_int2,sc_def_luk2;
-	int type,rate,luk;
-
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	rate=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	if( st->end>st->start+4 ) //�w�肵���L�����̑ϐ����v�Z����
-		bl = map_id2bl(conv_num(st,& (st->stack->stack_data[st->start+6])));
-	else
-		bl = map_id2bl(st->rid);
-
-	luk = battle_get_luk(bl);
-	sc_def_mdef2=100 - (3 + battle_get_mdef(bl) + luk/3);
-	sc_def_vit2=100 - (3 + battle_get_vit(bl) + luk/3);
-	sc_def_int2=100 - (3 + battle_get_int(bl) + luk/3);
-	sc_def_luk2=100 - (3 + luk);
-
-	if(type==SC_STONE || type==SC_FREEZE)
-		sc_def=sc_def_mdef2;
-	else if(type==SC_STAN || type==SC_POISON || type==SC_SILENCE)
-		sc_def=sc_def_vit2;
-	else if(type==SC_SLEEP || type==SC_CONFUSION || type==SC_BLIND)
-		sc_def=sc_def_int2;
-	else if(type==SC_CURSE)
-		sc_def=sc_def_luk2;
-
-	rate=rate*sc_def/100;
-	push_val(st->stack,C_INT,rate);
-
-	return 0;
-
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_debugmes(struct script_state *st)
-{
-	conv_str(st,& (st->stack->stack_data[st->start+2]));
-	printf("script debug : %d %d : %s\n",st->rid,st->oid,st->stack->stack_data[st->start+2].u.str);
-	return 0;
-}
-
-/*==========================================
- *�ߊl�A�C�e���g�p
- *------------------------------------------
- */
-int buildin_catchpet(struct script_state *st)
-{
-	int pet_id;
-	struct map_session_data *sd;
-	pet_id= conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sd=script_rid2sd(st);
-	pet_catch_process1(sd,pet_id);
-	return 0;
-}
-
-/*==========================================
- *�g�ї��z���@�g�p
- *------------------------------------------
- */
-int buildin_birthpet(struct script_state *st)
-{
-	struct map_session_data *sd;
-	sd=script_rid2sd(st);
-	clif_sendegg(sd);
-	return 0;
-}
-
-/*==========================================
- * Added - AppleGirl For Advanced Classes, (Updated for Cleaner Script Purposes)
- *------------------------------------------
- */
-int buildin_resetlvl(struct script_state *st)
-{
-	struct map_session_data *sd;
-
-	int type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-
-	sd=script_rid2sd(st);
-	pc_resetlvl(sd,type);
-	return 0;
-}
-/*==========================================
- * �X�e�[�^�X���Z�b�g
- *------------------------------------------
- */
-int buildin_resetstatus(struct script_state *st)
-{
-	struct map_session_data *sd;
-	sd=script_rid2sd(st);
-	pc_resetstate(sd);
-	return 0;
-}
-
-/*==========================================
- * �X�L�����Z�b�g
- *------------------------------------------
- */
-int buildin_resetskill(struct script_state *st)
-{
-	struct map_session_data *sd;
-	sd=script_rid2sd(st);
-	pc_resetskill(sd);
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int buildin_changebase(struct script_state *st)
-{
-	struct map_session_data *sd=NULL;
-	int vclass;
-
-	if( st->end>st->start+3 )
-		sd=map_id2sd(conv_num(st,& (st->stack->stack_data[st->start+3])));
-	else
-	sd=script_rid2sd(st);
-
-	if(sd == NULL)
-		return 0;
-
-	vclass = conv_num(st,& (st->stack->stack_data[st->start+2]));
-	if(vclass == 22 && !battle_config.wedding_modifydisplay)
-		return 0;
-
-//	if(vclass==22) {
-//		pc_unequipitem(sd,sd->equip_index[9],0);	// �����O
-//	}
-
-	sd->view_class = vclass;
-
-	return 0;
-}
-
-/*==========================================
- * ���ʕϊ�
- *------------------------------------------
- */
-int buildin_changesex(struct script_state *st) {
-	struct map_session_data *sd = NULL;
-	sd = script_rid2sd(st);
-
-	if (sd->status.sex == 0) {
-		sd->status.sex = 1;
-		sd->sex = 1;
-		if (sd->status.class == 20 || sd->status.class == 4021)
-			sd->status.class -= 1;
-	} else if (sd->status.sex == 1) {
-		sd->status.sex = 0;
-		sd->sex = 0;
-		if(sd->status.class == 19 || sd->status.class == 4020)
-			sd->status.class += 1;
-	}
-	chrif_char_ask_name(-1, sd->status.name, 5, 0, 0, 0, 0, 0, 0); // type: 5 - changesex
-	chrif_save(sd);
-	return 0;
-}
-
-/*==========================================
- * npc�`���b�g�쐬
- *------------------------------------------
- */
-int buildin_waitingroom(struct script_state *st)
-{
-	char *name,*ev="";
-	int limit, trigger = 0,pub=1;
-	name=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	limit= conv_num(st,& (st->stack->stack_data[st->start+3]));
-	if(limit==0)
-		pub=3;
-
-	if( (st->end > st->start+5) ){
-		struct script_data* data=&(st->stack->stack_data[st->start+5]);
-		get_val(st,data);
-		if(data->type==C_INT){
-			// �VAthena�d�l(��Athena�d�l�ƌ݊�������)
-			ev=conv_str(st,& (st->stack->stack_data[st->start+4]));
-			trigger=conv_num(st,& (st->stack->stack_data[st->start+5]));
-		}else{
-			// eathena�d�l
-			trigger=conv_num(st,& (st->stack->stack_data[st->start+4]));
-			ev=conv_str(st,& (st->stack->stack_data[st->start+5]));
-		}
-	}else{
-		// ��Athena�d�l
-		if( st->end > st->start+4 )
-			ev=conv_str(st,& (st->stack->stack_data[st->start+4]));
-	}
-	chat_createnpcchat( (struct npc_data *)map_id2bl(st->oid),
-		limit,pub,trigger,name,strlen(name)+1,ev);
-	return 0;
-}
-/*==========================================
- * npc�`���b�g�폜
- *------------------------------------------
- */
-int buildin_delwaitingroom(struct script_state *st)
-{
-	struct npc_data *nd;
-	if( st->end > st->start+2 )
-		nd=npc_name2id(conv_str(st,& (st->stack->stack_data[st->start+2])));
-	else
-		nd=(struct npc_data *)map_id2bl(st->oid);
-	chat_deletenpcchat(nd);
-	return 0;
-}
-/*==========================================
- * npc�`���b�g�S���R��o��
- *------------------------------------------
- */
-int buildin_waitingroomkickall(struct script_state *st)
-{
-	struct npc_data *nd;
-	struct chat_data *cd;
-
-	if( st->end > st->start+2 )
-		nd=npc_name2id(conv_str(st,& (st->stack->stack_data[st->start+2])));
-	else
-		nd=(struct npc_data *)map_id2bl(st->oid);
-
-	if(nd==NULL || (cd=(struct chat_data *)map_id2bl(nd->chat_id))==NULL )
-		return 0;
-	chat_npckickall(cd);
-	return 0;
-}
-
-/*==========================================
- * npc�`���b�g�C�x���g�L����
- *------------------------------------------
- */
-int buildin_enablewaitingroomevent(struct script_state *st)
-{
-	struct npc_data *nd;
-	struct chat_data *cd;
-
-	if( st->end > st->start+2 )
-		nd=npc_name2id(conv_str(st,& (st->stack->stack_data[st->start+2])));
-	else
-		nd=(struct npc_data *)map_id2bl(st->oid);
-
-	if(nd==NULL || (cd=(struct chat_data *)map_id2bl(nd->chat_id))==NULL )
-		return 0;
-	chat_enableevent(cd);
-	return 0;
-}
-
-/*==========================================
- * npc�`���b�g�C�x���g������
- *------------------------------------------
- */
-int buildin_disablewaitingroomevent(struct script_state *st)
-{
-	struct npc_data *nd;
-	struct chat_data *cd;
-
-	if( st->end > st->start+2 )
-		nd=npc_name2id(conv_str(st,& (st->stack->stack_data[st->start+2])));
-	else
-		nd=(struct npc_data *)map_id2bl(st->oid);
-
-	if(nd==NULL || (cd=(struct chat_data *)map_id2bl(nd->chat_id))==NULL )
-		return 0;
-	chat_disableevent(cd);
-	return 0;
-}
-/*==========================================
- * npc�`���b�g��ԏ���
- *------------------------------------------
- */
-int buildin_getwaitingroomstate(struct script_state *st)
-{
-	struct npc_data *nd;
-	struct chat_data *cd;
-	int val=0,type;
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	if( st->end > st->start+3 )
-		nd=npc_name2id(conv_str(st,& (st->stack->stack_data[st->start+3])));
-	else
-		nd=(struct npc_data *)map_id2bl(st->oid);
-
-	if(nd==NULL || (cd=(struct chat_data *)map_id2bl(nd->chat_id))==NULL ){
-		push_val(st->stack,C_INT,-1);
-		return 0;
-	}
-
-	switch(type){
-	case 0: val=cd->users; break;
-	case 1: val=cd->limit; break;
-	case 2: val=cd->trigger&0x7f; break;
-	case 3: val=((cd->trigger&0x80)>0); break;
-	case 32: val=(cd->users >= cd->limit); break;
-	case 33: val=(cd->users >= cd->trigger); break;
-
-	case 4:
-		push_str(st->stack,C_CONSTSTR,cd->title);
-		return 0;
-	case 5:
-		push_str(st->stack,C_CONSTSTR,cd->pass);
-		return 0;
-	case 16:
-		push_str(st->stack,C_CONSTSTR,cd->npc_event);
-		return 0;
-	}
-	push_val(st->stack,C_INT,val);
-	return 0;
-}
-
-/*==========================================
- * �`���b�g�����o�[(�K��l��)���[�v
- *------------------------------------------
- */
-int buildin_warpwaitingpc(struct script_state *st)
-{
-	int x,y,i,n;
-	char *str;
-	struct npc_data *nd=(struct npc_data *)map_id2bl(st->oid);
-	struct chat_data *cd;
-
-	if(nd==NULL || (cd=(struct chat_data *)map_id2bl(nd->chat_id))==NULL )
-		return 0;
-
-	n=cd->trigger&0x7f;
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	x=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	y=conv_num(st,& (st->stack->stack_data[st->start+4]));
-
-	if( st->end > st->start+5 )
-		n=conv_num(st,& (st->stack->stack_data[st->start+5]));
-
-	for(i=0;i<n;i++){
-		struct map_session_data *sd=cd->usersd[0];	// ���X�g�擪��PC�����X�ɁB
-
-		mapreg_setreg(add_str("$@warpwaitingpc")+(i<<24),sd->bl.id);
-
-		if(strcmp(str,"Random")==0)
-			pc_randomwarp(sd,3);
-		else if(strcmp(str,"SavePoint")==0){
-			if(map[sd->bl.m].flag.noteleport)	// �e���|�֎~
-				return 0;
-
-			pc_setpos(sd,sd->status.save_point.map,
-				sd->status.save_point.x,sd->status.save_point.y,3);
-		}else
-			pc_setpos(sd,str,x,y,0);
-	}
-	mapreg_setreg(add_str("$@warpwaitingpcnum"),n);
-	return 0;
-}
-/*==========================================
- * RID�̃A�^�b�`
- *------------------------------------------
- */
-int buildin_attachrid(struct script_state *st)
-{
-	st->rid=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	push_val(st->stack,C_INT, (map_id2sd(st->rid)!=NULL));
-	return 0;
-}
-/*==========================================
- * RID�̃f�^�b�`
- *------------------------------------------
- */
-int buildin_detachrid(struct script_state *st)
-{
-	st->rid=0;
-	return 0;
-}
-/*==========================================
- * ���݃`�F�b�N
- *------------------------------------------
- */
-int buildin_isloggedin(struct script_state *st)
-{
-	push_val(st->stack,C_INT, map_id2sd(
-		conv_num(st,& (st->stack->stack_data[st->start+2])) )!=NULL );
-	return 0;
-}
-
-
-/*==========================================
- *
- *------------------------------------------
- */
-enum { MF_NOMEMO,MF_NOTELEPORT,MF_NOSAVE,MF_NOBRANCH,MF_NOPENALTY,MF_NOZENYPENALTY,MF_PVP,MF_PVP_NOPARTY,MF_PVP_NOGUILD,MF_GVG,MF_GVG_NOPARTY,MF_NOTRADE,MF_NOSKILL, MF_NOWARP,MF_NOPVP,MF_NOICEWALL,
-	MF_SNOW, MF_FOG, MF_SAKURA, MF_LEAVES, MF_RAIN };
-
-int buildin_setmapflagnosave(struct script_state *st)
-{
-	int m,x,y;
-	char *str,*str2;
-
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	str2=conv_str(st,& (st->stack->stack_data[st->start+3]));
-	x=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	y=conv_num(st,& (st->stack->stack_data[st->start+5]));
-	m = map_mapname2mapid(str);
-	if(m >= 0) {
-		map[m].flag.nosave=1;
-		memcpy(map[m].save.map,str2,16);
-		map[m].save.x=x;
-		map[m].save.y=y;
-	}
-
-	return 0;
-}
-
-int buildin_setmapflag(struct script_state *st)
-{
-	int m,i;
-	char *str;
-
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	i=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	m = map_mapname2mapid(str);
-	if(m >= 0) {
-		switch(i) {
-			case MF_NOMEMO:
-				map[m].flag.nomemo=1;
-				break;
-			case MF_NOTELEPORT:
-				map[m].flag.noteleport=1;
-				break;
-			case MF_NOBRANCH:
-				map[m].flag.nobranch=1;
-				break;
-			case MF_NOPENALTY:
-				map[m].flag.nopenalty=1;
-				break;
-			case MF_PVP_NOPARTY:
-				map[m].flag.pvp_noparty=1;
-				break;
-			case MF_PVP_NOGUILD:
-				map[m].flag.pvp_noguild=1;
-				break;
-			case MF_GVG_NOPARTY:
-				map[m].flag.gvg_noparty=1;
-				break;
-			case MF_NOZENYPENALTY:
-				map[m].flag.nozenypenalty=1;
-				break;
-			case MF_NOTRADE:
-				map[m].flag.notrade=1;
-				break;
-			case MF_NOSKILL:
-				map[m].flag.noskill=1;
-				break;
-			case MF_NOWARP:
-				map[m].flag.nowarp=1;
-				break;
-			case MF_NOPVP:
-				map[m].flag.nopvp=1;
-				break;
-			case MF_NOICEWALL: // [Valaris]
-				map[m].flag.noicewall=1;
-				break;
-			case MF_SNOW: // [Valaris]
-				map[m].flag.snow=1;
-				break;
-			case MF_FOG: // [Valaris]
-				map[m].flag.fog=1;
-				break;
-			case MF_SAKURA: // [Valaris]
-				map[m].flag.sakura=1;
-				break;
-			case MF_LEAVES: // [Valaris]
-				map[m].flag.leaves=1;
-				break;
-			case MF_RAIN: // [Valaris]
-				map[m].flag.rain=1;
-				break;
-		}
-	}
-
-	return 0;
-}
-
-int buildin_removemapflag(struct script_state *st)
-{
-	int m,i;
-	char *str;
-
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	i=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	m = map_mapname2mapid(str);
-	if(m >= 0) {
-		switch(i) {
-			case MF_NOMEMO:
-				map[m].flag.nomemo=0;
-				break;
-			case MF_NOTELEPORT:
-				map[m].flag.noteleport=0;
-				break;
-			case MF_NOSAVE:
-				map[m].flag.nosave=0;
-				break;
-			case MF_NOBRANCH:
-				map[m].flag.nobranch=0;
-				break;
-			case MF_NOPENALTY:
-				map[m].flag.nopenalty=0;
-				break;
-			case MF_PVP_NOPARTY:
-				map[m].flag.pvp_noparty=0;
-				break;
-			case MF_PVP_NOGUILD:
-				map[m].flag.pvp_noguild=0;
-				break;
-			case MF_GVG_NOPARTY:
-				map[m].flag.gvg_noparty=0;
-				break;
-			case MF_NOZENYPENALTY:
-				map[m].flag.nozenypenalty=0;
-				break;
-			case MF_NOSKILL:
-				map[m].flag.noskill=0;
-				break;
-			case MF_NOWARP:
-				map[m].flag.nowarp=0;
-				break;
-			case MF_NOPVP:
-				map[m].flag.nopvp=0;
-				break;
-			case MF_NOICEWALL: // [Valaris]
-				map[m].flag.noicewall=0;
-				break;
-			case MF_SNOW: // [Valaris]
-				map[m].flag.snow=0;
-				break;
-			case MF_FOG: // [Valaris]
-				map[m].flag.fog=0;
-				break;
-			case MF_SAKURA: // [Valaris]
-				map[m].flag.sakura=0;
-				break;
-			case MF_LEAVES: // [Valaris]
-				map[m].flag.leaves=0;
-				break;
-			case MF_RAIN: // [Valaris]
-				map[m].flag.rain=0;
-				break;
-
-		}
-	}
-
-	return 0;
-}
-
-int buildin_pvpon(struct script_state *st)
-{
-	int m,i;
-	char *str;
-	struct map_session_data *pl_sd=NULL;
-
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	m = map_mapname2mapid(str);
-	if(m >= 0 && !map[m].flag.pvp && !map[m].flag.nopvp) {
-		map[m].flag.pvp = 1;
-		clif_send0199(m,1);
-
-		if(battle_config.pk_mode) // disable ranking functions if pk_mode is on [Valaris]
-			return 0;
-
-		for(i=0;i<fd_max;i++){	//�l�������[�v
-			if(session[i] && (pl_sd=session[i]->session_data) && pl_sd->state.auth){
-				if(m == pl_sd->bl.m && pl_sd->pvp_timer == -1) {
-					pl_sd->pvp_timer=add_timer(gettick()+200,pc_calc_pvprank_timer,pl_sd->bl.id,0);
-					pl_sd->pvp_rank=0;
-					pl_sd->pvp_lastusers=0;
-					pl_sd->pvp_point=5;
-				}
-			}
-		}
-	}
-
-	return 0;
-}
-
-int buildin_pvpoff(struct script_state *st)
-{
-	int m,i;
-	char *str;
-	struct map_session_data *pl_sd=NULL;
-
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	m = map_mapname2mapid(str);
-	if(m >= 0 && map[m].flag.pvp && map[m].flag.nopvp) {
-		map[m].flag.pvp = 0;
-		clif_send0199(m,0);
-
-		if(battle_config.pk_mode) // disable ranking options if pk_mode is on [Valaris]
-			return 0;
-
-		for(i=0;i<fd_max;i++){	//�l�������[�v
-			if(session[i] && (pl_sd=session[i]->session_data) && pl_sd->state.auth){
-				if(m == pl_sd->bl.m) {
-					clif_pvpset(pl_sd,0,0,2);
-					if(pl_sd->pvp_timer != -1) {
-						delete_timer(pl_sd->pvp_timer,pc_calc_pvprank_timer);
-						pl_sd->pvp_timer = -1;
-					}
-				}
-			}
-		}
-	}
-
-	return 0;
-}
-
-int buildin_gvgon(struct script_state *st)
-{
-	int m;
-	char *str;
-
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	m = map_mapname2mapid(str);
-	if(m >= 0 && !map[m].flag.gvg) {
-		map[m].flag.gvg = 1;
-		clif_send0199(m,3);
-	}
-
-	return 0;
-}
-int buildin_gvgoff(struct script_state *st)
-{
-	int m;
-	char *str;
-
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	m = map_mapname2mapid(str);
-	if(m >= 0 && map[m].flag.gvg) {
-		map[m].flag.gvg = 0;
-		clif_send0199(m,0);
-	}
-
-	return 0;
-}
-/*==========================================
- *	NPC�G���[�V����
- *------------------------------------------
- */
-
-int buildin_emotion(struct script_state *st)
-{
-	int type;
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	if(type < 0 || type > 100)
-		return 0;
-	clif_emotion(map_id2bl(st->oid),type);
-	return 0;
-}
-
-int buildin_maprespawnguildid_sub(struct block_list *bl,va_list ap)
-{
-	int g_id=va_arg(ap,int);
-	int flag=va_arg(ap,int);
-	struct map_session_data *sd=NULL;
-	struct mob_data *md=NULL;
-
-	if(bl->type == BL_PC)
-		sd=(struct map_session_data*)bl;
-	if(bl->type == BL_MOB)
-		md=(struct mob_data *)bl;
-
-	if(sd){
-		if((sd->status.guild_id == g_id) && (flag&1))
-			pc_setpos(sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,3);
-		else if((sd->status.guild_id != g_id) && (flag&2))
-			pc_setpos(sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,3);
-		else if (sd->status.guild_id == 0)	// Warp out players not in guild [Valaris]
-			pc_setpos(sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,3);	// end addition [Valaris]
-	}
-	if(md && flag&4){
-		if(md->class < 1285 || md->class > 1288)
-			mob_delete(md);
-	}
-	return 0;
-}
-int buildin_maprespawnguildid(struct script_state *st)
-{
-	char *mapname=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	int g_id=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	int flag=conv_num(st,& (st->stack->stack_data[st->start+4]));
-
-	int m=map_mapname2mapid(mapname);
-
-	if(m) map_foreachinarea(buildin_maprespawnguildid_sub,m,0,0,map[m].xs-1,map[m].ys-1,BL_NUL,g_id,flag);
-	return 0;
-}
-
-int buildin_agitstart(struct script_state *st)
-{
-	if(agit_flag==1) return 1;      // Agit already Start.
-	agit_flag=1;
-	guild_agit_start();
-	return 0;
-}
-
-int buildin_agitend(struct script_state *st)
-{
-	if(agit_flag==0) return 1;      // Agit already End.
-	agit_flag=0;
-	guild_agit_end();
-	return 0;
-}
-/*==========================================
- * agitcheck 1;    // choice script
- * if(@agit_flag == 1) goto agit;
- * if(agitcheck(0) == 1) goto agit;
- *------------------------------------------
- */
-int buildin_agitcheck(struct script_state *st)
-{
-	struct map_session_data *sd;
-	int cond;
-
-	sd=script_rid2sd(st);
-	cond=conv_num(st,& (st->stack->stack_data[st->start+2]));
-
-	if(cond == 0) {
-		if (agit_flag==1) push_val(st->stack,C_INT,1);
-		if (agit_flag==0) push_val(st->stack,C_INT,0);
-	} else {
-		if (agit_flag==1) pc_setreg(sd,add_str("@agit_flag"),1);
-		if (agit_flag==0) pc_setreg(sd,add_str("@agit_flag"),0);
-	}
-	return 0;
-}
-int buildin_flagemblem(struct script_state *st)
-{
-	int g_id=conv_num(st,& (st->stack->stack_data[st->start+2]));
-
-	if(g_id < 0) return 0;
-
-//	printf("Script.c: [FlagEmblem] GuildID=%d, Emblem=%d.\n", g->guild_id, g->emblem_id);
-	((struct npc_data *)map_id2bl(st->oid))->u.scr.guild_id = g_id;
-	return 1;
-}
-
-int buildin_getcastlename(struct script_state *st)
-{
-	char *mapname=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	struct guild_castle *gc;
-	int i;
-	char *buf=NULL;
-	for(i=0;i<MAX_GUILDCASTLE;i++){
-		if( (gc=guild_castle_search(i)) != NULL ){
-			if(strcmp(mapname,gc->map_name)==0){
-				buf=(char *)aCalloc(24,sizeof(char));
-				strncpy(buf,gc->castle_name,24);
-				break;
-			}
-		}
-	}
-	if(buf)
-	push_str(st->stack,C_STR,buf);
-	else
-		push_str(st->stack,C_CONSTSTR,"");
-	return 0;
-}
-
-int buildin_getcastledata(struct script_state *st)
-{
-	char *mapname=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	int index=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	char *event=NULL;
-	struct guild_castle *gc;
-	int i,j;
-
-	if( st->end>st->start+4 && index==0){
-		for(i=0,j=-1;i<MAX_GUILDCASTLE;i++)
-			if( (gc=guild_castle_search(i)) != NULL &&
-				strcmp(mapname,gc->map_name)==0 )
-				j=i;
-		if(j>=0){
-			event=conv_str(st,& (st->stack->stack_data[st->start+4]));
-			guild_addcastleinfoevent(j,17,event);
-		}
-	}
-
-	for(i=0;i<MAX_GUILDCASTLE;i++){
-		if( (gc=guild_castle_search(i)) != NULL ){
-			if(strcmp(mapname,gc->map_name)==0){
-				switch(index){
-				case 0: for(j=1;j<26;j++) guild_castledataload(gc->castle_id,j); break;  // Initialize[AgitInit]
-				case 1: push_val(st->stack,C_INT,gc->guild_id); break;
-				case 2: push_val(st->stack,C_INT,gc->economy); break;
-				case 3: push_val(st->stack,C_INT,gc->defense); break;
-				case 4: push_val(st->stack,C_INT,gc->triggerE); break;
-				case 5: push_val(st->stack,C_INT,gc->triggerD); break;
-				case 6: push_val(st->stack,C_INT,gc->nextTime); break;
-				case 7: push_val(st->stack,C_INT,gc->payTime); break;
-				case 8: push_val(st->stack,C_INT,gc->createTime); break;
-				case 9: push_val(st->stack,C_INT,gc->visibleC); break;
-				case 10: push_val(st->stack,C_INT,gc->visibleG0); break;
-				case 11: push_val(st->stack,C_INT,gc->visibleG1); break;
-				case 12: push_val(st->stack,C_INT,gc->visibleG2); break;
-				case 13: push_val(st->stack,C_INT,gc->visibleG3); break;
-				case 14: push_val(st->stack,C_INT,gc->visibleG4); break;
-				case 15: push_val(st->stack,C_INT,gc->visibleG5); break;
-				case 16: push_val(st->stack,C_INT,gc->visibleG6); break;
-				case 17: push_val(st->stack,C_INT,gc->visibleG7); break;
-				case 18: push_val(st->stack,C_INT,gc->Ghp0); break;
-				case 19: push_val(st->stack,C_INT,gc->Ghp1); break;
-				case 20: push_val(st->stack,C_INT,gc->Ghp2); break;
-				case 21: push_val(st->stack,C_INT,gc->Ghp3); break;
-				case 22: push_val(st->stack,C_INT,gc->Ghp4); break;
-				case 23: push_val(st->stack,C_INT,gc->Ghp5); break;
-				case 24: push_val(st->stack,C_INT,gc->Ghp6); break;
-				case 25: push_val(st->stack,C_INT,gc->Ghp7); break;
-				default:
-					push_val(st->stack,C_INT,0); break;
-				}
-				return 0;
-			}
-		}
-	}
-	push_val(st->stack,C_INT,0);
-	return 0;
-}
-
-int buildin_setcastledata(struct script_state *st)
-{
-	char *mapname=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	int index=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	int value=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	struct guild_castle *gc;
-	int i;
-
-	for(i=0;i<MAX_GUILDCASTLE;i++){
-		if( (gc=guild_castle_search(i)) != NULL ){
-			if(strcmp(mapname,gc->map_name)==0){
-				// Save Data byself First
-				switch(index){
-				case 1: gc->guild_id = value; break;
-				case 2: gc->economy = value; break;
-				case 3: gc->defense = value; break;
-				case 4: gc->triggerE = value; break;
-				case 5: gc->triggerD = value; break;
-				case 6: gc->nextTime = value; break;
-				case 7: gc->payTime = value; break;
-				case 8: gc->createTime = value; break;
-				case 9: gc->visibleC = value; break;
-				case 10: gc->visibleG0 = value; break;
-				case 11: gc->visibleG1 = value; break;
-				case 12: gc->visibleG2 = value; break;
-				case 13: gc->visibleG3 = value; break;
-				case 14: gc->visibleG4 = value; break;
-				case 15: gc->visibleG5 = value; break;
-				case 16: gc->visibleG6 = value; break;
-				case 17: gc->visibleG7 = value; break;
-				case 18: gc->Ghp0 = value; break;
-				case 19: gc->Ghp1 = value; break;
-				case 20: gc->Ghp2 = value; break;
-				case 21: gc->Ghp3 = value; break;
-				case 22: gc->Ghp4 = value; break;
-				case 23: gc->Ghp5 = value; break;
-				case 24: gc->Ghp6 = value; break;
-				case 25: gc->Ghp7 = value; break;
-				default: return 0;
-				}
-				guild_castledatasave(gc->castle_id,index,value);
-				return 0;
-			}
-		}
-	}
-	return 0;
-}
-
-/* =====================================================================
- * �M���h����v������
- * ---------------------------------------------------------------------
- */
-int buildin_requestguildinfo(struct script_state *st)
-{
-	int guild_id=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	char *event=NULL;
-
-	if( st->end>st->start+3 )
-		event=conv_str(st,& (st->stack->stack_data[st->start+3]));
-
-	if(guild_id>0)
-		guild_npc_request_info(guild_id,event);
-	return 0;
-}
-
-/* =====================================================================
- * �J�[�h�̐��𓾂�
- * ---------------------------------------------------------------------
- */
-int buildin_getequipcardcnt(struct script_state *st)
-{
-	int i,num;
-	struct map_session_data *sd;
-	int c=4;
-
-	num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sd=script_rid2sd(st);
-	i=pc_checkequip(sd,equip[num-1]);
-	if(sd->status.inventory[i].card[0] == 0x00ff){ // ��������̓J�[�h�Ȃ�
-		push_val(st->stack,C_INT,0);
-		return 0;
-	}
-	do{
-		if( (sd->status.inventory[i].card[c-1] > 4000) &&
-			(sd->status.inventory[i].card[c-1] < 5000)){
-
-			push_val(st->stack,C_INT,(c));
-			return 0;
-		}
-	}while(c--);
-	push_val(st->stack,C_INT,0);
-	return 0;
-}
-
-/* ================================================================
- * �J�[�h���O������
- * ----------------------------------------------------------------
- */
-int buildin_successremovecards(struct script_state *st)
-{
-	int i,num,cardflag=0,flag;
-	struct map_session_data *sd;
-	struct item item_tmp;
-	int c=4;
-
-	num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	sd=script_rid2sd(st);
-	i=pc_checkequip(sd,equip[num-1]);
-	if(sd->status.inventory[i].card[0]==0x00ff){ // ��������͏������Ȃ�
-		return 0;
-	}
-	do{
-		if( (sd->status.inventory[i].card[c-1] > 4000) &&
-			(sd->status.inventory[i].card[c-1] < 5000)){ 
-
-			cardflag = 1;
-			item_tmp.id=0,item_tmp.nameid=sd->status.inventory[i].card[c-1];
-			item_tmp.equip=0,item_tmp.identify=1,item_tmp.refine=0;
-			item_tmp.attribute=0;
-			item_tmp.card[0]=0,item_tmp.card[1]=0,item_tmp.card[2]=0,item_tmp.card[3]=0;
-
-			if((flag=pc_additem(sd,&item_tmp,1))){	// ���ĂȂ��Ȃ�h���b�v
-				clif_additem(sd,0,0,flag);
-				map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
-			}
-		}
-	}while(c--);
-
-	if(cardflag == 1){	// �J�[�h����菜�����A�C�e������
-		flag=0;
-		item_tmp.id=0,item_tmp.nameid=sd->status.inventory[i].nameid;
-		item_tmp.equip=0,item_tmp.identify=1,item_tmp.refine=sd->status.inventory[i].refine;
-		item_tmp.attribute=sd->status.inventory[i].attribute;
-		item_tmp.card[0]=0,item_tmp.card[1]=0,item_tmp.card[2]=0,item_tmp.card[3]=0;
-		pc_delitem(sd,i,1,0);
-		if((flag=pc_additem(sd,&item_tmp,1))){	// ���ĂȂ��Ȃ�h���b�v
-			clif_additem(sd,0,0,flag);
-			map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
-		}
-		clif_misceffect(&sd->bl,3);
-		return 0;
-	}
-	return 0;
-}
-
-/* ================================================================
- * �J�[�h���O�����s slot,type
- * type=0: ���������A1:�J�[�h�����A2:������A3:��������
- * ----------------------------------------------------------------
- */
-int buildin_failedremovecards(struct script_state *st)
-{
-	int i,num,cardflag=0,flag,typefail;
-	struct map_session_data *sd;
-	struct item item_tmp;
-	int c=4;
-
-	num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	typefail=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	sd=script_rid2sd(st);
-	i=pc_checkequip(sd,equip[num-1]);
-	if(sd->status.inventory[i].card[0]==0x00ff){ // ��������͏������Ȃ�
-		return 0;
-	}
-	do{
-		if(( sd->status.inventory[i].card[c-1] > 4000) &&
-			 (sd->status.inventory[i].card[c-1] < 5000)){
-			 
-			cardflag = 1; 
-
-			if(typefail == 2){ // ����̂ݑ����Ȃ�A�J�[�h�͎󂯎�点��
-				item_tmp.id=0,item_tmp.nameid=sd->status.inventory[i].card[c-1];
-				item_tmp.equip=0,item_tmp.identify=1,item_tmp.refine=0;
-				item_tmp.attribute=0;
-				item_tmp.card[0]=0,item_tmp.card[1]=0,item_tmp.card[2]=0,item_tmp.card[3]=0;
-				if((flag=pc_additem(sd,&item_tmp,1))){
-					clif_additem(sd,0,0,flag);
-					map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
-				}
-			}
-		}
-	}while(c--);
-
-	if(cardflag == 1){
-
-		if(typefail == 0 || typefail == 2){	// �����
-			pc_delitem(sd,i,1,0);
-			clif_misceffect(&sd->bl,2);
-			return 0;
-		}
-		if(typefail == 1){	// �J�[�h�̂ݑ����i�����Ԃ��j
-			flag=0;
-			item_tmp.id=0,item_tmp.nameid=sd->status.inventory[i].nameid;
-			item_tmp.equip=0,item_tmp.identify=1,item_tmp.refine=sd->status.inventory[i].refine;
-			item_tmp.attribute=sd->status.inventory[i].attribute;
-			item_tmp.card[0]=0,item_tmp.card[1]=0,item_tmp.card[2]=0,item_tmp.card[3]=0;
-			pc_delitem(sd,i,1,0);
-			if((flag=pc_additem(sd,&item_tmp,1))){
-				clif_additem(sd,0,0,flag);
-				map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
-			}
-		}
-		clif_misceffect(&sd->bl,2);
-		return 0;
-	}
-	return 0;
-}
-
-int buildin_mapwarp(struct script_state *st)	// Added by RoVeRT
-{
-	int x,y,m;
-	char *str;
-	char *mapname;
-	int x0,y0,x1,y1;
-
-	mapname=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	x0=0;
-	y0=0;
-	x1=map[map_mapname2mapid(mapname)].xs;
-	y1=map[map_mapname2mapid(mapname)].ys;
-	str=conv_str(st,& (st->stack->stack_data[st->start+3]));
-	x=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	y=conv_num(st,& (st->stack->stack_data[st->start+5]));
-
-	if( (m=map_mapname2mapid(mapname))< 0)
-		return 0;
-
-	map_foreachinarea(buildin_areawarp_sub,
-		m,x0,y0,x1,y1,BL_PC,	str,x,y );
-	return 0;
-}
-
-int buildin_cmdothernpc(struct script_state *st)	// Added by RoVeRT
-{
-	char *npc,*command;
-
-	npc=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	command=conv_str(st,& (st->stack->stack_data[st->start+3]));
-
-	npc_command(map_id2sd(st->rid),npc,command);
-	return 0;
-}
-
-int buildin_inittimer(struct script_state *st)	// Added by RoVeRT
-{
-//	struct npc_data *nd=(struct npc_data*)map_id2bl(st->oid);
-
-//	nd->lastaction=nd->timer=gettick();
-	npc_do_ontimer(st->oid, map_id2sd(st->rid), 1);
-
-	return 0;
-}
-
-int buildin_stoptimer(struct script_state *st)	// Added by RoVeRT
-{
-//	struct npc_data *nd=(struct npc_data*)map_id2bl(st->oid);
-
-//	nd->lastaction=nd->timer=-1;
-	npc_do_ontimer(st->oid, map_id2sd(st->rid), 0);
-
-	return 0;
-}
-
-int buildin_mobcount_sub(struct block_list *bl,va_list ap)	// Added by RoVeRT
-{
-	char *event=va_arg(ap,char *);
-	int *c=va_arg(ap,int *);
-
-	if(strcmp(event,((struct mob_data *)bl)->npc_event)==0)
-		(*c)++;
-	return 0;
-}
-
-int buildin_mobcount(struct script_state *st)	// Added by RoVeRT
-{
-	char *mapname,*event;
-	int m,c=0;
-	mapname=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	event=conv_str(st,& (st->stack->stack_data[st->start+3]));
-
-	if( (m=map_mapname2mapid(mapname))<0 ) {
-		push_val(st->stack,C_INT,-1);
-		return 0;
-	}
-	map_foreachinarea(buildin_mobcount_sub,
-		m,0,0,map[m].xs,map[m].ys,BL_MOB, event,&c );
-
-	push_val(st->stack,C_INT, (c - 1));
-
-	return 0;
-}
-int buildin_marriage(struct script_state *st)
-{
-	char *partner=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	struct map_session_data *sd=script_rid2sd(st);
-	struct map_session_data *p_sd=map_nick2sd(partner);
-
-	if(sd==NULL || p_sd==NULL || pc_marriage(sd,p_sd) < 0){
-		push_val(st->stack,C_INT,0);
-		return 0;
-	}
-	push_val(st->stack,C_INT,1);
-	return 0;
-}
-int buildin_wedding_effect(struct script_state *st)
-{
-	struct map_session_data *sd=script_rid2sd(st);
-
-	if(sd==NULL)
-		return 0;
-	clif_wedding_effect(&sd->bl);
-	return 0;
-}
-int buildin_divorce(struct script_state *st)
-{
-	struct map_session_data *sd=script_rid2sd(st);
-	if(sd==NULL || pc_divorce(sd) < 0){
-		push_val(st->stack,C_INT,0);
-		return 0;
-	}
-	push_val(st->stack,C_INT,1);
-	return 0;
-}
-
-/*================================================
- * Script for Displaying MOB Information [Valaris]
- *------------------------------------------------
- */
-int buildin_strmobinfo(struct script_state *st)
-{
-
-	int num=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	int class=conv_num(st,& (st->stack->stack_data[st->start+3]));
-
-	if(num<=0 || num>=8 || (class>=0 && class<=1000) || class >2000)
-		return 0;
-
-	if(num==1) {
-		char *buf;
-		buf=calloc(24, 1);
-		buf=mob_db[class].name;
-		push_str(st->stack,C_STR,buf);
-		return 0;
-	}
-	else if(num==2)	{
-		char *buf;
-		buf=calloc(24, 1);
-		buf=mob_db[class].jname;
-		push_str(st->stack,C_STR,buf);
-		return 0;
-	}
-	else if(num==3)
-		push_val(st->stack,C_INT,mob_db[class].lv);
-	else if(num==4)
-		push_val(st->stack,C_INT,mob_db[class].max_hp);
-	else if(num==5)
-		push_val(st->stack,C_INT,mob_db[class].max_sp);
-	else if(num==6)
-		push_val(st->stack,C_INT,mob_db[class].base_exp);
-	else if(num==7)
-		push_val(st->stack,C_INT,mob_db[class].job_exp);
-	return 0;
-}
-
-/*==========================================
- * Summon guardians [Valaris]
- *------------------------------------------
- */
-int buildin_guardian(struct script_state *st)
-{
-	int class=0,amount=1,x=0,y=0,guardian=0;
-	char *str,*map,*event="";
-
-	map	=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	x	=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	y	=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	str	=conv_str(st,& (st->stack->stack_data[st->start+5]));
-	class=conv_num(st,& (st->stack->stack_data[st->start+6]));
-	amount=conv_num(st,& (st->stack->stack_data[st->start+7]));
-	event=conv_str(st,& (st->stack->stack_data[st->start+8]));
-	if( st->end>st->start+9 )
-		guardian=conv_num(st,& (st->stack->stack_data[st->start+9]));
-
-	mob_spawn_guardian(map_id2sd(st->rid),map,x,y,str,class,amount,event,guardian);
-
-	return 0;
-}
-
-/*================================================
- * Script for Displaying Guardian Info [Valaris]
- *------------------------------------------------
- */
-int buildin_guardianinfo(struct script_state *st)
-{
-	int guardian=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	struct map_session_data *sd=script_rid2sd(st);
-	struct guild_castle *gc=guild_mapname2gc(map[sd->bl.m].name);
-
-	if(guardian==0 && gc->visibleG0 == 1) push_val(st->stack,C_INT,gc->Ghp0);
-	if(guardian==1 && gc->visibleG1 == 1) push_val(st->stack,C_INT,gc->Ghp1);
-	if(guardian==2 && gc->visibleG2 == 1) push_val(st->stack,C_INT,gc->Ghp2);
-	if(guardian==3 && gc->visibleG3 == 1) push_val(st->stack,C_INT,gc->Ghp3);
-	if(guardian==4 && gc->visibleG4 == 1) push_val(st->stack,C_INT,gc->Ghp4);
-	if(guardian==5 && gc->visibleG5 == 1) push_val(st->stack,C_INT,gc->Ghp5);
-	if(guardian==6 && gc->visibleG6 == 1) push_val(st->stack,C_INT,gc->Ghp6);
-	if(guardian==7 && gc->visibleG7 == 1) push_val(st->stack,C_INT,gc->Ghp7);
-	else push_val(st->stack,C_INT,-1);
-
-	return 0;
-}
-/*==========================================
- * ID����Item��
- *------------------------------------------
- */
-int buildin_getitemname(struct script_state *st)
-{
-	int item_id;
-	struct item_data *i_data;
-	char *item_name;
-
-	item_id=conv_num(st,& (st->stack->stack_data[st->start+2]));
-
-	i_data = NULL;
-	i_data = itemdb_search(item_id);
-	item_name=(char *)aCalloc(24,sizeof(char));
-
-	strncpy(item_name,i_data->jname,23);
-	push_str(st->stack,C_STR,item_name);
-	return 0;
-}
-
-/*==========================================
- * petskillbonus [Valaris]
- *------------------------------------------
- */
-
-int buildin_petskillbonus(struct script_state *st)
-{
-	int type,val,duration,timer; 
-	struct pet_data *pd;
-
-	struct map_session_data *sd=script_rid2sd(st);	
-
-	if(sd==NULL || sd->pd==NULL) 
-		return 0;
-
-	pd=sd->pd;
-
-	if(pd==NULL)
-		return 0;
-
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	val=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	duration=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	timer=conv_num(st,& (st->stack->stack_data[st->start+5]));
-
-	pd->skillbonusduration=-1;
-	pd->skillbonustimer=-1;
-		
-	pet_skill_bonus(sd,pd,type,val,duration,timer,0);
-
-	return 0;
-}
-
-/*==========================================
- * pet looting [Valaris]
- *------------------------------------------
- */
-int buildin_petloot(struct script_state *st)
-{
-	int max;
-	struct pet_data *pd;
-
-	struct map_session_data *sd=script_rid2sd(st);
-	if(sd==NULL || sd->pd==NULL)
-		return 0;
-
-	pd=sd->pd;
-
-	if(pd==NULL)
-		return 0;
-
-	max=conv_num(st,& (st->stack->stack_data[st->start+2]));
-
-	if(!max)
-		return 0;
-	
-	pd->loot=1;
-	pd->lootmax=max;
-
-	return 0;
-}
-/*==========================================
- * PC�̏����i���ǂݎ��
- *------------------------------------------
- */
-int buildin_getinventorylist(struct script_state *st)
-{
-	struct map_session_data *sd=script_rid2sd(st);
-	int i,j=0;
-	if(!sd) return 0;
-	for(i=0;i<MAX_INVENTORY;i++){
-		if(sd->status.inventory[i].nameid > 0 && sd->status.inventory[i].amount > 0){
-			pc_setreg(sd,add_str("@inventorylist_id")+(j<<24),sd->status.inventory[i].nameid);
-			pc_setreg(sd,add_str("@inventorylist_amount")+(j<<24),sd->status.inventory[i].amount);
-			pc_setreg(sd,add_str("@inventorylist_equip")+(j<<24),sd->status.inventory[i].equip);
-			pc_setreg(sd,add_str("@inventorylist_refine")+(j<<24),sd->status.inventory[i].refine);
-			pc_setreg(sd,add_str("@inventorylist_identify")+(j<<24),sd->status.inventory[i].identify);
-			pc_setreg(sd,add_str("@inventorylist_attribute")+(j<<24),sd->status.inventory[i].attribute);
-			pc_setreg(sd,add_str("@inventorylist_card1")+(j<<24),sd->status.inventory[i].card[0]);
-			pc_setreg(sd,add_str("@inventorylist_card2")+(j<<24),sd->status.inventory[i].card[1]);
-			pc_setreg(sd,add_str("@inventorylist_card3")+(j<<24),sd->status.inventory[i].card[2]);
-			pc_setreg(sd,add_str("@inventorylist_card4")+(j<<24),sd->status.inventory[i].card[3]);
-			j++;
-		}
-	}
-	pc_setreg(sd,add_str("@inventorylist_count"),j);
-	return 0;
-}
-
-int buildin_getskilllist(struct script_state *st)
-{
-	struct map_session_data *sd=script_rid2sd(st);
-	int i,j=0;
-	if(!sd) return 0;
-	for(i=0;i<MAX_SKILL;i++){
-		if(sd->status.skill[i].id > 0 && sd->status.skill[i].lv > 0){
-			pc_setreg(sd,add_str("@skilllist_id")+(j<<24),sd->status.skill[i].id);
-			pc_setreg(sd,add_str("@skilllist_lv")+(j<<24),sd->status.skill[i].lv);
-			pc_setreg(sd,add_str("@skilllist_flag")+(j<<24),sd->status.skill[i].flag);
-			j++;
-		}
-	}
-	pc_setreg(sd,add_str("@skilllist_count"),j);
-	return 0;
-}
-
-int buildin_clearitem(struct script_state *st)
-{
-	struct map_session_data *sd=script_rid2sd(st);
-	int i;
-	if(sd==NULL) return 0;
-	for (i=0; i<MAX_INVENTORY; i++) {
-		if (sd->status.inventory[i].amount)
-			pc_delitem(sd, i, sd->status.inventory[i].amount, 0);
-	}
-	return 0;
-}
-
-/*==========================================
- * NPC�N���X�`�F���W
- * class�͕ς�肽��class
- * type�͒ʏ�0�Ȃ̂��ȁH
- *------------------------------------------
- */
-int buildin_classchange(struct script_state *st)
-{
-	int class,type;
-	struct block_list *bl=map_id2bl(st->oid);
-	
-	if(bl==NULL) return 0;
-
-	class=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	type=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	clif_class_change(bl,class,type);
-	return 0;
-}
-
-/*==========================================
- * NPC���甭������G�t�F�N�g
- *------------------------------------------
- */
-int buildin_misceffect(struct script_state *st)
-{
-	int type;
-
-	type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	if(st->oid)
-		clif_misceffect2(map_id2bl(st->oid),type);
-	else{
-		struct map_session_data *sd=script_rid2sd(st);
-		if(sd)
-			clif_misceffect2(&sd->bl,type);
-	}
-	return 0;
-}
-/*==========================================
- * �T�E���h�G�t�F�N�g
- *------------------------------------------
- */
-int buildin_soundeffect(struct script_state *st)
-{
-	struct map_session_data *sd=script_rid2sd(st);
-	char *name;
-	int type=0;
-
-
-	name=conv_str(st,& (st->stack->stack_data[st->start+2]));
-	type=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	if(sd){
-		if(st->oid)
-			clif_soundeffect(sd,map_id2bl(st->oid),name,type);
-		else{
-			clif_soundeffect(sd,&sd->bl,name,type);
-		}
-	}
-	return 0;
-}
-/*==========================================
- * pet status recovery [Valaris]
- *------------------------------------------
- */
-int buildin_petrecovery(struct script_state *st)
-{
-	struct pet_data *pd;
-
-	struct map_session_data *sd=script_rid2sd(st);	
-
-	if(sd==NULL || sd->pd==NULL) 
-		return 0;
-
-	pd=sd->pd;
-
-	if(pd==NULL)
-		return 0;
-
-	pd->skilltype=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	pd->skilltimer=conv_num(st,& (st->stack->stack_data[st->start+3]));
-
-	pd->skillbonustimer=add_timer(gettick()+pd->skilltimer*1000,pet_recovery_timer,sd->bl.id,0);
-
-	return 0;
-}
-
-/*==========================================
- * pet healing [Valaris]
- *------------------------------------------
- */
-int buildin_petheal(struct script_state *st)
-
-{
-	struct pet_data *pd;
-	struct map_session_data *sd=script_rid2sd(st);	
-
-	if(sd==NULL || sd->pd==NULL) 
-		return 0;
-
-	pd=sd->pd;
-
-	if(pd==NULL)
-		return 0;
-
-	pd->skilltype=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	pd->skillval=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	pd->skilltimer=conv_num(st,& (st->stack->stack_data[st->start+4]));
-
-	pd->skillbonustimer=add_timer(gettick()+pd->skilltimer*1000,pet_heal_timer,sd->bl.id,0);
-
-	return 0;
-}
-	
-/*==========================================
- * pet magnificat [Valaris]
- *------------------------------------------
- */
-int buildin_petmag(struct script_state *st)
-{
-	struct pet_data *pd;
-	struct map_session_data *sd=script_rid2sd(st);	
-
-	if(sd==NULL || sd->pd==NULL) 
-		return 0;
-
-	pd=sd->pd;
-
-	if(pd==NULL)
-		return 0;
-
-	pd->skilltype=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	pd->skillduration=conv_num(st,& (st->stack->stack_data[st->start+3]));
-	pd->skillval=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	pd->skilltimer=conv_num(st,& (st->stack->stack_data[st->start+5]));
-
-	pd->skillbonustimer=add_timer(gettick()+pd->skilltimer*1000,pet_mag_timer,sd->bl.id,0);
-
-	return 0;
-}
-
-/*==========================================
- * pet attack skills [Valaris]
- *------------------------------------------
- */
-int buildin_petskillattack(struct script_state *st)
-{
-	struct pet_data *pd;
-	struct map_session_data *sd=script_rid2sd(st);	
-
-	if(sd==NULL || sd->pd==NULL) 
-		return 0;
-
-	pd=sd->pd;
-
-	if(pd==NULL)
-		return 0;
-
-	pd->skilltype=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	pd->skillval=conv_num(st,& (st->stack->stack_data[st->start+3]));	
-	pd->skillduration=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	pd->skilltimer=conv_num(st,& (st->stack->stack_data[st->start+5]));
-
-	pd->skillbonustimer=add_timer(gettick()+100,pet_skillattack_timer,sd->bl.id,0);
-
-	return 0;
-}
-/*==========================================
- * NPC skill effects [Valaris]
- *------------------------------------------
- */
-int buildin_npcskilleffect(struct script_state *st)
-{
-	struct npc_data *nd=(struct npc_data *)map_id2bl(st->oid);
-	
-	int skillid=conv_num(st,& (st->stack->stack_data[st->start+2]));
-	int skilllv=conv_num(st,& (st->stack->stack_data[st->start+3]));	
-	int x=conv_num(st,& (st->stack->stack_data[st->start+4]));
-	int y=conv_num(st,& (st->stack->stack_data[st->start+5]));
-
-	clif_skill_poseffect(&nd->bl,skillid,skilllv,x,y,gettick());
-
-	return 0;
-}
-
-/*==========================================
- * Special effects [Valaris]
- *------------------------------------------
- */
-int buildin_specialeffect(struct script_state *st)
-{
-	struct block_list *bl=map_id2bl(st->oid);
-
-	if(bl==NULL)
-		return 0;
-
-	clif_specialeffect(bl,conv_num(st,& (st->stack->stack_data[st->start+2])), 0);
-
-	return 0;
-}
-
-int buildin_specialeffect2(struct script_state *st)
-{
-	struct map_session_data *sd=script_rid2sd(st);
-
-	if(sd==NULL)
-		return 0;
-
-	clif_specialeffect(&sd->bl,conv_num(st,& (st->stack->stack_data[st->start+2])), 0);
-
-	return 0;
-}
-
-/*==========================================
- * Nude [Valaris]
- *------------------------------------------
- */
-
-int buildin_nude(struct script_state *st)
-{
-	struct map_session_data *sd=script_rid2sd(st);	
-	int i;
-
-	if(sd==NULL)
-		return 0;
-	
-	for(i=0;i<11;i++) 
-		if(sd->equip_index[i] >= 0)
-			pc_unequipitem(sd,sd->equip_index[i],1);
-
-	return 0;
-}
-
-/*==========================================
- * gmcommand [MouseJstr]
- *
- * suggested on the forums...
- *------------------------------------------
- */
-
-int buildin_gmcommand(struct script_state *st)
-{
-	struct map_session_data *sd;
-	char *cmd;
-
-	sd = script_rid2sd(st);
-	cmd = conv_str(st,& (st->stack->stack_data[st->start+2]));
-
-        is_atcommand(sd->fd, sd, cmd, 99);
-
-	return 0;
-}
-
-/*==========================================
- * movenpc [MouseJstr]
- *------------------------------------------
- */
-
-int buildin_movenpc(struct script_state *st)
-{
-	struct map_session_data *sd;
-	char *map,*npc;
-	int x,y;
-
-	sd = script_rid2sd(st);
-
-	map = conv_str(st,& (st->stack->stack_data[st->start+2]));
-	x = conv_num(st,& (st->stack->stack_data[st->start+3]));
-	y = conv_num(st,& (st->stack->stack_data[st->start+4]));
-	npc = conv_str(st,& (st->stack->stack_data[st->start+5]));
-
-	return 0;
-}
-
-/*==========================================
- * message [MouseJstr]
- *------------------------------------------
- */
-
-int buildin_message(struct script_state *st)
-{
-	struct map_session_data *sd;
-	char *msg,*player;
-	struct map_session_data *pl_sd = NULL;
-
-	sd = script_rid2sd(st);
-
-	player = conv_str(st,& (st->stack->stack_data[st->start+2]));
-	msg = conv_str(st,& (st->stack->stack_data[st->start+3]));
-
-	if((pl_sd=map_nick2sd((char *) player)) == NULL)
-             return 1;
-	clif_displaymessage(pl_sd->fd, msg);
-
-	return 0;
-}
-
-/*==========================================
- * npctalk (sends message to surrounding
- * area) [Valaris]
- *------------------------------------------
- */
- 
-int buildin_npctalk(struct script_state *st)
-{
-	char *str;
-	char message[255];
-
-	struct npc_data *nd=(struct npc_data *)map_id2bl(st->oid);
-	str=conv_str(st,& (st->stack->stack_data[st->start+2]));
-
-	if(nd) {
-		memcpy(message,nd->name,24);
-		strcat(message," : ");
-		strcat(message,str);
-		clif_message(&(nd->bl), message);
-	}
-
-	return 0;
-}
-
-/*==========================================
- * hasitems (checks to see if player has any
- * items on them, if so will return a 1)
- * [Valaris]
- *------------------------------------------
- */
-
-int buildin_hasitems(struct script_state *st)
-{
-	int i;
-	struct map_session_data *sd;
-	
-	sd=script_rid2sd(st);
-	
-	for(i=0; i<MAX_INVENTORY; i++) {
-		if(sd->status.inventory[i].amount) {
-			push_val(st->stack,C_INT,1);
-			return 0;
-		}
-	}
-	
-	push_val(st->stack,C_INT,0);
-
-	return 0;
-}
-
-/*==========================================
-  * getlook char info. getlook(arg)
-  *------------------------------------------
-  */
-int buildin_getlook(struct script_state *st){
-        int type,val;
-        struct map_session_data *sd;
-        sd=script_rid2sd(st);
-
-        type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-        val=-1;
-        switch(type){
-        case LOOK_HAIR:	//1
-                val=sd->status.hair;
-                break;
-        case LOOK_WEAPON: //2
-                val=sd->status.weapon;
-                break;
-        case LOOK_HEAD_BOTTOM: //3
-                val=sd->status.head_bottom;
-                break;
-        case LOOK_HEAD_TOP: //4
-                val=sd->status.head_top;
-                break;
-        case LOOK_HEAD_MID: //5
-                val=sd->status.head_mid;
-                break;
-        case LOOK_HAIR_COLOR: //6
-                val=sd->status.hair_color;
-                break;
-        case LOOK_CLOTHES_COLOR: //7
-                val=sd->status.clothes_color;
-                break;
-        case LOOK_SHIELD: //8
-                val=sd->status.shield;
-                break;
-        case LOOK_SHOES: //9
-                break;
-        }
-
-        push_val(st->stack,C_INT,val);
-        return 0;
-}
-
-/*==========================================
-  *     get char save point. argument: 0- map name, 1- x, 2- y
-  *------------------------------------------
-*/
-int buildin_getsavepoint(struct script_state *st)
-{
-        int x,y,type;
-        char *mapname;
-        struct map_session_data *sd;
-
-        sd=script_rid2sd(st);
-
-        type=conv_num(st,& (st->stack->stack_data[st->start+2]));
-        mapname=calloc(24, 1);
-
-        x=sd->status.save_point.x;
-        y=sd->status.save_point.y;
-        strncpy(mapname,sd->status.save_point.map,24);
-        switch(type){
-            case 0:
-                push_str(st->stack,C_STR,mapname);
-                break;
-            case 1:
-                push_val(st->stack,C_INT,x);
-                break;
-            case 2:
-                push_val(st->stack,C_INT,y);
-                break;
-        }
-        return 0;
-}
-
-
-//
-// ���s��main
-//
-/*==========================================
- * �R�}���h�̓ǂݎ��
- *------------------------------------------
- */
-static int unget_com_data=-1;
-int get_com(unsigned char *script,int *pos)
-{
-	int i,j;
-	if(unget_com_data>=0){
-		i=unget_com_data;
-		unget_com_data=-1;
-		return i;
-	}
-	if(script[*pos]>=0x80){
-		return C_INT;
-	}
-	i=0; j=0;
-	while(script[*pos]>=0x40){
-		i=script[(*pos)++]<<j;
-		j+=6;
-	}
-	return i+(script[(*pos)++]<<j);
-}
-
-/*==========================================
- * �R�}���h�̃v�b�V���o�b�N
- *------------------------------------------
- */
-void unget_com(int c)
-{
-	if(unget_com_data!=-1){
-		if(battle_config.error_log)
-			printf("unget_com can back only 1 data\n");
-	}
-	unget_com_data=c;
-}
-
-/*==========================================
- * ���l�̏���
- *------------------------------------------
- */
-int get_num(unsigned char *script,int *pos)
-{
-	int i,j;
-	i=0; j=0;
-	while(script[*pos]>=0xc0){
-		i+=(script[(*pos)++]&0x7f)<<j;
-		j+=6;
-	}
-	return i+((script[(*pos)++]&0x7f)<<j);
-}
-
-/*==========================================
- * �X�^�b�N����l�����o��
- *------------------------------------------
- */
-int pop_val(struct script_state* st)
-{
-	if(st->stack->sp<=0)
-		return 0;
-	st->stack->sp--;
-	get_val(st,&(st->stack->stack_data[st->stack->sp]));
-	if(st->stack->stack_data[st->stack->sp].type==C_INT)
-		return st->stack->stack_data[st->stack->sp].u.num;
-	return 0;
-}
-
-#define isstr(c) ((c).type==C_STR || (c).type==C_CONSTSTR)
-
-/*==========================================
- * ���Z���Z�q
- *------------------------------------------
- */
-void op_add(struct script_state* st)
-{
-	st->stack->sp--;
-	get_val(st,&(st->stack->stack_data[st->stack->sp]));
-	get_val(st,&(st->stack->stack_data[st->stack->sp-1]));
-
-	if(isstr(st->stack->stack_data[st->stack->sp]) || isstr(st->stack->stack_data[st->stack->sp-1])){
-		conv_str(st,&(st->stack->stack_data[st->stack->sp]));
-		conv_str(st,&(st->stack->stack_data[st->stack->sp-1]));
-	}
-	if(st->stack->stack_data[st->stack->sp].type==C_INT){ // ii
-		st->stack->stack_data[st->stack->sp-1].u.num += st->stack->stack_data[st->stack->sp].u.num;
-	} else { // ss�̗\��
-		char *buf;
-		buf=(char *)aCalloc(strlen(st->stack->stack_data[st->stack->sp-1].u.str)+
-				strlen(st->stack->stack_data[st->stack->sp].u.str)+1,sizeof(char));
-		strcpy(buf,st->stack->stack_data[st->stack->sp-1].u.str);
-		strcat(buf,st->stack->stack_data[st->stack->sp].u.str);
-		if(st->stack->stack_data[st->stack->sp-1].type==C_STR)
-			free(st->stack->stack_data[st->stack->sp-1].u.str);
-		if(st->stack->stack_data[st->stack->sp].type==C_STR)
-			free(st->stack->stack_data[st->stack->sp].u.str);
-		st->stack->stack_data[st->stack->sp-1].type=C_STR;
-		st->stack->stack_data[st->stack->sp-1].u.str=buf;
-	}
-}
-
-/*==========================================
- * �񍀉��Z�q(������)
- *------------------------------------------
- */
-void op_2str(struct script_state *st,int op,int sp1,int sp2)
-{
-	char *s1=st->stack->stack_data[sp1].u.str,
-		 *s2=st->stack->stack_data[sp2].u.str;
-	int a=0;
-
-	switch(op){
-	case C_EQ:
-		a= (strcmp(s1,s2)==0);
-		break;
-	case C_NE:
-		a= (strcmp(s1,s2)!=0);
-		break;
-	case C_GT:
-		a= (strcmp(s1,s2)> 0);
-		break;
-	case C_GE:
-		a= (strcmp(s1,s2)>=0);
-		break;
-	case C_LT:
-		a= (strcmp(s1,s2)< 0);
-		break;
-	case C_LE:
-		a= (strcmp(s1,s2)<=0);
-		break;
-	default:
-		printf("illegal string operater\n");
-		break;
-	}
-
-	push_val(st->stack,C_INT,a);
-
-	if(st->stack->stack_data[sp1].type==C_STR)	free(s1);
-	if(st->stack->stack_data[sp2].type==C_STR)	free(s2);
-}
-/*==========================================
- * �񍀉��Z�q(���l)
- *------------------------------------------
- */
-void op_2num(struct script_state *st,int op,int i1,int i2)
-{
-	switch(op){
-	case C_SUB:
-		i1-=i2;
-		break;
-	case C_MUL:
-		i1*=i2;
-		break;
-	case C_DIV:
-		i1/=i2;
-		break;
-	case C_MOD:
-		i1%=i2;
-		break;
-	case C_AND:
-		i1&=i2;
-		break;
-	case C_OR:
-		i1|=i2;
-		break;
-	case C_XOR:
-		i1^=i2;
-		break;
-	case C_LAND:
-		i1=i1&&i2;
-		break;
-	case C_LOR:
-		i1=i1||i2;
-		break;
-	case C_EQ:
-		i1=i1==i2;
-		break;
-	case C_NE:
-		i1=i1!=i2;
-		break;
-	case C_GT:
-		i1=i1>i2;
-		break;
-	case C_GE:
-		i1=i1>=i2;
-		break;
-	case C_LT:
-		i1=i1<i2;
-		break;
-	case C_LE:
-		i1=i1<=i2;
-		break;
-	case C_R_SHIFT:
-		i1=i1>>i2;
-		break;
-	case C_L_SHIFT:
-		i1=i1<<i2;
-		break;
-	}
-	push_val(st->stack,C_INT,i1);
-}
-/*==========================================
- * �񍀉��Z�q
- *------------------------------------------
- */
-void op_2(struct script_state *st,int op)
-{
-	int i1,i2;
-	char *s1=NULL,*s2=NULL;
-
-	i2=pop_val(st);
-	if( isstr(st->stack->stack_data[st->stack->sp]) )
-		s2=st->stack->stack_data[st->stack->sp].u.str;
-
-	i1=pop_val(st);
-	if( isstr(st->stack->stack_data[st->stack->sp]) )
-		s1=st->stack->stack_data[st->stack->sp].u.str;
-
-	if( s1!=NULL && s2!=NULL ){
-		// ss => op_2str
-		op_2str(st,op,st->stack->sp,st->stack->sp+1);
-	}else if( s1==NULL && s2==NULL ){
-		// ii => op_2num
-		op_2num(st,op,i1,i2);
-	}else{
-		// si,is => error
-		printf("script: op_2: int&str, str&int not allow.");
-		push_val(st->stack,C_INT,0);
-	}
-}
-
-/*==========================================
- * �P�����Z�q
- *------------------------------------------
- */
-void op_1num(struct script_state *st,int op)
-{
-	int i1;
-	i1=pop_val(st);
-	switch(op){
-	case C_NEG:
-		i1=-i1;
-		break;
-	case C_NOT:
-		i1=~i1;
-		break;
-	case C_LNOT:
-		i1=!i1;
-		break;
-	}
-	push_val(st->stack,C_INT,i1);
-}
-
-
-/*==========================================
- * �֐��̎��s
- *------------------------------------------
- */
-int run_func(struct script_state *st)
-{
-	int i,start_sp,end_sp,func;
-
-	end_sp=st->stack->sp;
-	for(i=end_sp-1;i>=0 && st->stack->stack_data[i].type!=C_ARG;i--);
-	if(i==0){
-		if(battle_config.error_log)
-			printf("function not found\n");
-//		st->stack->sp=0;
-		st->state=END;
-		return 0;
-	}
-	start_sp=i-1;
-	st->start=i-1;
-	st->end=end_sp;
-
-	func=st->stack->stack_data[st->start].u.num;
-	if( st->stack->stack_data[st->start].type!=C_NAME || str_data[func].type!=C_FUNC ){
-		printf("run_func: not function and command! \n");
-//		st->stack->sp=0;
-		st->state=END;
-		return 0;
-	}
-#ifdef DEBUG_RUN
-	if(battle_config.etc_log) {
-		printf("run_func : %s? (%d(%d))\n",str_buf+str_data[func].str,func,str_data[func].type);
-		printf("stack dump :");
-		for(i=0;i<end_sp;i++){
-			switch(st->stack->stack_data[i].type){
-			case C_INT:
-				printf(" int(%d)",st->stack->stack_data[i].u.num);
-				break;
-			case C_NAME:
-				printf(" name(%s)",str_buf+str_data[st->stack->stack_data[i].u.num].str);
-				break;
-			case C_ARG:
-				printf(" arg");
-				break;
-			case C_POS:
-				printf(" pos(%d)",st->stack->stack_data[i].u.num);
-				break;
-			default:
-				printf(" %d,%d",st->stack->stack_data[i].type,st->stack->stack_data[i].u.num);
-			}
-		}
-		printf("\n");
-	}
-#endif
-	if(str_data[func].func){
-		str_data[func].func(st);
-	} else {
-		if(battle_config.error_log)
-			printf("run_func : %s? (%d(%d))\n",str_buf+str_data[func].str,func,str_data[func].type);
-		push_val(st->stack,C_INT,0);
-	}
-
-	pop_stack(st->stack,start_sp,end_sp);
-
-	if(st->state==RETFUNC){
-		// ���[�U�[��`�֐�����̕��A
-		int olddefsp=st->defsp;
-		int i;
-
-		pop_stack(st->stack,st->defsp,start_sp);	// ���A�Ɏז��ȃX�^�b�N�폜
-		if(st->defsp<4 || st->stack->stack_data[st->defsp-1].type!=C_RETINFO){
-			printf("script:run_func(return) return without callfunc or callsub!\n");
-			st->state=END;
-			return 0;
-		}
-		i = conv_num(st,& (st->stack->stack_data[st->defsp-4]));				// �����̐�����
-		st->pos=conv_num(st,& (st->stack->stack_data[st->defsp-1]));			// �X�N���v�g�ʒu�̕���
-		st->script=(char*)conv_num(st,& (st->stack->stack_data[st->defsp-2]));	// �X�N���v�g�𕜌�
-		st->defsp=conv_num(st,& (st->stack->stack_data[st->defsp-3]));			// ��X�^�b�N�|�C���^�𕜌�
-
-		pop_stack(st->stack,olddefsp-4-i,olddefsp);		// �v��Ȃ��Ȃ����X�^�b�N(�����ƕ��A�p�f�[�^)�폜
-
-		st->state=GOTO;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �X�N���v�g�̎��s���C������
- *------------------------------------------
- */
-int run_script_main(unsigned char *script,int pos,int rid,int oid,struct script_state *st,unsigned char *rootscript)
-{
-	int c,rerun_pos;
-	int cmdcount=script_config.check_cmdcount;
-	int gotocount=script_config.check_gotocount;
-	struct script_stack *stack=st->stack;
-
-	st->defsp=stack->sp;
-	st->script=script;
-
-	rerun_pos=st->pos;
-	for(st->state=0;st->state==0;){
-		switch(c=get_com(script,&st->pos)){
-		case C_EOL:
-			if(stack->sp!=st->defsp){
-				if(battle_config.error_log)
-					printf("stack.sp(%d) != default(%d)\n",stack->sp,st->defsp);
-				stack->sp=st->defsp;
-			}
-			rerun_pos=st->pos;
-			break;
-		case C_INT:
-			push_val(stack,C_INT,get_num(script,&st->pos));
-			break;
-		case C_POS:
-		case C_NAME:
-			push_val(stack,c,(*(int*)(script+st->pos))&0xffffff);
-			st->pos+=3;
-			break;
-		case C_ARG:
-			push_val(stack,c,0);
-			break;
-		case C_STR:
-			push_str(stack,C_CONSTSTR,script+st->pos);
-			while(script[st->pos++]);
-			break;
-		case C_FUNC:
-			run_func(st);
-			if(st->state==GOTO){
-				rerun_pos=st->pos;
-				script=st->script;
-				st->state=0;
-				if( gotocount>0 && (--gotocount)<=0 ){
-					printf("run_script: infinity loop !\n");
-					st->state=END;
-				}
-			}
-			break;
-
-		case C_ADD:
-			op_add(st);
-			break;
-
-		case C_SUB:
-		case C_MUL:
-		case C_DIV:
-		case C_MOD:
-		case C_EQ:
-		case C_NE:
-		case C_GT:
-		case C_GE:
-		case C_LT:
-		case C_LE:
-		case C_AND:
-		case C_OR:
-		case C_XOR:
-		case C_LAND:
-		case C_LOR:
-		case C_R_SHIFT:
-		case C_L_SHIFT:
-			op_2(st,c);
-			break;
-
-		case C_NEG:
-		case C_NOT:
-		case C_LNOT:
-			op_1num(st,c);
-			break;
-
-		case C_NOP:
-			st->state=END;
-			break;
-
-		default:
-			if(battle_config.error_log)
-				printf("unknown command : %d @ %d\n",c,pos);
-			st->state=END;
-			break;
-		}
-		if( cmdcount>0 && (--cmdcount)<=0 ){
-			printf("run_script: infinity loop !\n");
-			st->state=END;
-		}
-	}
-	switch(st->state){
-	case STOP:
-		break;
-	case END:
-		{
-			struct map_session_data *sd=map_id2sd(st->rid);
-			st->pos=-1;
-			if(sd && sd->npc_id==st->oid)
-				npc_event_dequeue(sd);
-		}
-		break;
-	case RERUNLINE:
-		{
-			st->pos=rerun_pos;
-		}
-		break;
-	}
-
-	if( st->state!=END){
-		// �ĊJ���邽�߂ɃX�^�b�N����ۑ�
-		struct map_session_data *sd=map_id2sd(st->rid);
-		if(sd/* && sd->npc_stackbuf==NULL*/){
-			if( sd->npc_stackbuf )
-				free( sd->npc_stackbuf );
-			sd->npc_stackbuf = (char *)aCalloc(sizeof(stack->stack_data[0])*stack->sp_max,sizeof(char));
-			memcpy(sd->npc_stackbuf, stack->stack_data, sizeof(stack->stack_data[0]) * stack->sp_max);
-			sd->npc_stack = stack->sp;
-			sd->npc_stackmax = stack->sp_max;
-			sd->npc_script=script;
-			sd->npc_scriptroot=rootscript;
-		}
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �X�N���v�g�̎��s
- *------------------------------------------
- */
-int run_script(unsigned char *script,int pos,int rid,int oid)
-{
-	struct script_stack stack;
-	struct script_state st;
-	struct map_session_data *sd=map_id2sd(rid);
-	unsigned char *rootscript=script;
-
-	if(script==NULL || pos<0)
-		return -1;
-
-	if(sd && sd->npc_stackbuf && sd->npc_scriptroot==(char*)rootscript){
-		// �O��̃X�^�b�N�𕜋A
-		script=sd->npc_script;
-		stack.sp=sd->npc_stack;
-		stack.sp_max=sd->npc_stackmax;
-		stack.stack_data=(struct script_data *)aCalloc(stack.sp_max,sizeof(stack.stack_data[0]));
-		memcpy(stack.stack_data,sd->npc_stackbuf,sizeof(stack.stack_data[0])*stack.sp_max);
-		free(sd->npc_stackbuf);
-		sd->npc_stackbuf=NULL;
-	}else{
-		// �X�^�b�N������
-		stack.sp=0;
-		stack.sp_max=64;
-		stack.stack_data=(struct script_data *)aCalloc(stack.sp_max,sizeof(stack.stack_data[0]));
-	}
-	st.stack=&stack;
-	st.pos=pos;
-	st.rid=rid;
-	st.oid=oid;
-	run_script_main(script,pos,rid,oid,&st,rootscript);
-
-	free(stack.stack_data);
-	stack.stack_data=NULL;
-	return st.pos;
-}
-
-
-/*==========================================
- * �}�b�v�ϐ��̕ύX
- *------------------------------------------
- */
-int mapreg_setreg(int num,int val)
-{
-	if(val!=0)
-		numdb_insert(mapreg_db,num,val);
-	else
-		numdb_erase(mapreg_db,num);
-
-	mapreg_dirty=1;
-	return 0;
-}
-/*==========================================
- * ������^�}�b�v�ϐ��̕ύX
- *------------------------------------------
- */
-int mapreg_setregstr(int num,const char *str)
-{
-	char *p;
-
-	if( (p=numdb_search(mapregstr_db,num))!=NULL )
-		free(p);
-
-	if( str==NULL || *str==0 ){
-		numdb_erase(mapregstr_db,num);
-		mapreg_dirty=1;
-		return 0;
-	}
-	p=(char *)aCalloc(strlen(str)+1, sizeof(char));
-	strcpy(p,str);
-	numdb_insert(mapregstr_db,num,p);
-	mapreg_dirty=1;
-	return 0;
-}
-
-/*==========================================
- * �i���I�}�b�v�ϐ��̓ǂݍ���
- *------------------------------------------
- */
-static int script_load_mapreg()
-{
-	FILE *fp;
-	char line[1024];
-
-	if( (fp=fopen(mapreg_txt,"rt"))==NULL )
-		return -1;
-
-	while(fgets(line,sizeof(line),fp)){
-		char buf1[256],buf2[1024],*p;
-		int n,v,s,i;
-		if( sscanf(line,"%255[^,],%d\t%n",buf1,&i,&n)!=2 &&
-			(i=0,sscanf(line,"%[^\t]\t%n",buf1,&n)!=1) )
-			continue;
-		if( buf1[strlen(buf1)-1]=='$' ){
-			if( sscanf(line+n,"%[^\n\r]",buf2)!=1 ){
-				printf("%s: %s broken data !\n",mapreg_txt,buf1);
-				continue;
-			}
-			p=(char *)aCalloc(strlen(buf2) + 1,sizeof(char));
-			strcpy(p,buf2);
-			s=add_str(buf1);
-			numdb_insert(mapregstr_db,(i<<24)|s,p);
-		}else{
-			if( sscanf(line+n,"%d",&v)!=1 ){
-				printf("%s: %s broken data !\n",mapreg_txt,buf1);
-				continue;
-			}
-			s=add_str(buf1);
-			numdb_insert(mapreg_db,(i<<24)|s,v);
-		}
-	}
-	fclose(fp);
-	mapreg_dirty=0;
-	return 0;
-}
-/*==========================================
- * �i���I�}�b�v�ϐ��̏�������
- *------------------------------------------
- */
-static int script_save_mapreg_intsub(void *key,void *data,va_list ap)
-{
-	FILE *fp=va_arg(ap,FILE*);
-	int num=((int)key)&0x00ffffff, i=((int)key)>>24;
-	char *name=str_buf+str_data[num].str;
-	if( name[1]!='@' ){
-		if(i==0)
-			fprintf(fp,"%s\t%d\n", name, (int)data);
-		else
-			fprintf(fp,"%s,%d\t%d\n", name, i, (int)data);
-	}
-	return 0;
-}
-static int script_save_mapreg_strsub(void *key,void *data,va_list ap)
-{
-	FILE *fp=va_arg(ap,FILE*);
-	int num=((int)key)&0x00ffffff, i=((int)key)>>24;
-	char *name=str_buf+str_data[num].str;
-	if( name[1]!='@' ){
-		if(i==0)
-			fprintf(fp,"%s\t%s\n", name, (char *)data);
-		else
-			fprintf(fp,"%s,%d\t%s\n", name, i, (char *)data);
-	}
-	return 0;
-}
-static int script_save_mapreg()
-{
-	FILE *fp;
-	int lock;
-
-	if( (fp=lock_fopen(mapreg_txt,&lock))==NULL )
-		return -1;
-	numdb_foreach(mapreg_db,script_save_mapreg_intsub,fp);
-	numdb_foreach(mapregstr_db,script_save_mapreg_strsub,fp);
-	lock_fclose(fp,mapreg_txt,&lock);
-	mapreg_dirty=0;
-	return 0;
-}
-static int script_autosave_mapreg(int tid,unsigned int tick,int id,int data)
-{
-	if(mapreg_dirty)
-		script_save_mapreg();
-	return 0;
-}
-
-/*==========================================
- * 
- *------------------------------------------
- */
-static int set_posword(char *p)
-{
-	char* np,* str[15];
-	int i=0;
-	for(i=0;i<11;i++) {
-		if((np=strchr(p,','))!=NULL) {
-			str[i]=p;
-			*np=0;
-			p=np+1;
-		} else {
-			str[i]=p;
-			p+=strlen(p);
-		}
-		if(str[i])
-			strcpy(pos[i],str[i]);
-	}
-	return 0;
-}
-
-int script_config_read(char *cfgName)
-{
-	int i;
-	char line[1024],w1[1024],w2[1024];
-	FILE *fp;
-
-	script_config.warn_func_no_comma=1;
-	script_config.warn_cmd_no_comma=1;
-	script_config.warn_func_mismatch_paramnum=1;
-	script_config.warn_cmd_mismatch_paramnum=1;
-	script_config.check_cmdcount=8192;
-	script_config.check_gotocount=512;
-
-	fp=fopen(cfgName,"r");
-	if(fp==NULL){
-		printf("file not found: %s\n",cfgName);
-		return 1;
-	}
-	while(fgets(line,1020,fp)){
-		if(line[0] == '/' && line[1] == '/')
-			continue;
-		i=sscanf(line,"%[^:]: %[^\r\n]",w1,w2);
-		if(i!=2)
-			continue;
-		if(strcmpi(w1,"refine_posword")==0) {
-			set_posword(w2);
-		}
-		if(strcmpi(w1,"import")==0){
-			script_config_read(w2);
-		}
-	}
-	fclose(fp);
-
-	return 0;
-}
-
-/*==========================================
- * �I��
- *------------------------------------------
- */
-static int mapreg_db_final(void *key,void *data,va_list ap)
-{
-	return 0;
-}
-static int mapregstr_db_final(void *key,void *data,va_list ap)
-{
-	free(data);
-	return 0;
-}
-static int scriptlabel_db_final(void *key,void *data,va_list ap)
-{
-	return 0;
-}
-static int userfunc_db_final(void *key,void *data,va_list ap)
-{
-	free(key);
-	free(data);
-	return 0;
-}
-int do_final_script()
-{
-	if(mapreg_dirty>=0)
-		script_save_mapreg();
-	if(script_buf)
-		free(script_buf);
-
-	if(mapreg_db)
-		numdb_final(mapreg_db,mapreg_db_final);
-	if(mapregstr_db)
-		strdb_final(mapregstr_db,mapregstr_db_final);
-	if(scriptlabel_db)
-		strdb_final(scriptlabel_db,scriptlabel_db_final);
-	if(userfunc_db)
-		strdb_final(userfunc_db,userfunc_db_final);
-
-        if (str_data)
-            free(str_data);
-        if (str_buf)
-            free(str_buf);
-
-	return 0;
-}
-/*==========================================
- * ������
- *------------------------------------------
- */
-int do_init_script()
-{
-	mapreg_db=numdb_init();
-	mapregstr_db=numdb_init();
-	script_load_mapreg();
-
-	add_timer_func_list(script_autosave_mapreg,"script_autosave_mapreg");
-	add_timer_interval(gettick()+MAPREG_AUTOSAVE_INTERVAL,
-		script_autosave_mapreg,0,0,MAPREG_AUTOSAVE_INTERVAL);
-
-	scriptlabel_db=strdb_init(50);
-	return 0;
-}
diff --git a/misc/src/map/script.h b/misc/src/map/script.h
deleted file mode 100644
index b50c466..0000000
--- a/misc/src/map/script.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// $Id: script.h,v 1.2 2004/09/25 05:32:19 MouseJstr Exp $
-#ifndef _SCRIPT_H_
-#define _SCRIPT_H_
-
-struct script_data {
-	int type;
-	union {
-		int num;
-		char *str;
-	} u;
-};
-
-struct script_stack {
-	int sp,sp_max;
-	struct script_data *stack_data;
-};
-struct script_state {
-	struct script_stack *stack;
-	int start,end;
-	int pos,state;
-	int rid,oid;
-	char *script,*new_script;
-	int defsp,new_pos,new_defsp;
-};
-
-unsigned char * parse_script(unsigned char *,int);
-int run_script(unsigned char *,int,int,int);
-
-struct dbt* script_get_label_db();
-struct dbt* script_get_userfunc_db();
-
-int script_config_read(char *cfgName);
-int do_init_script();
-int do_final_script();
-
-extern char mapreg_txt[];
-
-#endif
-
diff --git a/misc/src/map/skill.c b/misc/src/map/skill.c
deleted file mode 100644
index 1e92b3f..0000000
--- a/misc/src/map/skill.c
+++ /dev/null
@@ -1,10637 +0,0 @@
-// $Id: skill.c,v 1.8 2004/09/25 05:32:19 MouseJstr Exp $
-/* �X�L���֌W */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include "timer.h"
-#include "nullpo.h"
-#include "malloc.h"
-
-#include "skill.h"
-#include "map.h"
-#include "clif.h"
-#include "pc.h"
-#include "pet.h"
-#include "mob.h"
-#include "battle.h"
-#include "party.h"
-#include "itemdb.h"
-#include "script.h"
-#include "intif.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-#define SKILLUNITTIMER_INVERVAL	100
-
-#define STATE_BLIND 0x10
-
-/* �X�L���ԍ������X�e�[�^�X�ُ�ԍ��ϊ��e�[�u�� */
-int SkillStatusChangeTable[]={	/* skill.h��enum��SC_***�Ƃ��킹�邱�� */
-/* 0- */
-	-1,-1,-1,-1,-1,-1,
-	SC_PROVOKE,			/* �v���{�b�N */
-	-1, 1,-1,
-/* 10- */
-	SC_SIGHT,			/* �T�C�g */
-	-1,-1,-1,-1,
-	SC_FREEZE,			/* �t���X�g�_�C�o�[ */
-	SC_STONE,			/* �X�g�[���J�[�X */
-	-1,-1,-1,
-/* 20- */
-	-1,-1,-1,-1,
-	SC_RUWACH,			/* ���A�t */
-	-1,-1,-1,-1,
-	SC_INCREASEAGI,		/* ���x���� */
-/* 30- */
-	SC_DECREASEAGI,		/* ���x���� */
-	-1,
-	SC_SIGNUMCRUCIS,	/* �V�O�i���N���V�X */
-	SC_ANGELUS,			/* �G���W�F���X */
-	SC_BLESSING,		/* �u���b�V���O */
-	-1,-1,-1,-1,-1,
-/* 40- */
-	-1,-1,-1,-1,-1,
-	SC_CONCENTRATE,		/* �W���͌��� */
-	-1,-1,-1,-1,
-/* 50- */
-	-1,
-	SC_HIDING,			/* �n�C�f�B���O */
-	-1,-1,-1,-1,-1,-1,-1,-1,
-/* 60- */
-	SC_TWOHANDQUICKEN,	/* 2HQ */
-	SC_AUTOCOUNTER,
-	-1,-1,-1,-1,
-	SC_IMPOSITIO,		/* �C���|�V�e�B�I�}�k�X */
-	SC_SUFFRAGIUM,		/* �T�t���M�E�� */
-	SC_ASPERSIO,		/* �A�X�y���V�I */
-	SC_BENEDICTIO,		/* ���̍~�� */
-/* 70- */
-	-1,
-	SC_SLOWPOISON,
-	-1,
-	SC_KYRIE,			/* �L���G�G���C�\�� */
-	SC_MAGNIFICAT,		/* �}�O�j�t�B�J�[�g */
-	SC_GLORIA,			/* �O�����A */
-	SC_DIVINA,			/* ���b�N�X�f�B�r�[�i */
-	-1,
-	SC_AETERNA,			/* ���b�N�X�G�[�e���i */
-	-1,
-/* 80- */
-	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-/* 90- */
-	-1,-1,
-	SC_QUAGMIRE,		/* �N�@�O�}�C�A */
-	-1,-1,-1,-1,-1,-1,-1,
-/* 100- */
-	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-/* 110- */
-	-1,
-	SC_ADRENALINE,		/* �A�h���i�������b�V�� */
-	SC_WEAPONPERFECTION,/* �E�F�|���p�[�t�F�N�V���� */
-	SC_OVERTHRUST,		/* �I�[�o�[�g���X�g */
-	SC_MAXIMIZEPOWER,	/* �}�L�V�}�C�Y�p���[ */
-	-1,-1,-1,-1,-1,
-/* 120- */
-	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-/* 130- */
-	-1,-1,-1,-1,-1,
-	SC_CLOAKING,		/* �N���[�L���O */
-	SC_STAN,			/* �\�j�b�N�u���[ */
-	-1,
-	SC_ENCPOISON,		/* �G���`�����g�|�C�Y�� */
-	SC_POISONREACT,		/* �|�C�Y�����A�N�g */
-/* 140- */
-	SC_POISON,			/* �x�m���_�X�g */
-	SC_SPLASHER,		/* �x�i���X�v���b�V���[ */
-	-1,
-	SC_TRICKDEAD,		/* ���񂾂ӂ� */
-	-1,-1,-1,-1,-1,-1,
-/* 150- */
-	-1,-1,-1,-1,-1,
-	SC_LOUD,			/* ���E�h�{�C�X */
-	-1,
-	SC_ENERGYCOAT,		/* �G�i�W�[�R�[�g */
-	-1,-1,
-/* 160- */
-	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-	-1,-1,-1,
-	SC_SELFDESTRUCTION,
-	-1,-1,-1,-1,-1,-1,
-	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-	-1,
-	SC_KEEPING,
-	-1,-1,
-	SC_BARRIER,
-	-1,-1,
-	SC_HALLUCINATION,
-	-1,-1,
-/* 210- */
-	-1,-1,-1,-1,-1,
-	SC_STRIPWEAPON,
-	SC_STRIPSHIELD,
-	SC_STRIPARMOR,
-	SC_STRIPHELM,
-	-1,
-/* 220- */
-	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-/* 230- */
-	-1,-1,-1,-1,
-	SC_CP_WEAPON,
-	SC_CP_SHIELD,
-	SC_CP_ARMOR,
-	SC_CP_HELM,
-	-1,-1,
-/* 240- */
-	-1,-1,-1,-1,-1,-1,-1,-1,-1,
-	SC_AUTOGUARD,
-/* 250- */
-	-1,-1,
-	SC_REFLECTSHIELD,
-	-1,-1,
-	SC_DEVOTION,
-	SC_PROVIDENCE,
-	SC_DEFENDER,
-	SC_SPEARSQUICKEN,
-	-1,
-/* 260- */
-	-1,-1,-1,-1,-1,-1,-1,-1,
-	SC_STEELBODY,
-	SC_BLADESTOP_WAIT,
-/* 270- */
-	SC_EXPLOSIONSPIRITS,
-	SC_EXTREMITYFIST,
-	-1,-1,-1,-1,
-	SC_MAGICROD,
-	-1,-1,-1,
-/* 280- */
-	SC_FLAMELAUNCHER,
-	SC_FROSTWEAPON,
-	SC_LIGHTNINGLOADER,
-	SC_SEISMICWEAPON,
-	-1,
-	SC_VOLCANO,
-	SC_DELUGE,
-	SC_VIOLENTGALE,
-	SC_LANDPROTECTOR,
-	-1,
-/* 290- */
-	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-/* 300- */
-	-1,-1,-1,-1,-1,-1,
-	SC_LULLABY,
-	SC_RICHMANKIM,
-	SC_ETERNALCHAOS,
-	SC_DRUMBATTLE,
-/* 310- */
-	SC_NIBELUNGEN,
-	SC_ROKISWEIL,
-	SC_INTOABYSS,
-	SC_SIEGFRIED,
-	-1,-1,-1,
-	SC_DISSONANCE,
-	-1,
-	SC_WHISTLE,
-/* 320- */
-	SC_ASSNCROS,
-	SC_POEMBRAGI,
-	SC_APPLEIDUN,
-	-1,-1,
-	SC_UGLYDANCE,
-	-1,
-	SC_HUMMING,
-	SC_DONTFORGETME,
-	SC_FORTUNE,
-/* 330- */
-	SC_SERVICE4U,
-	SC_SELFDESTRUCTION,
-	-1,-1,-1,-1,-1,-1,-1,-1,
-/* 340- */
-	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-/* 350- */
-	-1,-1,-1,-1,-1,
-	SC_AURABLADE,
-	SC_PARRYING,
-	SC_CONCENTRATION,
-	SC_TENSIONRELAX,
-	SC_BERSERK,
-/* 360- */
-	SC_BERSERK,
-	SC_ASSUMPTIO,
-	SC_BASILICA,
-	-1,-1,-1,
-	SC_MAGICPOWER,
-	-1,-1,
-	SC_GOSPEL,
-/* 370- */
-	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-/* 380- */
-	SC_TRUESIGHT,
-	-1,-1,
-	SC_WINDWALK,
-	SC_MELTDOWN,
-	-1,-1,
-	SC_CARTBOOST,
-	-1,
-	SC_CHASEWALK,
-/* 390- */
-	SC_REJECTSWORD,
-	-1,-1,-1,-1,-1,
-	SC_MARIONETTE,
-	-1,
-	SC_HEADCRUSH,
-	SC_JOINTBEAT,
-/* 400 */
-	-1,-1,
-	SC_MINDBREAKER,
-	SC_MEMORIZE,
-	SC_FOGWALL,
-	SC_SPIDERWEB,
-	-1,-1,-1,-1,
-/* 410- */
-	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-};
-
-struct skill_name_db skill_names[] = {
- { AC_CHARGEARROW, "CHARGEARROW", "Charge_Arrow" } ,
- { AC_CONCENTRATION, "CONCENTRATION", "Improve_Concentration" } ,
- { AC_DOUBLE, "DOUBLE", "Double_Strafe" } ,
- { AC_MAKINGARROW, "MAKINGARROW", "Arrow_Creation" } ,
- { AC_OWL, "OWL", "Owl's_Eye" } ,
- { AC_SHOWER, "SHOWER", "Arrow_Shower" } ,
- { AC_VULTURE, "VULTURE", "Vulture's_Eye" } ,
- { ALL_RESURRECTION, "RESURRECTION", "Resurrection" } ,
- { AL_ANGELUS, "ANGELUS", "Angelus" } ,
- { AL_BLESSING, "BLESSING", "Blessing" } ,
- { AL_CRUCIS, "CRUCIS", "Signum_Crusis" } ,
- { AL_CURE, "CURE", "Cure" } ,
- { AL_DECAGI, "DECAGI", "Decrease_AGI" } ,
- { AL_DEMONBANE, "DEMONBANE", "Demon_Bane" } ,
- { AL_DP, "DP", "Divine_Protection" } ,
- { AL_HEAL, "HEAL", "Heal" } ,
- { AL_HOLYLIGHT, "HOLYLIGHT", "Holy_Light" } ,
- { AL_HOLYWATER, "HOLYWATER", "Aqua_Benedicta" } ,
- { AL_INCAGI, "INCAGI", "Increase_AGI" } ,
- { AL_PNEUMA, "PNEUMA", "Pneuma" } ,
- { AL_RUWACH, "RUWACH", "Ruwach" } ,
- { AL_TELEPORT, "TELEPORT", "Teleport" } ,
- { AL_WARP, "WARP", "Warp_Portal" } ,
- { AM_ACIDTERROR, "ACIDTERROR", "Acid_Terror" } ,
- { AM_AXEMASTERY, "AXEMASTERY", "Axe_Mastery" } ,
- { AM_BERSERKPITCHER, "BERSERKPITCHER", "Berserk Pitcher" } ,
- { AM_BIOETHICS, "BIOETHICS", "Bioethics" } ,
- { AM_BIOTECHNOLOGY, "BIOTECHNOLOGY", "Biotechnology" } ,
- { AM_CALLHOMUN, "CALLHOMUN", "Call_Homunculus" } ,
- { AM_CANNIBALIZE, "CANNIBALIZE", "Bio_Cannibalize" } ,
- { AM_CP_ARMOR, "ARMOR", "Chemical_Protection_Armor" } ,
- { AM_CP_HELM, "HELM", "Chemical_Protection_Helm" } ,
- { AM_CP_SHIELD, "SHIELD", "Chemical_Protection_Shield" } ,
- { AM_CP_WEAPON, "WEAPON", "Chemical_Protection_Weapon" } ,
- { AM_CREATECREATURE, "CREATECREATURE", "Life_Creation" } ,
- { AM_CULTIVATION, "CULTIVATION", "Cultivation" } ,
- { AM_DEMONSTRATION, "DEMONSTRATION", "Demonstration" } ,
- { AM_DRILLMASTER, "DRILLMASTER", "Drillmaster" } ,
- { AM_FLAMECONTROL, "FLAMECONTROL", "Flame_Control" } ,
- { AM_HEALHOMUN, "HEALHOMUN", "Heal_Homunculus" } ,
- { AM_LEARNINGPOTION, "LEARNINGPOTION", "AM_LEARNINGPOTION" } ,
- { AM_PHARMACY, "PHARMACY", "Pharmacy" } ,
- { AM_POTIONPITCHER, "POTIONPITCHER", "Potion_Pitcher" } ,
- { AM_REST, "REST", "Sabbath" } ,
- { AM_RESURRECTHOMUN, "RESURRECTHOMUN", "Ressurect_Homunculus" } ,
- { AM_SPHEREMINE, "SPHEREMINE", "Sphere_Mine" } ,
- { ASC_BREAKER, "BREAKER", "Breaker" } ,
- { ASC_CDP, "CDP", "Create_Deadly_Poison" } ,
- { ASC_EDP, "EDP", "Deadly_Poison_Enchantment" } ,
- { ASC_HALLUCINATION, "HALLUCINATION", "Hallucination_Walk" } ,
- { ASC_KATAR, "KATAR", "Advanced_Katar_Mastery" } ,
- { ASC_METEORASSAULT, "METEORASSAULT", "Meteor_Assault" } ,
- { AS_CLOAKING, "CLOAKING", "Cloaking" } ,
- { AS_ENCHANTPOISON, "ENCHANTPOISON", "Enchant_Poison" } ,
- { AS_GRIMTOOTH, "GRIMTOOTH", "Grimtooth" } ,
- { AS_KATAR, "KATAR", "Katar_Mastery" } ,
- { AS_LEFT, "LEFT", "Lefthand_Mastery" } ,
- { AS_POISONREACT, "POISONREACT", "Poison_React" } ,
- { AS_RIGHT, "RIGHT", "Righthand_Mastery" } ,
- { AS_SONICBLOW, "SONICBLOW", "Sonic_Blow" } ,
- { AS_SPLASHER, "SPLASHER", "Venom_Splasher" } ,
- { AS_VENOMDUST, "VENOMDUST", "Venom_Dust" } ,
- { BA_APPLEIDUN, "APPLEIDUN", "Apple_of_Idun" } ,
- { BA_ASSASSINCROSS, "ASSASSINCROSS", "Assassin_Cross" } ,
- { BA_DISSONANCE, "DISSONANCE", "Dissonance" } ,
- { BA_FROSTJOKE, "FROSTJOKE", "Dumb_Joke" } ,
- { BA_MUSICALLESSON, "MUSICALLESSON", "Musical_Lesson" } ,
- { BA_MUSICALSTRIKE, "MUSICALSTRIKE", "Musical_Strike" } ,
- { BA_POEMBRAGI, "POEMBRAGI", "Poem_of_Bragi" } ,
- { BA_WHISTLE, "WHISTLE", "Whistle" } ,
- { BD_ADAPTATION, "ADAPTATION", "Adaption" } ,
- { BD_DRUMBATTLEFIELD, "DRUMBATTLEFIELD", "Drumb_BattleField" } ,
- { BD_ENCORE, "ENCORE", "Encore" } ,
- { BD_ETERNALCHAOS, "ETERNALCHAOS", "Eternal_Chaos" } ,
- { BD_INTOABYSS, "INTOABYSS", "Into_the_Abyss" } ,
- { BD_LULLABY, "LULLABY", "Lullaby" } ,
- { BD_RAGNAROK, "RAGNAROK", "Ragnarok" } ,
- { BD_RICHMANKIM, "RICHMANKIM", "Rich_Mankim" } ,
- { BD_RINGNIBELUNGEN, "RINGNIBELUNGEN", "Ring_of_Nibelugen" } ,
- { BD_ROKISWEIL, "ROKISWEIL", "Loki's_Wail" } ,
- { BD_SIEGFRIED, "SIEGFRIED", "Invulnerable_Siegfried" } ,
- { BS_ADRENALINE, "ADRENALINE", "Adrenaline_Rush" } ,
- { BS_ADRENALINE2, "ADRENALINE2", "Adrenaline Rush 2" } ,
- { BS_AXE, "AXE", "Smith_Axe" } ,
- { BS_DAGGER, "DAGGER", "Smith_Dagger" } ,
- { BS_ENCHANTEDSTONE, "ENCHANTEDSTONE", "Enchantedstone_Craft" } ,
- { BS_FINDINGORE, "FINDINGORE", "Ore_Discovery" } ,
- { BS_HAMMERFALL, "HAMMERFALL", "Hammer_Fall" } ,
- { BS_HILTBINDING, "HILTBINDING", "Hilt_Binding" } ,
- { BS_IRON, "IRON", "Iron_Tempering" } ,
- { BS_KNUCKLE, "KNUCKLE", "Smith_Knucklebrace" } ,
- { BS_MACE, "MACE", "Smith_Mace" } ,
- { BS_MAXIMIZE, "MAXIMIZE", "Power_Maximize" } ,
- { BS_ORIDEOCON, "ORIDEOCON", "Orideocon_Research" } ,
- { BS_OVERTHRUST, "OVERTHRUST", "Power-Thrust" } ,
- { BS_REPAIRWEAPON, "REPAIRWEAPON", "Weapon_Repair" } ,
- { BS_SKINTEMPER, "SKINTEMPER", "Skin_Tempering" } ,
- { BS_SPEAR, "SPEAR", "Smith_Spear" } ,
- { BS_STEEL, "STEEL", "Steel_Tempering" } ,
- { BS_SWORD, "SWORD", "Smith_Sword" } ,
- { BS_TWOHANDSWORD, "TWOHANDSWORD", "Smith_Two-handed_Sword" } ,
- { BS_WEAPONPERFECT, "WEAPONPERFECT", "Weapon_Perfection" } ,
- { BS_WEAPONRESEARCH, "WEAPONRESEARCH", "Weaponry_Research" } ,
- { CG_ARROWVULCAN, "ARROWVULCAN", "Vulcan_Arrow" } ,
- { CG_MARIONETTE, "MARIONETTE", "Marionette_Control" } ,
- { CG_MOONLIT, "MOONLIT", "Moonlight_Petals" } ,
- { CH_CHAINCRUSH, "CHAINCRUSH", "Chain_Crush_Combo" } ,
- { CH_PALMSTRIKE, "PALMSTRIKE", "Palm_Push_Strike" } ,
- { CH_SOULCOLLECT, "SOULCOLLECT", "Collect_Soul" } ,
- { CH_TIGERFIST, "TIGERFIST", "Tiger_Knuckle_Fist" } ,
- { CR_ALCHEMY, "ALCHEMY", "Alchemy" } ,
- { CR_AUTOGUARD, "AUTOGUARD", "Guard" } ,
- { CR_DEFENDER, "DEFENDER", "Defender" } ,
- { CR_DEVOTION, "DEVOTION", "Sacrifice" } ,
- { CR_GRANDCROSS, "GRANDCROSS", "Grand_Cross" } ,
- { CR_HOLYCROSS, "HOLYCROSS", "Holy_Cross" } ,
- { CR_PROVIDENCE, "PROVIDENCE", "Providence" } ,
- { CR_REFLECTSHIELD, "REFLECTSHIELD", "Shield_Reflect" } ,
- { CR_SHIELDBOOMERANG, "SHIELDBOOMERANG", "Shield_Boomerang" } ,
- { CR_SHIELDCHARGE, "SHIELDCHARGE", "Shield_Charge" } ,
- { CR_SPEARQUICKEN, "SPEARQUICKEN", "Spear_Quicken" } ,
- { CR_SYNTHESISPOTION, "SYNTHESISPOTION", "Potion_Synthesis" } ,
- { CR_TRUST, "TRUST", "Faith" } ,
- { DC_DANCINGLESSON, "DANCINGLESSON", "Dancing_Lesson" } ,
- { DC_DONTFORGETME, "DONTFORGETME", "Don't_Forget_Me" } ,
- { DC_FORTUNEKISS, "FORTUNEKISS", "Fortune_Kiss" } ,
- { DC_HUMMING, "HUMMING", "Humming" } ,
- { DC_SCREAM, "SCREAM", "Scream" } ,
- { DC_SERVICEFORYOU, "SERVICEFORYOU", "Prostitute" } ,
- { DC_THROWARROW, "THROWARROW", "Throw_Arrow" } ,
- { DC_UGLYDANCE, "UGLYDANCE", "Ugly_Dance" } ,
- { HP_ASSUMPTIO, "ASSUMPTIO", "Assumptio" } ,
- { HP_BASILICA, "BASILICA", "Basilica" } ,
- { HP_MEDITATIO, "MEDITATIO", "Meditation" } ,
- { HT_ANKLESNARE, "ANKLESNARE", "Ankle_Snare" } ,
- { HT_BEASTBANE, "BEASTBANE", "Beast_Bane" } ,
- { HT_BLASTMINE, "BLASTMINE", "Blast_Mine" } ,
- { HT_BLITZBEAT, "BLITZBEAT", "Blitz_Beat" } ,
- { HT_CLAYMORETRAP, "CLAYMORETRAP", "Claymore_Trap" } ,
- { HT_DETECTING, "DETECTING", "Detect" } ,
- { HT_FALCON, "FALCON", "Falconry_Mastery" } ,
- { HT_FLASHER, "FLASHER", "Flasher" } ,
- { HT_FREEZINGTRAP, "FREEZINGTRAP", "Freezing_Trap" } ,
- { HT_LANDMINE, "LANDMINE", "Land_Mine" } ,
- { HT_REMOVETRAP, "REMOVETRAP", "Remove_Trap" } ,
- { HT_SANDMAN, "SANDMAN", "Sandman" } ,
- { HT_SHOCKWAVE, "SHOCKWAVE", "Shockwave_Trap" } ,
- { HT_SKIDTRAP, "SKIDTRAP", "Skid_Trap" } ,
- { HT_SPRINGTRAP, "SPRINGTRAP", "Spring_Trap" } ,
- { HT_STEELCROW, "STEELCROW", "Steel_Crow" } ,
- { HT_TALKIEBOX, "TALKIEBOX", "Talkie_Box" } ,
- { HW_MAGICCRASHER, "MAGICCRASHER", "Magic_Crasher" } ,
- { HW_MAGICPOWER, "MAGICPOWER", "Magic_Power" } ,
- { HW_NAPALMVULCAN, "NAPALMVULCAN", "Napalm_Vulcan" } ,
- { HW_SOULDRAIN, "SOULDRAIN", "Soul_Drain" } ,
- { KN_AUTOCOUNTER, "AUTOCOUNTER", "Counter_Attack" } ,
- { KN_BOWLINGBASH, "BOWLINGBASH", "Bowling_Bash" } ,
- { KN_BRANDISHSPEAR, "BRANDISHSPEAR", "Brandish_Spear" } ,
- { KN_CAVALIERMASTERY, "CAVALIERMASTERY", "Cavalier_Mastery" } ,
- { KN_PIERCE, "PIERCE", "Pierce" } ,
- { KN_RIDING, "RIDING", "Peco_Peco_Ride" } ,
- { KN_SPEARBOOMERANG, "SPEARBOOMERANG", "Spear_Boomerang" } ,
- { KN_SPEARMASTERY, "SPEARMASTERY", "Spear_Mastery" } ,
- { KN_SPEARSTAB, "SPEARSTAB", "Spear_Stab" } ,
- { KN_TWOHANDQUICKEN, "TWOHANDQUICKEN", "Twohand_Quicken" } ,
- { LK_AURABLADE, "AURABLADE", "Aura_Blade" } ,
- { LK_BERSERK, "BERSERK", "Berserk" } ,
- { LK_CONCENTRATION, "CONCENTRATION", "Concentration" } ,
- { LK_FURY, "FURY", "LK_FURY" } ,
- { LK_HEADCRUSH, "HEADCRUSH", "Head_Crusher" } ,
- { LK_JOINTBEAT, "JOINTBEAT", "Joint_Beat" } ,
- { LK_PARRYING, "PARRYING", "Parrying" } ,
- { LK_SPIRALPIERCE, "SPIRALPIERCE", "Spiral_Pierce" } ,
- { LK_TENSIONRELAX, "TENSIONRELAX", "Tension_Relax" } ,
- { MC_CARTREVOLUTION, "CARTREVOLUTION", "Cart_Revolution" } ,
- { MC_CHANGECART, "CHANGECART", "Change_Cart" } ,
- { MC_DISCOUNT, "DISCOUNT", "Discount" } ,
- { MC_IDENTIFY, "IDENTIFY", "Item_Appraisal" } ,
- { MC_INCCARRY, "INCCARRY", "Enlarge_Weight_Limit" } ,
- { MC_LOUD, "LOUD", "Lord_Exclamation" } ,
- { MC_MAMMONITE, "MAMMONITE", "Mammonite" } ,
- { MC_OVERCHARGE, "OVERCHARGE", "Overcharge" } ,
- { MC_PUSHCART, "PUSHCART", "Pushcart" } ,
- { MC_VENDING, "VENDING", "Vending" } ,
- { MG_COLDBOLT, "COLDBOLT", "Cold_Bolt" } ,
- { MG_ENERGYCOAT, "ENERGYCOAT", "Energy_Coat" } ,
- { MG_FIREBALL, "FIREBALL", "Fire_Ball" } ,
- { MG_FIREBOLT, "FIREBOLT", "Fire_Bolt" } ,
- { MG_FIREWALL, "FIREWALL", "Fire_Wall" } ,
- { MG_FROSTDIVER, "FROSTDIVER", "Frost_Diver" } ,
- { MG_LIGHTNINGBOLT, "LIGHTNINGBOLT", "Lightening_Bolt" } ,
- { MG_NAPALMBEAT, "NAPALMBEAT", "Napalm_Beat" } ,
- { MG_SAFETYWALL, "SAFETYWALL", "Safety_Wall" } ,
- { MG_SIGHT, "SIGHT", "Sight" } ,
- { MG_SOULSTRIKE, "SOULSTRIKE", "Soul_Strike" } ,
- { MG_SRECOVERY, "SRECOVERY", "Increase_SP_Recovery" } ,
- { MG_STONECURSE, "STONECURSE", "Stone_Curse" } ,
- { MG_THUNDERSTORM, "THUNDERSTORM", "Thunderstorm" } ,
- { MO_ABSORBSPIRITS, "ABSORBSPIRITS", "Absorb_Spirits" } ,
- { MO_BLADESTOP, "BLADESTOP", "Blade_Stop" } ,
- { MO_BODYRELOCATION, "BODYRELOCATION", "Body_Relocation" } ,
- { MO_CALLSPIRITS, "CALLSPIRITS", "Call_Spirits" } ,
- { MO_CHAINCOMBO, "CHAINCOMBO", "Chain_Combo" } ,
- { MO_COMBOFINISH, "COMBOFINISH", "Combo_Finish" } ,
- { MO_DODGE, "DODGE", "Dodge" } ,
- { MO_EXPLOSIONSPIRITS, "EXPLOSIONSPIRITS", "Explosion_Spirits" } ,
- { MO_EXTREMITYFIST, "EXTREMITYFIST", "Extremity_Fist" } ,
- { MO_FINGEROFFENSIVE, "FINGEROFFENSIVE", "Finger_Offensive" } ,
- { MO_INVESTIGATE, "INVESTIGATE", "Investigate" } ,
- { MO_IRONHAND, "IRONHAND", "Iron_Hand" } ,
- { MO_SPIRITSRECOVERY, "SPIRITSRECOVERY", "Spirit_Recovery" } ,
- { MO_STEELBODY, "STEELBODY", "Steel_Body" } ,
- { MO_TRIPLEATTACK, "TRIPLEATTACK", "Triple_Blows" } ,
- { NPC_ATTRICHANGE, "ATTRICHANGE", "NPC_ATTRICHANGE" } ,
- { NPC_BARRIER, "BARRIER", "NPC_BARRIER" } ,
- { NPC_BLINDATTACK, "BLINDATTACK", "NPC_BLINDATTACK" } ,
- { NPC_BLOODDRAIN, "BLOODDRAIN", "NPC_BLOODDRAIN" } ,
- { NPC_CHANGEDARKNESS, "CHANGEDARKNESS", "NPC_CHANGEDARKNESS" } ,
- { NPC_CHANGEFIRE, "CHANGEFIRE", "NPC_CHANGEFIRE" } ,
- { NPC_CHANGEGROUND, "CHANGEGROUND", "NPC_CHANGEGROUND" } ,
- { NPC_CHANGEHOLY, "CHANGEHOLY", "NPC_CHANGEHOLY" } ,
- { NPC_CHANGEPOISON, "CHANGEPOISON", "NPC_CHANGEPOISON" } ,
- { NPC_CHANGETELEKINESIS, "CHANGETELEKINESIS", "NPC_CHANGETELEKINESIS" } ,
- { NPC_CHANGEWATER, "CHANGEWATER", "NPC_CHANGEWATER" } ,
- { NPC_CHANGEWIND, "CHANGEWIND", "NPC_CHANGEWIND" } ,
- { NPC_COMBOATTACK, "COMBOATTACK", "NPC_COMBOATTACK" } ,
- { NPC_CRITICALSLASH, "CRITICALSLASH", "NPC_CRITICALSLASH" } ,
- { NPC_CURSEATTACK, "CURSEATTACK", "NPC_CURSEATTACK" } ,
- { NPC_DARKBLESSING, "DARKBLESSING", "NPC_DARKBLESSING" } ,
- { NPC_DARKBREATH, "DARKBREATH", "NPC_DARKBREATH" } ,
- { NPC_DARKCROSS, "DARKCROSS", "NPC_DARKCROSS" } ,
- { NPC_DARKNESSATTACK, "DARKNESSATTACK", "NPC_DARKNESSATTACK" } ,
- { NPC_DEFENDER, "DEFENDER", "NPC_DEFENDER" } ,
- { NPC_EMOTION, "EMOTION", "NPC_EMOTION" } ,
- { NPC_ENERGYDRAIN, "ENERGYDRAIN", "NPC_ENERGYDRAIN" } ,
- { NPC_FIREATTACK, "FIREATTACK", "NPC_FIREATTACK" } ,
- { NPC_GROUNDATTACK, "GROUNDATTACK", "NPC_GROUNDATTACK" } ,
- { NPC_GUIDEDATTACK, "GUIDEDATTACK", "NPC_GUIDEDATTACK" } ,
- { NPC_HALLUCINATION, "HALLUCINATION", "NPC_HALLUCINATION" } ,
- { NPC_HOLYATTACK, "HOLYATTACK", "NPC_HOLYATTACK" } ,
- { NPC_KEEPING, "KEEPING", "NPC_KEEPING" } ,
- { NPC_LICK, "LICK", "NPC_LICK" } ,
- { NPC_MAGICALATTACK, "MAGICALATTACK", "NPC_MAGICALATTACK" } ,
- { NPC_MENTALBREAKER, "MENTALBREAKER", "NPC_MENTALBREAKER" } ,
- { NPC_METAMORPHOSIS, "METAMORPHOSIS", "NPC_METAMORPHOSIS" } ,
- { NPC_PETRIFYATTACK, "PETRIFYATTACK", "NPC_PETRIFYATTACK" } ,
- { NPC_PIERCINGATT, "PIERCINGATT", "NPC_PIERCINGATT" } ,
- { NPC_POISON, "POISON", "NPC_POISON" } ,
- { NPC_POISONATTACK, "POISONATTACK", "NPC_POISONATTACK" } ,
- { NPC_PROVOCATION, "PROVOCATION", "NPC_PROVOCATION" } ,
- { NPC_RANDOMATTACK, "RANDOMATTACK", "NPC_RANDOMATTACK" } ,
- { NPC_RANGEATTACK, "RANGEATTACK", "NPC_RANGEATTACK" } ,
- { NPC_REBIRTH, "REBIRTH", "NPC_REBIRTH" } ,
- { NPC_SELFDESTRUCTION, "SELFDESTRUCTION", "Kabooooom!" } ,
- { NPC_SELFDESTRUCTION2, "SELFDESTRUCTION2", "NPC_SELFDESTRUCTION2" } ,
- { NPC_SILENCEATTACK, "SILENCEATTACK", "NPC_SILENCEATTACK" } ,
- { NPC_SLEEPATTACK, "SLEEPATTACK", "NPC_SLEEPATTACK" } ,
- { NPC_SMOKING, "SMOKING", "NPC_SMOKING" } ,
- { NPC_SPLASHATTACK, "SPLASHATTACK", "NPC_SPLASHATTACK" } ,
- { NPC_STUNATTACK, "STUNATTACK", "NPC_STUNATTACK" } ,
- { NPC_SUICIDE, "SUICIDE", "NPC_SUICIDE" } ,
- { NPC_SUMMONMONSTER, "SUMMONMONSTER", "NPC_SUMMONMONSTER" } ,
- { NPC_SUMMONSLAVE, "SUMMONSLAVE", "NPC_SUMMONSLAVE" } ,
- { NPC_TELEKINESISATTACK, "TELEKINESISATTACK", "NPC_TELEKINESISATTACK" } ,
- { NPC_TRANSFORMATION, "TRANSFORMATION", "NPC_TRANSFORMATION" } ,
- { NPC_WATERATTACK, "WATERATTACK", "NPC_WATERATTACK" } ,
- { NPC_WINDATTACK, "WINDATTACK", "NPC_WINDATTACK" } ,
- { NV_BASIC, "BASIC", "Basic_Skill" } ,
- { NV_FIRSTAID, "FIRSTAID", "First Aid" } ,
- { NV_TRICKDEAD, "TRICKDEAD", "Play_Dead" } ,
- { PA_GOSPEL, "GOSPEL", "Gospel" } ,
- { PA_PRESSURE, "PRESSURE", "Pressure" } ,
- { PA_SACRIFICE, "SACRIFICE", "Sacrificial_Ritual" } ,
- { PF_FOGWALL, "FOGWALL", "Wall_of_Fog" } ,
- { PF_HPCONVERSION, "HPCONVERSION", "Health_Conversion" } ,
- { PF_MEMORIZE, "MEMORIZE", "Memorize" } ,
- { PF_MINDBREAKER, "MINDBREAKER", "Mind_Breaker" } ,
- { PF_SOULBURN, "SOULBURN", "Soul_Burn" } ,
- { PF_SOULCHANGE, "SOULCHANGE", "Soul_Change" } ,
- { PF_SPIDERWEB, "SPIDERWEB", "Spider_Web" } ,
- { PR_ASPERSIO, "ASPERSIO", "Aspersio" } ,
- { PR_BENEDICTIO, "BENEDICTIO", "B.S_Sacramenti" } ,
- { PR_GLORIA, "GLORIA", "Gloria" } ,
- { PR_IMPOSITIO, "IMPOSITIO", "Impositio_Manus" } ,
- { PR_KYRIE, "KYRIE", "Kyrie_Eleison" } ,
- { PR_LEXAETERNA, "LEXAETERNA", "Lex_Aeterna" } ,
- { PR_LEXDIVINA, "LEXDIVINA", "Lex_Divina" } ,
- { PR_MACEMASTERY, "MACEMASTERY", "Mace_Mastery" } ,
- { PR_MAGNIFICAT, "MAGNIFICAT", "Magnificat" } ,
- { PR_MAGNUS, "MAGNUS", "Magnus_Exorcismus" } ,
- { PR_SANCTUARY, "SANCTUARY", "Santuary" } ,
- { PR_SLOWPOISON, "SLOWPOISON", "Slow_Poison" } ,
- { PR_STRECOVERY, "STRECOVERY", "Status_Recovery" } ,
- { PR_SUFFRAGIUM, "SUFFRAGIUM", "Suffragium" } ,
- { PR_TURNUNDEAD, "TURNUNDEAD", "Turn_Undead" } ,
- { RG_BACKSTAP, "BACKSTAP", "Back_Stab" } ,
- { RG_CLEANER, "CLEANER", "Remover" } ,
- { RG_COMPULSION, "COMPULSION", "Compulsion_Discount" } ,
- { RG_FLAGGRAFFITI, "FLAGGRAFFITI", "Flag_Graffity" } ,
- { RG_GANGSTER, "GANGSTER", "Gangster's_Paradise" } ,
- { RG_GRAFFITI, "GRAFFITI", "Graffiti" } ,
- { RG_INTIMIDATE, "INTIMIDATE", "Intimidate" } ,
- { RG_PLAGIARISM, "PLAGIARISM", "Plagiarism" } ,
- { RG_RAID, "RAID", "Raid" } ,
- { RG_SNATCHER, "SNATCHER", "Snatcher" } ,
- { RG_STEALCOIN, "STEALCOIN", "Steal_Coin" } ,
- { RG_STRIPARMOR, "STRIPARMOR", "Strip_Armor" } ,
- { RG_STRIPHELM, "STRIPHELM", "Strip_Helm" } ,
- { RG_STRIPSHIELD, "STRIPSHIELD", "Strip_Shield" } ,
- { RG_STRIPWEAPON, "STRIPWEAPON", "Strip_Weapon" } ,
- { RG_TUNNELDRIVE, "TUNNELDRIVE", "Tunnel_Drive" } ,
- { SA_ABRACADABRA, "ABRACADABRA", "Hocus-pocus" } ,
- { SA_ADVANCEDBOOK, "ADVANCEDBOOK", "Advanced_Book" } ,
- { SA_AUTOSPELL, "AUTOSPELL", "Auto_Cast" } ,
- { SA_CASTCANCEL, "CASTCANCEL", "Cast_Cancel" } ,
- { SA_CLASSCHANGE, "CLASSCHANGE", "Class_Change" } ,
- { SA_COMA, "COMA", "Coma" } ,
- { SA_DEATH, "DEATH", "Death" } ,
- { SA_DELUGE, "DELUGE", "Deluge" } ,
- { SA_DISPELL, "DISPELL", "Dispel" } ,
- { SA_DRAGONOLOGY, "DRAGONOLOGY", "Dragonology" } ,
- { SA_FLAMELAUNCHER, "FLAMELAUNCHER", "Flame_Launcher" } ,
- { SA_FORTUNE, "FORTUNE", "Fortune" } ,
- { SA_FREECAST, "FREECAST", "Cast_Freedom" } ,
- { SA_FROSTWEAPON, "FROSTWEAPON", "Frost_Weapon" } ,
- { SA_FULLRECOVERY, "FULLRECOVERY", "Full_Recovery" } ,
- { SA_GRAVITY, "GRAVITY", "Gravity" } ,
- { SA_INSTANTDEATH, "INSTANTDEATH", "Instant_Death" } ,
- { SA_LANDPROTECTOR, "LANDPROTECTOR", "Land_Protector" } ,
- { SA_LEVELUP, "LEVELUP", "Level_Up" } ,
- { SA_LIGHTNINGLOADER, "LIGHTNINGLOADER", "Lightning_Loader" } ,
- { SA_MAGICROD, "MAGICROD", "Magic_Rod" } ,
- { SA_MONOCELL, "MONOCELL", "Monocell" } ,
- { SA_QUESTION, "QUESTION", "Question?" } ,
- { SA_REVERSEORCISH, "REVERSEORCISH", "Reverse_Orcish" } ,
- { SA_SEISMICWEAPON, "SEISMICWEAPON", "Seismic_Weapon" } ,
- { SA_SPELLBREAKER, "SPELLBREAKER", "Break_Spell" } ,
- { SA_SUMMONMONSTER, "SUMMONMONSTER", "Summon_Monster" } ,
- { SA_TAMINGMONSTER, "TAMINGMONSTER", "Taming_Monster" } ,
- { SA_VIOLENTGALE, "VIOLENTGALE", "Violent_Gale" } ,
- { SA_VOLCANO, "VOLCANO", "Volcano" } ,
- { SG_DEVIL, "DEVIL", "Devil" } ,
- { SG_FEEL, "FEEL", "Feel" } ,
- { SG_FRIEND, "FRIEND", "Friend" } ,
- { SG_FUSION, "FUSION", "Fusion" } ,
- { SG_HATE, "HATE", "Hate" } ,
- { SG_KNOWLEDGE, "KNOWLEDGE", "Knowledge" } ,
- { SG_MOON_ANGER, "ANGER", "Moon Anger" } ,
- { SG_MOON_BLESS, "BLESS", "Moon Bless" } ,
- { SG_MOON_COMFORT, "COMFORT", "Moon Comfort" } ,
- { SG_MOON_WARM, "WARM", "Moon Warm" } ,
- { SG_STAR_ANGER, "ANGER", "Star Anger" } ,
- { SG_STAR_BLESS, "BLESS", "Star Bless" } ,
- { SG_STAR_COMFORT, "COMFORT", "Star Comfort" } ,
- { SG_STAR_WARM, "WARM", "Star Warm" } ,
- { SG_SUN_ANGER, "ANGER", "Sun Anger" } ,
- { SG_SUN_BLESS, "BLESS", "Sun Bless" } ,
- { SG_SUN_COMFORT, "COMFORT", "Sun Comfort" } ,
- { SG_SUN_WARM, "WARM", "Sun Warm" } ,
- { SL_ALCHEMIST, "ALCHEMIST", "Alchemist" } ,
- { SL_ASSASIN, "ASSASIN", "Assasin" } ,
- { SL_BARDDANCER, "BARDDANCER", "Bard Dancer" } ,
- { SL_BLACKSMITH, "BLACKSMITH", "Black Smith" } ,
- { SL_CRUSADER, "CRUSADER", "Crusader" } ,
- { SL_HUNTER, "HUNTER", "Hunter" } ,
- { SL_KAAHI, "KAAHI", "Kaahi" } ,
- { SL_KAINA, "KAINA", "Kaina" } ,
- { SL_KAITE, "KAITE", "Kaite" } ,
- { SL_KAIZEL, "KAIZEL", "Kaizel" } ,
- { SL_KAUPE, "KAUPE", "Kaupe" } ,
- { SL_KNIGHT, "KNIGHT", "Knight" } ,
- { SL_MONK, "MONK", "Monk" } ,
- { SL_PRIEST, "PRIEST", "Priest" } ,
- { SL_ROGUE, "ROGUE", "Rogue" } ,
- { SL_SAGE, "SAGE", "Sage" } ,
- { SL_SKA, "SKA", "SKA" } ,
- { SL_SKE, "SKE", "SKE" } ,
- { SL_SMA, "SMA", "SMA" } ,
- { SL_SOULLINKER, "SOULLINKER", "Soul Linker" } ,
- { SL_STAR, "STAR", "Star" } ,
- { SL_STIN, "STIN", "Stin" } ,
- { SL_STUN, "STUN", "Stun" } ,
- { SL_SUPERNOVICE, "SUPERNOVICE", "Super Novice" } ,
- { SL_SWOO, "SWOO", "Swoo" } ,
- { SL_WIZARD, "WIZARD", "Wizard" } ,
- { SM_AUTOBERSERK, "AUTOBERSERK", "Auto_Berserk" } ,
- { SM_BASH, "BASH", "Bash" } ,
- { SM_ENDURE, "ENDURE", "Endure" } ,
- { SM_FATALBLOW, "FATALBLOW", "Attack_Weak_Point" } ,
- { SM_MAGNUM, "MAGNUM", "Magnum_Break" } ,
- { SM_MOVINGRECOVERY, "MOVINGRECOVERY", "Moving_HP_Recovery" } ,
- { SM_PROVOKE, "PROVOKE", "Provoke" } ,
- { SM_RECOVERY, "RECOVERY", "Increase_HP_Recovery" } ,
- { SM_SWORD, "SWORD", "Sword_Mastery" } ,
- { SM_TWOHAND, "TWOHAND", "Two-Handed_Sword_Mastery" } ,
- { SN_FALCONASSAULT, "FALCONASSAULT", "Falcon_Assault" } ,
- { SN_SHARPSHOOTING, "SHARPSHOOTING", "Sharpshooting" } ,
- { SN_SIGHT, "SIGHT", "True_Sight" } ,
- { SN_WINDWALK, "WINDWALK", "Wind_Walk" } ,
- { ST_CHASEWALK, "CHASEWALK", "Chase_Walk" } ,
- { ST_REJECTSWORD, "REJECTSWORD", "Reject_Sword" } ,
- { ST_STEALBACKPACK, "STEALBACKPACK", "Steal_Backpack" } ,
- { TF_BACKSLIDING, "BACKSLIDING", "Back_Sliding" } ,
- { TF_DETOXIFY, "DETOXIFY", "Detoxify" } ,
- { TF_DOUBLE, "DOUBLE", "Double_Attack" } ,
- { TF_HIDING, "HIDING", "Hiding" } ,
- { TF_MISS, "MISS", "Improve_Dodge" } ,
- { TF_PICKSTONE, "PICKSTONE", "Take_Stone" } ,
- { TF_POISON, "POISON", "Envenom" } ,
- { TF_SPRINKLESAND, "SPRINKLESAND", "Throw_Sand" } ,
- { TF_STEAL, "STEAL", "Steal" } ,
- { TF_THROWSTONE, "THROWSTONE", "Throw_Stone" } ,
- { TK_COUNTER, "COUNTER", "Counter" } ,
- { TK_DODGE, "DODGE", "Dodge" } ,
- { TK_DOWNKICK, "DOWNKICK", "Down Kick" } ,
- { TK_HIGHJUMP, "HIGHJUMP", "High Jump" } ,
- { TK_HPTIME, "HPTIME", "HP Time" } ,
- { TK_JUMPKICK, "JUMPKICK", "Jump Kick" } ,
- { TK_POWER, "POWER", "Power" } ,
- { TK_READYCOUNTER, "READYCOUNTER", "Ready Counter" } ,
- { TK_READYDOWN, "READYDOWN", "Ready Down" } ,
- { TK_READYSTORM, "READYSTORM", "Ready Storm" } ,
- { TK_READYTURN, "READYTURN", "Ready Turn" } ,
- { TK_RUN, "RUN", "TK_RUN" } ,
- { TK_SEVENWIND, "SEVENWIND", "Seven Wind" } ,
- { TK_SPTIME, "SPTIME", "SP Time" } ,
- { TK_STORMKICK, "STORMKICK", "Storm Kick" } ,
- { TK_TURNKICK, "TURNKICK", "Turn Kick" } ,
- { WE_BABY, "BABY", "Adopt_Baby" } ,
- { WE_CALLBABY, "CALLBABY", "Call_Baby" } ,
- { WE_CALLPARENT, "CALLPARENT", "Call_Parent" } ,
- { WE_CALLPARTNER, "CALLPARTNER", "I Want to See You" } ,
- { WE_FEMALE, "FEMALE", "I Only Look Up to You" } ,
- { WE_MALE, "MALE", "I Will Protect You" } ,
- { WS_CARTBOOST, "CARTBOOST", "Cart_Boost" } ,
- { WS_CREATECOIN, "CREATECOIN", "Create_Coins" } ,
- { WS_CREATENUGGET, "CREATENUGGET", "Create_Nuggets" } ,
- { WS_MELTDOWN, "MELTDOWN", "Meltdown" } ,
- { WS_SYSTEMCREATE, "SYSTEMCREATE", "Create_System_tower" } ,
- { WZ_EARTHSPIKE, "EARTHSPIKE", "Earth_Spike" } ,
- { WZ_ESTIMATION, "ESTIMATION", "Sense" } ,
- { WZ_FIREIVY, "FIREIVY", "Fire_Ivy" } ,
- { WZ_FIREPILLAR, "FIREPILLAR", "Fire_Pillar" } ,
- { WZ_FROSTNOVA, "FROSTNOVA", "Frost_Nova" } ,
- { WZ_HEAVENDRIVE, "HEAVENDRIVE", "Heaven's_Drive" } ,
- { WZ_ICEWALL, "ICEWALL", "Ice_Wall" } ,
- { WZ_JUPITEL, "JUPITEL", "Jupitel_Thunder" } ,
- { WZ_METEOR, "METEOR", "Meteor_Storm" } ,
- { WZ_QUAGMIRE, "QUAGMIRE", "Quagmire" } ,
- { WZ_SIGHTRASHER, "SIGHTRASHER", "Sightrasher" } ,
- { WZ_STORMGUST, "STORMGUST", "Storm_Gust" } ,
- { WZ_VERMILION, "VERMILION", "Lord_of_Vermilion" } ,
- { WZ_WATERBALL, "WATERBALL", "Water_Ball" } ,
- { 0, 0, 0 } 
-};
-
-static const int dirx[8]={0,-1,-1,-1,0,1,1,1};
-static const int diry[8]={1,1,0,-1,-1,-1,0,1};
-
-static int rdamage;
-
-/* �X�L���f�[�^�x�[�X */
-struct skill_db skill_db[MAX_SKILL_DB];
-
-/* �A�C�e���쐬�f�[�^�x�[�X */
-struct skill_produce_db skill_produce_db[MAX_SKILL_PRODUCE_DB];
-
-/* ��쐬�X�L���f�[�^�x�[�X */
-struct skill_arrow_db skill_arrow_db[MAX_SKILL_ARROW_DB];
-
-/* �A�u���J�_�u�������X�L���f�[�^�x�[�X */
-struct skill_abra_db skill_abra_db[MAX_SKILL_ABRA_DB];
-
-int	skill_get_hit( int id ){ return skill_db[id].hit; }
-int	skill_get_inf( int id ){ return skill_db[id].inf; }
-int	skill_get_pl( int id ){ return skill_db[id].pl; }
-int	skill_get_nk( int id ){ return skill_db[id].nk; }
-int	skill_get_max( int id ){ return skill_db[id].max; }
-int skill_get_range( int id , int lv ){ return (lv <= 0) ? 0:skill_db[id].range[lv-1]; }
-int	skill_get_hp( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].hp[lv-1]; }
-int	skill_get_sp( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].sp[lv-1]; }
-int	skill_get_zeny( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].zeny[lv-1]; }
-int	skill_get_num( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].num[lv-1]; }
-int	skill_get_cast( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].cast[lv-1]; }
-int	skill_get_delay( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].delay[lv-1]; }
-int	skill_get_time( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].upkeep_time[lv-1]; }
-int	skill_get_time2( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].upkeep_time2[lv-1]; }
-int	skill_get_castdef( int id ){ return skill_db[id].cast_def_rate; }
-int	skill_get_weapontype( int id ){ return skill_db[id].weapon; }
-int	skill_get_inf2( int id ){ return skill_db[id].inf2; }
-int	skill_get_maxcount( int id ){ return skill_db[id].maxcount; }
-int	skill_get_blewcount( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].blewcount[lv-1]; }
-int	skill_get_mhp( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].mhp[lv-1]; }
-int	skill_get_castnodex( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].castnodex[lv-1]; }
-
-/* �v���g�^�C�v */
-struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,int skilllv,int x,int y,int flag);
-int skill_check_condition( struct map_session_data *sd,int type);
-int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int skillid,int skilllv,unsigned int tick,int flag );
-int skill_frostjoke_scream(struct block_list *bl,va_list ap);
-int skill_status_change_timer_sub(struct block_list *bl, va_list ap );
-int skill_attack_area(struct block_list *bl,va_list ap);
-int skill_abra_dataset(int skilllv);
-int skill_clear_element_field(struct block_list *bl);
-int skill_landprotector(struct block_list *bl, va_list ap );
-int skill_trap_splash(struct block_list *bl, va_list ap );
-int skill_count_target(struct block_list *bl, va_list ap );
-
-// [MouseJstr] - skill ok to cast? and when?
-static int skillnotok(int skillid, struct map_session_data *sd) {
-     if (sd == 0)
-           return 0;
-     if (pc_isGM(sd) >= 20)
-           return 0;  // gm's can do anything damn thing they want
-     switch (skillid) {
-       case AL_WARP:
-       case AL_TELEPORT:
-       case MC_VENDING:
-       case MC_IDENTIFY:
-             return 0; // always allowed
-       default:
-           return(map[sd->bl.m].flag.noskill);
-     }
-}
-
-
-static int distance(int x0,int y0,int x1,int y1)
-{
-	int dx,dy;
-
-	dx=abs(x0-x1);
-	dy=abs(y0-y1);
-	return dx>dy ? dx : dy;
-}
-
-/* �X�L�����j�b�gID��Ԃ��i������f�[�^�x�[�X�ɓ��ꂽ���ȁj */
-int skill_get_unit_id(int id,int flag)
-{
-
-	switch(id){
-	case MG_SAFETYWALL:		return 0x7e;				/* �Z�C�t�e�B�E�H�[�� */
-	case MG_FIREWALL:		return 0x7f;				/* �t�@�C�A�[�E�H�[�� */
-	case AL_WARP:			return (flag==0)?0x81:0x80;	/* ���[�v�|�[�^�� */
-	case PR_BENEDICTIO:		return 0x82;				/* ���̍~�� */
-	case PR_SANCTUARY:		return 0x83;				/* �T���N�`���A�� */
-	case PR_MAGNUS:			return 0x84;				/* �}�O�k�X�G�N�\�V�Y�� */
-	case AL_PNEUMA:			return 0x85;				/* �j���[�} */
-	case MG_THUNDERSTORM:	return 0x86;		/* �T���_�[�X�g�[�� */
-	case WZ_HEAVENDRIVE:	return 0x86;		/* �w�����Y�h���C�u */
-	case WZ_SIGHTRASHER:	return 0x86;				/* �T�C�g���b�V���[ */
-	case WZ_METEOR:			return 0x86;				/* ���e�I�X�g�[�� */
-	case WZ_VERMILION:		return 0x86;				/* ���[�h�I�u���@�[�~���I�� */
-	case WZ_FROSTNOVA:		return 0x86;			/* �t���X�g�m���@ */
-	case WZ_STORMGUST:		return 0x86;				/* �X�g�[���K�X�g(�Ƃ肠����LoV�Ɠ����ŏ���) */
-	case CR_GRANDCROSS:		return 0x86;				/* �O�����h�N���X */
-	case WZ_FIREPILLAR:		return (flag==0)?0x87:0x88;	/* �t�@�C�A�[�s���[ */
-	case HT_TALKIEBOX:		return 0x99;	/* �g�[�L�[�{�b�N�X */
-	case WZ_ICEWALL:		return 0x8d;				/* �A�C�X�E�H�[�� */
-	case WZ_QUAGMIRE:		return 0x8e;				/* �N�@�O�}�C�A */
-	case HT_BLASTMINE:		return 0x8f;				/* �u���X�g�}�C�� */
-	case HT_SKIDTRAP:		return 0x90;				/* �X�L�b�h�g���b�v */
-	case HT_ANKLESNARE:		return 0x91;				/* �A���N���X�l�A */
-	case AS_VENOMDUST:		return 0x92;				/* �x�m���_�X�g */
-	case HT_LANDMINE:		return 0x93;				/* �����h�}�C�� */
-	case HT_SHOCKWAVE:		return 0x94;				/* �V���b�N�E�F�[�u�g���b�v */
-	case HT_SANDMAN:		return 0x95;				/* �T���h�}�� */
-	case HT_FLASHER:		return 0x96;				/* �t���b�V���[ */
-	case HT_FREEZINGTRAP:	return 0x97;				/* �t���[�W���O�g���b�v */
-	case HT_CLAYMORETRAP:	return 0x98;				/* �N���C���A�[�g���b�v */
-	case SA_VOLCANO:		return 0x9a;					/* �{���P�[�m */
-	case SA_DELUGE:			return 0x9b;				/* �f�����[�W */
-	case SA_VIOLENTGALE:	return 0x9c;					/* �o�C�I�����g�Q�C�� */
-	case SA_LANDPROTECTOR:	return 0x9d;					/* �����h�v���e�N�^�[ */
-	case BD_LULLABY:		return 0x9e;				/* �q��� */
-	case BD_RICHMANKIM:		return 0x9f;				/* �j�����h�̉� */
-	case BD_ETERNALCHAOS:	return 0xa0;				/* �i���̍��� */
-	case BD_DRUMBATTLEFIELD:return 0xa1;					/* �푾�ۂ̋��� */
-	case BD_RINGNIBELUNGEN:	return 0xa2;				/* �j�[�x�����O�̎w�� */
-	case BD_ROKISWEIL:		return 0xa3;				/* ���L�̋��� */
-	case BD_INTOABYSS:		return 0xa4;				/* �[���̒��� */
-	case BD_SIEGFRIED:		return 0xa5;				/* �s���g�̃W�[�N�t���[�h */
-	case BA_DISSONANCE:		return 0xa6;				/* �s���a�� */
-	case BA_WHISTLE:		return 0xa7;				/* ���J */
-	case BA_ASSASSINCROSS:	return 0xa8;				/* �[�z�̃A�T�V���N���X */
-	case BA_POEMBRAGI:		return 0xa9;				/* �u���M�̎� */
-	case BA_APPLEIDUN:		return 0xaa;				/* �C�h�D���̗ь� */
-	case DC_UGLYDANCE:		return 0xab;				/* ��������ȃ_���X */
-	case DC_HUMMING:		return 0xac;				/* �n�~���O */
-	case DC_DONTFORGETME:	return 0xad;				/* ����Y��Ȃ��Łc */
-	case DC_FORTUNEKISS:	return 0xae;				/* �K�^�̃L�X */
-	case DC_SERVICEFORYOU:	return 0xaf;				/* �T�[�r�X�t�H�[���[ */
-	case RG_GRAFFITI:		return 0xb0;				/* �O���t�B�e�B */
-	case AM_DEMONSTRATION:	return 0xb1;				/* �f�����X�g���[�V���� */
-	case WE_CALLPARTNER:	return 0xb2;				/* ���Ȃ��Ɉ������� */
-	case PA_GOSPEL:			return 0xb3;				/* �S�X�y�� */
-	case HP_BASILICA:		return 0xb4;				/* �o�W���J */
-	case PF_FOGWALL:		return 0xb6;				/* �t�H�O�E�H�[�� */
-	case PF_SPIDERWEB:		return 0xb7;				/* �X�p�C�_�[�E�F�b�u */
-	}
-	return 0;
-	/*
-	0x89,0x8a,0x8b �\������
-	0x9a �������̉r���݂����ȃG�t�F�N�g
-	0x9b �������̉r���݂����ȃG�t�F�N�g
-	0x9c �������̉r���݂����ȃG�t�F�N�g
-	0x9d ���������ȃG�t�F�N�g
-	0xb1 Alchemist Demonstration
-	0xb2 = Pink Warp Portal
-	0xb3 = Gospel For Paladin
-	0xb4 = Basilica
-	0xb5 = Empty
-	0xb6 = Fog Wall for Professor
-	0xb7 = Spider Web for Professor
-	0xb8 = Empty
-	0xb9 =
-	*/
-}
-
-/*==========================================
- * �X�L���lj�����
- *------------------------------------------
- */
-int skill_additional_effect( struct block_list* src, struct block_list *bl,int skillid,int skilllv,int attack_type,unsigned int tick)
-{
-	/* MOB�lj����ʃX�L���p */
-	const int sc[]={
-		SC_POISON, SC_BLIND, SC_SILENCE, SC_STAN,
-		SC_STONE, SC_CURSE, SC_SLEEP
-	};
-	const int sc2[]={
-		MG_STONECURSE,MG_FROSTDIVER,NPC_STUNATTACK,
-		NPC_SLEEPATTACK,TF_POISON,NPC_CURSEATTACK,
-		NPC_SILENCEATTACK,0,NPC_BLINDATTACK
-	};
-
-	struct map_session_data *sd=NULL;
-	struct map_session_data *dstsd=NULL;
-	struct mob_data *md=NULL;
-	struct mob_data *dstmd=NULL;
-	struct pet_data *pd=NULL;
-
-	int skill,skill2;
-	int rate,luk;
-
-	int sc_def_mdef,sc_def_vit,sc_def_int,sc_def_luk;
-	int sc_def_mdef2,sc_def_vit2,sc_def_int2,sc_def_luk2;
-
-	nullpo_retr(0, src);
-	nullpo_retr(0, bl);
-
-	if(skilllv < 0) return 0;
-
-	if(src->type==BL_PC){
-		nullpo_retr(0, sd=(struct map_session_data *)src);
-	}else if(src->type==BL_MOB){
-		nullpo_retr(0, md=(struct mob_data *)src); //���g�p�H
-	}else if(src->type==BL_PET){
-		nullpo_retr(0, pd=(struct pet_data *)src); // [Valaris]
-	}
-
-	//�Ώۂ̑ϐ�
-	luk = battle_get_luk(bl);
-	sc_def_mdef=100 - (3 + battle_get_mdef(bl) + luk/3);
-	sc_def_vit=100 - (3 + battle_get_vit(bl) + luk/3);
-	sc_def_int=100 - (3 + battle_get_int(bl) + luk/3);
-	sc_def_luk=100 - (3 + luk);
-	//�����̑ϐ�
-	luk = battle_get_luk(src);
-	sc_def_mdef2=100 - (3 + battle_get_mdef(src) + luk/3);
-	sc_def_vit2=100 - (3 + battle_get_vit(src) + luk/3);
-	sc_def_int2=100 - (3 + battle_get_int(src) + luk/3);
-	sc_def_luk2=100 - (3 + luk);
-	if(bl->type==BL_PC)
-		dstsd=(struct map_session_data *)bl;
-	else if(bl->type==BL_MOB){
-		dstmd=(struct mob_data *)bl; //���g�p�H
-		if(sc_def_mdef>50)
-			sc_def_mdef=50;
-		if(sc_def_vit>50)
-			sc_def_vit=50;
-		if(sc_def_int>50)
-			sc_def_int=50;
-		if(sc_def_luk>50)
-			sc_def_luk=50;
-	}
-	if(sc_def_mdef<0)
-		sc_def_mdef=0;
-	if(sc_def_vit<0)
-		sc_def_vit=0;
-	if(sc_def_int<0)
-		sc_def_int=0;
-
-	switch(skillid){
-	case 0:					/* �ʏ�U�� */
-		/* ������ */
-		if( sd && pc_isfalcon(sd) && sd->status.weapon == 11 && (skill=pc_checkskill(sd,HT_BLITZBEAT))>0 &&
-			rand()%1000 <= sd->paramc[5]*10/3+1 ) {
-			int lv=(sd->status.job_level+9)/10;
-			skill_castend_damage_id(src,bl,HT_BLITZBEAT,(skill<lv)?skill:lv,tick,0xf00000);
-		}
-		// �X�i�b�`���[
-		if(sd && sd->status.weapon != 11 && (skill=pc_checkskill(sd,RG_SNATCHER)) > 0)
-			if((skill*15 + 55) + (skill2 = pc_checkskill(sd,TF_STEAL))*10 > rand()%1000) {
-				if(pc_steal_item(sd,bl))
-					clif_skill_nodamage(src,bl,TF_STEAL,skill2,1);
-				else
-					clif_skill_fail(sd,skillid,0,0);
-			}
-		break;
-
-	case SM_BASH:			/* �o�b�V���i�}���U���j */
-		if( sd && (skill=pc_checkskill(sd,SM_FATALBLOW))>0 ){
-			if( rand()%100 < 6*(skilllv-5)*sc_def_vit/100 )
-				skill_status_change_start(bl,SC_STAN,skilllv,0,0,0,skill_get_time2(SM_FATALBLOW,skilllv),0);
-		}
-		break;
-
-	case TF_POISON:			/* �C���x�i�� */
-	case AS_SPLASHER:		/* �x�i���X�v���b�V���[ */
-		if(rand()%100< (2*skilllv+10)*sc_def_vit/100 )
-			skill_status_change_start(bl,SC_POISON,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		else{
-			if(sd && skillid==TF_POISON)
-				clif_skill_fail(sd,skillid,0,0);
-		}
-		break;
-
-	case AS_SONICBLOW:		/* �\�j�b�N�u���[ */
-		if( rand()%100 < (2*skilllv+10)*sc_def_vit/100 )
-			skill_status_change_start(bl,SC_STAN,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-
-
-	case HT_FREEZINGTRAP:	/* �t���[�W���O�g���b�v */
-		rate=skilllv*3+35;
-		if(rand()%100 < rate*sc_def_mdef/100)
-			skill_status_change_start(bl,SC_FREEZE,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-
-	case MG_FROSTDIVER:		/* �t���X�g�_�C�o�[ */
-	case WZ_FROSTNOVA:		/* �t���X�g�m���@ */
-		rate=(skilllv*3+35)*sc_def_mdef/100-(battle_get_int(bl)+battle_get_luk(bl))/15;
-		rate=rate<=5?5:rate;
-		if(rand()%100 < rate)
-			skill_status_change_start(bl,SC_FREEZE,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		else if(sd)
-			clif_skill_fail(sd,skillid,0,0);
-		break;
-
-	case WZ_STORMGUST:		/* �X�g�[���K�X�g */
-		{
-			struct status_change *sc_data = battle_get_sc_data(bl);
-			if(sc_data) {
-				sc_data[SC_FREEZE].val3++;
-				if(sc_data[SC_FREEZE].val3 >= 3)
-					skill_status_change_start(bl,SC_FREEZE,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-			}
-		}
-		break;
-
-	case HT_LANDMINE:		/* �����h�}�C�� */
-		if( rand()%100 < (5*skilllv+30)*sc_def_vit/100 )
-			skill_status_change_start(bl,SC_STAN,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-
-	case HT_SHOCKWAVE:				/* �V���b�N�E�F�[�u�g���b�v */
-		if(map[bl->m].flag.pvp && dstsd){
-			dstsd->status.sp -= dstsd->status.sp*(5+15*skilllv)/100;
-			pc_calcstatus(dstsd,0);
-		}
-		break;
-	case HT_SANDMAN:		/* �T���h�}�� */
-		if( rand()%100 < (5*skilllv+30)*sc_def_int/100 )
-			skill_status_change_start(bl,SC_SLEEP,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-	case TF_SPRINKLESAND:	/* ���܂� */
-		if( rand()%100 < 15*sc_def_int/100 )
-			skill_status_change_start(bl,SC_BLIND,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-
-	case TF_THROWSTONE:		/* ���� */
-		if( rand()%100 < 5*sc_def_vit/100 )
-			skill_status_change_start(bl,SC_STAN,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-
-	case CR_HOLYCROSS:		/* �z�[���[�N���X */
-		if( rand()%100 < 3*skilllv*sc_def_int/100 )
-			skill_status_change_start(bl,SC_BLIND,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-
-	case CR_GRANDCROSS:		/* �O�����h�N���X */
-		{
-			int race = battle_get_race(bl);
-			if( (battle_check_undead(race,battle_get_elem_type(bl)) || race == 6) && rand()%100 < 100000*sc_def_int/100)	//�����t�^�������S�ϐ��ɂ͖���
-				skill_status_change_start(bl,SC_BLIND,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		}
-		break;
-
-	case CR_SHIELDCHARGE:		/* �V�[���h�`���[�W */
-		if( rand()%100 < (15 + skilllv*5)*sc_def_vit/100 )
-			skill_status_change_start(bl,SC_STAN,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-
-	case RG_RAID:		/* �T�v���C�Y�A�^�b�N */
-		if( rand()%100 < (10+3*skilllv)*sc_def_vit/100 )
-			skill_status_change_start(bl,SC_STAN,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		if( rand()%100 < (10+3*skilllv)*sc_def_int/100 )
-			skill_status_change_start(bl,SC_BLIND,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-	case BA_FROSTJOKE:
-		if(rand()%100 < (15+5*skilllv)*sc_def_mdef/100)
-			skill_status_change_start(bl,SC_FREEZE,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-
-	case DC_SCREAM:
-		if( rand()%100 < (25+5*skilllv)*sc_def_vit/100 )
-			skill_status_change_start(bl,SC_STAN,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-
-	case BD_LULLABY:	/* �q��S */
-		if( rand()%100 < 15*sc_def_int/100 )
-			skill_status_change_start(bl,SC_SLEEP,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-
-	/* MOB�̒lj����ʕt���X�L�� */
-
-	case NPC_PETRIFYATTACK:
-		if(rand()%100 < sc_def_mdef)
-			skill_status_change_start(bl,sc[skillid-NPC_POISON],skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-	case NPC_POISON:
-	case NPC_SILENCEATTACK:
-	case NPC_STUNATTACK:
-		if(rand()%100 < sc_def_vit && src->type!=BL_PET)
-			skill_status_change_start(bl,sc[skillid-NPC_POISON],skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		if(src->type==BL_PET)
-			skill_status_change_start(bl,sc[skillid-NPC_POISON],skilllv,0,0,0,skilllv*1000,0);
-		break;
-	case NPC_CURSEATTACK:
-		if(rand()%100 < sc_def_luk)
-			skill_status_change_start(bl,sc[skillid-NPC_POISON],skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-	case NPC_SLEEPATTACK:
-	case NPC_BLINDATTACK:
-		if(rand()%100 < sc_def_int)
-			skill_status_change_start(bl,sc[skillid-NPC_POISON],skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-	case NPC_MENTALBREAKER:
-		if(dstsd) {
-			int sp = dstsd->status.max_sp*(10+skilllv)/100;
-			if(sp < 1) sp = 1;
-			pc_heal(dstsd,0,-sp);
-		}
-		break;
-
-// -- moonsoul (adding status effect chance given to wizard aoe skills meteor and vermillion)
-//
-	case WZ_METEOR:
-		if(rand()%100 < sc_def_vit)
-			skill_status_change_start(bl,SC_STAN,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);		
-		break;
-	case WZ_VERMILION:
-		if(rand()%100 < sc_def_int)
-			skill_status_change_start(bl,SC_BLIND,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);		
-		break;
-
-// -- moonsoul (stun ability of new champion skill tigerfist)
-//
-	case CH_TIGERFIST:
-		if( rand()%100 < (5 + skilllv*5)*sc_def_vit/100 )
-			skill_status_change_start(bl,SC_STAN,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-
-	case LK_SPIRALPIERCE:
-		if( rand()%100 < (15 + skilllv*5)*sc_def_vit/100 )
-			skill_status_change_start(bl,SC_STAN,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-	case ST_REJECTSWORD:	/* �t���[�W���O�g���b�v */
-		if( rand()%100 < (10 + skilllv*5) )
-			skill_status_change_start(bl,SC_AUTOCOUNTER,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-	case PF_FOGWALL:		/* �z�[���[�N���X */
-		if( rand()%100 < 3*skilllv*sc_def_int/100 )
-			skill_status_change_start(bl,SC_BLIND,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-	case LK_HEADCRUSH:				/* �w�b�h�N���b�V�� */
-		{//�������ǂ�������Ȃ��̂œK����
-			int race=battle_get_race(bl);
-			if( !(battle_check_undead(race,battle_get_elem_type(bl)) || race == 6) && rand()%100 < (2*skilllv+10)*sc_def_vit/100 )
-				skill_status_change_start(bl,SC_HEADCRUSH,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		}
-			break;
-	case LK_JOINTBEAT:				/* �W���C���g�r�[�g */
-		//�������ǂ�������Ȃ��̂œK����
-		if( rand()%100 < (2*skilllv+10)*sc_def_vit/100 )
-			skill_status_change_start(bl,SC_JOINTBEAT,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-	case PF_SPIDERWEB:		/* �X�p�C�_�[�E�F�b�u */
-		{
-			int sec=skill_get_time2(skillid,skilllv);
-			if(map[src->m].flag.pvp) //PvP�ł͍S�����Ԕ����H
-				sec = sec/2;
-			battle_stopwalking(bl,1);
-			skill_status_change_start(bl,SC_SPIDERWEB,skilllv,0,0,0,sec,0);
-		}
-		break;
-	case ASC_METEORASSAULT:			/* ���e�I�A�T���g */
-		if( rand()%100 < (15 + skilllv*5)*sc_def_vit/100 ) //��Ԉُ�͏ڍׂ�������Ȃ��̂œK����
-			skill_status_change_start(bl,SC_STAN,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		if( rand()%100 < (10+3*skilllv)*sc_def_int/100 )
-			skill_status_change_start(bl,SC_BLIND,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-	case MO_EXTREMITYFIST:			/* ���C���e���� */
-		//���C�����g����5���Ԏ��R�񕜂��Ȃ��悤�ɂȂ�
-		skill_status_change_start(src,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time2(skillid,skilllv),0 );
-		break;
-	}
-
-	if(sd && skillid != MC_CARTREVOLUTION && attack_type&BF_WEAPON){	/* �J�[�h�ɂ��lj����� */
-		int i;
-		int sc_def_card=100;
-
-		for(i=SC_STONE;i<=SC_BLIND;i++){
-			//�Ώۂɏ�Ԉُ�
-			if(i==SC_STONE || i==SC_FREEZE)
-				sc_def_card=sc_def_mdef;
-			else if(i==SC_STAN || i==SC_POISON || i==SC_SILENCE)
-				sc_def_card=sc_def_vit;
-			else if(i==SC_SLEEP || i==SC_CONFUSION || i==SC_BLIND)
-				sc_def_card=sc_def_int;
-			else if(i==SC_CURSE)
-				sc_def_card=sc_def_luk;
-
-			if(!sd->state.arrow_atk) {
-				if(rand()%10000 < (sd->addeff[i-SC_STONE])*sc_def_card/100 ){
-					if(battle_config.battle_log)
-						printf("PC %d skill_addeff: card�ɂ��ُ픭�� %d %d\n",sd->bl.id,i,sd->addeff[i-SC_STONE]);
-					skill_status_change_start(bl,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0);
-				}
-			}
-			else {
-				if(rand()%10000 < (sd->addeff[i-SC_STONE]+sd->arrow_addeff[i-SC_STONE])*sc_def_card/100 ){
-					if(battle_config.battle_log)
-						printf("PC %d skill_addeff: card�ɂ��ُ픭�� %d %d\n",sd->bl.id,i,sd->addeff[i-SC_STONE]);
-					skill_status_change_start(bl,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0);
-				}
-			}
-			//�����ɏ�Ԉُ�
-			if(i==SC_STONE || i==SC_FREEZE)
-				sc_def_card=sc_def_mdef2;
-			else if(i==SC_STAN || i==SC_POISON || i==SC_SILENCE)
-				sc_def_card=sc_def_vit2;
-			else if(i==SC_SLEEP || i==SC_CONFUSION || i==SC_BLIND)
-				sc_def_card=sc_def_int2;
-			else if(i==SC_CURSE)
-				sc_def_card=sc_def_luk2;
-
-			if(!sd->state.arrow_atk) {
-				if(rand()%10000 < (sd->addeff2[i-SC_STONE])*sc_def_card/100 ){
-					if(battle_config.battle_log)
-						printf("PC %d skill_addeff: card�ɂ��ُ픭�� %d %d\n",src->id,i,sd->addeff2[i-SC_STONE]);
-					skill_status_change_start(src,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0);
-				}
-			}
-			else {
-				if(rand()%10000 < (sd->addeff2[i-SC_STONE]+sd->arrow_addeff2[i-SC_STONE])*sc_def_card/100 ){
-					if(battle_config.battle_log)
-						printf("PC %d skill_addeff: card�ɂ��ُ픭�� %d %d\n",src->id,i,sd->addeff2[i-SC_STONE]);
-					skill_status_change_start(src,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0);
-				}
-			}
-		}
-	}
-	return 0;
-}
-
-/*=========================================================================
- �X�L���U��������΂�����
--------------------------------------------------------------------------*/
-int skill_blown( struct block_list *src, struct block_list *target,int count)
-{
-	int dx=0,dy=0,nx,ny;
-	int x=target->x,y=target->y;
-	int ret,prev_state=MS_IDLE;
-	int moveblock;
-	struct map_session_data *sd=NULL;
-	struct mob_data *md=NULL;
-	struct pet_data *pd=NULL;
-	struct skill_unit *su=NULL;
-
-	nullpo_retr(0, src);
-	nullpo_retr(0, target);
-
-	if(target->type==BL_PC){
-		nullpo_retr(0, sd=(struct map_session_data *)target);
-	}else if(target->type==BL_MOB){
-		nullpo_retr(0, md=(struct mob_data *)target);
-	}else if(target->type==BL_PET){
-		nullpo_retr(0, pd=(struct pet_data *)target);
-	}else if(target->type==BL_SKILL){
-		nullpo_retr(0, su=(struct skill_unit *)target);
-	}else return 0;
-
-	if(!(count&0x10000 && (sd||md||pd||su))){	/* �w��Ȃ��Ȃ�ʒu�֌W������������߂� */
-		dx=target->x-src->x; dx=(dx>0)?1:((dx<0)?-1: 0);
-		dy=target->y-src->y; dy=(dy>0)?1:((dy<0)?-1: 0);
-	}
-	if(dx==0 && dy==0){
-		int dir=battle_get_dir(target);
-		if(dir>=0 && dir<8){
-			dx=-dirx[dir];
-			dy=-diry[dir];
-		}
-	}
-
-	ret=path_blownpos(target->m,x,y,dx,dy,count&0xffff);
-	nx=ret>>16;
-	ny=ret&0xffff;
-	moveblock=( x/BLOCK_SIZE != nx/BLOCK_SIZE || y/BLOCK_SIZE != ny/BLOCK_SIZE);
-
-	if(count&0x20000) {
-		battle_stopwalking(target,1);
-		if(sd){
-			sd->to_x=nx;
-			sd->to_y=ny;
-			sd->walktimer = 1;
-			clif_walkok(sd);
-			clif_movechar(sd);
-		}
-		else if(md) {
-			md->to_x=nx;
-			md->to_y=ny;
-			prev_state = md->state.state;
-			md->state.state = MS_WALK;
-			clif_fixmobpos(md);
-		}
-		else if(pd) {
-			pd->to_x=nx;
-			pd->to_y=ny;
-			prev_state = pd->state.state;
-			pd->state.state = MS_WALK;
-			clif_fixpetpos(pd);
-		}
-	}
-	else
-		battle_stopwalking(target,2);
-
-	dx = nx - x;
-	dy = ny - y;
-
-	if(sd)	/* ��ʊO�ɏo���̂ŏ��� */
-		map_foreachinmovearea(clif_pcoutsight,target->m,x-AREA_SIZE,y-AREA_SIZE,x+AREA_SIZE,y+AREA_SIZE,dx,dy,0,sd);
-	else if(md)
-		map_foreachinmovearea(clif_moboutsight,target->m,x-AREA_SIZE,y-AREA_SIZE,x+AREA_SIZE,y+AREA_SIZE,dx,dy,BL_PC,md);
-	else if(pd)
-		map_foreachinmovearea(clif_petoutsight,target->m,x-AREA_SIZE,y-AREA_SIZE,x+AREA_SIZE,y+AREA_SIZE,dx,dy,BL_PC,pd);
-
-	if(su){
-		skill_unit_move_unit_group(su->group,target->m,dx,dy);
-	}else{
-//		struct status_change *sc_data=battle_get_sc_data(target);
-	if(moveblock) map_delblock(target);
-	target->x=nx;
-	target->y=ny;
-	if(moveblock) map_addblock(target);
-/*�_���X���ɃG�t�F�N�g�͈ړ����Ȃ��炵��
-		if(sc_data && sc_data[SC_DANCING].timer!=-1){ //�Ώۂ��_���X���Ȃ̂ŃG�t�F�N�g���ړ�
-			struct skill_unit_group *sg=(struct skill_unit_group *)sc_data[SC_DANCING].val2;
-			if(sg)
-				skill_unit_move_unit_group(sg,target->m,dx,dy);
-		}
-*/
-	}
-
-	if(sd) {	/* ��ʓ��ɓ����Ă����̂ŕ\�� */
-		map_foreachinmovearea(clif_pcinsight,target->m,nx-AREA_SIZE,ny-AREA_SIZE,nx+AREA_SIZE,ny+AREA_SIZE,-dx,-dy,0,sd);
-		if(count&0x20000)
-			sd->walktimer = -1;
-	}
-	else if(md) {
-		map_foreachinmovearea(clif_mobinsight,target->m,nx-AREA_SIZE,ny-AREA_SIZE,nx+AREA_SIZE,ny+AREA_SIZE,-dx,-dy,BL_PC,md);
-		if(count&0x20000)
-			md->state.state = prev_state;
-	}
-	else if(pd) {
-		map_foreachinmovearea(clif_petinsight,target->m,nx-AREA_SIZE,ny-AREA_SIZE,nx+AREA_SIZE,ny+AREA_SIZE,-dx,-dy,BL_PC,pd);
-		if(count&0x20000)
-			pd->state.state = prev_state;
-	}
-
-	skill_unit_move(target,gettick(),(count&0xffff)+7);	/* �X�L�����j�b�g�̔��� */
-
-	return 0;
-}
-
-
-/*
- * =========================================================================
- * �X�L���U�����ʏ����܂Ƃ�
- * flag�̐����B16�i�}
- *	00XRTTff
- *  ff	= magic�Ōv�Z�ɓn�����j
- *	TT	= �p�P�b�g��type����(0�Ńf�t�H���g�j
- *  X   = �p�P�b�g�̃X�L��Lv
- *  R	= �\��iskill_area_sub�Ŏg�p����j
- *-------------------------------------------------------------------------
- */
-
-int skill_attack( int attack_type, struct block_list* src, struct block_list *dsrc,
-	 struct block_list *bl,int skillid,int skilllv,unsigned int tick,int flag )
-{
-	struct Damage dmg;
-	struct status_change *sc_data;
-	int type,lv,damage;
-
-	rdamage = 0;
-	nullpo_retr(0, src);
-	nullpo_retr(0, dsrc);
-	nullpo_retr(0, bl);
-
-	sc_data = battle_get_sc_data(bl);
-
-//�������Ȃ����肱������
-	if(dsrc->m != bl->m) //�Ώۂ������}�b�v�ɂ��Ȃ���Ή������Ȃ�
-		return 0;
-	if(src->prev == NULL || dsrc->prev == NULL || bl->prev == NULL) //prev�悭�킩��Ȃ���
-		return 0;
-	if(src->type == BL_PC && pc_isdead((struct map_session_data *)src)) //�p�ҁH��PC�ł��łɎ���ł����牽�����Ȃ�
-		return 0;
-	if(dsrc->type == BL_PC && pc_isdead((struct map_session_data *)dsrc)) //�p�ҁH��PC�ł��łɎ���ł����牽�����Ȃ�
-		return 0;
-	if(bl->type == BL_PC && pc_isdead((struct map_session_data *)bl)) //�Ώۂ�PC�ł��łɎ���ł����牽�����Ȃ�
-		return 0;
-	if(skillnotok(skillid, (struct map_session_data *)  bl)) 
-	        return 0; // [MouseJstr]
-	if(sc_data && sc_data[SC_HIDING].timer != -1) { //�n�C�f�B���O��Ԃ�
-		if(skill_get_pl(skillid) != 2) //�X�L���̑������n�����łȂ���Ή������Ȃ�
-			return 0;
-	}
-	if(sc_data && sc_data[SC_TRICKDEAD].timer != -1) //���񂾂ӂ蒆�͉������Ȃ�
-		return 0;
-	if(skillid == WZ_STORMGUST) { //�g�p�X�L�����X�g�[���K�X�g��
-		if(sc_data && sc_data[SC_FREEZE].timer != -1) //������ԂȂ牽�����Ȃ�
-			return 0;
-	}
-	if(skillid == WZ_FROSTNOVA && dsrc->x == bl->x && dsrc->y == bl->y) //�g�p�X�L�����t���X�g�m���@�ŁAdsrc��bl�������ꏊ�Ȃ牽�����Ȃ�
-		return 0;
-	if(src->type == BL_PC && ((struct map_session_data *)src)->chatID) //�p�҂�PC�Ń`���b�g���Ȃ牽�����Ȃ�
-		return 0;
-	if(dsrc->type == BL_PC && ((struct map_session_data *)dsrc)->chatID) //�p�҂�PC�Ń`���b�g���Ȃ牽�����Ȃ�
-		return 0;
-	if(src->type == BL_PC && bl && mob_gvmobcheck(((struct map_session_data *)src),bl)==0)
-		return 0;
-
-//�������Ȃ����肱���܂�
-
-	type=-1;
-	lv=(flag>>20)&0xf;
-	dmg=battle_calc_attack(attack_type,src,bl,skillid,skilllv,flag&0xff ); //�_���[�W�v�Z
-
-//�}�W�b�N���b�h������������
-	if(attack_type&BF_MAGIC && sc_data && sc_data[SC_MAGICROD].timer != -1 && src == dsrc) { //���@�U���Ń}�W�b�N���b�h��Ԃ�src=dsrc�Ȃ�
-		dmg.damage = dmg.damage2 = 0; //�_���[�W0
-		if(bl->type == BL_PC) { //�Ώۂ�PC�̏ꍇ
-			int sp = skill_get_sp(skillid,skilllv); //�g�p���ꂽ�X�L����SP���z��
-			sp = sp * sc_data[SC_MAGICROD].val2 / 100; //�z�����v�Z
-			if(skillid == WZ_WATERBALL && skilllv > 1) //�E�H�[�^�[�{�[��Lv1�ȏ�
-				sp = sp/((skilllv|1)*(skilllv|1)); //����Ɍv�Z�H
-			if(sp > 0x7fff) sp = 0x7fff; //SP�������̏ꍇ�͗��_�ő�l
-			else if(sp < 1) sp = 1; //1�ȉ��̏ꍇ��1
-			if(((struct map_session_data *)bl)->status.sp + sp > ((struct map_session_data *)bl)->status.max_sp) { //��SP+���݂�SP��MSP���傫���ꍇ
-				sp = ((struct map_session_data *)bl)->status.max_sp - ((struct map_session_data *)bl)->status.sp; //SP��MSP-����SP�ɂ���
-				((struct map_session_data *)bl)->status.sp = ((struct map_session_data *)bl)->status.max_sp; //���݂�SP��MSP����
-			}
-			else //��SP+���݂�SP��MSP��菬�����ꍇ�͉�SP�����Z
-				((struct map_session_data *)bl)->status.sp += sp;
-			clif_heal(((struct map_session_data *)bl)->fd,SP_SP,sp); //SP�񕜃G�t�F�N�g�̕\��
-			((struct map_session_data *)bl)->canact_tick = tick + skill_delayfix(bl, skill_get_delay(SA_MAGICROD,sc_data[SC_MAGICROD].val1)); //
-		}
-		clif_skill_nodamage(bl,bl,SA_MAGICROD,sc_data[SC_MAGICROD].val1,1); //�}�W�b�N���b�h�G�t�F�N�g��\��
-	}
-//�}�W�b�N���b�h���������܂�
-
-	if(src->type==BL_PET) { // [Valaris]
-		dmg.damage=battle_attr_fix(skilllv, skill_get_pl(skillid), battle_get_element(bl) );
-		dmg.damage2=0;
-	}
-
-	damage = dmg.damage + dmg.damage2;
-
-	if(lv==15)
-		lv=-1;
-
-	if( flag&0xff00 )
-		type=(flag&0xff00)>>8;
-
-	if(damage <= 0 || damage < dmg.div_) //������΂�����H��
-		dmg.blewcount = 0;
-
-	if(skillid == CR_GRANDCROSS) {//�O�����h�N���X
-		if(battle_config.gx_disptype) dsrc = src;	// �G�_���[�W�������\��
-		if( src == bl) type = 4;	// �����̓_���[�W���[�V�����Ȃ�
-	}
-
-//�g�p�҂�PC�̏ꍇ�̏�����������
-	if(src->type == BL_PC) {
-		struct map_session_data *sd = (struct map_session_data *)src;
-		nullpo_retr(0, sd);
-//�A�ŏ�(MO_CHAINCOMBO)��������
-		if(skillid == MO_CHAINCOMBO) {
-			int delay = 1000 - 4 * battle_get_agi(src) - 2 *  battle_get_dex(src); //��{�f�B���C�̌v�Z
-			if(damage < battle_get_hp(bl)) { //�_���[�W���Ώۂ�HP��菬�����ꍇ
-				if(pc_checkskill(sd, MO_COMBOFINISH) > 0 && sd->spiritball > 0) //�җ���(MO_COMBOFINISH)�擾���C���ێ�����+300ms
-					delay += 300 * battle_config.combo_delay_rate /100; //�lj��f�B���C��conf�ɂ�蒲��
-
-					skill_status_change_start(src,SC_COMBO,MO_CHAINCOMBO,skilllv,0,0,delay,0); //�R���{��Ԃ�
-			}
-			sd->attackabletime = sd->canmove_tick = tick + delay;
-			clif_combo_delay(src,delay); //�R���{�f�B���C�p�P�b�g�̑��M
-		}
-//�A�ŏ�(MO_CHAINCOMBO)�����܂�
-//�җ���(MO_COMBOFINISH)��������
-		else if(skillid == MO_COMBOFINISH) {
-			int delay = 700 - 4 * battle_get_agi(src) - 2 *  battle_get_dex(src);
-			if(damage < battle_get_hp(bl)) {
-				//���C���e����(MO_EXTREMITYFIST)�擾���C��4�•ێ��������g��(MO_EXPLOSIONSPIRITS)��Ԏ���+300ms
-				//���Ռ�(CH_TIGERFIST)�擾����+300ms
-				if((pc_checkskill(sd, MO_EXTREMITYFIST) > 0 && sd->spiritball >= 4 && sd->sc_data[SC_EXPLOSIONSPIRITS].timer != -1) ||
-				(pc_checkskill(sd, CH_TIGERFIST) > 0 && sd->spiritball > 0) ||
-				(pc_checkskill(sd, CH_CHAINCRUSH) > 0 && sd->spiritball > 1))
-					delay += 300 * battle_config.combo_delay_rate /100; //�lj��f�B���C��conf�ɂ�蒲��
-
-				skill_status_change_start(src,SC_COMBO,MO_COMBOFINISH,skilllv,0,0,delay,0); //�R���{��Ԃ�
-			}
-			sd->attackabletime = sd->canmove_tick = tick + delay;
-			clif_combo_delay(src,delay); //�R���{�f�B���C�p�P�b�g�̑��M
-		}
-//�җ���(MO_COMBOFINISH)�����܂�
-//���Ռ�(CH_TIGERFIST)��������
-		else if(skillid == CH_TIGERFIST) {
-			int delay = 1000 - 4 * battle_get_agi(src) - 2 *  battle_get_dex(src);
-			if(damage < battle_get_hp(bl)) {
-				if(pc_checkskill(sd, CH_CHAINCRUSH) > 0) //�A������(CH_CHAINCRUSH)�擾����+300ms
-					delay += 300 * battle_config.combo_delay_rate /100; //�lj��f�B���C��conf�ɂ�蒲��
-
-				skill_status_change_start(src,SC_COMBO,CH_TIGERFIST,skilllv,0,0,delay,0); //�R���{��Ԃ�
-			}
-			sd->attackabletime = sd->canmove_tick = tick + delay;
-			clif_combo_delay(src,delay); //�R���{�f�B���C�p�P�b�g�̑��M
-		}
-//���Ռ�(CH_TIGERFIST)�����܂�
-//�A������(CH_CHAINCRUSH)��������
-		else if(skillid == CH_CHAINCRUSH) {
-			int delay = 1000 - 4 * battle_get_agi(src) - 2 *  battle_get_dex(src);
-			if(damage < battle_get_hp(bl)) {
-				//���C���e����(MO_EXTREMITYFIST)�擾���C��4�•ێ��������g��(MO_EXPLOSIONSPIRITS)��Ԏ���+300ms
-				if(pc_checkskill(sd, MO_EXTREMITYFIST) > 0 && sd->spiritball >= 4 && sd->sc_data[SC_EXPLOSIONSPIRITS].timer != -1)
-					delay += 300 * battle_config.combo_delay_rate /100; //�lj��f�B���C��conf�ɂ�蒲��
-
-				skill_status_change_start(src,SC_COMBO,CH_CHAINCRUSH,skilllv,0,0,delay,0); //�R���{��Ԃ�
-			}
-			sd->attackabletime = sd->canmove_tick = tick + delay;
-			clif_combo_delay(src,delay); //�R���{�f�B���C�p�P�b�g�̑��M
-		}
-//�A������(CH_CHAINCRUSH)�����܂�
-	}
-//�g�p�҂�PC�̏ꍇ�̏��������܂�
-//����X�L���H��������
-	//AppleGirl Was Here
-	if(attack_type&BF_MAGIC && damage > 0 && src != bl && src == dsrc) { //Blah Blah
-		if(bl->type == BL_PC) { //Blah Blah
-			struct map_session_data *tsd = (struct map_session_data *)bl;
-			if(tsd->magic_damage_return > 0) { //More Blah
-				rdamage += damage * tsd->magic_damage_return / 100;
-				if(rdamage < 1) rdamage = 1;
-			}
-		}
-	}
-		//Stop Here
-	if(attack_type&BF_WEAPON && damage > 0 && src != bl && src == dsrc) { //����X�L�����_���[�W���聕�g�p�҂ƑΏێ҂��Ⴄ��src=dsrc
-		if(dmg.flag&BF_SHORT) { //�ߋ����U�����H��
-			if(bl->type == BL_PC) { //�Ώۂ�PC�̎�
-				struct map_session_data *tsd = (struct map_session_data *)bl;
-				nullpo_retr(0, tsd);
-				if(tsd->short_weapon_damage_return > 0) { //�ߋ����U�����˕Ԃ��H��
-					rdamage += damage * tsd->short_weapon_damage_return / 100;
-					if(rdamage < 1) rdamage = 1;
-				}
-			}
-			if(sc_data && sc_data[SC_REFLECTSHIELD].timer != -1) { //���t���N�g�V�[���h��
-				rdamage += damage * sc_data[SC_REFLECTSHIELD].val2 / 100; //���˕Ԃ��v�Z
-				if(rdamage < 1) rdamage = 1;
-			}
-		}
-		else if(dmg.flag&BF_LONG) { //�������U�����H��
-			if(bl->type == BL_PC) { //�Ώۂ�PC�̎�
-				struct map_session_data *tsd = (struct map_session_data *)bl;
-				nullpo_retr(0, tsd);
-				if(tsd->long_weapon_damage_return > 0) { //�������U�����˕Ԃ��H��
-					rdamage += damage * tsd->long_weapon_damage_return / 100;
-					if(rdamage < 1) rdamage = 1;
-				}
-			}
-		}
-		if(rdamage > 0)
-			clif_damage(src,src,tick, dmg.amotion,0,rdamage,1,4,0);
-	}
-//����X�L���H�����܂�
-
-	switch(skillid){
-	case WZ_SIGHTRASHER:
-		clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion, damage, dmg.div_, skillid, (lv!=0)?lv:skilllv, 5);
-		break;
-	case AS_SPLASHER:
-		clif_skill_damage(dsrc,bl,tick,dmg.amotion,dmg.dmotion, damage, dmg.div_, skillid, -1, 5);
-		break;
-	case NPC_SELFDESTRUCTION:
-	case NPC_SELFDESTRUCTION2:
-		break;
-	default:
-		clif_skill_damage(dsrc,bl,tick,dmg.amotion,dmg.dmotion, damage, dmg.div_, skillid, (lv!=0)?lv:skilllv, (skillid==0)? 5:type );
-	}
-	if(dmg.blewcount > 0 && !map[src->m].flag.gvg) {	/* ������΂������Ƃ��̃p�P�b�g */
-		if(skillid == WZ_SIGHTRASHER)
-			skill_blown(src,bl,dmg.blewcount);
-		else
-			skill_blown(dsrc,bl,dmg.blewcount);
-		if(bl->type == BL_MOB)
-			clif_fixmobpos((struct mob_data *)bl);
-		else if(bl->type == BL_PET)
-			clif_fixpetpos((struct pet_data *)bl);
-		else
-			clif_fixpos(bl);
-	}
-
-	map_freeblock_lock();
-	/* ���ۂɃ_���[�W�������s�� */
-	if(skillid != KN_BOWLINGBASH || flag)
-		battle_damage(src,bl,damage,0);
-	if(skillid == RG_INTIMIDATE && damage > 0 && !(battle_get_mode(bl)&0x20) && !map[src->m].flag.gvg ) {
-		int s_lv = battle_get_lv(src),t_lv = battle_get_lv(bl);
-		int rate = 50 + skilllv * 5;
-		rate = rate + (s_lv - t_lv);
-		if(rand()%100 < rate)
-			skill_addtimerskill(src,tick + 800,bl->id,0,0,skillid,skilllv,0,flag);
-	}
-	if(damage > 0 && dmg.flag&BF_SKILL && bl->type==BL_PC && pc_checkskill((struct map_session_data *)bl,RG_PLAGIARISM)){
-		struct map_session_data *tsd = (struct map_session_data *)bl;
-		nullpo_retr(0, tsd);
-		if(!tsd->status.skill[skillid].id && !tsd->status.skill[skillid].id
-			&& !(skillid > NPC_PIERCINGATT && skillid < NPC_SUMMONMONSTER) ){
-			//���ɓ���ł���X�L��������ΊY���X�L��������
-			if (tsd->cloneskill_id && tsd->cloneskill_lv && tsd->status.skill[tsd->cloneskill_id].flag==13){
-				tsd->status.skill[tsd->cloneskill_id].id=0;
-				tsd->status.skill[tsd->cloneskill_id].lv=0;
-				tsd->status.skill[tsd->cloneskill_id].flag=0;
-			}
-			tsd->cloneskill_id=skillid;
-			tsd->cloneskill_lv=skilllv;
-			tsd->status.skill[skillid].id=skillid;
-			tsd->status.skill[skillid].lv=(pc_checkskill(tsd,RG_PLAGIARISM) > skill_get_max(skillid))?
-							skill_get_max(skillid):pc_checkskill(tsd,RG_PLAGIARISM);
-			tsd->status.skill[skillid].flag=13;//cloneskill flag
-			clif_skillinfoblock(tsd);
-		}
-	}
-	/* �_���[�W������Ȃ�lj����ʔ��� */
-	if(bl->prev != NULL){
-		struct map_session_data *sd = (struct map_session_data *)bl;
-		nullpo_retr(0, sd);
-		if( bl->type != BL_PC || (sd && !pc_isdead(sd)) ) {
-		if(damage > 0)
-			skill_additional_effect(src,bl,skillid,skilllv,attack_type,tick);
-		if(bl->type==BL_MOB && src!=bl)	/* �X�L���g�p������MOB�X�L�� */
-		{
-				struct mob_data *md=(struct mob_data *)bl;
-				nullpo_retr(0, md);
-				if(battle_config.mob_changetarget_byskill == 1)
-				{
-					int target;
-					target=md->target_id;
-					if(src->type == BL_PC)
-						md->target_id=src->id;
-					mobskill_use(md,tick,MSC_SKILLUSED|(skillid<<16));
-					md->target_id=target;
-				}
-				else
-					mobskill_use(md,tick,MSC_SKILLUSED|(skillid<<16));
-			}
-		}
-	}
-
-	if(src->type == BL_PC && dmg.flag&BF_WEAPON && src != bl && src == dsrc && damage > 0) {
-		struct map_session_data *sd = (struct map_session_data *)src;
-		int hp = 0,sp = 0;
-		nullpo_retr(0, sd);
-		if(sd->hp_drain_rate && sd->hp_drain_per > 0 && dmg.damage > 0 && rand()%100 < sd->hp_drain_rate) {
-			hp += (dmg.damage * sd->hp_drain_per)/100;
-			if(sd->hp_drain_rate > 0 && hp < 1) hp = 1;
-			else if(sd->hp_drain_rate < 0 && hp > -1) hp = -1;
-		}
-		if(sd->hp_drain_rate_ && sd->hp_drain_per_ > 0 && dmg.damage2 > 0 && rand()%100 < sd->hp_drain_rate_) {
-			hp += (dmg.damage2 * sd->hp_drain_per_)/100;
-			if(sd->hp_drain_rate_ > 0 && hp < 1) hp = 1;
-			else if(sd->hp_drain_rate_ < 0 && hp > -1) hp = -1;
-		}
-		if(sd->sp_drain_rate > 0 && sd->sp_drain_per > 0 && dmg.damage > 0 && rand()%100 < sd->sp_drain_rate) {
-			sp += (dmg.damage * sd->sp_drain_per)/100;
-			if(sd->sp_drain_rate > 0 && sp < 1) sp = 1;
-			else if(sd->sp_drain_rate < 0 && sp > -1) sp = -1;
-		}
-		if(sd->sp_drain_rate_ > 0 && sd->sp_drain_per_ > 0 && dmg.damage2 > 0 && rand()%100 < sd->sp_drain_rate_) {
-			sp += (dmg.damage2 * sd->sp_drain_per_)/100;
-			if(sd->sp_drain_rate_ > 0 && sp < 1) sp = 1;
-			else if(sd->sp_drain_rate_ < 0 && sp > -1) sp = -1;
-		}
-		if(hp || sp) pc_heal(sd,hp,sp);
-	}
-
-	if((skillid != KN_BOWLINGBASH || flag) && rdamage > 0)
-		battle_damage(bl,src,rdamage,0);
-
-	if(attack_type&BF_WEAPON && sc_data && sc_data[SC_AUTOCOUNTER].timer != -1 && sc_data[SC_AUTOCOUNTER].val4 > 0) {
-		if(sc_data[SC_AUTOCOUNTER].val3 == dsrc->id)
-			battle_weapon_attack(bl,dsrc,tick,0x8000|sc_data[SC_AUTOCOUNTER].val1);
-		skill_status_change_end(bl,SC_AUTOCOUNTER,-1);
-	}
-
-	map_freeblock_unlock();
-
-	return (dmg.damage+dmg.damage2);	/* �^�_����Ԃ� */
-}
-
-/*==========================================
- * �X�L���͈͍U���p(map_foreachinarea����Ă΂��)
- * flag�ɂ‚��āF16�i�}���m�F
- * MSB <- 00fTffff ->LSB
- *	T	=�^�[�Q�b�g�I��p(BCT_*)
- *  ffff=���R�Ɏg�p�”\
- *  0	=�\��B0�ɌŒ�
- *------------------------------------------
- */
-static int skill_area_temp[8];	/* �ꎞ�ϐ��B�K�v�Ȃ�g���B */
-typedef int (*SkillFunc)(struct block_list *,struct block_list *,int,int,unsigned int,int);
-int skill_area_sub( struct block_list *bl,va_list ap )
-{
-	struct block_list *src;
-	int skill_id,skill_lv,flag;
-	unsigned int tick;
-	SkillFunc func;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-
-	if(bl->type!=BL_PC && bl->type!=BL_MOB && bl->type!=BL_SKILL)
-		return 0;
-
-	src=va_arg(ap,struct block_list *); //�����ł�src�̒l���Q�Ƃ��Ă��Ȃ��̂�NULL�`�F�b�N�͂��Ȃ�
-	skill_id=va_arg(ap,int);
-	skill_lv=va_arg(ap,int);
-	tick=va_arg(ap,unsigned int);
-	flag=va_arg(ap,int);
-	func=va_arg(ap,SkillFunc);
-
-	if(battle_check_target(src,bl,flag) > 0)
-		func(src,bl,skill_id,skill_lv,tick,flag);
-	return 0;
-}
-
-static int skill_check_unit_range_sub( struct block_list *bl,va_list ap )
-{
-	struct skill_unit *unit;
-	int *c,x,y,range,sx[4],sy[4];
-	int t_range,tx[4],ty[4];
-	int i,r_flag,skillid;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, unit = (struct skill_unit *)bl);
-	nullpo_retr(0, c = va_arg(ap,int *));
-
-	if(bl->prev == NULL || bl->type != BL_SKILL)
-		return 0;
-
-	if(!unit->alive)
-		return 0;
-
-	x = va_arg(ap,int);
-	y = va_arg(ap,int);
-	range = va_arg(ap,int);
-	skillid = va_arg(ap,int);
-
-	if(skillid == MG_SAFETYWALL || skillid == AL_PNEUMA) {
-		if(unit->group->unit_id != 0x7e && unit->group->unit_id != 0x85)
-			return 0;
-	}
-	else if(skillid == AL_WARP) {
-		if((unit->group->unit_id < 0x8f || unit->group->unit_id > 0x99) && unit->group->unit_id != 0x92)
-			return 0;
-	}
-	else if((skillid >= HT_SKIDTRAP && skillid <= HT_CLAYMORETRAP) || skillid == HT_TALKIEBOX) {
-		if((unit->group->unit_id < 0x8f || unit->group->unit_id > 0x99) && unit->group->unit_id != 0x92)
-			return 0;
-	}
-	else if(skillid == WZ_FIREPILLAR) {
-		if(unit->group->unit_id != 0x87)
-			return 0;
-	}
-	else return 0;
-	t_range=(unit->range!=0)? unit->range:unit->group->range;
-	tx[0] = tx[3] = unit->bl.x - t_range;
-	tx[1] = tx[2] = unit->bl.x + t_range;
-	ty[0] = ty[1] = unit->bl.y - t_range;
-	ty[2] = ty[3] = unit->bl.y + t_range;
-	sx[0] = sx[3] = x - range;
-	sx[1] = sx[2] = x + range;
-	sy[0] = sy[1] = y - range;
-	sy[2] = sy[3] = y + range;
-	for(i=r_flag=0;i<4;i++) {
-		if(sx[i] >= tx[0] && sx[i] <= tx[1] &&  sy[i] >= ty[0] && sy[i] <= ty[2]) {
-			r_flag = 1;
-			break;
-		}
-		if(tx[i] >= sx[0] && tx[i] <= sx[1] &&  ty[i] >= sy[0] && ty[i] <= sy[2]) {
-			r_flag = 1;
-			break;
-		}
-	}
-	if(r_flag) (*c)++;
-
-	return 0;
-}
-
-int skill_check_unit_range(int m,int x,int y,int range,int skillid)
-{
-	int c = 0;
-
-	map_foreachinarea(skill_check_unit_range_sub,m,x-10,y-10,x+10,y+10,BL_SKILL,&c,x,y,range,skillid);
-
-	return c;
-}
-
-static int skill_check_unit_range2_sub( struct block_list *bl,va_list ap )
-{
-	int *c;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, c = va_arg(ap,int *));
-
-	if(bl->prev == NULL || (bl->type != BL_PC && bl->type != BL_MOB))
-		return 0;
-
-	if(bl->type == BL_PC && pc_isdead((struct map_session_data *)bl))
-		return 0;
-
-	(*c)++;
-
-	return 0;
-}
-
-int skill_check_unit_range2(int m,int x,int y,int range)
-{
-	int c = 0;
-
-	map_foreachinarea(skill_check_unit_range2_sub,m,x-range,y-range,x+range,y+range,0,&c);
-
-	return c;
-}
-
-/*=========================================================================
- * �͈̓X�L���g�p������������������
- */
-/* �Ώۂ̐����J�E���g����B�iskill_area_temp[0]�����������Ă������Ɓj */
-int skill_area_sub_count(struct block_list *src,struct block_list *target,int skillid,int skilllv,unsigned int tick,int flag)
-{
-	if(skill_area_temp[0] < 0xffff)
-		skill_area_temp[0]++;
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-static int skill_timerskill(int tid, unsigned int tick, int id,int data )
-{
-	struct map_session_data *sd = NULL;
-	struct mob_data *md = NULL;
-	struct pet_data *pd = NULL;
-	struct block_list *src = map_id2bl(id),*target;
-	struct skill_timerskill *skl = NULL;
-	int range;
-
-	nullpo_retr(0, src);
-
-	if(src->prev == NULL)
-		return 0;
-
-	if(src->type == BL_PC) {
-		nullpo_retr(0, sd = (struct map_session_data *)src);
-		skl = &sd->skilltimerskill[data];
-	}
-	else if(src->type == BL_MOB) {
-		nullpo_retr(0, md = (struct mob_data *)src);
-		skl = &md->skilltimerskill[data];
-	}
-	else if(src->type == BL_PET) { // [Valaris]
-		nullpo_retr(0, pd = (struct pet_data *)src);
-		skl = &pd->skilltimerskill[data];
-	}
-
-	else
-		return 0;
-
-	nullpo_retr(0, skl);
-
-	skl->timer = -1;
-	if(skl->target_id) {
-		struct block_list tbl;
-		target = map_id2bl(skl->target_id);
-		if(skl->skill_id == RG_INTIMIDATE) {
-			if(target == NULL) {
-				target = &tbl; //���������ĂȂ��̂ɃA�h���X�˂�����ł����̂��ȁH
-				target->type = BL_NUL;
-				target->m = src->m;
-				target->prev = target->next = NULL;
-			}
-		}
-		if(target == NULL)
-			return 0;
-		if(target->prev == NULL && skl->skill_id != RG_INTIMIDATE)
-			return 0;
-		if(src->m != target->m)
-			return 0;
-		if(sd && pc_isdead(sd))
-			return 0;
-		if(target->type == BL_PC && pc_isdead((struct map_session_data *)target) && skl->skill_id != RG_INTIMIDATE)
-			return 0;
-
-		switch(skl->skill_id) {
-			case TF_BACKSLIDING:
-				clif_skill_nodamage(src,src,skl->skill_id,skl->skill_lv,1);
-				break;
-			case RG_INTIMIDATE:
-				if(sd && !map[src->m].flag.noteleport) {
-					int x,y,i,j,c;
-					pc_randomwarp(sd,3);
-					for(i=0;i<16;i++) {
-						j = rand()%8;
-						x = sd->bl.x + dirx[j];
-						y = sd->bl.y + diry[j];
-						if((c=map_getcell(sd->bl.m,x,y)) != 1 && c != 5)
-							break;
-					}
-					if(i >= 16) {
-						x = sd->bl.x;
-						y = sd->bl.y;
-					}
-					if(target->prev != NULL) {
-						if(target->type == BL_PC && !pc_isdead((struct map_session_data *)target))
-							pc_setpos((struct map_session_data *)target,map[sd->bl.m].name,x,y,3);
-						else if(target->type == BL_MOB)
-							mob_warp((struct mob_data *)target,-1,x,y,3);
-					}
-				}
-				else if(md && !map[src->m].flag.monster_noteleport) {
-					int x,y,i,j,c;
-					mob_warp(md,-1,-1,-1,3);
-					for(i=0;i<16;i++) {
-						j = rand()%8;
-						x = md->bl.x + dirx[j];
-						y = md->bl.y + diry[j];
-						if((c=map_getcell(md->bl.m,x,y)) != 1 && c != 5)
-							break;
-					}
-					if(i >= 16) {
-						x = md->bl.x;
-						y = md->bl.y;
-					}
-					if(target->prev != NULL) {
-						if(target->type == BL_PC && !pc_isdead((struct map_session_data *)target))
-							pc_setpos((struct map_session_data *)target,map[md->bl.m].name,x,y,3);
-						else if(target->type == BL_MOB)
-							mob_warp((struct mob_data *)target,-1,x,y,3);
-					}
-				}
-				break;
-
-			case BA_FROSTJOKE:			/* �����W���[�N */
-			case DC_SCREAM:				/* �X�N���[�� */
-				range=15;		//���E�S��
-				map_foreachinarea(skill_frostjoke_scream,src->m,src->x-range,src->y-range,
-					src->x+range,src->y+range,0,src,skl->skill_id,skl->skill_lv,tick);
-				break;
-
-			default:
-				skill_attack(skl->type,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag);
-				break;
-		}
-	}
-	else {
-		if(src->m != skl->map)
-			return 0;
-		switch(skl->skill_id) {
-			case WZ_METEOR:
-				if(skl->type >= 0) {
-					skill_unitsetting(src,skl->skill_id,skl->skill_lv,skl->type>>16,skl->type&0xFFFF,0);
-					clif_skill_poseffect(src,skl->skill_id,skl->skill_lv,skl->x,skl->y,tick);
-				}
-				else
-					skill_unitsetting(src,skl->skill_id,skl->skill_lv,skl->x,skl->y,0);
-				break;
-		}
-	}
-
-	return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int skill_addtimerskill(struct block_list *src,unsigned int tick,int target,int x,int y,int skill_id,int skill_lv,int type,int flag)
-{
-	int i;
-
-	nullpo_retr(1, src);
-
-	if(src->type == BL_PC) {
-		struct map_session_data *sd = (struct map_session_data *)src;
-		nullpo_retr(1, sd);
-		for(i=0;i<MAX_SKILLTIMERSKILL;i++) {
-			if(sd->skilltimerskill[i].timer == -1) {
-				sd->skilltimerskill[i].timer = add_timer(tick, skill_timerskill, src->id, i);
-				sd->skilltimerskill[i].src_id = src->id;
-				sd->skilltimerskill[i].target_id = target;
-				sd->skilltimerskill[i].skill_id = skill_id;
-				sd->skilltimerskill[i].skill_lv = skill_lv;
-				sd->skilltimerskill[i].map = src->m;
-				sd->skilltimerskill[i].x = x;
-				sd->skilltimerskill[i].y = y;
-				sd->skilltimerskill[i].type = type;
-				sd->skilltimerskill[i].flag = flag;
-
-				return 0;
-			}
-		}
-		return 1;
-	}
-	else if(src->type == BL_MOB) {
-		struct mob_data *md = (struct mob_data *)src;
-		nullpo_retr(1, md);
-		for(i=0;i<MAX_MOBSKILLTIMERSKILL;i++) {
-			if(md->skilltimerskill[i].timer == -1) {
-				md->skilltimerskill[i].timer = add_timer(tick, skill_timerskill, src->id, i);
-				md->skilltimerskill[i].src_id = src->id;
-				md->skilltimerskill[i].target_id = target;
-				md->skilltimerskill[i].skill_id = skill_id;
-				md->skilltimerskill[i].skill_lv = skill_lv;
-				md->skilltimerskill[i].map = src->m;
-				md->skilltimerskill[i].x = x;
-				md->skilltimerskill[i].y = y;
-				md->skilltimerskill[i].type = type;
-				md->skilltimerskill[i].flag = flag;
-
-				return 0;
-			}
-		}
-		return 1;
-	}
-	else if(src->type == BL_PET) { // [Valaris]
-		struct pet_data *pd = (struct pet_data *)src;
-		nullpo_retr(1, pd);
-		for(i=0;i<MAX_MOBSKILLTIMERSKILL;i++) {
-			if(pd->skilltimerskill[i].timer == -1) {
-				pd->skilltimerskill[i].timer = add_timer(tick, skill_timerskill, src->id, i);
-				pd->skilltimerskill[i].src_id = src->id;
-				pd->skilltimerskill[i].target_id = target;
-				pd->skilltimerskill[i].skill_id = skill_id;
-				pd->skilltimerskill[i].skill_lv = skill_lv;
-				pd->skilltimerskill[i].map = src->m;
-				pd->skilltimerskill[i].x = x;
-				pd->skilltimerskill[i].y = y;
-				pd->skilltimerskill[i].type = type;
-				pd->skilltimerskill[i].flag = flag;
-
-				return 0;
-			}
-		}
-		return 1;
-	}
-	return 1;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int skill_cleartimerskill(struct block_list *src)
-{
-	int i;
-
-	nullpo_retr(0, src);
-
-	if(src->type == BL_PC) {
-		struct map_session_data *sd = (struct map_session_data *)src;
-		nullpo_retr(0, sd);
-		for(i=0;i<MAX_SKILLTIMERSKILL;i++) {
-			if(sd->skilltimerskill[i].timer != -1) {
-				delete_timer(sd->skilltimerskill[i].timer, skill_timerskill);
-				sd->skilltimerskill[i].timer = -1;
-			}
-		}
-	}
-	else if(src->type == BL_MOB) {
-		struct mob_data *md = (struct mob_data *)src;
-		nullpo_retr(0, md);
-		for(i=0;i<MAX_MOBSKILLTIMERSKILL;i++) {
-			if(md->skilltimerskill[i].timer != -1) {
-				delete_timer(md->skilltimerskill[i].timer, skill_timerskill);
-				md->skilltimerskill[i].timer = -1;
-			}
-		}
-	}
-
-	return 0;
-}
-
-/* �͈̓X�L���g�p���������������܂�
- * -------------------------------------------------------------------------
- */
-
-/*==========================================
- * �X�L���g�p�i�r�������AID�w��U���n�j
- * �i�X�p�Q�b�e�B�Ɍ����ĂP���O�i�I(�_���|)�j
- *------------------------------------------
- */
-int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int skillid,int skilllv,unsigned int tick,int flag )
-{
-	struct map_session_data *sd=NULL;
-	int i;
-
-	nullpo_retr(1, src);
-	nullpo_retr(1, bl);
-
-	if(src->type==BL_PC)
-		sd=(struct map_session_data *)src;
-	if(sd && pc_isdead(sd))
-		return 1;
-
-	if((skillid == WZ_SIGHTRASHER || skillid == CR_GRANDCROSS) && src != bl)
-		bl = src;
-	if(bl->prev == NULL)
-		return 1;
-	if(bl->type == BL_PC && pc_isdead((struct map_session_data *)bl))
-		return 1;
-	map_freeblock_lock();
-	switch(skillid)
-	{
-	/* ����U���n�X�L�� */
-	case SM_BASH:			/* �o�b�V�� */
-	case MC_MAMMONITE:		/* ���}�[�i�C�g */
-	case AC_DOUBLE:			/* �_�u���X�g���C�t�B���O */
-	case AS_SONICBLOW:		/* �\�j�b�N�u���[ */
-	case KN_PIERCE:			/* �s�A�[�X */
-	case KN_SPEARBOOMERANG:	/* �X�s�A�u�[������ */
-	case TF_POISON:			/* �C���x�i�� */
-	case TF_SPRINKLESAND:	/* ���܂� */
-	case AC_CHARGEARROW:	/* �`���[�W�A���[ */
-	case KN_SPEARSTAB:		/* �X�s�A�X�^�u */
-	case RG_RAID:		/* �T�v���C�Y�A�^�b�N */
-	case RG_INTIMIDATE:		/* �C���e�B�~�f�C�g */
-	case BA_MUSICALSTRIKE:	/* �~���[�W�J���X�g���C�N */
-	case DC_THROWARROW:		/* ��� */
-	case BA_DISSONANCE:		/* �s���a�� */
-	case CR_HOLYCROSS:		/* �z�[���[�N���X */
-	case CR_SHIELDCHARGE:
-	case CR_SHIELDBOOMERANG:
-
-	/* �ȉ�MOB��p */
-	/* �P�̍U���ASP�����U���A�������U���A�h�䖳���U���A���i�U�� */
-	case NPC_PIERCINGATT:
-	case NPC_MENTALBREAKER:
-	case NPC_RANGEATTACK:
-	case NPC_CRITICALSLASH:
-	case NPC_COMBOATTACK:
-	/* �K���U���A�ōU���A�Í��U���A���ٍU���A�X�^���U�� */
-	case NPC_GUIDEDATTACK:
-	case NPC_POISON:
-	case NPC_BLINDATTACK:
-	case NPC_SILENCEATTACK:
-	case NPC_STUNATTACK:
-	/* �Ή��U���A�􂢍U���A�����U���A�����_��ATK�U�� */
-	case NPC_PETRIFYATTACK:
-	case NPC_CURSEATTACK:
-	case NPC_SLEEPATTACK:
-	case NPC_RANDOMATTACK:
-	/* �������U���A�n�����U���A�Α����U���A�������U�� */
-	case NPC_WATERATTACK:
-	case NPC_GROUNDATTACK:
-	case NPC_FIREATTACK:
-	case NPC_WINDATTACK:
-	/* �ő����U���A�������U���A�ő����U���A�O�����U���ASP�����U�� */
-	case NPC_POISONATTACK:
-	case NPC_HOLYATTACK:
-	case NPC_DARKNESSATTACK:
-	case NPC_TELEKINESISATTACK:
-	case LK_AURABLADE:		/* �I�[���u���[�h */
-	case LK_SPIRALPIERCE:	/* �X�p�C�����s�A�[�X */
-	case LK_HEADCRUSH:	/* �w�b�h�N���b�V�� */
-	case LK_JOINTBEAT:	/* �W���C���g�r�[�g */
-	case PA_PRESSURE:	/* �v���b�V���[ */
-	case PA_SACRIFICE:	/* �T�N���t�@�C�X */
-	case SN_SHARPSHOOTING:			/* �V���[�v�V���[�e�B���O */
-	case CG_ARROWVULCAN:			/* �A���[�o���J�� */
-	case ASC_BREAKER:				/* �\�E���u���[�J�[ */
-	case HW_MAGICCRASHER:		/* �}�W�b�N�N���b�V���[ */
-		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-		break;
-	case NPC_DARKBREATH:
-		clif_emotion(src,7);
-		skill_attack(BF_MISC,src,src,bl,skillid,skilllv,tick,flag);
-		break;
-	case MO_INVESTIGATE:	/* ���� */
-		{
-			struct status_change *sc_data = battle_get_sc_data(src);
-			skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-			if(sc_data[SC_BLADESTOP].timer != -1)
-				skill_status_change_end(src,SC_BLADESTOP,-1);
-		}
-		break;
-	case SN_FALCONASSAULT:			/* �t�@���R���A�T���g */
-		skill_attack(BF_MISC,src,src,bl,skillid,skilllv,tick,flag);
-		break;
-	case KN_BRANDISHSPEAR:		/* �u�����f�B�b�V���X�s�A */
-		{
-			struct mob_data *md = (struct mob_data *)bl;
-			nullpo_retr(1, md);
-			skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-			if(md->hp > 0){
-				skill_blown(src,bl,skill_get_blewcount(skillid,skilllv));
-				if(bl->type == BL_MOB)
-					clif_fixmobpos((struct mob_data *)bl);
-				else if(bl->type == BL_PET)
-					clif_fixpetpos((struct pet_data *)bl);
-				else
-					clif_fixpos(bl);
-			}
-		}
-		break;
-	case RG_BACKSTAP:		/* �o�b�N�X�^�u */
-		{
-			int dir = map_calc_dir(src,bl->x,bl->y),t_dir = battle_get_dir(bl);
-			int dist = distance(src->x,src->y,bl->x,bl->y);
-			if((dist > 0 && !map_check_dir(dir,t_dir)) || bl->type == BL_SKILL) {
-				struct status_change *sc_data = battle_get_sc_data(src);
-				if(sc_data && sc_data[SC_HIDING].timer != -1)
-					skill_status_change_end(src, SC_HIDING, -1);	// �n�C�f�B���O����
-				skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-				skill_blown(src,bl,skill_get_blewcount(skillid,skilllv));
-			}
-			else if(src->type == BL_PC)
-				clif_skill_fail(sd,sd->skillid,0,0);
-		}
-		break;
-
-	case AM_ACIDTERROR:		/* �A�V�b�h�e���[ */
-		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-		if(bl->type == BL_PC && rand()%100 < skill_get_time(skillid,skilllv) && battle_config.equipment_breaking)
-			pc_breakarmor((struct map_session_data *)bl);
-		break;
-	case MO_FINGEROFFENSIVE:	/* �w�e */
-		{
-			struct status_change *sc_data = battle_get_sc_data(src);
-
-		if(!battle_config.finger_offensive_type)
-			skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-		else {
-			skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-			if(sd) {
-				for(i=1;i<sd->spiritball_old;i++)
-					skill_addtimerskill(src,tick+i*200,bl->id,0,0,skillid,skilllv,BF_WEAPON,flag);
-				sd->canmove_tick = tick + (sd->spiritball_old-1)*200;
-			}
-		}
-			if(sc_data && sc_data[SC_BLADESTOP].timer != -1)
-				skill_status_change_end(src,SC_BLADESTOP,-1);
-		}
-		break;
-	case MO_CHAINCOMBO:		/* �A�ŏ� */
-		{
-			struct status_change *sc_data = battle_get_sc_data(src);
-		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-			if(sc_data && sc_data[SC_BLADESTOP].timer != -1)
-				skill_status_change_end(src,SC_BLADESTOP,-1);
-		}
-		break;
-	case MO_COMBOFINISH:	/* �җ��� */
-	case CH_TIGERFIST:		/* ���Ռ� */
-	case CH_CHAINCRUSH:		/* �A������ */
-	case CH_PALMSTRIKE:		/* �ҌՍd�h�R */
-		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-		break;
-	case MO_EXTREMITYFIST:	/* ���C���e�P�� */
-		{
-			struct status_change *sc_data = battle_get_sc_data(src);
-
-		if(sd) {
-			struct walkpath_data wpd;
-			int dx,dy;
-
-			dx = bl->x - sd->bl.x;
-			dy = bl->y - sd->bl.y;
-			if(dx > 0) dx++;
-			else if(dx < 0) dx--;
-			if(dy > 0) dy++;
-			else if(dy < 0) dy--;
-			if(dx == 0 && dy == 0) dx++;
-			if(path_search(&wpd,src->m,sd->bl.x,sd->bl.y,sd->bl.x+dx,sd->bl.y+dy,1) == -1) {
-				dx = bl->x - sd->bl.x;
-				dy = bl->y - sd->bl.y;
-				if(path_search(&wpd,src->m,sd->bl.x,sd->bl.y,sd->bl.x+dx,sd->bl.y+dy,1) == -1) {
-					clif_skill_fail(sd,sd->skillid,0,0);
-					break;
-				}
-			}
-			sd->to_x = sd->bl.x + dx;
-			sd->to_y = sd->bl.y + dy;
-			skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-			clif_walkok(sd);
-			clif_movechar(sd);
-			if(dx < 0) dx = -dx;
-			if(dy < 0) dy = -dy;
-			sd->attackabletime = sd->canmove_tick = tick + 100 + sd->speed * ((dx > dy)? dx:dy);
-			if(sd->canact_tick < sd->canmove_tick)
-				sd->canact_tick = sd->canmove_tick;
-			pc_movepos(sd,sd->to_x,sd->to_y);
-			skill_status_change_end(&sd->bl,SC_COMBO,-1);
-		}
-		else
-			skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-		skill_status_change_end(src, SC_EXPLOSIONSPIRITS, -1);
-			if(sc_data && sc_data[SC_BLADESTOP].timer != -1)
-				skill_status_change_end(src,SC_BLADESTOP,-1);
-		}
-		break;
-	/* ����n�͈͍U���X�L�� */
-	case AC_SHOWER:			/* �A���[�V�����[ */
-	case SM_MAGNUM:			/* �}�O�i���u���C�N */
-	case AS_GRIMTOOTH:		/* �O�����g�D�[�X */
-	case MC_CARTREVOLUTION:	/* �J�[�g�����H�����[�V���� */
-	case NPC_SPLASHATTACK:	/* �X�v���b�V���A�^�b�N */
-	case ASC_METEORASSAULT:	/* ���e�I�A�T���g */
-	case AS_SPLASHER:	/* [Valaris] */
-		if(flag&1){
-			/* �•ʂɃ_���[�W��^���� */
-			if(bl->id!=skill_area_temp[1]){
-				int dist=0;
-				if(skillid==SM_MAGNUM){	/* �}�O�i���u���C�N�Ȃ璆�S����̋������v�Z */
-					int dx=abs( bl->x - skill_area_temp[2] );
-					int dy=abs( bl->y - skill_area_temp[3] );
-					dist=((dx>dy)?dx:dy);
-				}
-				skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,
-					0x0500|dist  );
-			}
-		}else{
-			int ar=1;
-			int x=bl->x,y=bl->y;
-			if( skillid==SM_MAGNUM){
-				x=src->x;
-				y=src->y;
-			}else if(skillid==AC_SHOWER || skillid==ASC_METEORASSAULT)	/* �A���[�V�����[�A���e�I�A�T���g�͈�5*5 */
-				ar=2;
-			else if(skillid==AS_SPLASHER)	/* �x�i���X�v���b�V���[�͈�3*3 */
-				ar=1;
-			else if(skillid==NPC_SPLASHATTACK)	/* �X�v���b�V���A�^�b�N�͔͈�7*7 */
-				ar=3;
-			skill_area_temp[1]=bl->id;
-			skill_area_temp[2]=x;
-			skill_area_temp[3]=y;
-			/* �܂��^�[�Q�b�g�ɍU���������� */
-			skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,0);
-			/* ���̌�^�[�Q�b�g�ȊO�͈͓̔��̓G�S�̂ɏ������s�� */
-			map_foreachinarea(skill_area_sub,
-				bl->m,x-ar,y-ar,x+ar,y+ar,0,
-				src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
-				skill_castend_damage_id);
-		}
-		break;
-
-	case KN_BOWLINGBASH:	/* �{�E�����O�o�b�V�� */
-		if(flag&1){
-			/* �•ʂɃ_���[�W��^���� */
-			if(bl->id!=skill_area_temp[1])
-				skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,0x0500);
-		}
-		else {
-			int damage;
-			map_freeblock_lock();
-			damage = skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,0);
-			if(damage > 0) {
-				int i,c;	/* ���l���畷���������Ȃ̂ŊԈ���Ă�”\���偕������������������ */
-				c = skill_get_blewcount(skillid,skilllv);
-				if(map[bl->m].flag.gvg) c = 0;
-				for(i=0;i<c;i++){
-					skill_blown(src,bl,1);
-					if(bl->type == BL_MOB)
-						clif_fixmobpos((struct mob_data *)bl);
-					else if(bl->type == BL_PET)
-						clif_fixpetpos((struct pet_data *)bl);
-					else
-						clif_fixpos(bl);
-					skill_area_temp[0]=0;
-					map_foreachinarea(skill_area_sub,
-						bl->m,bl->x-1,bl->y-1,bl->x+1,bl->y+1,0,
-						src,skillid,skilllv,tick, flag|BCT_ENEMY ,
-						skill_area_sub_count);
-					if(skill_area_temp[0]>1) break;
-				}
-				skill_area_temp[1]=bl->id;
-				skill_area_temp[2]=bl->x;
-				skill_area_temp[3]=bl->y;
-				/* ���̌�^�[�Q�b�g�ȊO�͈͓̔��̓G�S�̂ɏ������s�� */
-				map_foreachinarea(skill_area_sub,
-					bl->m,bl->x-1,bl->y-1,bl->x+1,bl->y+1,0,
-					src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
-					skill_castend_damage_id);
-				battle_damage(src,bl,damage,1);
-				if(rdamage > 0)
-					battle_damage(bl,src,rdamage,0);
-			}
-			map_freeblock_unlock();
-		}
-		break;
-
-	case ALL_RESURRECTION:		/* ���U���N�V���� */
-	case PR_TURNUNDEAD:			/* �^�[���A���f�b�h */
-		if(bl->type != BL_PC && battle_check_undead(battle_get_race(bl),battle_get_elem_type(bl)))
-			skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
-		else {
-			map_freeblock_unlock();
-			return 1;
-		}
-		break;
-
-	/* ���@�n�X�L�� */
-	case MG_SOULSTRIKE:			/* �\�E���X�g���C�N */
-	case MG_COLDBOLT:			/* �R�[���h�{���g */
-	case MG_FIREBOLT:			/* �t�@�C�A�[�{���g */
-	case MG_LIGHTNINGBOLT:		/* ���C�g�j���O�{���g */
-	case WZ_EARTHSPIKE:			/* �A�[�X�X�p�C�N */
-	case AL_HEAL:				/* �q�[�� */
-	case AL_HOLYLIGHT:			/* �z�[���[���C�g */
-	case MG_FROSTDIVER:			/* �t���X�g�_�C�o�[ */
-	case WZ_JUPITEL:			/* ���s�e���T���_�[ */
-	case NPC_MAGICALATTACK:		/* MOB:���@�Ō��U�� */
-	case PR_ASPERSIO:			/* �A�X�y���V�I */
-		skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
-		break;
-
-	case WZ_WATERBALL:			/* �E�H�[�^�[�{�[�� */
-		skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
-		if(skilllv>1)
-			skill_status_change_start(src,SC_WATERBALL,skilllv,bl->id,0,0,0,0);
-		break;
-
-	case PR_BENEDICTIO:			/* ���̍~�� */
-		if(battle_get_race(bl)==1 || battle_get_race(bl)==6)
-			skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
-		break;
-
-	/* ���@�n�͈͍U���X�L�� */
-	case MG_NAPALMBEAT:			/* �i�p�[���r�[�g */
-	case MG_FIREBALL:			/* �t�@�C���[�{�[�� */
-		if(flag&1){
-			/* �•ʂɃ_���[�W��^���� */
-			if(bl->id!=skill_area_temp[1]){
-				if(skillid==MG_FIREBALL){	/* �t�@�C���[�{�[���Ȃ璆�S����̋������v�Z */
-					int dx=abs( bl->x - skill_area_temp[2] );
-					int dy=abs( bl->y - skill_area_temp[3] );
-					skill_area_temp[0]=((dx>dy)?dx:dy);
-				}
-				skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,
-					skill_area_temp[0]| 0x0500);
-			}
-		}else{
-			int ar=(skillid==MG_NAPALMBEAT)?1:2;
-			skill_area_temp[1]=bl->id;
-			if(skillid==MG_NAPALMBEAT){	/* �i�p�[���ł͐�ɐ����� */
-				skill_area_temp[0]=0;
-				map_foreachinarea(skill_area_sub,
-					bl->m,bl->x-1,bl->y-1,bl->x+1,bl->y+1,0,
-					src,skillid,skilllv,tick, flag|BCT_ENEMY ,
-					skill_area_sub_count);
-			}else{
-				skill_area_temp[0]=0;
-				skill_area_temp[2]=bl->x;
-				skill_area_temp[3]=bl->y;
-			}
-			/* �܂��^�[�Q�b�g�ɍU���������� */
-			skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,
-					skill_area_temp[0] );
-			/* ���̌�^�[�Q�b�g�ȊO�͈͓̔��̓G�S�̂ɏ������s�� */
-			map_foreachinarea(skill_area_sub,
-				bl->m,bl->x-ar,bl->y-ar,bl->x+ar,bl->y+ar,0,
-				src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
-				skill_castend_damage_id);
-		}
-		break;
-
-		case HW_NAPALMVULCAN: // Fixed By SteelViruZ
-			if(flag&1){
-				if(bl->id!=skill_area_temp[1]){
-					skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,
-						skill_area_temp[0]);
-				}
-			}else{
-				int ar=(skillid==HW_NAPALMVULCAN)?1:2;
-				skill_area_temp[1]=bl->id;
-				if(skillid==HW_NAPALMVULCAN){
-					skill_area_temp[0]=0;
-					map_foreachinarea(skill_area_sub,
-						bl->m,bl->x-1,bl->y-1,bl->x+1,bl->y+1,0,
-						src,skillid,skilllv,tick, flag|BCT_ENEMY ,
-						skill_area_sub_count);
-				}else{
-					skill_area_temp[0]=0;
-					skill_area_temp[2]=bl->x;
-					skill_area_temp[3]=bl->y;
-				}
-				skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,
-					skill_area_temp[0] );
-				map_foreachinarea(skill_area_sub,
-					bl->m,bl->x-ar,bl->y-ar,bl->x+ar,bl->y+ar,0,
-					src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
-					skill_castend_damage_id);
-			}
-			break;
-
-	case WZ_FROSTNOVA:			/* �t���X�g�m���@ */
-		skill_castend_pos2(src,bl->x,bl->y,skillid,skilllv,tick,0);
-		skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
-		break;
-
-	case WZ_SIGHTRASHER:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		skill_castend_pos2(src,bl->x,bl->y,skillid,skilllv,tick,0);
-		skill_status_change_end(src,SC_SIGHT,-1);
-		break;
-
-	/* ���̑� */
-	case HT_BLITZBEAT:			/* �u���b�c�r�[�g */
-		if(flag&1){
-			/* �•ʂɃ_���[�W��^���� */
-			if(bl->id!=skill_area_temp[1])
-				skill_attack(BF_MISC,src,src,bl,skillid,skilllv,tick,skill_area_temp[0]|(flag&0xf00000));
-		}else{
-			skill_area_temp[0]=0;
-			skill_area_temp[1]=bl->id;
-			if(flag&0xf00000)
-				map_foreachinarea(skill_area_sub,bl->m,bl->x-1,bl->y-1,bl->x+1,bl->y+1,0,
-					src,skillid,skilllv,tick, flag|BCT_ENEMY ,skill_area_sub_count);
-			/* �܂��^�[�Q�b�g�ɍU���������� */
-			skill_attack(BF_MISC,src,src,bl,skillid,skilllv,tick,skill_area_temp[0]|(flag&0xf00000));
-			/* ���̌�^�[�Q�b�g�ȊO�͈͓̔��̓G�S�̂ɏ������s�� */
-			map_foreachinarea(skill_area_sub,
-				bl->m,bl->x-1,bl->y-1,bl->x+1,bl->y+1,0,
-				src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
-				skill_castend_damage_id);
-		}
-		break;
-
-	case CR_GRANDCROSS:			/* �O�����h�N���X */
-		/* �X�L�����j�b�g�z�u */
-		skill_castend_pos2(src,bl->x,bl->y,skillid,skilllv,tick,0);
-		if(sd)
-			sd->canmove_tick = tick + 1000;
-		else if(src->type == BL_MOB)
-			mob_changestate((struct mob_data *)src,MS_DELAY,1000);
-		break;
-
-	case TF_THROWSTONE:			/* ���� */
-	case NPC_SMOKING:			/* �X���[�L���O */
-		skill_attack(BF_MISC,src,src,bl,skillid,skilllv,tick,0 );
-		break;
-
-	case NPC_SELFDESTRUCTION:	/* ���� */
-	case NPC_SELFDESTRUCTION2:	/* ����2 */
-			if(flag&1){
-			/* �•ʂɃ_���[�W��^���� */
-			if(src->type==BL_MOB){
-				struct mob_data* mb = (struct mob_data*)src;
-				nullpo_retr(1, mb);
-				mb->hp=skill_area_temp[2];
-				if(bl->id!=skill_area_temp[1])
-					skill_attack(BF_MISC,src,src,bl,NPC_SELFDESTRUCTION,skilllv,tick,flag );
-				mb->hp=1;
-			}
-		}else{
-			struct mob_data *md;
-			if((md=(struct mob_data *)src)){
-			skill_area_temp[1]=bl->id;
-				skill_area_temp[2]=battle_get_hp(src);
-				clif_skill_nodamage(src,src,NPC_SELFDESTRUCTION,-1,1);
-			map_foreachinarea(skill_area_sub,
-				bl->m,bl->x-5,bl->y-5,bl->x+5,bl->y+5,0,
-					src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
-				skill_castend_damage_id);
-				battle_damage(src,src,md->hp,0);
-				}
-		}
-		break;
-
-	/* HP�z��/HP�z�����@ */
-	case NPC_BLOODDRAIN:
-	case NPC_ENERGYDRAIN:
-		{
-			int heal;
-			heal = skill_attack((skillid==NPC_BLOODDRAIN)?BF_WEAPON:BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
-			if( heal > 0 ){
-				struct block_list tbl;
-				tbl.id = 0;
-				tbl.m = src->m;
-				tbl.x = src->x;
-				tbl.y = src->y;
-				clif_skill_nodamage(&tbl,src,AL_HEAL,heal,1);
-				battle_heal(NULL,src,heal,0,0);
-			}
-		}
-		break;
-	case 0:
-		if(sd) {
-			if(flag&3){
-				if(bl->id!=skill_area_temp[1])
-					skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,0x0500);
-			}
-			else{
-				int ar=sd->splash_range;
-				skill_area_temp[1]=bl->id;
-				map_foreachinarea(skill_area_sub,
-					bl->m, bl->x - ar, bl->y - ar, bl->x + ar, bl->y + ar, 0,
-					src, skillid, skilllv, tick, flag | BCT_ENEMY | 1,
-					skill_castend_damage_id);
-			}
-		}
-		break;
-
-	default:
-		map_freeblock_unlock();
-		return 1;
-	}
-	map_freeblock_unlock();
-
-	return 0;
-}
-
-/*==========================================
- * �X�L���g�p�i�r�������AID�w��x���n�j
- *------------------------------------------
- */
-int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int skillid,int skilllv,unsigned int tick,int flag )
-{
-	struct map_session_data *sd=NULL;
-	struct map_session_data *dstsd=NULL;
-	struct mob_data *md=NULL;
-	struct mob_data *dstmd=NULL;
-	int i,abra_skillid=0,abra_skilllv;
-	int sc_def_vit,sc_def_mdef,strip_fix,strip_time,strip_per;
-	int sc_dex,sc_luk;
-	//�N���X�`�F���W�p�{�X�����X�^�[ID
-	int changeclass[]={1038,1039,1046,1059,1086,1087,1112,1115
-				,1157,1159,1190,1272,1312,1373,1492};
-	int poringclass[]={1002};
-
-	nullpo_retr(1, src);
-	nullpo_retr(1, bl);
-
-	if(src->type==BL_PC)
-		sd=(struct map_session_data *)src;
-	else if(src->type==BL_MOB)
-		md=(struct mob_data *)src;
-
-	sc_dex=battle_get_mdef(bl);
-	sc_luk=battle_get_luk(bl);
-	sc_def_vit = 100 - (3 + battle_get_vit(bl) + battle_get_luk(bl)/3);
-	sc_def_vit = 100 - (3 + battle_get_vit(bl) + battle_get_luk(bl)/3);
-	sc_def_mdef = 100 - (3 + battle_get_mdef(bl) + battle_get_luk(bl)/3);
-	strip_fix = battle_get_dex(src) - battle_get_dex(bl);
-
-	if(bl->type==BL_PC){
-		nullpo_retr(1, dstsd=(struct map_session_data *)bl);
-	}else if(bl->type==BL_MOB){
-		nullpo_retr(1, dstmd=(struct mob_data *)bl);
-		if(sc_def_vit>50)
-			sc_def_vit=50;
-		if(sc_def_mdef>50)
-			sc_def_mdef=50;
-	}
-	if(sc_def_vit < 0)
-		sc_def_vit=0;
-	if(sc_def_mdef < 0)
-		sc_def_mdef=0;
-	if(strip_fix < 0)
-		strip_fix=0;
-
-	if(bl == NULL || bl->prev == NULL)
-		return 1;
-	if(sd && pc_isdead(sd))
-		return 1;
-	if(dstsd && pc_isdead(dstsd) && skillid != ALL_RESURRECTION)
-		return 1;
-	if(battle_get_class(bl) == 1288)
-		return 1;
-        if (skillnotok(skillid, (struct map_session_data *)bl)) // [MouseJstr]
-                return 0;
-
-	map_freeblock_lock();
-	switch(skillid)
-	{
-	case AL_HEAL:				/* �q�[�� */
-		{
-			int heal=skill_calc_heal( src, skilllv );
-			int heal_get_jobexp;
-			int skill;
-			struct pc_base_job s_class;
-			
-			if( dstsd && dstsd->special_state.no_magic_damage )
-				heal=0;	/* ����峃J�[�h�i�q�[���ʂO�j */
-			if (sd){
-				s_class = pc_calc_base_job(sd->status.class);
-			if((skill=pc_checkskill(sd,HP_MEDITATIO))>0) // ���f�B�e�C�e�B�I
-				heal += heal*(skill*2/100);
-				if(sd && dstsd && sd->status.partner_id == dstsd->status.char_id && s_class.job == 23 && sd->status.sex == 0) //�������Ώۂ�PC�A�Ώۂ������̃p�[�g�i�[�A�������X�p�m�r�A���������Ȃ�
-					heal = heal*2;	//�X�p�m�r�̉ł��U�߂Ƀq�[�������2�{�ɂȂ�
-			}
-			
-
-			clif_skill_nodamage(src,bl,skillid,heal,1);
-			heal_get_jobexp = battle_heal(NULL,bl,heal,0,0);
-
-			// JOB�o���l�l��
-			if(src->type == BL_PC && bl->type==BL_PC && heal > 0 && src != bl && battle_config.heal_exp > 0){
-				heal_get_jobexp = heal_get_jobexp * battle_config.heal_exp / 100;
-				if(heal_get_jobexp <= 0)
-					heal_get_jobexp = 1;
-				pc_gainexp((struct map_session_data *)src,0,heal_get_jobexp);
-			}
-		}
-		break;
-
-	case ALL_RESURRECTION:		/* ���U���N�V���� */
-		if(bl->type==BL_PC){
-			int per=0;
-			struct map_session_data *tsd = (struct map_session_data*)bl;
-			nullpo_retr(1, tsd);
-			if( (map[bl->m].flag.pvp) && tsd->pvp_point<0 )
-				break;			/* PVP�ŕ����s�”\��� */
-
-			if(pc_isdead(tsd)){	/* ���S���� */
-				clif_skill_nodamage(src,bl,skillid,skilllv,1);
-				switch(skilllv){
-				case 1: per=10; break;
-				case 2: per=30; break;
-				case 3: per=50; break;
-				case 4: per=80; break;
-				}
-				tsd->status.hp=tsd->status.max_hp*per/100;
-				if(tsd->status.hp<=0) tsd->status.hp=1;
-				if(tsd->special_state.restart_full_recover ){	/* �I�V���X�J�[�h */
-					tsd->status.hp=tsd->status.max_hp;
-					tsd->status.sp=tsd->status.max_sp;
-				}
-				pc_setstand(tsd);
-				if(battle_config.pc_invincible_time > 0)
-					pc_setinvincibletimer(tsd,battle_config.pc_invincible_time);
-				clif_updatestatus(tsd,SP_HP);
-				clif_resurrection(&tsd->bl,1);
-				if(src != bl && sd && battle_config.resurrection_exp > 0) {
-					int exp = 0,jexp = 0;
-					int lv = tsd->status.base_level - sd->status.base_level, jlv = tsd->status.job_level - sd->status.job_level;
-					if(lv > 0) {
-						exp = (int)((double)tsd->status.base_exp * (double)lv * (double)battle_config.resurrection_exp / 1000000.);
-						if(exp < 1) exp = 1;
-					}
-					if(jlv > 0) {
-						jexp = (int)((double)tsd->status.job_exp * (double)lv * (double)battle_config.resurrection_exp / 1000000.);
-						if(jexp < 1) jexp = 1;
-					}
-					if(exp > 0 || jexp > 0)
-						pc_gainexp(sd,exp,jexp);
-				}
-			}
-		}
-		break;
-
-	case AL_DECAGI:			/* ���x���� */
-		if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage )
-			break;
-		if( rand()%100 < (50+skilllv*3+(battle_get_lv(src)+battle_get_int(src)/5)-sc_def_mdef) ) {
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0);
-		}
-		break;
-
-	case AL_CRUCIS:
-		if(flag&1) {
-			int race = battle_get_race(bl),ele = battle_get_elem_type(bl);
-			if(battle_check_target(src,bl,BCT_ENEMY) && (race == 6 || battle_check_undead(race,ele))) {
-				int slv=battle_get_lv(src),tlv=battle_get_lv(bl),rate;
-				rate = 25 + skilllv*2 + slv - tlv;
-				if(rand()%100 < rate)
-					skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,0,0);
-			}
-		}
-		else {
-			int range = 15;
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			map_foreachinarea(skill_area_sub,
-				src->m,src->x-range,src->y-range,src->x+range,src->y+range,0,
-				src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
-				skill_castend_nodamage_id);
-		}
-		break;
-
-	case PR_LEXDIVINA:		/* ���b�N�X�f�B�r�[�i */
-		{
-			struct status_change *sc_data = battle_get_sc_data(bl);
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage )
-				break;
-			if(sc_data && sc_data[SC_DIVINA].timer != -1)
-				skill_status_change_end(bl,SC_DIVINA,-1);
-			else if( rand()%100 < sc_def_vit ) {
-				skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0);
-			}
-		}
-		break;
-	case SA_ABRACADABRA:
-	//require 1 yellow gemstone even with mistress card or Into the Abyss
-	if (pc_search_inventory(sd, 715) <= 0 ) {
-		clif_skill_fail(sd,sd->skillid,0,0);
-		break;
-	}
-	pc_delitem(sd, pc_search_inventory(sd, 715), 1, 0);
-	//
-	do{
-		abra_skillid=skill_abra_dataset(skilllv);
-	}while(abra_skillid == 0);
-	abra_skilllv=skill_get_max(abra_skillid)>pc_checkskill(sd,SA_ABRACADABRA)?pc_checkskill(sd,SA_ABRACADABRA):skill_get_max(abra_skillid);
-	clif_skill_nodamage(src,bl,skillid,skilllv,1);
-	sd->skillitem=abra_skillid;
-	sd->skillitemlv=abra_skilllv;
-	clif_item_skill(sd,abra_skillid,abra_skilllv,"�A�u���J�_�u��");
-	break;
-	case SA_COMA:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage )
-			break;
-		if(dstsd){
-			dstsd->status.hp=1;
-			dstsd->status.sp=1;
-			clif_updatestatus(dstsd,SP_HP);
-			clif_updatestatus(dstsd,SP_SP);
-		}
-		if(dstmd) dstmd->hp=1;
-		break;
-	case SA_FULLRECOVERY:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage )
-			break;
-		if(dstsd) pc_heal(dstsd,dstsd->status.max_hp,dstsd->status.max_sp);
-		if(dstmd) dstmd->hp=battle_get_max_hp(&dstmd->bl);
-		break;
-	case SA_SUMMONMONSTER:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if (sd) mob_once_spawn(sd,map[sd->bl.m].name,sd->bl.x,sd->bl.y,"--ja--",-1,1,"");
-		break;
-	case SA_LEVELUP:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if (sd && pc_nextbaseexp(sd)) pc_gainexp(sd,pc_nextbaseexp(sd)*10/100,0);
-		break;
-
-	case SA_INSTANTDEATH:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if (sd) pc_damage(NULL,sd,sd->status.max_hp);
-		break;
-
-	case SA_QUESTION:
-	case SA_GRAVITY:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		break;
-	case SA_CLASSCHANGE:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if(dstmd) mob_class_change(dstmd,changeclass);
-		break;
-	case SA_MONOCELL:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if(dstmd) mob_class_change(dstmd,poringclass);
-		break;
-	case SA_DEATH:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if (dstsd) pc_damage(NULL,dstsd,dstsd->status.max_hp);
-		if (dstmd) mob_damage(NULL,dstmd,dstmd->hp,1);
-		break;
-	case SA_REVERSEORCISH:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if (dstsd) pc_setoption(dstsd,dstsd->status.option|0x0800);
-		break;
-	case SA_FORTUNE:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if(sd) pc_getzeny(sd,battle_get_lv(bl)*100);
-		break;
-	case SA_TAMINGMONSTER:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if (dstmd){
-			for(i=0;i<MAX_PET_DB;i++){
-				if(dstmd->class == pet_db[i].class){
-					pet_catch_process1(sd,dstmd->class);
-					break;
-				}
-			}
-		}
-		break;
-	case AL_INCAGI:			/* ���x���� */
-	case AL_BLESSING:		/* �u���b�V���O */
-	case PR_SLOWPOISON:
-	case PR_IMPOSITIO:		/* �C���|�V�e�B�I�}�k�X */
-	case PR_LEXAETERNA:		/* ���b�N�X�G�[�e���i */
-	case PR_SUFFRAGIUM:		/* �T�t���M�E�� */
-	case PR_BENEDICTIO:		/* ���̍~�� */
-	case CR_PROVIDENCE:		/* �v�����B�f���X */
-	case CG_MARIONETTE:		/* �}���I�l�b�g�R���g���[�� */
-		if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage ){
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		}else{
-			skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		}
-		break;
-
-	case SA_FLAMELAUNCHER:	// added failure chance and chance to break weapon if turned on [Valaris]
-	case SA_FROSTWEAPON:
-	case SA_LIGHTNINGLOADER:
-	case SA_SEISMICWEAPON:
-		if(bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage ){
-			clif_skill_nodamage(src,bl,skillid,skilllv,0);
-			break;
-		}
-		if(bl->type==BL_PC) {
-			struct map_session_data *sd2=(struct map_session_data *)bl;
-			if(sd2->status.weapon==0 || sd2->sc_data[SC_FLAMELAUNCHER].timer!=-1 || sd2->sc_data[SC_FROSTWEAPON].timer!=-1 ||
-				sd2->sc_data[SC_LIGHTNINGLOADER].timer!=-1 || sd2->sc_data[SC_SEISMICWEAPON].timer!=-1 ||
-					sd2->sc_data[SC_ENCPOISON].timer!=-1) {
-				clif_skill_fail(sd,skillid,0,0);
-				clif_skill_nodamage(src,bl,skillid,skilllv,0);
-				break;
-			}
-		}
-		if(rand()%100 > (75+skilllv*1) && (skilllv != 5)) {
-			clif_skill_fail(sd,skillid,0,0);
-			clif_skill_nodamage(src,bl,skillid,skilllv,0);
-			if(bl->type==BL_PC && battle_config.equipment_breaking) {
-				struct map_session_data *sd2=(struct map_session_data *)bl;
-				if(sd!=sd2) clif_displaymessage(sd->fd,"You broke target's weapon");
-				pc_breakweapon(sd2);
-			}
-			break;
-		}
-		else {
-			skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		}
-		break;
-
-	case PR_ASPERSIO:		/* �A�X�y���V�I */
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage )
-			break;
-		if(bl->type==BL_MOB)
-			break;
-		skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
-		break;
-	case PR_KYRIE:			/* �L���G�G���C�\�� */
-		clif_skill_nodamage(bl,bl,skillid,skilllv,1);
-		if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage )
-			break;
-		skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
-		break;
-	case KN_AUTOCOUNTER:		/* �I�[�g�J�E���^�[ */
-	case KN_TWOHANDQUICKEN:	/* �c�[�n���h�N�C�b�P�� */
-	case CR_SPEARQUICKEN:	/* �X�s�A�N�C�b�P�� */
-	case CR_REFLECTSHIELD:
-	case AS_POISONREACT:	/* �|�C�Y�����A�N�g */
-	case MC_LOUD:			/* ���E�h�{�C�X */
-	case MG_ENERGYCOAT:		/* �G�i�W�[�R�[�g */
-	case SM_ENDURE:			/* �C���f���A */
-	case MG_SIGHT:			/* �T�C�g */
-	case AL_RUWACH:			/* ���A�t */
-	case MO_EXPLOSIONSPIRITS:	// �����g��
-	case MO_STEELBODY:		// ����
-	case LK_AURABLADE:		/* �I�[���u���[�h */
-	case LK_PARRYING:		/* �p���C���O */
-	case LK_CONCENTRATION:	/* �R���Z���g���[�V���� */
-	case LK_BERSERK:		/* �o�[�T�[�N */
-	case HP_ASSUMPTIO:		/*  */
-	case WS_CARTBOOST:		/* �J�[�g�u�[�X�g */
-	case SN_SIGHT:			/* �g�D���[�T�C�g */
-	case WS_MELTDOWN:		/* �����g�_�E�� */
-	case ST_REJECTSWORD:	/* ���W�F�N�g�\�[�h */
-	case HW_MAGICPOWER:		/* ���@�͑��� */
-	case PF_MEMORIZE:		/* �������C�Y */
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
-		break;
-	case AS_ENCHANTPOISON: // Prevent spamming [Valaris]
-		if(bl->type==BL_PC) {
-			struct map_session_data *sd2=(struct map_session_data *)bl;
-			if(sd2->sc_data[SC_FLAMELAUNCHER].timer!=-1 || sd2->sc_data[SC_FROSTWEAPON].timer!=-1 ||
-				sd2->sc_data[SC_LIGHTNINGLOADER].timer!=-1 || sd2->sc_data[SC_SEISMICWEAPON].timer!=-1 ||
-					sd2->sc_data[SC_ENCPOISON].timer!=-1) {
-						clif_skill_nodamage(src,bl,skillid,skilllv,0);
-						clif_skill_fail(sd,skillid,0,0);
-						break;
-			}
-		}
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
-		break;
-	case LK_TENSIONRELAX:	/* �e���V���������b�N�X */
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		pc_setsit(sd);
-		clif_sitting(sd->fd,sd);
-		skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
-		break;
-	case MC_CHANGECART:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		break;
-	case AC_CONCENTRATION:	/* �W���͌��� */
-		{
-			int range = 1;
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
-			map_foreachinarea( skill_status_change_timer_sub,
-				src->m, src->x-range, src->y-range, src->x+range,src->y+range,0,
-				src,SkillStatusChangeTable[skillid],tick);
-		}
-		break;
-	case SM_PROVOKE:		/* �v���{�b�N */
-		{
-			struct status_change *sc_data = battle_get_sc_data(bl);
-
-			/* MVPmob�ƕs���ɂ͌����Ȃ� */
-			if((bl->type==BL_MOB && battle_get_mode(bl)&0x20) || battle_check_undead(battle_get_race(bl),battle_get_elem_type(bl))) //�s���ɂ͌����Ȃ�
-			{
-				map_freeblock_unlock();
-				return 1;
-			}
-
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
-
-			if(dstmd && dstmd->skilltimer!=-1 && dstmd->state.skillcastcancel)	// �r���W�Q
-				skill_castcancel(bl,0);
-			if(dstsd && dstsd->skilltimer!=-1 && (!dstsd->special_state.no_castcancel || map[bl->m].flag.gvg)
-				&& dstsd->state.skillcastcancel	&& !dstsd->special_state.no_castcancel2)
-				skill_castcancel(bl,0);
-
-			if(sc_data){
-				if(sc_data[SC_FREEZE].timer!=-1)
-					skill_status_change_end(bl,SC_FREEZE,-1);
-				if(sc_data[SC_STONE].timer!=-1 && sc_data[SC_STONE].val2==0)
-					skill_status_change_end(bl,SC_STONE,-1);
-				if(sc_data[SC_SLEEP].timer!=-1)
-					skill_status_change_end(bl,SC_SLEEP,-1);
-			}
-
-			if(bl->type==BL_MOB) {
-				int range = skill_get_range(skillid,skilllv);
-				if(range < 0)
-					range = battle_get_range(src) - (range + 1);
-				mob_target((struct mob_data *)bl,src,range);
-			}
-		}
-		break;
-
-	case CR_DEVOTION:		/* �f�B�{�[�V���� */
-		if(sd && dstsd){
-			//�]����{�q�̏ꍇ�̌��̐E�Ƃ��Z�o����
-
-			int lv = sd->status.base_level-dstsd->status.base_level;
-			lv = (lv<0)?-lv:lv;
-			if((dstsd->bl.type!=BL_PC)	// �����PC����Ȃ��Ƃ���
-			 ||(sd->bl.id == dstsd->bl.id)	// ���肪�����͂���
-			 ||(lv > 10)			// ���x�����}10�܂�
-			 ||(!sd->status.party_id && !sd->status.guild_id)	// PT�ɂ��M���h�ɂ����������͂���
-			 ||((sd->status.party_id != dstsd->status.party_id)	// �����p�[�e�B�[���A
-			 ||(sd->status.guild_id != dstsd->status.guild_id))	// �����M���h����Ȃ��Ƃ���
-			 ||(dstsd->status.class==14||dstsd->status.class==21
-			 ||dstsd->status.class==4015||dstsd->status.class==4022)){	// �N���Z����
-				clif_skill_fail(sd,skillid,0,0);
-				map_freeblock_unlock();
-				return 1;
-			}
-			for(i=0;i<skilllv;i++){
-				if(!sd->dev.val1[i]){		// �󂫂�������������
-					sd->dev.val1[i] = bl->id;
-					sd->dev.val2[i] = bl->id;
-					break;
-				}else if(i==skilllv-1){		// �󂫂��Ȃ�����
-					clif_skill_fail(sd,skillid,0,0);
-					map_freeblock_unlock();
-					return 1;
-				}
-			}
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			clif_devotion(sd,bl->id);
-			skill_status_change_start(bl,SkillStatusChangeTable[skillid],src->id,1,0,0,1000*(15+15*skilllv),0 );
-		}
-		else	clif_skill_fail(sd,skillid,0,0);
-		break;
-	case MO_CALLSPIRITS:	// �C��
-		if(sd) {
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			pc_addspiritball(sd,skill_get_time(skillid,skilllv),skilllv);
-		}
-		break;
-	case CH_SOULCOLLECT:	// ���C��
-		if(sd) {
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			for(i=0;i<5;i++)
-				pc_addspiritball(sd,skill_get_time(skillid,skilllv),5);
-		}
-		break;
-	case MO_BLADESTOP:	// ���n���
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		skill_status_change_start(src,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
-		break;
-	case MO_ABSORBSPIRITS:	// �C�D
-		i=0;
-		if(sd && dstsd) {
-			if(sd == dstsd || map[sd->bl.m].flag.pvp || map[sd->bl.m].flag.gvg) {
-				if(dstsd->spiritball > 0) {
-					clif_skill_nodamage(src,bl,skillid,skilllv,1);
-					i = dstsd->spiritball * 7;
-					pc_delspiritball(dstsd,dstsd->spiritball,0);
-					if(i > 0x7FFF)
-						i = 0x7FFF;
-					if(sd->status.sp + i > sd->status.max_sp)
-						i = sd->status.max_sp - sd->status.sp;
-					}
-			}
-		}else if(sd && dstmd){ //�Ώۂ������X�^�[�̏ꍇ
-			//20%�̊m���őΏۂ�Lv*2��SP���񕜂���B���������Ƃ��̓^�[�Q�b�g(��߄D�)�йޯ�!!
-			if(rand()%100<20){
-				i=2*mob_db[dstmd->class].lv;
-				mob_target(dstmd,src,0);
-			}
-		}
-		if(i){
-						sd->status.sp += i;
-					clif_heal(sd->fd,SP_SP,i);
-				}
-				else
-					clif_skill_nodamage(src,bl,skillid,skilllv,0);
-		break;
-
-	case AC_MAKINGARROW:			/* ��쐬 */
-		if(sd) {
-			clif_arrow_create_list(sd);
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		}
-		break;
-
-	case AM_PHARMACY:			/* �|�[�V�����쐬 */
-		if(sd) {
-			clif_skill_produce_mix_list(sd,32);
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		}
-		break;
-	case WS_CREATECOIN:				/* �N���G�C�g�R�C�� */
-		if(sd) {
-			clif_skill_produce_mix_list(sd,64);
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		}
-		break;
-	case WS_CREATENUGGET:			/* �򐻑� */
-		if(sd) {
-			clif_skill_produce_mix_list(sd,128);
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		}
-		break;
-	case BS_HAMMERFALL:		/* �n���}�[�t�H�[�� */
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_weapon_damage )
-			break;
-		if( rand()%100 < (20+ 10*skilllv)*sc_def_vit/100 ) {
-			skill_status_change_start(bl,SC_STAN,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		}
-		break;
-
-	case RG_RAID:			/* �T�v���C�Y�A�^�b�N */
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		{
-			int x=bl->x,y=bl->y;
-			skill_area_temp[1]=bl->id;
-			skill_area_temp[2]=x;
-			skill_area_temp[3]=y;
-			map_foreachinarea(skill_area_sub,
-				bl->m,x-1,y-1,x+1,y+1,0,
-				src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
-				skill_castend_damage_id);
-		}
-		skill_status_change_end(src, SC_HIDING, -1);	// �n�C�f�B���O����
-		break;
-
-	case KN_BRANDISHSPEAR:	/*�u�����f�B�b�V���X�s�A*/
-		{
-			int c,n=4,ar;
-			int dir = map_calc_dir(src,bl->x,bl->y);
-			struct square tc;
-			int x=bl->x,y=bl->y;
-			ar=skilllv/3;
-			skill_brandishspear_first(&tc,dir,x,y);
-			skill_brandishspear_dir(&tc,dir,4);
-			/* �͈͇C */
-			if(skilllv == 10){
-				for(c=1;c<4;c++){
-					map_foreachinarea(skill_area_sub,
-						bl->m,tc.val1[c],tc.val2[c],tc.val1[c],tc.val2[c],0,
-						src,skillid,skilllv,tick, flag|BCT_ENEMY|n,
-						skill_castend_damage_id);
-				}
-			}
-			/* �͈͇B�A */
-			if(skilllv > 6){
-				skill_brandishspear_dir(&tc,dir,-1);
-				n--;
-			}else{
-				skill_brandishspear_dir(&tc,dir,-2);
-				n-=2;
-			}
-
-			if(skilllv > 3){
-				for(c=0;c<5;c++){
-					map_foreachinarea(skill_area_sub,
-						bl->m,tc.val1[c],tc.val2[c],tc.val1[c],tc.val2[c],0,
-						src,skillid,skilllv,tick, flag|BCT_ENEMY|n,
-						skill_castend_damage_id);
-					if(skilllv > 6 && n==3 && c==4){
-						skill_brandishspear_dir(&tc,dir,-1);
-						n--;c=-1;
-					}
-				}
-			}
-			/* �͈͇@ */
-			for(c=0;c<10;c++){
-				if(c==0||c==5) skill_brandishspear_dir(&tc,dir,-1);
-				map_foreachinarea(skill_area_sub,
-					bl->m,tc.val1[c%5],tc.val2[c%5],tc.val1[c%5],tc.val2[c%5],0,
-					src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
-					skill_castend_damage_id);
-			}
-		}
-		break;
-
-	/* �p�[�e�B�X�L�� */
-	case AL_ANGELUS:		/* �G���W�F���X */
-	case PR_MAGNIFICAT:		/* �}�O�j�t�B�J�[�g */
-	case PR_GLORIA:			/* �O�����A */
-	case SN_WINDWALK:		/* �E�C���h�E�H�[�N */
-		if(sd == NULL || sd->status.party_id==0 || (flag&1) ){
-			/* �•ʂ̏��� */
-			clif_skill_nodamage(bl,bl,skillid,skilllv,1);
-			if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage )
-				break;
-			skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0);
-		}
-		else{
-			/* �p�[�e�B�S�̂ւ̏��� */
-			party_foreachsamemap(skill_area_sub,
-				sd,1,
-				src,skillid,skilllv,tick, flag|BCT_PARTY|1,
-				skill_castend_nodamage_id);
-		}
-		break;
-	case BS_ADRENALINE:		/* �A�h���i�������b�V�� */
-	case BS_WEAPONPERFECT:	/* �E�F�|���p�[�t�F�N�V���� */
-	case BS_OVERTHRUST:		/* �I�[�o�[�g���X�g */
-		if(sd == NULL || sd->status.party_id==0 || (flag&1) ){
-			/* �•ʂ̏��� */
-			clif_skill_nodamage(bl,bl,skillid,skilllv,1);
-			skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,(src == bl)? 1:0,0,0,skill_get_time(skillid,skilllv),0);
-		}
-		else{
-			/* �p�[�e�B�S�̂ւ̏��� */
-			party_foreachsamemap(skill_area_sub,
-				sd,1,
-				src,skillid,skilllv,tick, flag|BCT_PARTY|1,
-				skill_castend_nodamage_id);
-		}
-		break;
-
-	/*�i�t���Ɖ������K�v�j */
-	case BS_MAXIMIZE:		/* �}�L�V�}�C�Y�p���[ */
-	case NV_TRICKDEAD:		/* ���񂾂ӂ� */
-	case CR_DEFENDER:		/* �f�B�t�F���_�[ */
-	case CR_AUTOGUARD:		/* �I�[�g�K�[�h */
-		{
-			struct status_change *tsc_data = battle_get_sc_data(bl);
-			int sc=SkillStatusChangeTable[skillid];
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			if( tsc_data ){
-				if( tsc_data[sc].timer==-1 )
-					/* �t������ */
-					skill_status_change_start(bl,sc,skilllv,0,0,0,skill_get_time(skillid,skilllv),0);
-				else
-					/* �������� */
-					skill_status_change_end(bl, sc, -1);
-			}
-		}
-		break;
-
-	case TF_HIDING:			/* �n�C�f�B���O */
-		{
-			struct status_change *tsc_data = battle_get_sc_data(bl);
-			int sc=SkillStatusChangeTable[skillid];
-			clif_skill_nodamage(src,bl,skillid,-1,1);
-			if( tsc_data ){
-				if( tsc_data[sc].timer==-1 )
-				/* �t������ */
-				skill_status_change_start(bl,sc,skilllv,0,0,0,skill_get_time(skillid,skilllv),0);
-			else
-				/* �������� */
-				skill_status_change_end(bl, sc, -1);
-		}
-		}
-		break;
-
-	case AS_CLOAKING:		/* �N���[�L���O */
-		{
-			struct status_change *tsc_data = battle_get_sc_data(bl);
-			int sc=SkillStatusChangeTable[skillid];
-			clif_skill_nodamage(src,bl,skillid,-1,1);
-			if( tsc_data ){
-				if( tsc_data[sc].timer==-1 )
-				/* �t������ */
-				skill_status_change_start(bl,sc,skilllv,0,0,0,skill_get_time(skillid,skilllv),0);
-			else
-				/* �������� */
-				skill_status_change_end(bl, sc, -1);
-			}
-
-			skill_check_cloaking(bl);
-		}
-		break;
-
-	case ST_CHASEWALK:			/* �n�C�f�B���O */
-		{
-			struct status_change *tsc_data = battle_get_sc_data(bl);
-			int sc=SkillStatusChangeTable[skillid];
-			clif_skill_nodamage(src,bl,skillid,-1,1);
-			if( tsc_data ){
-				if( tsc_data[sc].timer==-1 )
-				/* �t������ */
-				skill_status_change_start(bl,sc,skilllv,0,0,0,skill_get_time(skillid,skilllv),0);
-			else
-				/* �������� */
-				skill_status_change_end(bl, sc, -1);
-			}
-		}
-		break;
-
-	/* �Βn�X�L�� */
-	case BD_LULLABY:			/* �q��S */
-	case BD_RICHMANKIM:			/* �j�����h�̉� */
-	case BD_ETERNALCHAOS:		/* �i���̍��� */
-	case BD_DRUMBATTLEFIELD:	/* �푾�ۂ̋��� */
-	case BD_RINGNIBELUNGEN:		/* �j�[�x�����O�̎w�� */
-	case BD_ROKISWEIL:			/* ���L�̋��� */
-	case BD_INTOABYSS:			/* �[���̒��� */
-	case BD_SIEGFRIED:			/* �s���g�̃W�[�N�t���[�h */
-	case BA_DISSONANCE:			/* �s���a�� */
-	case BA_POEMBRAGI:			/* �u���M�̎� */
-	case BA_WHISTLE:			/* ���J */
-	case BA_ASSASSINCROSS:		/* �[�z�̃A�T�V���N���X */
-	case BA_APPLEIDUN:			/* �C�h�D���̗ь� */
-	case DC_UGLYDANCE:			/* ��������ȃ_���X */
-	case DC_HUMMING:			/* �n�~���O */
-	case DC_DONTFORGETME:		/* ����Y��Ȃ��Łc */
-	case DC_FORTUNEKISS:		/* �K�^�̃L�X */
-	case DC_SERVICEFORYOU:		/* �T�[�r�X�t�H�[���[ */
-	case CG_MOONLIT:			/* ������̐�ɗ�����Ԃт� */
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		skill_unitsetting(src,skillid,skilllv,src->x,src->y,0);
-		break;
-
-	case HP_BASILICA:			/* �o�W���J */
-	case PA_GOSPEL:				/* �S�X�y�� */
-		skill_clear_unitgroup(src);
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		skill_unitsetting(src,skillid,skilllv,src->x,src->y,0);
-		break;
-
-	case BD_ADAPTATION:			/* �A�h���u */
-		{
-			struct status_change *sc_data = battle_get_sc_data(src);
-			if(sc_data && sc_data[SC_DANCING].timer!=-1){
-				clif_skill_nodamage(src,bl,skillid,skilllv,1);
-				skill_stop_dancing(src,0);
-			}
-		}
-		break;
-
-	case BA_FROSTJOKE:			/* �����W���[�N */
-	case DC_SCREAM:				/* �X�N���[�� */
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,0,flag);
-		break;
-
-	case TF_STEAL:			// �X�e�B�[��
-		if(sd) {
-			if(pc_steal_item(sd,bl))
-				clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			else
-				clif_skill_nodamage(src,bl,skillid,skilllv,0);
-		}
-		break;
-
-	case RG_STEALCOIN:		// �X�e�B�[���R�C��
-	if(sd) {
-			if(pc_steal_coin(sd,bl)) {
-				int range = skill_get_range(skillid,skilllv);
-				if(range < 0)
-					range = battle_get_range(src) - (range + 1);
-				clif_skill_nodamage(src,bl,skillid,skilllv,1);
-				mob_target((struct mob_data *)bl,src,range);
-			}
-			else
-				clif_skill_nodamage(src,bl,skillid,skilllv,0);
-		}
-		break;
-
-	case MG_STONECURSE:			/* �X�g�[���J�[�X */
-		if (bl->type==BL_MOB && battle_get_mode(bl)&0x20) {
-			clif_skill_fail(sd,sd->skillid,0,0);
-			break;
-		}
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage )
-			break;
-		if( rand()%100 < skilllv*4+20 && !battle_check_undead(battle_get_race(bl),battle_get_elem_type(bl)))
-			skill_status_change_start(bl,SC_STONE,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		else if(sd)
-			clif_skill_fail(sd,skillid,0,0);
-		break;
-
-	case NV_FIRSTAID:			/* ���}�蓖 */
-		clif_skill_nodamage(src,bl,skillid,5,1);
-		battle_heal(NULL,bl,5,0,0);
-		break;
-
-	case AL_CURE:				/* �L���A�[ */
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage )
-			break;
-		skill_status_change_end(bl, SC_SILENCE	, -1 );
-		skill_status_change_end(bl, SC_BLIND	, -1 );
-		skill_status_change_end(bl, SC_CONFUSION, -1 );
-		if( battle_check_undead(battle_get_race(bl),battle_get_elem_type(bl)) ){//�A���f�b�h�Ȃ�ÈŌ���
-			skill_status_change_start(bl, SC_CONFUSION,1,0,0,0,6000,0);
-		}
-		break;
-
-	case TF_DETOXIFY:			/* ��� */
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		skill_status_change_end(bl, SC_POISON	, -1 );
-		break;
-
-	case PR_STRECOVERY:			/* ���J�o���[ */
-		{
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage )
-				break;
-			skill_status_change_end(bl, SC_FREEZE	, -1 );
-			skill_status_change_end(bl, SC_STONE	, -1 );
-			skill_status_change_end(bl, SC_SLEEP	, -1 );
-			skill_status_change_end(bl, SC_STAN		, -1 );
-			if( battle_check_undead(battle_get_race(bl),battle_get_elem_type(bl)) ){//�A���f�b�h�Ȃ�ÈŌ���
-				int blind_time;
-				//blind_time=30-battle_get_vit(bl)/10-battle_get_int/15;
-				blind_time=30*(100-(battle_get_int(bl)+battle_get_vit(bl))/2)/100;
-				if(rand()%100 < (100-(battle_get_int(bl)/2+battle_get_vit(bl)/3+battle_get_luk(bl)/10)))
-					skill_status_change_start(bl, SC_BLIND,1,0,0,0,blind_time,0);
-			}
-			if(dstmd){
-				dstmd->attacked_id=0;
-				dstmd->target_id=0;
-				dstmd->state.targettype = NONE_ATTACKABLE;
-				dstmd->state.skillstate=MSS_IDLE;
-				dstmd->next_walktime=tick+rand()%3000+3000;
-			}
-		}
-		break;
-
-	case WZ_ESTIMATION:			/* �����X�^�[��� */
-		if(src->type==BL_PC){
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			clif_skill_estimation((struct map_session_data *)src,bl);
-		}
-		break;
-
-	case MC_IDENTIFY:			/* �A�C�e���Ӓ� */
-		if(sd)
-			clif_item_identify_list(sd);
-		break;
-
-	case BS_REPAIRWEAPON:			/* ����C�� */
-		if(sd)
-//���삵�Ȃ��̂łƂ肠�����R�����g�A�E�g
-//			clif_item_repair_list(sd);
-		break;
-
-	case MC_VENDING:			/* �I�X�J�� */
-		if(sd)
-			clif_openvendingreq(sd,2+sd->skilllv);
-		break;
-
-	case AL_TELEPORT:			/* �e���|�[�g */
-		if( sd ){
-			if(map[sd->bl.m].flag.noteleport){	/* �e���|�֎~ */
-				clif_skill_teleportmessage(sd,0);
-				break;
-			}
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			if( sd->skilllv==1 )
-				clif_skill_warppoint(sd,sd->skillid,"Random","","","");
-			else{
-				clif_skill_warppoint(sd,sd->skillid,"Random",
-					sd->status.save_point.map,"","");
-			}
-		}else if( bl->type==BL_MOB )
-			mob_warp((struct mob_data *)bl,-1,-1,-1,3);
-		break;
-
-	case AL_HOLYWATER:			/* �A�N�A�x�l�f�B�N�^ */
-		if(sd) {
-			int eflag;
-			struct item item_tmp;
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			memset(&item_tmp,0,sizeof(item_tmp));
-			item_tmp.nameid = 523;
-			item_tmp.identify = 1;
-			if(battle_config.holywater_name_input) {
-				item_tmp.card[0] = 0xfe;
-				item_tmp.card[1] = 0;
-				*((unsigned long *)(&item_tmp.card[2]))=sd->char_id;	/* �L����ID */
-			}
-			eflag = pc_additem(sd,&item_tmp,1);
-			if(eflag) {
-				clif_additem(sd,0,0,eflag);
-				map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
-			}
-		}
-		break;
-	case TF_PICKSTONE:
-		if(sd) {
-			int eflag;
-			struct item item_tmp;
-			struct block_list tbl;
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			memset(&item_tmp,0,sizeof(item_tmp));
-			memset(&tbl,0,sizeof(tbl)); // [MouseJstr]
-			item_tmp.nameid = 7049;
-			item_tmp.identify = 1;
-			tbl.id = 0;
-			clif_takeitem(&sd->bl,&tbl);
-			eflag = pc_additem(sd,&item_tmp,1);
-			if(eflag) {
-				clif_additem(sd,0,0,eflag);
-				map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
-			}
-		}
-		break;
-
-	case RG_STRIPWEAPON:		/* �X�g���b�v�E�F�|�� */
-		{
-			struct status_change *tsc_data = battle_get_sc_data(bl);
-			
-			if(tsc_data && tsc_data[SC_CP_WEAPON].timer != -1 )
-			break;
-		strip_per = 5+2*skilllv+strip_fix/5;
-		strip_time = skill_get_time(skillid,skilllv)+strip_fix/2;
-		if(rand()%100 < strip_per){
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,strip_time,0 );
-			if(dstsd){
-				for(i=0;i<MAX_INVENTORY;i++){
-					if(dstsd->status.inventory[i].equip && dstsd->status.inventory[i].equip & 0x0002){
-						pc_unequipitem(dstsd,i,0);
-						break;
-					}
-				}
-			}
-		}
-		}
-		break;
-
-	case RG_STRIPSHIELD:		/* �X�g���b�v�V�[���h */
-		{
-			struct status_change *tsc_data = battle_get_sc_data(bl);
-			
-			if(tsc_data && tsc_data[SC_CP_SHIELD].timer != -1 )
-			break;
-		strip_per = 5+2*skilllv+strip_fix/5;
-		strip_time = skill_get_time(skillid,skilllv)+strip_fix/2;
-		if(rand()%100 < strip_per){
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,strip_time,0 );
-			if(dstsd){
-				for(i=0;i<MAX_INVENTORY;i++){
-					if(dstsd->status.inventory[i].equip && dstsd->status.inventory[i].equip & 0x0020){
-						pc_unequipitem(dstsd,i,0);
-						break;
-					}
-				}
-			}
-		}
-		}
-		break;
-
-	case RG_STRIPARMOR:			/* �X�g���b�v�A�[�}�[ */
-		{
-			struct status_change *tsc_data = battle_get_sc_data(bl);
-			
-			if(tsc_data && tsc_data[SC_CP_ARMOR].timer != -1 )
-			break;
-		strip_per = 5+2*skilllv+strip_fix/5;
-		strip_time = skill_get_time(skillid,skilllv)+strip_fix/2;
-		if(rand()%100 < strip_per){
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,strip_time,0 );
-			if(dstsd){
-				for(i=0;i<MAX_INVENTORY;i++){
-					if(dstsd->status.inventory[i].equip && dstsd->status.inventory[i].equip & 0x0010){
-						pc_unequipitem(dstsd,i,0);
-						break;
-					}
-				}
-			}
-		}
-		}
-		break;
-	case RG_STRIPHELM:			/* �X�g���b�v�w���� */
-		{
-			struct status_change *tsc_data = battle_get_sc_data(bl);
-			
-			if(tsc_data && tsc_data[SC_CP_HELM].timer != -1 )
-			break;
-		strip_per = 5+2*skilllv+strip_fix/5;
-		strip_time = skill_get_time(skillid,skilllv)+strip_fix/2;
-		if(rand()%100 < strip_per){
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,strip_time,0 );
-			if(dstsd){
-				for(i=0;i<MAX_INVENTORY;i++){
-					if(dstsd->status.inventory[i].equip && dstsd->status.inventory[i].equip & 0x0100){
-						pc_unequipitem(dstsd,i,0);
-						break;
-					}
-				}
-			}
-		}
-		}
-		break;
-	/* PotionPitcher */
-	case AM_POTIONPITCHER:		/* �|�[�V�����s�b�`���[ */
-		{
-			struct block_list tbl;
-			int i,x,hp = 0,sp = 0;
-			if(sd) {
-				if(sd==dstsd) {	// cancel use on oneself
-					map_freeblock_unlock();
-					return 1;
-				}
-				x = skilllv%11 - 1;
-				i = pc_search_inventory(sd,skill_db[skillid].itemid[x]);
-				if(i < 0 || skill_db[skillid].itemid[x] <= 0) {
-					clif_skill_fail(sd,skillid,0,0);
-					map_freeblock_unlock();
-					return 1;
-				}
-				if(sd->inventory_data[i] == NULL || sd->status.inventory[i].amount < skill_db[skillid].amount[x]) {
-					clif_skill_fail(sd,skillid,0,0);
-					map_freeblock_unlock();
-					return 1;
-				}
-				sd->state.potionpitcher_flag = 1;
-				sd->potion_hp = sd->potion_sp = sd->potion_per_hp = sd->potion_per_sp = 0;
-				sd->skilltarget = bl->id;
-				run_script(sd->inventory_data[i]->use_script,0,sd->bl.id,0);
-				pc_delitem(sd,i,skill_db[skillid].amount[x],0);
-				sd->state.potionpitcher_flag = 0;
-				if(sd->potion_per_hp > 0 || sd->potion_per_sp > 0) {
-					hp = battle_get_max_hp(bl) * sd->potion_per_hp / 100;
-					hp = hp * (100 + pc_checkskill(sd,AM_POTIONPITCHER)*10 + pc_checkskill(sd,AM_LEARNINGPOTION)*5)/100;
-					if(dstsd) {
-						sp = dstsd->status.max_sp * sd->potion_per_sp / 100;
-						sp = sp * (100 + pc_checkskill(sd,AM_POTIONPITCHER) + pc_checkskill(sd,AM_LEARNINGPOTION)*5)/100;
-					}
-				}
-				else {
-					if(sd->potion_hp > 0) {
-						hp = sd->potion_hp * (100 + pc_checkskill(sd,AM_POTIONPITCHER)*10 + pc_checkskill(sd,AM_LEARNINGPOTION)*5)/100;
-						hp = hp * (100 + (battle_get_vit(bl)<<1)) / 100;
-						if(dstsd)
-							hp = hp * (100 + pc_checkskill(dstsd,SM_RECOVERY)*10) / 100;
-					}
-					if(sd->potion_sp > 0) {
-						sp = sd->potion_sp * (100 + pc_checkskill(sd,AM_POTIONPITCHER) + pc_checkskill(sd,AM_LEARNINGPOTION)*5)/100;
-						sp = sp * (100 + (battle_get_int(bl)<<1)) / 100;
-						if(dstsd)
-							sp = sp * (100 + pc_checkskill(dstsd,MG_SRECOVERY)*10) / 100;
-					}
-				}
-			}
-			else {
-				hp = (1 + rand()%400) * (100 + skilllv*10) / 100;
-				hp = hp * (100 + (battle_get_vit(bl)<<1)) / 100;
-				if(dstsd)
-					hp = hp * (100 + pc_checkskill(dstsd,SM_RECOVERY)*10) / 100;
-			}
-			tbl.id = 0;
-			tbl.m = src->m;
-			tbl.x = src->x;
-			tbl.y = src->y;
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			if(hp > 0 || (hp <= 0 && sp <= 0))
-				clif_skill_nodamage(&tbl,bl,AL_HEAL,hp,1);
-			if(sp > 0)
-				clif_skill_nodamage(&tbl,bl,MG_SRECOVERY,sp,1);
-			battle_heal(src,bl,hp,sp,0);
-		}
-		break;
-	case AM_CP_WEAPON:
-		{
-			struct status_change *tsc_data = battle_get_sc_data(bl);
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			if(tsc_data && tsc_data[SC_STRIPWEAPON].timer != -1)
-			skill_status_change_end(bl, SC_STRIPWEAPON, -1 );
-		skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
-		}
-		break;
-	case AM_CP_SHIELD:
-		{
-			struct status_change *tsc_data = battle_get_sc_data(bl);
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			if(tsc_data && tsc_data[SC_STRIPSHIELD].timer != -1)
-			skill_status_change_end(bl, SC_STRIPSHIELD, -1 );
-		skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
-		}
-		break;
-	case AM_CP_ARMOR:
-		{
-			struct status_change *tsc_data = battle_get_sc_data(bl);
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			if(tsc_data && tsc_data[SC_STRIPARMOR].timer != -1)
-			skill_status_change_end(bl, SC_STRIPARMOR, -1 );
-		skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
-		}
-		break;
-	case AM_CP_HELM:
-		{
-			struct status_change *tsc_data = battle_get_sc_data(bl);
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			if(tsc_data && tsc_data[SC_STRIPHELM].timer != -1)
-			skill_status_change_end(bl, SC_STRIPHELM, -1 );
-		skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
-		}
-		break;
-	case SA_DISPELL:			/* �f�B�X�y�� */
-		{
-			int i;
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage )
-			break;
-			for(i=0;i<136;i++){
-				if(i==SC_RIDING || i== SC_FALCON || i==SC_HALLUCINATION || i==SC_WEIGHT50
-					|| i==SC_WEIGHT90 || i==SC_STRIPWEAPON || i==SC_STRIPSHIELD || i==SC_STRIPARMOR
-					|| i==SC_STRIPHELM || i==SC_CP_WEAPON || i==SC_CP_SHIELD || i==SC_CP_ARMOR
-					|| i==SC_CP_HELM || i==SC_COMBO)
-						continue;
-				skill_status_change_end(bl,i,-1);
-			}
-		}
-		break;
-
-	case TF_BACKSLIDING:		/* �o�b�N�X�e�b�v */
-		battle_stopwalking(src,1);
-		skill_blown(src,bl,skill_get_blewcount(skillid,skilllv)|0x10000);
-		if(src->type == BL_MOB)
-			clif_fixmobpos((struct mob_data *)src);
-		else if(src->type == BL_PET)
-			clif_fixpetpos((struct pet_data *)src);
-		else if(src->type == BL_PC)
-			clif_fixpos(src);
-		skill_addtimerskill(src,tick + 200,src->id,0,0,skillid,skilllv,0,flag);
-		break;
-
-	case SA_CASTCANCEL:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		skill_castcancel(src,1);
-		if(sd) {
-			int sp = skill_get_sp(sd->skillid_old,sd->skilllv_old);
-			sp = sp * (90 - (skilllv-1)*20) / 100;
-			if(sp < 0) sp = 0;
-			pc_heal(sd,0,-sp);
-		}
-		break;
-	case SA_SPELLBREAKER:	// �X�y���u���C�J�[
-		{
-			struct status_change *sc_data = battle_get_sc_data(bl);
-			int sp;
-			if(sc_data && sc_data[SC_MAGICROD].timer != -1) {
-				if(dstsd) {
-					sp = skill_get_sp(skillid,skilllv);
-					sp = sp * sc_data[SC_MAGICROD].val2 / 100;
-					if(sp > 0x7fff) sp = 0x7fff;
-					else if(sp < 1) sp = 1;
-					if(dstsd->status.sp + sp > dstsd->status.max_sp) {
-						sp = dstsd->status.max_sp - dstsd->status.sp;
-						dstsd->status.sp = dstsd->status.max_sp;
-					}
-					else
-						dstsd->status.sp += sp;
-					clif_heal(dstsd->fd,SP_SP,sp);
-				}
-				clif_skill_nodamage(bl,bl,SA_MAGICROD,sc_data[SC_MAGICROD].val1,1);
-				if(sd) {
-					sp = sd->status.max_sp/5;
-					if(sp < 1) sp = 1;
-					pc_heal(sd,0,-sp);
-				}
-			}
-			else {
-				int bl_skillid=0,bl_skilllv=0;
-				if(bl->type == BL_PC) {
-					if(dstsd && dstsd->skilltimer != -1) {
-						bl_skillid = dstsd->skillid;
-						bl_skilllv = dstsd->skilllv;
-					}
-				}
-				else if(bl->type == BL_MOB) {
-					if(dstmd && dstmd->skilltimer != -1) {
-						bl_skillid = dstmd->skillid;
-						bl_skilllv = dstmd->skilllv;
-					}
-				}
-				if(bl_skillid > 0 && skill_db[bl_skillid].skill_type == BF_MAGIC) {
-					clif_skill_nodamage(src,bl,skillid,skilllv,1);
-					skill_castcancel(bl,0);
-					sp = skill_get_sp(bl_skillid,bl_skilllv);
-					if(dstsd)
-						pc_heal(dstsd,0,-sp);
-					if(sd) {
-						sp = sp*(25*(skilllv-1))/100;
-						if(skilllv > 1 && sp < 1) sp = 1;
-						if(sp > 0x7fff) sp = 0x7fff;
-						else if(sp < 1) sp = 1;
-						if(sd->status.sp + sp > sd->status.max_sp) {
-							sp = sd->status.max_sp - sd->status.sp;
-							sd->status.sp = sd->status.max_sp;
-						}
-						else
-							sd->status.sp += sp;
-						clif_heal(sd->fd,SP_SP,sp);
-					}
-				}
-				else if(sd)
-					clif_skill_fail(sd,skillid,0,0);
-			}
-		}
-		break;
-	case SA_MAGICROD:
-		if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage )
-			break;
-		skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
-		break;
-	case SA_AUTOSPELL:			/* �I�[�g�X�y�� */
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if(sd)
-			clif_autospell(sd,skilllv);
-		else {
-			int maxlv=1,spellid=0;
-			static const int spellarray[3] = { MG_COLDBOLT,MG_FIREBOLT,MG_LIGHTNINGBOLT };
-			if(skilllv >= 10) {
-				spellid = MG_FROSTDIVER;
-				maxlv = skilllv - 9;
-			}
-			else if(skilllv >=8) {
-				spellid = MG_FIREBALL;
-				maxlv = skilllv - 7;
-			}
-			else if(skilllv >=5) {
-				spellid = MG_SOULSTRIKE;
-				maxlv = skilllv - 4;
-			}
-			else if(skilllv >=2) {
-				int i = rand()%3;
-				spellid = spellarray[i];
-				maxlv = skilllv - 1;
-			}
-			else if(skilllv > 0) {
-				spellid = MG_NAPALMBEAT;
-				maxlv = 3;
-			}
-			if(spellid > 0)
-				skill_status_change_start(src,SC_AUTOSPELL,skilllv,spellid,maxlv,0,
-					skill_get_time(SA_AUTOSPELL,skilllv),0);
-		}
-		break;
-
-	/* �����_�������ω��A�������ω��A�n�A�΁A�� */
-	case NPC_ATTRICHANGE:
-	case NPC_CHANGEWATER:
-	case NPC_CHANGEGROUND:
-	case NPC_CHANGEFIRE:
-	case NPC_CHANGEWIND:
-	/* �ŁA���A�O�A�� */
-	case NPC_CHANGEPOISON:
-	case NPC_CHANGEHOLY:
-	case NPC_CHANGEDARKNESS:
-	case NPC_CHANGETELEKINESIS:
-		if(md){
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			md->def_ele=skill_get_pl(skillid);
-			if(md->def_ele==0)			/* �����_���ω��A�������A*/
-				md->def_ele=rand()%10;	/* �s�������͏��� */
-			md->def_ele+=(1+rand()%4)*20;	/* �������x���̓����_�� */
-		}
-		break;
-
-	case NPC_PROVOCATION:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if(md)
-			clif_pet_performance(src,mob_db[md->class].skill[md->skillidx].val[0]);
-		break;
-
-	case NPC_HALLUCINATION:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage )
-			break;
-		skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
-		break;
-
-	case NPC_KEEPING:
-	case NPC_BARRIER:
-		{
-			int skill_time = skill_get_time(skillid,skilllv);
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_time,0 );
-			mob_changestate((struct mob_data *)src,MS_DELAY,skill_time);
-		}
-		break;
-
-	case NPC_DARKBLESSING:
-		{
-			int sc_def = 100 - battle_get_mdef(bl);
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage )
-				break;
-			if(battle_get_elem_type(bl) == 7 || battle_get_race(bl) == 6)
-				break;
-			if(rand()%100 < sc_def*(50+skilllv*5)/100) {
-				if(dstsd) {
-					int hp = battle_get_hp(bl)-1;
-					pc_heal(dstsd,-hp,0);
-				}
-				else if(dstmd)
-					dstmd->hp = 1;
-			}
-		}
-		break;
-
-	case NPC_SELFDESTRUCTION:	/* ���� */
-	case NPC_SELFDESTRUCTION2:	/* ����2 */
-		skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,skillid,0,0,skill_get_time(skillid,skilllv),0);
-		break;
-	case NPC_LICK:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_weapon_damage )
-			break;
-		if(dstsd)
-			pc_heal(dstsd,0,-100);
-		if(rand()%100 < (skilllv*5)*sc_def_vit/100)
-			skill_status_change_start(bl,SC_STAN,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
-		break;
-
-	case NPC_SUICIDE:			/* ���� */
-		if(src && bl && md){
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			mob_damage(NULL,md,md->hp,0);
-		}
-		break;
-
-	case NPC_SUMMONSLAVE:		/* �艺���� */
-	case NPC_SUMMONMONSTER:		/* MOB���� */
-		if(md && !md->master_id){
-			mob_summonslave(md,mob_db[md->class].skill[md->skillidx].val,skilllv,(skillid==NPC_SUMMONSLAVE)?1:0);
-		}
-		break;
-
-	case NPC_TRANSFORMATION:
-	case NPC_METAMORPHOSIS:
-		if(md)
-			mob_class_change(md,mob_db[md->class].skill[md->skillidx].val);
-		break;
-
-	case NPC_EMOTION:			/* �G���[�V���� */
-		if(md)
-			clif_emotion(&md->bl,mob_db[md->class].skill[md->skillidx].val[0]);
-		break;
-
-	case NPC_DEFENDER:
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		break;
-
-	case WE_MALE:				/* �N�����͌��� */
-		if(sd && dstsd){
-			int hp_rate=(skilllv <= 0)? 0:skill_db[skillid].hp_rate[skilllv-1];
-			int gain_hp=sd->status.max_hp*abs(hp_rate)/100;// 15%
-			clif_skill_nodamage(src,bl,skillid,gain_hp,1);
-			battle_heal(NULL,bl,gain_hp,0,0);
-		}
-		break;
-	case WE_FEMALE:				/* ���Ȃ��ׂ̈ɋ]���ɂȂ�܂� */
-		if(sd && dstsd){
-			int sp_rate=(skilllv <= 0)? 0:skill_db[skillid].sp_rate[skilllv-1];
-			int gain_sp=sd->status.max_sp*abs(sp_rate)/100;// 15%
-			clif_skill_nodamage(src,bl,skillid,gain_sp,1);
-			battle_heal(NULL,bl,0,gain_sp,0);
-		}
-		break;
-
-	case WE_CALLPARTNER:			/* ���Ȃ��ɉ���� */
-		if(sd && dstsd){
-			if(map[sd->bl.m].flag.nomemo){
-				clif_skill_teleportmessage(sd,1);
-				return 0;
-			}
-			if((dstsd = pc_get_partner(sd)) == NULL){
-				clif_skill_fail(sd,skillid,0,0);
-				return 0;
-			}
-			skill_unitsetting(src,skillid,skilllv,sd->bl.x,sd->bl.y,0);
-		}
-		break;
-
-	case PF_HPCONVERSION:			/* ���C�t�u������ */
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if(sd){
-			int conv_hp=0,conv_sp=0;
-			conv_hp=sd->status.hp/10; //��{��HP��10%
-			sd->status.hp -= conv_hp; //HP�����炷
-			conv_sp=conv_hp*20*skilllv/100;
-			conv_sp=(sd->status.sp+conv_sp>sd->status.max_sp)?sd->status.max_sp-sd->status.sp:conv_sp;
-			sd->status.sp += conv_sp; //SP�𑝂₷
-			pc_heal(sd,-conv_hp,conv_sp);
-			clif_heal(sd->fd,SP_SP,conv_sp);
-		}
-		break;
-	case HT_REMOVETRAP:				/* �����[�u�g���b�v */
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		{
-			struct skill_unit *su=NULL;
-			struct item item_tmp;
-			int flag;
-			if((bl->type==BL_SKILL) &&
-			   (su=(struct skill_unit *)bl) &&
-			   (su->group->src_id == src->id || map[bl->m].flag.pvp || map[bl->m].flag.gvg) &&
-			   (su->group->unit_id >= 0x8f && su->group->unit_id <= 0x99) &&
-			   (su->group->unit_id != 0x92)){ //㩂����Ԃ�
-				if(sd){
-					if(battle_config.skill_removetrap_type == 1){
-					for(i=0;i<10;i++) {
-						if(skill_db[su->group->skill_id].itemid[i] > 0){
-							memset(&item_tmp,0,sizeof(item_tmp));
-							item_tmp.nameid = skill_db[su->group->skill_id].itemid[i];
-							item_tmp.identify = 1;
-							if(item_tmp.nameid && (flag=pc_additem(sd,&item_tmp,skill_db[su->group->skill_id].amount[i]))){
-								clif_additem(sd,0,0,flag);
-									map_addflooritem(&item_tmp,skill_db[su->group->skill_id].amount[i],sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
-								}
-							}
-						}
-					}else{
-						memset(&item_tmp,0,sizeof(item_tmp));
-						item_tmp.nameid = 1065;
-						item_tmp.identify = 1;
-						if(item_tmp.nameid && (flag=pc_additem(sd,&item_tmp,1))){
-							clif_additem(sd,0,0,flag);
-							map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
-						}
-					}
-					
-				}
-				if(su->group->unit_id == 0x91 && su->group->val2){
-					struct block_list *target=map_id2bl(su->group->val2);
-					if(target && (target->type == BL_PC || target->type == BL_MOB))
-						skill_status_change_end(target,SC_ANKLE,-1);
-				}
-				skill_delunit(su);
-			}
-		}
-		break;
-	case HT_SPRINGTRAP:				/* �X�v�����O�g���b�v */
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		{
-			struct skill_unit *su=NULL;
-			if((bl->type==BL_SKILL) && (su=(struct skill_unit *)bl) && (su->group) ){
-				switch(su->group->unit_id){
-					case 0x8f:	/* �u���X�g�}�C�� */
-					case 0x90:	/* �X�L�b�h�g���b�v */
-					case 0x93:	/* �����h�}�C�� */
-					case 0x94:	/* �V���b�N�E�F�[�u�g���b�v */
-					case 0x95:	/* �T���h�}�� */
-					case 0x96:	/* �t���b�V���[ */
-					case 0x97:	/* �t���[�W���O�g���b�v */
-					case 0x98:	/* �N���C���A�[�g���b�v */
-					case 0x99:	/* �g�[�L�[�{�b�N�X */
-						su->group->unit_id = 0x8c;
-						clif_changelook(bl,LOOK_BASE,su->group->unit_id);
-						su->group->limit=DIFF_TICK(tick+1500,su->group->tick);
-						su->limit=DIFF_TICK(tick+1500,su->group->tick);
-				}
-			}
-		}
-		break;
-	case BD_ENCORE:					/* �A���R�[�� */
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		if(sd)
-			skill_use_id(sd,src->id,sd->skillid_dance,sd->skilllv_dance);
-		break;
-	case AS_SPLASHER:		/* �x�i���X�v���b�V���[ */
-		if((double)battle_get_max_hp(bl)*2/3 < battle_get_hp(bl)) //HP��2/3�ȏ�c���Ă����玸�s
-			return 1;
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,skillid,src->id,0,skill_get_time(skillid,skilllv),0 );
-		break;
-	case PF_MINDBREAKER:		/* �v���{�b�N */
-		{
-			struct status_change *sc_data = battle_get_sc_data(bl);
-
-			/* MVPmob�ƕs���ɂ͌����Ȃ� */
-			if((bl->type==BL_MOB && battle_get_mode(bl)&0x20) || battle_check_undead(battle_get_race(bl),battle_get_elem_type(bl))) //�s���ɂ͌����Ȃ�
-			{
-				map_freeblock_unlock();
-				return 1;
-			}
-
-			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
-
-			if(dstmd && dstmd->skilltimer!=-1 && dstmd->state.skillcastcancel)	// �r���W�Q
-				skill_castcancel(bl,0);
-			if(dstsd && dstsd->skilltimer!=-1 && (!dstsd->special_state.no_castcancel || map[bl->m].flag.gvg)
-				&& dstsd->state.skillcastcancel	&& !dstsd->special_state.no_castcancel2)
-				skill_castcancel(bl,0);
-
-			if(sc_data){
-				if(sc_data[SC_FREEZE].timer!=-1)
-					skill_status_change_end(bl,SC_FREEZE,-1);
-				if(sc_data[SC_STONE].timer!=-1 && sc_data[SC_STONE].val2==0)
-					skill_status_change_end(bl,SC_STONE,-1);
-				if(sc_data[SC_SLEEP].timer!=-1)
-					skill_status_change_end(bl,SC_SLEEP,-1);
-			}
-
-			if(bl->type==BL_MOB) {
-				int range = skill_get_range(skillid,skilllv);
-				if(range < 0)
-					range = battle_get_range(src) - (range + 1);
-				mob_target((struct mob_data *)bl,src,range);
-			}
-		}
-		break;
-
-
-
-
-
-
-	case RG_CLEANER:	//AppleGirl
-		clif_skill_nodamage(src,bl,skillid,skilllv,1);
-		{
-			struct skill_unit *su=NULL;
-			if((bl->type==BL_SKILL) &&
-			   (su=(struct skill_unit *)bl) &&
-			   (su->group->src_id == src->id || map[bl->m].flag.pvp || map[bl->m].flag.gvg) &&
-			   (su->group->unit_id == 0xb0)){ //㩂����Ԃ�
-				if(sd)
-				skill_delunit(su);
-			}
-		}
-		break;
-	default:
-		printf("Unknown skill used:%d\n",skillid);
-		map_freeblock_unlock();
-		return 1;
-	}
-
-	map_freeblock_unlock();
-	return 0;
-}
-
-/*==========================================
- * �X�L���g�p�i�r�������AID�w��j
- *------------------------------------------
- */
-int skill_castend_id( int tid, unsigned int tick, int id,int data )
-{
-	struct map_session_data* sd = map_id2sd(id)/*,*target_sd=NULL*/;
-	struct block_list *bl;
-	int range,inf2;
-
-	nullpo_retr(0, sd);
-
-	if( sd->bl.prev == NULL ) //prev�������̂͂���Ȃ́H
-		return 0;
-
-	if(sd->skillid != SA_CASTCANCEL && sd->skilltimer != tid )	/* �^�C�}ID�̊m�F */
-		return 0;
-	if(sd->skillid != SA_CASTCANCEL && sd->skilltimer != -1 && pc_checkskill(sd,SA_FREECAST) > 0) {
-		sd->speed = sd->prev_speed;
-		clif_updatestatus(sd,SP_SPEED);
-	}
-	if(sd->skillid != SA_CASTCANCEL)
-		sd->skilltimer=-1;
-
-	if((bl=map_id2bl(sd->skilltarget))==NULL || bl->prev==NULL) {
-		sd->canact_tick = tick;
-		sd->canmove_tick = tick;
-		sd->skillitem = sd->skillitemlv = -1;
-		return 0;
-	}
-	if(sd->bl.m != bl->m || pc_isdead(sd)) { //�}�b�v���Ⴄ������������ł���
-		sd->canact_tick = tick;
-		sd->canmove_tick = tick;
-		sd->skillitem = sd->skillitemlv = -1;
-		return 0;
-	}
-
-	if(sd->skillid == PR_LEXAETERNA) {
-		struct status_change *sc_data = battle_get_sc_data(bl);
-		if(sc_data && (sc_data[SC_FREEZE].timer != -1 || (sc_data[SC_STONE].timer != -1 && sc_data[SC_STONE].val2 == 0))) {
-			clif_skill_fail(sd,sd->skillid,0,0);
-			sd->canact_tick = tick;
-			sd->canmove_tick = tick;
-			sd->skillitem = sd->skillitemlv = -1;
-			return 0;
-		}
-	}
-	else if(sd->skillid == RG_BACKSTAP) {
-		int dir = map_calc_dir(&sd->bl,bl->x,bl->y),t_dir = battle_get_dir(bl);
-		int dist = distance(sd->bl.x,sd->bl.y,bl->x,bl->y);
-		if(bl->type != BL_SKILL && (dist == 0 || map_check_dir(dir,t_dir))) {
-			clif_skill_fail(sd,sd->skillid,0,0);
-			sd->canact_tick = tick;
-			sd->canmove_tick = tick;
-			sd->skillitem = sd->skillitemlv = -1;
-			return 0;
-		}
-	}
-
-	inf2 = skill_get_inf2(sd->skillid);
-	if( ( (skill_get_inf(sd->skillid)&1) || inf2&4 ) &&	// �މ�G�Ί֌W�`�F�b�N
-		battle_check_target(&sd->bl,bl, BCT_ENEMY)<=0 ) {
-		sd->canact_tick = tick;
-		sd->canmove_tick = tick;
-		sd->skillitem = sd->skillitemlv = -1;
-		return 0;
-	}
-	if(inf2 & 0xC00 && sd->bl.id != bl->id) {
-		int fail_flag = 1;
-		if(inf2 & 0x400 && battle_check_target(&sd->bl,bl, BCT_PARTY) > 0)
-			fail_flag = 0;
-		if(inf2 & 0x800 && sd->status.guild_id > 0 && sd->status.guild_id == battle_get_guild_id(bl))
-			fail_flag = 0;
-		if(fail_flag) {
-			clif_skill_fail(sd,sd->skillid,0,0);
-			sd->canact_tick = tick;
-			sd->canmove_tick = tick;
-			sd->skillitem = sd->skillitemlv = -1;
-			return 0;
-		}
-	}
-
-	range = skill_get_range(sd->skillid,sd->skilllv);
-	if(range < 0)
-		range = battle_get_range(&sd->bl) - (range + 1);
-	range += battle_config.pc_skill_add_range;
-	if((sd->skillid == MO_EXTREMITYFIST && sd->sc_data[SC_COMBO].timer != -1 && sd->sc_data[SC_COMBO].val1 == MO_COMBOFINISH) ||
-	   (sd->skillid == CH_TIGERFIST && sd->sc_data[SC_COMBO].timer != -1 && sd->sc_data[SC_COMBO].val1 == MO_COMBOFINISH) ||
-	   (sd->skillid == CH_CHAINCRUSH && sd->sc_data[SC_COMBO].timer != -1 && sd->sc_data[SC_COMBO].val1 == MO_COMBOFINISH) ||
-	   (sd->skillid == CH_CHAINCRUSH && sd->sc_data[SC_COMBO].timer != -1 && sd->sc_data[SC_COMBO].val1 == CH_TIGERFIST))
-		range += skill_get_blewcount(MO_COMBOFINISH,sd->sc_data[SC_COMBO].val2);
-	if(battle_config.skill_out_range_consume) { // changed to allow casting when target walks out of range [Valaris]
-		if(range < distance(sd->bl.x,sd->bl.y,bl->x,bl->y)) {
-			clif_skill_fail(sd,sd->skillid,0,0);
-			sd->canact_tick = tick;
-			sd->canmove_tick = tick;
-			sd->skillitem = sd->skillitemlv = -1;
-			return 0;
-		}
-	}
-	if(!skill_check_condition(sd,1)) {		/* �g�p�����`�F�b�N */
-		sd->canact_tick = tick;
-		sd->canmove_tick = tick;
-		sd->skillitem = sd->skillitemlv = -1;
-		return 0;
-	}
-	sd->skillitem = sd->skillitemlv = -1;
-	if(battle_config.skill_out_range_consume) {
-		if(range < distance(sd->bl.x,sd->bl.y,bl->x,bl->y)) {
-			clif_skill_fail(sd,sd->skillid,0,0);
-			sd->canact_tick = tick;
-			sd->canmove_tick = tick;
-			return 0;
-		}
-	}
-
-	if(battle_config.pc_skill_log)
-		printf("PC %d skill castend skill=%d\n",sd->bl.id,sd->skillid);
-	pc_stop_walking(sd,0);
-
-	switch( skill_get_nk(sd->skillid) )
-	{
-	/* �U���n/������΂��n */
-	case 0:	case 2:
-		skill_castend_damage_id(&sd->bl,bl,sd->skillid,sd->skilllv,tick,0);
-		break;
-	case 1:/* �x���n */
-		if( (sd->skillid==AL_HEAL || (sd->skillid==ALL_RESURRECTION && bl->type != BL_PC) || sd->skillid==PR_ASPERSIO) && battle_check_undead(battle_get_race(bl),battle_get_elem_type(bl)))
-			skill_castend_damage_id(&sd->bl,bl,sd->skillid,sd->skilllv,tick,0);
-		else
-			skill_castend_nodamage_id(&sd->bl,bl,sd->skillid,sd->skilllv,tick,0);
-		break;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �X�L���g�p�i�r�������A�ꏊ�w��̎��ۂ̏����j
- *------------------------------------------
- */
-int skill_castend_pos2( struct block_list *src, int x,int y,int skillid,int skilllv,unsigned int tick,int flag)
-{
-	struct map_session_data *sd=NULL;
-	int i,tmpx = 0,tmpy = 0, x1 = 0, y1 = 0;
-
-	nullpo_retr(0, src);
-
-	if(src->type==BL_PC){
-		nullpo_retr(0, sd=(struct map_session_data *)src);
-	}
-	if( skillid != WZ_METEOR && 
-		skillid != WZ_SIGHTRASHER && 
-		skillid != AM_CANNIBALIZE &&
-		skillid != AM_SPHEREMINE)
-		clif_skill_poseffect(src,skillid,skilllv,x,y,tick);
-
-        if (skillnotok(skillid, sd)) // [MouseJstr]
-             return 0;
-
-	switch(skillid)
-	{
-	case PR_BENEDICTIO:			/* ���̍~�� */
-		skill_area_temp[1]=src->id;
-		map_foreachinarea(skill_area_sub,
-			src->m,x-1,y-1,x+1,y+1,0,
-			src,skillid,skilllv,tick, flag|BCT_NOENEMY|1,
-			skill_castend_nodamage_id);
-		map_foreachinarea(skill_area_sub,
-			src->m,x-1,y-1,x+1,y+1,0,
-			src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
-			skill_castend_damage_id);
-		break;
-
-	case BS_HAMMERFALL:			/* �n���}�[�t�H�[�� */
-		skill_area_temp[1]=src->id;
-		skill_area_temp[2]=x;
-		skill_area_temp[3]=y;
-		map_foreachinarea(skill_area_sub,
-			src->m,x-2,y-2,x+2,y+2,0,
-			src,skillid,skilllv,tick, flag|BCT_ENEMY|2,
-			skill_castend_nodamage_id);
-		break;
-
-	case HT_DETECTING:				/* �f�B�e�N�e�B���O */
-		{
-			const int range=7;
-			map_foreachinarea( skill_status_change_timer_sub,
-				src->m, src->x-range, src->y-range, src->x+range,src->y+range,0,
-				src,SC_SIGHT,tick);
-		}
-		break;
-
-	case MG_SAFETYWALL:			/* �Z�C�t�e�B�E�H�[�� */
-	case MG_FIREWALL:			/* �t�@�C���[�E�H�[�� */
-	case MG_THUNDERSTORM:		/* �T���_�[�X�g�[�� */
-	case AL_PNEUMA:				/* �j���[�} */
-	case WZ_ICEWALL:			/* �A�C�X�E�H�[�� */
-	case WZ_FIREPILLAR:			/* �t�@�C�A�s���[ */
-	case WZ_SIGHTRASHER:
-	case WZ_QUAGMIRE:			/* �N�@�O�}�C�A */
-	case WZ_VERMILION:			/* ���[�h�I�u���@�[�~���I�� */
-	case WZ_FROSTNOVA:			/* �t���X�g�m���@ */
-	case WZ_STORMGUST:			/* �X�g�[���K�X�g */
-	case WZ_HEAVENDRIVE:		/* �w�����Y�h���C�u */
-	case PR_SANCTUARY:			/* �T���N�`���A�� */
-	case PR_MAGNUS:				/* �}�O�k�X�G�N�\�V�Y�� */
-	case CR_GRANDCROSS:			/* �O�����h�N���X */
-	case HT_SKIDTRAP:			/* �X�L�b�h�g���b�v */
-	case HT_LANDMINE:			/* �����h�}�C�� */
-	case HT_ANKLESNARE:			/* �A���N���X�l�A */
-	case HT_SHOCKWAVE:			/* �V���b�N�E�F�[�u�g���b�v */
-	case HT_SANDMAN:			/* �T���h�}�� */
-	case HT_FLASHER:			/* �t���b�V���[ */
-	case HT_FREEZINGTRAP:		/* �t���[�W���O�g���b�v */
-	case HT_BLASTMINE:			/* �u���X�g�}�C�� */
-	case HT_CLAYMORETRAP:		/* �N���C���A�[�g���b�v */
-	case AS_VENOMDUST:			/* �x�m���_�X�g */
-	case AM_DEMONSTRATION:			/* �f�����X�g���[�V���� */
-	case PF_SPIDERWEB:			/* �X�p�C�_�[�E�F�b�u */
-	case PF_FOGWALL:			/* �t�H�O�E�H�[�� */
-	case HT_TALKIEBOX:			/* �g�[�L�[�{�b�N�X */
-		skill_unitsetting(src,skillid,skilllv,x,y,0);
-			break;
-	
-	case RG_GRAFFITI:			/* Graffiti [Valaris] */
-		skill_clear_unitgroup(src);
-		skill_unitsetting(src,skillid,skilllv,x,y,0);
-			break;
-
-	case SA_VOLCANO:		/* �{���P�[�m */
-	case SA_DELUGE:			/* �f�����[�W */
-	case SA_VIOLENTGALE:	/* �o�C�I�����g�Q�C�� */
-	case SA_LANDPROTECTOR:	/* �����h�v���e�N�^�[ */
-		skill_clear_element_field(src);//���Ɏ������������Ă��鑮������N���A
-		skill_unitsetting(src,skillid,skilllv,x,y,0);
-		break;
-
-	case WZ_METEOR:				//���e�I�X�g�[��
-		{
-			int flag=0;
-			for(i=0;i<2+(skilllv>>1);i++) {
-				int j=0, c;
-				do {
-					tmpx = x + (rand()%7 - 3);
-					tmpy = y + (rand()%7 - 3);
-					if(tmpx < 0)
-						tmpx = 0;
-					else if(tmpx >= map[src->m].xs)
-						tmpx = map[src->m].xs - 1;
-					if(tmpy < 0)
-						tmpy = 0;
-					else if(tmpy >= map[src->m].ys)
-						tmpy = map[src->m].ys - 1;
-					j++;
-				} while(((c=map_getcell(src->m,tmpx,tmpy))==1 || c==5) && j<100);
-				if(j >= 100)
-					continue;
-				if(flag==0){
-					clif_skill_poseffect(src,skillid,skilllv,tmpx,tmpy,tick);
-					flag=1;
-				}
-				if(i > 0)
-					skill_addtimerskill(src,tick+i*1000,0,tmpx,tmpy,skillid,skilllv,(x1<<16)|y1,flag);
-				x1 = tmpx;
-				y1 = tmpy;
-			}
-			skill_addtimerskill(src,tick+i*1000,0,tmpx,tmpy,skillid,skilllv,-1,flag);
-		}
-		break;
-
-	case AL_WARP:				/* ���[�v�|�[�^�� */
-		if(sd) {
-			if(map[sd->bl.m].flag.noteleport)	/* �e���|�֎~ */
-				break;
-			clif_skill_warppoint(sd,sd->skillid,sd->status.save_point.map,
-				(sd->skilllv>1)?sd->status.memo_point[0].map:"",
-				(sd->skilllv>2)?sd->status.memo_point[1].map:"",
-				(sd->skilllv>3)?sd->status.memo_point[2].map:"");
-		}
-		break;
-	case MO_BODYRELOCATION:
-		if(sd){
-			pc_movepos(sd,x,y);
-		}else if( src->type==BL_MOB )
-			mob_warp((struct mob_data *)src,-1,x,y,0);
-		break;
-	case AM_CANNIBALIZE:	// �o�C�I�v�����g
-		if(sd){
-			int mx,my,id=0;
-			struct mob_data *md;
-
-			mx = x;// + (rand()%10 - 5);
-			my = y;// + (rand()%10 - 5);
-			id=mob_once_spawn(sd,"this",mx,my,"--ja--",1118,1,"");
-			if( (md=(struct mob_data *)map_id2bl(id)) !=NULL ){
-				md->master_id=sd->bl.id;
-				md->hp=2210+skilllv*200;
-				md->state.special_mob_ai=1;
-				md->deletetimer=add_timer(gettick()+skill_get_time(skillid,skilllv),mob_timer_delete,id,0);
-			}
-			clif_skill_poseffect(src,skillid,skilllv,x,y,tick);
-		}
-		break;
-	case AM_SPHEREMINE:	// �X�t�B�A�[�}�C��
-		if(sd){
-			int mx,my,id=0;
-			struct mob_data *md;
-
-			mx = x;// + (rand()%10 - 5);
-			my = y;// + (rand()%10 - 5);
-			id=mob_once_spawn(sd,"this",mx,my,"--ja--",1142,1,"");
-			if( (md=(struct mob_data *)map_id2bl(id)) !=NULL ){
-				md->master_id=sd->bl.id;
-				md->hp=1000+skilllv*200;
-				md->state.special_mob_ai=2;
-				md->deletetimer=add_timer(gettick()+skill_get_time(skillid,skilllv),mob_timer_delete,id,0);
-			}
-			clif_skill_poseffect(src,skillid,skilllv,x,y,tick);
-		}
-		break;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �X�L���g�p�i�r�������Amap�w��j
- *------------------------------------------
- */
-int skill_castend_map( struct map_session_data *sd,int skill_num, const char *map)
-{
-	int x=0,y=0;
-
-	nullpo_retr(0, sd);
-	if( sd->bl.prev == NULL || pc_isdead(sd) )
-		return 0;
-
-	if( sd->opt1>0 || sd->status.option&2 )
-		return 0;
-	//�X�L�����g���Ȃ���Ԉُ풆
-	if(sd->sc_data){
-		if( sd->sc_data[SC_DIVINA].timer!=-1 ||
-			sd->sc_data[SC_ROKISWEIL].timer!=-1 ||
-			sd->sc_data[SC_AUTOCOUNTER].timer != -1 ||
-			sd->sc_data[SC_STEELBODY].timer != -1 ||
-			sd->sc_data[SC_DANCING].timer!=-1 ||
-			sd->sc_data[SC_BERSERK].timer != -1 )
-			return 0;
-	}
-
-	if( skill_num != sd->skillid)	/* �s���p�P�b�g�炵�� */
-		return 0;
-
-	pc_stopattack(sd);
-
-	if(battle_config.pc_skill_log)
-		printf("PC %d skill castend skill =%d map=%s\n",sd->bl.id,skill_num,map);
-	pc_stop_walking(sd,0);
-
-	if(strcmp(map,"cancel")==0)
-		return 0;
-
-	switch(skill_num){
-	case AL_TELEPORT:		/* �e���|�[�g */
-		if(strcmp(map,"Random")==0)
-			pc_randomwarp(sd,3);
-		else
-			pc_setpos(sd,sd->status.save_point.map,
-				sd->status.save_point.x,sd->status.save_point.y,3);
-		break;
-
-	case AL_WARP:			/* ���[�v�|�[�^�� */
-		{
-			const struct point *p[]={
-				&sd->status.save_point,&sd->status.memo_point[0],
-				&sd->status.memo_point[1],&sd->status.memo_point[2],
-			};
-			struct skill_unit_group *group;
-			int i;
-			int maxcount=0;
-
-			if((maxcount = skill_get_maxcount(sd->skillid)) > 0) {
-				int c;
-				for(i=c=0;i<MAX_SKILLUNITGROUP;i++) {
-					if(sd->skillunit[i].alive_count > 0 && sd->skillunit[i].skill_id == sd->skillid)
-						c++;
-				}
-				if(c >= maxcount) {
-					clif_skill_fail(sd,sd->skillid,0,0);
-					sd->canact_tick = gettick();
-					sd->canmove_tick = gettick();
-					sd->skillitem = sd->skillitemlv = -1;
-					return 0;
-				}
-			}
-
-			for(i=0;i<sd->skilllv;i++){
-				if(strcmp(map,p[i]->map)==0){
-					x=p[i]->x;
-					y=p[i]->y;
-					break;
-				}
-			}
-			if(x==0 || y==0)	/* �s���p�P�b�g�H */
-				return 0;
-
-			if(!skill_check_condition(sd,3))
-				return 0;
-			if((group=skill_unitsetting(&sd->bl,sd->skillid,sd->skilllv,sd->skillx,sd->skilly,0))==NULL)
-				return 0;
-			group->valstr=(char *)aCalloc(24,sizeof(char));
-			memcpy(group->valstr,map,24);
-			group->val2=(x<<16)|y;
-		}
-		break;
-	}
-
-	return 0;
-}
-
-/*==========================================
- * �X�L�����j�b�g�ݒ菈��
- *------------------------------------------
- */
-struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,int skilllv,int x,int y,int flag)
-{
-	struct skill_unit_group *group;
-	int i,count=1,limit=10000,val1=0,val2=0;
-	int target=BCT_ENEMY,interval=1000,range=0;
-	int dir=0,aoe_diameter=0;	// -- aoe_diameter (moonsoul) added for sage Area Of Effect skills
-
-	nullpo_retr(0, src);
-
-	switch(skillid){	/* �ݒ� */
-
-	case MG_SAFETYWALL:			/* �Z�C�t�e�B�E�H�[�� */
-		limit=skill_get_time(skillid,skilllv);
-		val2=skilllv+1;
-		interval = -1;
-		target=(battle_config.defnotenemy)?BCT_NOENEMY:BCT_ALL;
-		break;
-
-	case MG_FIREWALL:			/* �t�@�C���[�E�H�[�� */
-		if(src->x == x && src->y == y)
-			dir = 2;
-		else
-			dir=map_calc_dir(src,x,y);
-		if(dir&1) count=5;
-		else count=3;
-		limit=skill_get_time(skillid,skilllv);
-		val2=4+skilllv;
-		interval=1;
-		break;
-
-	case AL_PNEUMA:				/* �j���[�} */
-		limit=skill_get_time(skillid,skilllv);
-		interval = -1;
-		target=(battle_config.defnotenemy)?BCT_NOENEMY:BCT_ALL;
-		count = 9;
-		break;
-
-	case AL_WARP:				/* ���[�v�|�[�^�� */
-		target=BCT_ALL;
-		val1=skilllv+6;
-		if(flag==0)
-			limit=2000;
-		else
-			limit=skill_get_time(skillid,skilllv);
-		break;
-
-	case PR_SANCTUARY:			/* �T���N�`���A�� */
-		count=21;
-		limit=skill_get_time(skillid,skilllv);
-		val1=skilllv+3;
-		val2=(skilllv>6)?777:skilllv*100;
-		target=BCT_ALL;
-		range=1;
-		break;
-
-	case PR_MAGNUS:				/* �}�O�k�X�G�N�\�V�Y�� */
-		count=33;
-		limit=skill_get_time(skillid,skilllv);
-		interval=3000;
-		break;
-
-	case WZ_FIREPILLAR:			/* �t�@�C�A�[�s���[ */
-		if(flag==0)
-			limit=skill_get_time(skillid,skilllv);
-		else
-			limit=1000;
-		interval=2000;
-		val1=skilllv+2;
-		range=1;
-		break;
-
-	case MG_THUNDERSTORM:		/* �T���_�[�X�g�[�� */
-		limit=500;
-		range=1;
-		break;
-
-	case WZ_FROSTNOVA:		/* �t���X�g�m���@ */
-		limit=500;
-		range=5;
-		break;
-	case WZ_HEAVENDRIVE:		/* �w�����Y�h���C�u */
-		limit=500;
-		range=2;
-		break;
-
-	case WZ_METEOR:				/* ���e�I�X�g�[�� */
-		limit=500;
-		range=3;
-		break;
-
-	case WZ_SIGHTRASHER:
-		limit=500;
-		count=41;
-		break;
-
-	case WZ_VERMILION:			/* ���[�h�I�u���@�[�~���I�� */
-		limit=4100;
-		interval=1000;
-		range=6;
-		break;
-
-	case WZ_ICEWALL:			/* �A�C�X�E�H�[�� */
-		limit=skill_get_time(skillid,skilllv);
-		count=5;
-		break;
-
-	case WZ_STORMGUST:			/* �X�g�[���K�X�g */
-		limit=4600;
-		interval=450;
-		range=5;
-		break;
-
-	case WZ_QUAGMIRE:			/* �N�@�O�}�C�A */
-		limit=skill_get_time(skillid,skilllv);
-		interval=200;
-		count=25;
-		break;
-
-	case HT_SKIDTRAP:			/* �X�L�b�h�g���b�v */
-	case HT_LANDMINE:			/* �����h�}�C�� */
-	case HT_ANKLESNARE:			/* �A���N���X�l�A */
-	case HT_SANDMAN:			/* �T���h�}�� */
-	case PF_SPIDERWEB:			/* �X�p�C�_�[�E�F�b�u */
-	case HT_FLASHER:			/* �t���b�V���[ */
-	case HT_FREEZINGTRAP:		/* �t���[�W���O�g���b�v */
-	case HT_BLASTMINE:			/* �u���X�g�}�C�� */
-	case HT_CLAYMORETRAP:		/* �N���C���A�[�g���b�v */
-		limit=skill_get_time(skillid,skilllv);
-		range=1;
-		break;
-
-	case HT_TALKIEBOX:			/* �g�[�L�[�{�b�N�X */
-		limit=skill_get_time(skillid,skilllv);
-		range=1;
-		target=BCT_ALL;
-		break;
-
-	case HT_SHOCKWAVE:			/* �V���b�N�E�F�[�u�g���b�v */
-		limit=skill_get_time(skillid,skilllv);
-		range=1;
-		val1=skilllv*15+10;
-		break;
-
-	case AS_VENOMDUST:			/* �x�m���_�X�g */
-		limit=skill_get_time(skillid,skilllv);
-		interval=1000;
-		count=5;
-		break;
-
-	case CR_GRANDCROSS:			/* �O�����h�N���X */
-		count=29;
-		limit=1000;
-		interval=300;
-		break;
-
-	case SA_VOLCANO:			/* �{���P�[�m */
-	case SA_DELUGE:				/* �f�����[�W */
-	case SA_VIOLENTGALE:				/* �o�C�I�����g�Q�C�� */
-		limit=skill_get_time(skillid,skilllv);
-		count=skilllv<=2?25:(skilllv<=4?49:81);
-		target=BCT_ALL;
-		break;
-
-	case SA_LANDPROTECTOR:	/* �O�����h�N���X */
-		limit=skill_get_time(skillid,skilllv);	// changed to get duration from cast_db (moonsoul)
-		val1=skilllv*15+10;
-		aoe_diameter=skilllv+skilllv%2+5;
-		target=BCT_ALL;
-		count=aoe_diameter*aoe_diameter;	// -- this will not function if changed to ^2 (moonsoul)
-		break;
-
-	case BD_LULLABY:			/* �q��S */
-	case BD_ETERNALCHAOS:		/* �G�^�[�i���J�I�X */
-	case BD_ROKISWEIL:			/* ���L�̋��� */
-		count=81;
-		limit=skill_get_time(skillid,skilllv);
-		range=5;
-		target=BCT_ALL;
-		break;
-	case BD_RICHMANKIM:
-	case BD_DRUMBATTLEFIELD:	/* �푾�ۂ̋��� */
-	case BD_RINGNIBELUNGEN:		/* �j�[�x�����O�̎w�� */
-	case BD_INTOABYSS:			/* �[���̒��� */
-	case BD_SIEGFRIED:			/* �s���g�̃W�[�N�t���[�h */
-		count=81;
-		limit=skill_get_time(skillid,skilllv);
-		range=5;
-		target=BCT_PARTY;
-		break;
-
-	case BA_WHISTLE:			/* ���J */
-		count=49;
-		limit=skill_get_time(skillid,skilllv);
-		range=5;
-		target=BCT_NOENEMY;
-		if(src->type == BL_PC)
-			val1 = (pc_checkskill((struct map_session_data *)src,BA_MUSICALLESSON)+1)>>1;
-		val2 = ((battle_get_agi(src)/10)&0xffff)<<16;
-		val2 |= (battle_get_luk(src)/10)&0xffff;
-		break;
-	case DC_HUMMING:			/* �n�~���O */
-		count=49;
-		limit=skill_get_time(skillid,skilllv);
-		range=5;
-		target=BCT_NOENEMY;
-		if(src->type == BL_PC)
-			val1 = (pc_checkskill((struct map_session_data *)src,DC_DANCINGLESSON)+1)>>1;
-		val2 = battle_get_dex(src)/10;
-		break;
-
-	case BA_DISSONANCE:			/* �s���a�� */
-	case DC_UGLYDANCE:			/* ��������ȃ_���X */
-		count=49;
-		limit=skill_get_time(skillid,skilllv);
-		range=5;
-		target=BCT_ENEMY;
-		break;
-
-	case DC_DONTFORGETME:		/* ����Y��Ȃ��Łc */
-		count=49;
-		limit=skill_get_time(skillid,skilllv);
-		range=5;
-		target=BCT_ENEMY;
-		if(src->type == BL_PC)
-			val1 = (pc_checkskill((struct map_session_data *)src,DC_DANCINGLESSON)+1)>>1;
-		val2 = ((battle_get_str(src)/20)&0xffff)<<16;
-		val2 |= (battle_get_agi(src)/10)&0xffff;
-		break;
-	case BA_POEMBRAGI:			/* �u���M�̎� */
-		count=49;
-		limit=skill_get_time(skillid,skilllv);
-		range=5;
-		target=BCT_NOENEMY;
-		if(src->type == BL_PC)
-			val1 = pc_checkskill((struct map_session_data *)src,BA_MUSICALLESSON);
-		val2 = ((battle_get_dex(src)/10)&0xffff)<<16;
-		val2 |= (battle_get_int(src)/5)&0xffff;
-		break;
-	case BA_APPLEIDUN:			/* �C�h�D���̗ь� */
-		count=49;
-		limit=skill_get_time(skillid,skilllv);
-		range=5;
-		target=BCT_NOENEMY;
-		if(src->type == BL_PC)
-			val1 = ((pc_checkskill((struct map_session_data *)src,BA_MUSICALLESSON))&0xffff)<<16;
-		else
-			val1 = 0;
-		val1 |= (battle_get_vit(src))&0xffff;
-		val2 = 0;//�񕜗p�^�C���J�E���^(6�b����1����)
-		break;
-	case DC_SERVICEFORYOU:		/* �T�[�r�X�t�H�[���[ */
-		count=49;
-		limit=skill_get_time(skillid,skilllv);
-		range=5;
-		target=BCT_PARTY;
-		if(src->type == BL_PC)
-			val1 = (pc_checkskill((struct map_session_data *)src,DC_DANCINGLESSON)+1)>>1;
-		val2 = battle_get_int(src)/10;
-		break;
-	case BA_ASSASSINCROSS:		/* �[�z�̃A�T�V���N���X */
-		count=49;
-		limit=skill_get_time(skillid,skilllv);
-		range=5;
-		target=BCT_NOENEMY;
-		if(src->type == BL_PC)
-			val1 = (pc_checkskill((struct map_session_data *)src,BA_MUSICALLESSON)+1)>>1;
-		val2 = battle_get_agi(src)/20;
-		break;
-	case DC_FORTUNEKISS:		/* �K�^�̃L�X */
-		count=49;
-		limit=skill_get_time(skillid,skilllv);
-		range=5;
-		target=BCT_NOENEMY;
-		if(src->type == BL_PC)
-			val1 = (pc_checkskill((struct map_session_data *)src,DC_DANCINGLESSON)+1)>>1;
-		val2 = battle_get_luk(src)/10;
-		break;
-	case AM_DEMONSTRATION:		/* �f�����X�g���[�V���� */
-		limit=skill_get_time(skillid,skilllv);
-		interval=1000;
-		range=1;
-		target=BCT_ENEMY;
-		break;
-	case WE_CALLPARTNER:		/* ���Ȃ��Ɉ������� */
-		limit=skill_get_time(skillid,skilllv);
-		range=-1;
-		break;
-
-	case HP_BASILICA:			/* �o�W���J */
-		limit=skill_get_time(skillid,skilllv);
-		target=BCT_ALL;
-		range=3;
-                //Fix to prevent the priest from walking while Basilica is up.
-                battle_stopwalking(src,1);
-                skill_status_change_start(src,SC_ANKLE,skilllv,0,0,0,limit,0);
-		break;
-	case PA_GOSPEL:		/* �S�X�y�� */
-		count=49;
-		target=BCT_PARTY;
-		limit=skill_get_time(skillid,skilllv);
-		break;
-	case PF_FOGWALL:	/* �t�H�O�E�H�[�� */
-		count=15;
-		limit=skill_get_time(skillid,skilllv);
-		break;
-	case RG_GRAFFITI:			/* Graffiti */
-		count=1;	// Leave this at 1 [Valaris]
-		limit=600000;	// Time length [Valaris]
-		break;
-	};
-
-	nullpo_retr(NULL, group=skill_initunitgroup(src,count,skillid,skilllv,skill_get_unit_id(skillid,flag&1)));
-	group->limit=limit;
-	group->val1=val1;
-	group->val2=val2;
-	group->target_flag=target;
-	group->interval=interval;
-	group->range=range;
-	if(skillid==HT_TALKIEBOX ||
-	   skillid==RG_GRAFFITI){
-		group->valstr=calloc(80, 1);
-		if(group->valstr==NULL){
-			printf("skill_castend_map: out of memory !\n");
-			exit(1);
-		}
-		memcpy(group->valstr,talkie_mes,80);
-	}
-	for(i=0;i<count;i++){
-		struct skill_unit *unit;
-		int ux=x,uy=y,val1=skilllv,val2=0,limit=group->limit,alive=1;
-		int range=group->range;
-		switch(skillid){	/* �ݒ� */
-		case AL_PNEUMA:				/* �j���[�} */
-			{
-				static const int dx[9]={-1, 0, 1,-1, 0, 1,-1, 0, 1};
-				static const int dy[9]={-1,-1,-1, 0, 0, 0, 1, 1, 1};
-				ux+=dx[i];
-				uy+=dy[i];
-			}
-			break;
-		case MG_FIREWALL:		/* �t�@�C���[�E�H�[�� */
-			{
-				if(dir&1){	/* �΂ߔz�u */
-					static const int dx[][5]={
-						{ 1,1,0,0,-1 }, { -1,-1,0,0,1 },
-					},dy[][5]={
-						{ 1,0,0,-1,-1 }, { 1,0,0,-1,-1 },
-					};
-					ux+=dx[(dir>>1)&1][i];
-					uy+=dy[(dir>>1)&1][i];
-				}else{	/* �㉺�z�u */
-					if(dir%4==0)	/* �㉺ */
-						ux+=i-1;
-					else			/* ���E */
-						uy+=i-1;
-				}
-				val2=group->val2;
-			}
-			break;
-
-		case PR_SANCTUARY:		/* �T���N�`���A�� */
-			{
-				static const int dx[]={
-					-1,0,1, -2,-1,0,1,2, -2,-1,0,1,2, -2,-1,0,1,2, -1,0,1 };
-				static const int dy[]={
-					-2,-2,-2, -1,-1,-1,-1,-1, 0,0,0,0,0, 1,1,1,1,1, 2,2,2, };
-				ux+=dx[i];
-				uy+=dy[i];
-			}
-			break;
-
-		case PR_MAGNUS:			/* �}�O�k�X�G�N�\�V�Y�� */
-			{
-				static const int dx[]={ -1,0,1, -1,0,1, -3,-2,-1,0,1,2,3,
-					-3,-2,-1,0,1,2,3, -3,-2,-1,0,1,2,3, -1,0,1, -1,0,1, };
-				static const int dy[]={
-					-3,-3,-3, -2,-2,-2, -1,-1,-1,-1,-1,-1,-1,
-					0,0,0,0,0,0,0, 1,1,1,1,1,1,1, 2,2,2, 3,3,3 };
-				ux+=dx[i];
-				uy+=dy[i];
-			}
-			break;
-
-		case WZ_SIGHTRASHER:
-			{
-				static const int dx[]={
-					-5, 0, 5, -4, 0, 4, -3, 0, 3, -2, 0, 2, -1, 0, 1, -5,-4,-3,-2,-1, 0, 1, 2, 3, 4, 5, -1, 0, 1, -2, 0, 2, -3, 0, 3, -4, 0, 4, -5, 0, 5 };
-				static const int dy[]={
-					-5,-5,-5, -4,-4,-4, -3,-3,-3, -2,-2,-2, -1,-1,-1,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  1, 1, 1,  2, 2, 2,  3, 3, 3,  4, 4, 4,  5, 5, 5 };
-				ux+=dx[i];
-				uy+=dy[i];
-			}
-			break;
-
-		case WZ_ICEWALL:		/* �A�C�X�E�H�[�� */
-			{
-				static const int dirx[8]={0,-1,-1,-1,0,1,1,1};
-				static const int diry[8]={1,1,0,-1,-1,-1,0,1};
-				if(skilllv <= 1)
-					val1 = 500;
-				else
-					val1 = 200 + 200*skilllv;
-				if(src->x == x && src->y == y)
-					dir = 2;
-				else
-					dir=map_calc_dir(src,x,y);
-				ux+=(2-i)*diry[dir];
-				uy+=(i-2)*dirx[dir];
-			}
-			break;
-
-		case WZ_QUAGMIRE:		/* �N�@�O�}�C�A */
-			ux+=(i%5-2);
-			uy+=(i/5-2);
-			if(i==12)
-				range=2;
-			else
-				range=-1;
-
-			break;
-
-		case AS_VENOMDUST:		/* �x�m���_�X�g */
-			{
-				static const int dx[]={-1,0,0,0,1};
-				static const int dy[]={0,-1,0,1,0};
-				ux+=dx[i];
-				uy+=dy[i];
-			}
-			break;
-
-		case CR_GRANDCROSS:		/* �O�����h�N���X */
-			{
-				static const int dx[]={
-					0, 0, -1,0,1, -2,-1,0,1,2, -4,-3,-2,-1,0,1,2,3,4, -2,-1,0,1,2, -1,0,1, 0, 0, };
-				static const int dy[]={
-					-4, -3, -2,-2,-2, -1,-1,-1,-1,-1, 0,0,0,0,0,0,0,0,0, 1,1,1,1,1, 2,2,2, 3, 4, };
-				ux+=dx[i];
-				uy+=dy[i];
-			}
-			break;
-		case SA_VOLCANO:			/* �{���P�[�m */
-		case SA_DELUGE:				/* �f�����[�W */
-		case SA_VIOLENTGALE:				/* �o�C�I�����g�Q�C�� */
-			{
-				int u_range=0,central=0;
-				if(skilllv<=2){
-					u_range=2;
-					central=12;
-				}else if(skilllv<=4){
-					u_range=3;
-					central=24;
-				}else if(skilllv>=5){
-					u_range=4;
-					central=40;
-				}
-				ux+=(i%(u_range*2+1)-u_range);
-				uy+=(i/(u_range*2+1)-u_range);
-
-				if(i==central)
-					range=u_range;//�����̃��j�b�g�̌��ʔ͈͂͑S�͈�
-				else
-					range=-1;//�����ȊO�̃��j�b�g�͏���
-			}
-			break;
-		case SA_LANDPROTECTOR:				/* �����h�v���e�N�^�[ */
-			{
-				int u_range=0;
-
-				if(skilllv<=2) u_range=3;
-				else if(skilllv<=4) u_range=4;
-				else if(skilllv>=5) u_range=5;
-
-				ux+=(i%(u_range*2+1)-u_range);
-				uy+=(i/(u_range*2+1)-u_range);
-
-				range=0;
-			}
-			break;
-
-		/* �_���X�Ȃ� */
-		case BD_LULLABY:		/* �q��� */
-		case BD_RICHMANKIM:		/* �j�����h�̉� */
-		case BD_ETERNALCHAOS:	/* �i���̍��� */
-		case BD_DRUMBATTLEFIELD:/* �푾�ۂ̋��� */
-		case BD_RINGNIBELUNGEN:	/* �j�[�x�����O�̎w�� */
-		case BD_ROKISWEIL:		/* ���L�̋��� */
-		case BD_INTOABYSS:		/* �[���̒��� */
-		case BD_SIEGFRIED:		/* �s���g�̃W�[�N�t���[�h */
-			ux+=(i%9-4);
-			uy+=(i/9-4);
-			if(i==40)
-				range=4;	/* ���S�̏ꍇ�͔͈͂�4�ɃI�[�o�[���C�h */
-			else
-				range=-1;	/* ���S����Ȃ��ꍇ�͔͈͂�-1�ɃI�[�o�[���C�h */
-			break;
-		case BA_DISSONANCE:		/* �s���a�� */
-		case BA_WHISTLE:		/* ���J */
-		case BA_ASSASSINCROSS:	/* �[�z�̃A�T�V���N���X */
-		case BA_POEMBRAGI:		/* �u���M�̎� */
-		case BA_APPLEIDUN:		/* �C�h�D���̗ь� */
-		case DC_UGLYDANCE:		/* ��������ȃ_���X */
-		case DC_HUMMING:		/* �n�~���O */
-		case DC_DONTFORGETME:	/* ����Y��Ȃ��Łc */
-		case DC_FORTUNEKISS:	/* �K�^�̃L�X */
-		case DC_SERVICEFORYOU:	/* �T�[�r�X�t�H�[���[ */
-			ux+=(i%7-3);
-			uy+=(i/7-3);
-			if(i==40)
-				range=4;	/* ���S�̏ꍇ�͔͈͂�4�ɃI�[�o�[���C�h */
-			else
-				range=-1;	/* ���S����Ȃ��ꍇ�͔͈͂�-1�ɃI�[�o�[���C�h */
-			break;
-		case PA_GOSPEL:		/* �S�X�y�� */
-			ux+=(i%7-3);
-			uy+=(i/7-3);
-			break;
-		case PF_FOGWALL:	/* �t�H�O�E�H�[�� */
-			ux+=(i%5-2);
-			uy+=(i/5-1);
-			break;
-		case RG_GRAFFITI:	/* Graffiti [Valaris] */
-			ux+=(i%5-2);
-			uy+=(i/5-2);
-			break;
-		}
-		//����X�L���̏ꍇ�ݒu���W��Ƀ����h�v���e�N�^�[���Ȃ����`�F�b�N
-		if(range<=0)
-			map_foreachinarea(skill_landprotector,src->m,ux,uy,ux,uy,BL_SKILL,skillid,&alive);
-
-		if(skillid==WZ_ICEWALL && alive){
-			val2=map_getcell(src->m,ux,uy);
-			if(val2==5 || val2==1)
-				alive=0;
-			else {
-				map_setcell(src->m,ux,uy,5);
-				clif_changemapcell(src->m,ux,uy,5,0);
-			}
-		}
-
-		if(alive){
-			nullpo_retr(NULL, unit=skill_initunit(group,i,ux,uy));
-			unit->val1=val1;
-			unit->val2=val2;
-			unit->limit=limit;
-			unit->range=range;
-		}
-	}
-	return group;
-}
-
-/*==========================================
- * �X�L�����j�b�g�̔����C�x���g
- *------------------------------------------
- */
-int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int tick)
-{
-	struct skill_unit_group *sg;
-	struct block_list *ss;
-	struct skill_unit_group_tickset *ts;
-	struct map_session_data *srcsd=NULL;
-	int diff,goflag,splash_count=0;
-
-	nullpo_retr(0, src);
-	nullpo_retr(0, bl);
-
-	if( bl->prev==NULL || !src->alive || (bl->type == BL_PC && pc_isdead((struct map_session_data *)bl) ) )
-		return 0;
-
-	nullpo_retr(0, sg=src->group);
-	nullpo_retr(0, ss=map_id2bl(sg->src_id));
-
-	if(ss->type == BL_PC)
-		nullpo_retr(0, srcsd=(struct map_session_data *)ss);
-	if(srcsd && srcsd->chatID)
-		return 0;
-
-	if( bl->type!=BL_PC && bl->type!=BL_MOB )
-		return 0;
-	nullpo_retr(0, ts=skill_unitgrouptickset_search( bl, sg->group_id));
-	diff=DIFF_TICK(tick,ts->tick);
-	goflag=(diff>sg->interval || diff<0);
-	if (sg->skill_id == CR_GRANDCROSS && !battle_config.gx_allhit) // �d�Ȃ��Ă�����3HIT���Ȃ�
-		goflag = (diff>sg->interval*map_count_oncell(bl->m,bl->x,bl->y) || diff<0);
-
-	//�Ώۂ�LP��ɋ���ꍇ�͖���
-	map_foreachinarea(skill_landprotector,bl->m,bl->x,bl->y,bl->x,bl->y,BL_SKILL,0,&goflag);
-
-	if(!goflag)
-		return 0;
-	ts->tick=tick;
-	ts->group_id=sg->group_id;
-
-	switch(sg->unit_id){
-	case 0x83:	/* �T���N�`���A�� */
-		{
-			int race=battle_get_race(bl);
-			int damage_flag = (battle_check_undead(race,battle_get_elem_type(bl)) || race == 6)? 1:0;
-
-			if( battle_get_hp(bl)>=battle_get_max_hp(bl) && !damage_flag)
-				break;
-
-			if((sg->val1--)<=0){
-				skill_delunitgroup(sg);
-				return 0;
-			}
-			if(!damage_flag) {
-				int heal=sg->val2;
-				if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage)
-					heal=0;	/* ����峃J�[�h�i�q�[���ʂO�j */
-				clif_skill_nodamage(&src->bl,bl,AL_HEAL,heal,1);
-				battle_heal(NULL,bl,heal,0,0);
-			}
-			else
-				skill_attack(BF_MAGIC,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
-		}
-		break;
-
-	case 0x84:	/* �}�O�k�X�G�N�\�V�Y�� */
-		{
-			int race=battle_get_race(bl);
-			int damage_flag = (battle_check_undead(race,battle_get_elem_type(bl)) || race == 6)? 1:0;
-
-			if(!damage_flag)
-				return 0;
-			skill_attack(BF_MAGIC,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
-		}
-		break;
-
-	case 0x85:	/* �j���[�} */
-		{
-			struct skill_unit *unit2;
-			struct status_change *sc_data=battle_get_sc_data(bl);
-			int type=SC_PNEUMA;
-			if(sc_data && sc_data[type].timer==-1)
-				skill_status_change_start(bl,type,sg->skill_lv,(int)src,0,0,0,0);
-			else if((unit2=(struct skill_unit *)sc_data[type].val2) && unit2 != src ){
-				if(DIFF_TICK(sg->tick,unit2->group->tick)>0 )
-					skill_status_change_start(bl,type,sg->skill_lv,(int)src,0,0,0,0);
-				ts->tick-=sg->interval;
-			}
-		}
-		break;
-	case 0x7e:	/* �Z�C�t�e�B�E�H�[�� */
-		{
-			struct skill_unit *unit2;
-			struct status_change *sc_data=battle_get_sc_data(bl);
-			int type=SC_SAFETYWALL;
-			if(sc_data && sc_data[type].timer==-1)
-				skill_status_change_start(bl,type,sg->skill_lv,(int)src,0,0,0,0);
-			else if((unit2=(struct skill_unit *)sc_data[type].val2) && unit2 != src ){
-				if(sg->val1 < unit2->group->val1 )
-					skill_status_change_start(bl,type,sg->skill_lv,(int)src,0,0,0,0);
-				ts->tick-=sg->interval;
-			}
-		}
-		break;
-
-	case 0x86:	/* ���[�h�I�u���@�[�~���I��(���X�g�[���K�X�g ���O�����h�N���X) */
-		skill_attack(BF_MAGIC,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
-		break;
-
-	case 0x7f:	/* �t�@�C���[�E�H�[�� */
-		if( (src->val2--)>0)
-			skill_attack(BF_MAGIC,ss,&src->bl,bl,
-				sg->skill_id,sg->skill_lv,tick,0);
-		if( src->val2<=0 )
-			skill_delunit(src);
-		break;
-
-	case 0x87:	/* �t�@�C�A�[�s���[(�����O) */
-		skill_delunit(src);
-		skill_unitsetting(ss,sg->skill_id,sg->skill_lv,src->bl.x,src->bl.y,1);
-		break;
-
-	case 0x88:	/* �t�@�C�A�[�s���[(������) */
-		if(DIFF_TICK(tick,sg->tick) < 150)
-			skill_attack(BF_MAGIC,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
-		break;
-
-	case 0x90:	/* �X�L�b�h�g���b�v */
-		{
-			int i,c = skill_get_blewcount(sg->skill_id,sg->skill_lv);
-			if(map[bl->m].flag.gvg) c = 0;
-			for(i=0;i<c;i++)
-				skill_blown(&src->bl,bl,1|0x30000);
-			sg->unit_id = 0x8c;
-			clif_changelook(&src->bl,LOOK_BASE,sg->unit_id);
-			sg->limit=DIFF_TICK(tick,sg->tick)+1500;
-		}
-		break;
-
-	case 0x93:	/* �����h�}�C�� */
-		skill_attack(BF_MISC,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
-		sg->unit_id = 0x8c;
-		clif_changelook(&src->bl,LOOK_BASE,0x88);
-		sg->limit=DIFF_TICK(tick,sg->tick)+1500;
-		break;
-
-	case 0x8f:	/* �u���X�g�}�C�� */
-	case 0x94:	/* �V���b�N�E�F�[�u�g���b�v */
-	case 0x95:	/* �T���h�}�� */
-	case 0x96:	/* �t���b�V���[ */
-	case 0x97:	/* �t���[�W���O�g���b�v */
-	case 0x98:	/* �N���C���A�[�g���b�v */
-		map_foreachinarea(skill_count_target,src->bl.m
-					,src->bl.x-src->range,src->bl.y-src->range
-					,src->bl.x+src->range,src->bl.y+src->range
-					,0,&src->bl,&splash_count);
-		map_foreachinarea(skill_trap_splash,src->bl.m
-					,src->bl.x-src->range,src->bl.y-src->range
-					,src->bl.x+src->range,src->bl.y+src->range
-					,0,&src->bl,tick,splash_count);
-		sg->unit_id = 0x8c;
-		clif_changelook(&src->bl,LOOK_BASE,sg->unit_id);
-		sg->limit=DIFF_TICK(tick,sg->tick)+1500;
-		break;
-
-	case 0x91:	/* �A���N���X�l�A */
-		{
-			struct status_change *sc_data=battle_get_sc_data(bl);
-			if(sg->val2==0 && sc_data && sc_data[SC_ANKLE].timer==-1){
-			int moveblock = ( bl->x/BLOCK_SIZE != src->bl.x/BLOCK_SIZE || bl->y/BLOCK_SIZE != src->bl.y/BLOCK_SIZE);
-				int sec=skill_get_time2(sg->skill_id,sg->skill_lv) - (double)battle_get_agi(bl)*0.1;
-				if(battle_get_mode(bl)&0x20)
-					sec = sec/5;
-				battle_stopwalking(bl,1);
-				skill_status_change_start(bl,SC_ANKLE,sg->skill_lv,0,0,0,sec,0);
-	
-			if(moveblock) map_delblock(bl);
-				bl->x = src->bl.x;
-				bl->y = src->bl.y;
-			if(moveblock) map_addblock(bl);
-			if(bl->type == BL_MOB)
-				clif_fixmobpos((struct mob_data *)bl);
-			else if(bl->type == BL_PET)
-				clif_fixpetpos((struct pet_data *)bl);
-			else
-				clif_fixpos(bl);
-			clif_01ac(&src->bl);
-				sg->limit=DIFF_TICK(tick,sg->tick) + sec;
-			sg->val2=bl->id;
-		}
-		}
-		break;
-
-	case 0x80:	/* ���[�v�|�[�^��(������) */
-		if(bl->type==BL_PC){
-			struct map_session_data *sd = (struct map_session_data *)bl;
-			if(sd && src->bl.m == bl->m && src->bl.x == bl->x && src->bl.y == bl->y && src->bl.x == sd->to_x && src->bl.y == sd->to_y) {
-				if( battle_config.chat_warpportal || !sd->chatID ){
-					if((sg->val1--)>0){
-						pc_setpos(sd,sg->valstr,sg->val2>>16,sg->val2&0xffff,3);
-						if(sg->src_id == bl->id ||( strcmp(map[src->bl.m].name,sg->valstr) == 0	&& src->bl.x == (sg->val2>>16) && src->bl.y == (sg->val2&0xffff) ))
-							skill_delunitgroup(sg);
-					}else
-						skill_delunitgroup(sg);
-				}
-			}
-		}else if(bl->type==BL_MOB && battle_config.mob_warpportal){
-			int m=map_mapname2mapid(sg->valstr);
-			struct mob_data *md;
-			md=(struct mob_data *)bl;
-			mob_warp((struct mob_data *)bl,m,sg->val2>>16,sg->val2&0xffff,3);
-		}
-		break;
-
-	case 0x8e:	/* �N�@�O�}�C�A */
-		{
-			int type=SkillStatusChangeTable[sg->skill_id];
-			if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage )
-				break;
-			if( battle_get_sc_data(bl)[type].timer==-1 )
-				skill_status_change_start(bl,type,sg->skill_lv,(int)src,0,0,skill_get_time2(sg->skill_id,sg->skill_lv),0);
-		}
-		break;
-	case 0x92:	/* �x�m���_�X�g */
-		{
-			struct status_change *sc_data=battle_get_sc_data(bl);
-			int type=SkillStatusChangeTable[sg->skill_id];
-			if( sc_data && sc_data[type].timer==-1 )
-				skill_status_change_start(bl,type,sg->skill_lv,(int)src,0,0,skill_get_time2(sg->skill_id,sg->skill_lv),0);
-		}
-		break;
-	case 0x9a:	/* �{���P�[�m */
-	case 0x9b:	/* �f�����[�W */
-	case 0x9c:	/* �o�C�I�����g�Q�C�� */
-		{
-			struct skill_unit *unit2;
-			struct status_change *sc_data=battle_get_sc_data(bl);
-			int type=SkillStatusChangeTable[sg->skill_id];
-			if(sc_data && sc_data[type].timer==-1)
-				skill_status_change_start(bl,type,sg->skill_lv,(int)src,0,0,skill_get_time2(sg->skill_id,sg->skill_lv),0);
-			else if((unit2=(struct skill_unit *)sc_data[type].val2) && unit2 != src ){
-				if( DIFF_TICK(sg->tick,unit2->group->tick)>0 )
-					skill_status_change_start(bl,type,sg->skill_lv,(int)src,0,0,skill_get_time2(sg->skill_id,sg->skill_lv),0);
-				ts->tick-=sg->interval;
-			}
-		} break;
-
-	case 0x9e:	/* �q��S */
-	case 0x9f:	/* �j�����h�̉� */
-	case 0xa0:	/* �i���̍��� */
-	case 0xa1:	/* �푾�ۂ̋��� */
-	case 0xa2:	/* �j�[�x�����O�̎w�� */
-	case 0xa3:	/* ���L�̋��� */
-	case 0xa4:	/* �[���̒��� */
-	case 0xa5:	/* �s���g�̃W�[�N�t���[�h */
-	case 0xa6:	/* �s���a�� */
-	case 0xa7:	/* ���J */
-	case 0xa8:	/* �[�z�̃A�T�V���N���X */
-	case 0xa9:	/* �u���M�̎� */
-	case 0xab:	/* ��������ȃ_���X */
-	case 0xac:	/* �n�~���O */
-	case 0xad:	/* ����Y��Ȃ��Łc */
-	case 0xae:	/* �K�^�̃L�X */
-	case 0xaf:	/* �T�[�r�X�t�H�[���[ */
-	case 0xb4:
-		{
-			struct skill_unit *unit2;
-			struct status_change *sc_data=battle_get_sc_data(bl);
-			int type=SkillStatusChangeTable[sg->skill_id];
-			if(sg->src_id == bl->id)
-				break;
-			if(sc_data && sc_data[type].timer==-1)
-				skill_status_change_start(bl,type,sg->skill_lv,sg->val1,sg->val2,
-					(int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0);
-			else if( (unit2=(struct skill_unit *)sc_data[type].val4) && unit2 != src ){
-				if( unit2->group && DIFF_TICK(sg->tick,unit2->group->tick)>0 )
-					skill_status_change_start(bl,type,sg->skill_lv,sg->val1,sg->val2,
-						(int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0);
-				ts->tick-=sg->interval;
-			}
-		} break;
-
-	case 0xaa:	/* �C�h�D���̗ь� */
-		{
-			struct skill_unit *unit2;
-			struct status_change *sc_data=battle_get_sc_data(bl);
-			int type=SkillStatusChangeTable[sg->skill_id];
-			if(sg->src_id == bl->id)
-				break;
-			if( sc_data && sc_data[type].timer==-1)
-				skill_status_change_start(bl,type,sg->skill_lv,(sg->val1)>>16,(sg->val1)&0xffff,
-					(int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0);
-			else if((unit2=(struct skill_unit *)sc_data[type].val4) && unit2 != src ){
-				if( DIFF_TICK(sg->tick,unit2->group->tick)>0 )
-					skill_status_change_start(bl,type,sg->skill_lv,(sg->val1)>>16,(sg->val1)&0xffff,
-						(int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0);
-				ts->tick-=sg->interval;
-			}
-		} break;
-
-	case 0xb1:	/* �f�����X�g���[�V���� */
-		skill_attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
-		if(bl->type == BL_PC && rand()%100 < sg->skill_lv && battle_config.equipment_breaking)
-			pc_breakweapon((struct map_session_data *)bl);
-		break;
-	case 0x99:				/* �g�[�L�[�{�b�N�X */
-		if(sg->src_id == bl->id) //����������ł��������Ȃ�
-			break;
-		if(sg->val2==0){
-			clif_talkiebox(&src->bl,sg->valstr);
-			sg->unit_id = 0x8c;
-			clif_changelook(&src->bl,LOOK_BASE,sg->unit_id);
-			sg->limit=DIFF_TICK(tick,sg->tick)+5000;
-			sg->val2=-1; //����
-		}
-		break;
-	case 0xb2:				/* ���Ȃ���_������ł� */
-	case 0xb3:				/* �S�X�y�� */
-	case 0xb6:				/* �t�H�O�E�H�[�� */
-	//�Ƃ肠�����������Ȃ�
-		break;
-
-
-
-
-
-
-	case 0xb7:	/* �X�p�C�_�[�E�F�b�u */
-		if(sg->val2==0){
-			int moveblock = ( bl->x/BLOCK_SIZE != src->bl.x/BLOCK_SIZE || bl->y/BLOCK_SIZE != src->bl.y/BLOCK_SIZE);
-			skill_additional_effect(ss,bl,sg->skill_id,sg->skill_lv,BF_MISC,tick);
-			if(moveblock) map_delblock(bl);
-			bl->x = (&src->bl)->x;
-			bl->y = (&src->bl)->y;
-			if(moveblock) map_addblock(bl);
-			if(bl->type == BL_MOB)
-				clif_fixmobpos((struct mob_data *)bl);
-			else if(bl->type == BL_PET)
-				clif_fixpetpos((struct pet_data *)bl);
-			else
-				clif_fixpos(bl);
-			clif_01ac(&src->bl);
-			sg->limit=DIFF_TICK(tick,sg->tick) + skill_get_time2(sg->skill_id,sg->skill_lv);
-			sg->val2=bl->id;
-		}
-		break;
-
-/*	default:
-		if(battle_config.error_log)
-			printf("skill_unit_onplace: Unknown skill unit id=%d block=%d\n",sg->unit_id,bl->id);
-		break;*/
-	}
-	if(bl->type==BL_MOB && ss!=bl)	/* �X�L���g�p������MOB�X�L�� */
-	{
-		if(battle_config.mob_changetarget_byskill == 1)
-		{
-			int target=((struct mob_data *)bl)->target_id;
-			if(ss->type == BL_PC)
-				((struct mob_data *)bl)->target_id=ss->id;
-			mobskill_use((struct mob_data *)bl,tick,MSC_SKILLUSED|(sg->skill_id<<16));
-			((struct mob_data *)bl)->target_id=target;
-		}
-		else
-			mobskill_use((struct mob_data *)bl,tick,MSC_SKILLUSED|(sg->skill_id<<16));
-	}
-
-	return 0;
-}
-/*==========================================
- * �X�L�����j�b�g���痣�E����(�������͂��Ă���)�ꍇ
- *------------------------------------------
- */
-int skill_unit_onout(struct skill_unit *src,struct block_list *bl,unsigned int tick)
-{
-	struct skill_unit_group *sg;
-
-	nullpo_retr(0, src);
-	nullpo_retr(0, bl);
-	nullpo_retr(0, sg=src->group);
-
-	if( bl->prev==NULL || !src->alive )
-		return 0;
-
-	if( bl->type!=BL_PC && bl->type!=BL_MOB )
-		return 0;
-
-	switch(sg->unit_id){
-	case 0x7e:	/* �Z�C�t�e�B�E�H�[�� */
-	case 0x85:	/* �j���[�} */
-	case 0x8e:	/* �N�@�O�}�C�A */
-		{
-			struct status_change *sc_data=battle_get_sc_data(bl);
-			int type=
-				(sg->unit_id==0x85)?SC_PNEUMA:
-				((sg->unit_id==0x7e)?SC_SAFETYWALL:
-				 SC_QUAGMIRE);
-			if((type != SC_QUAGMIRE || bl->type != BL_MOB) &&
-				sc_data && sc_data[type].timer!=-1 && ((struct skill_unit *)sc_data[type].val2)==src){
-				skill_status_change_end(bl,type,-1);
-			}
-		} break;
-
-	case 0x91:	/* �A���N���X�l�A */
-		{
-			struct block_list *target=map_id2bl(sg->val2);
-			if( target && target==bl ){
-				skill_status_change_end(bl,SC_ANKLE,-1);
-				sg->limit=DIFF_TICK(tick,sg->tick)+1000;
-			}
-		}
-		break;
-	case 0xb5:
-	case 0xb8:
-		{
-			struct block_list *target=map_id2bl(sg->val2);
-			if( target==bl )
-				skill_status_change_end(bl,SC_SPIDERWEB,-1);
-			sg->limit=DIFF_TICK(tick,sg->tick)+1000;
-		}
-		break;
-	case 0xb6:
-		{
-			struct block_list *target=map_id2bl(sg->val2);
-			if( target==bl )
-				skill_status_change_end(bl,SC_FOGWALL,-1);
-			sg->limit=DIFF_TICK(tick,sg->tick)+1000;
-		}
-		break;
-	case 0x9a:	/* �{���P�[�m */
-	case 0x9b:	/* �f�����[�W */
-	case 0x9c:	/* �o�C�I�����g�Q�C�� */
-		{
-			struct status_change *sc_data=battle_get_sc_data(bl);
-			struct skill_unit *su;
-			int type=SkillStatusChangeTable[sg->skill_id];
-			if( sc_data && sc_data[type].timer!=-1 && (su=((struct skill_unit *)sc_data[type].val2)) && su == src ){
-				skill_status_change_end(bl,type,-1);
-			}
-		}
-		break;
-
-	case 0x9e:	/* �q��S */
-	case 0x9f:	/* �j�����h�̉� */
-	case 0xa0:	/* �i���̍��� */
-	case 0xa1:	/* �푾�ۂ̋��� */
-	case 0xa2:	/* �j�[�x�����O�̎w�� */
-	case 0xa3:	/* ���L�̋��� */
-	case 0xa4:	/* �[���̒��� */
-	case 0xa5:	/* �s���g�̃W�[�N�t���[�h */
-	case 0xa6:	/* �s���a�� */
-	case 0xa7:	/* ���J */
-	case 0xa8:	/* �[�z�̃A�T�V���N���X */
-	case 0xa9:	/* �u���M�̎� */
-	case 0xaa:	/* �C�h�D���̗ь� */
-	case 0xab:	/* ��������ȃ_���X */
-	case 0xac:	/* �n�~���O */
-	case 0xad:	/* ����Y��Ȃ��Łc */
-	case 0xae:	/* �K�^�̃L�X */
-	case 0xaf:	/* �T�[�r�X�t�H�[���[ */
-	case 0xb4:
-		{
-			struct status_change *sc_data=battle_get_sc_data(bl);
-			struct skill_unit *su;
-			int type=SkillStatusChangeTable[sg->skill_id];
-			if( sc_data && sc_data[type].timer!=-1 && (su=((struct skill_unit *)sc_data[type].val4)) && su == src ){
-				skill_status_change_end(bl,type,-1);
-			}
-		}
-		break;
-	case 0xb7:	/* �X�p�C�_�[�E�F�b�u */
-		{
-			struct block_list *target=map_id2bl(sg->val2);
-			if( target && target==bl )
-				skill_status_change_end(bl,SC_SPIDERWEB,-1);
-			sg->limit=DIFF_TICK(tick,sg->tick)+1000;
-		}
-		break;
-
-/*	default:
-		if(battle_config.error_log)
-			printf("skill_unit_onout: Unknown skill unit id=%d block=%d\n",sg->unit_id,bl->id);
-		break;*/
-	}
-	skill_unitgrouptickset_delete(bl,sg->group_id);
-	return 0;
-}
-/*==========================================
- * �X�L�����j�b�g�̍폜�C�x���g
- *------------------------------------------
- */
-int skill_unit_ondelete(struct skill_unit *src,struct block_list *bl,unsigned int tick)
-{
-	struct skill_unit_group *sg;
-
-	nullpo_retr(0, src);
-	nullpo_retr(0, bl);
-	nullpo_retr(0, sg = src->group);
-
-	if( bl->prev==NULL || !src->alive )
-		return 0;
-
-	if( bl->type!=BL_PC && bl->type!=BL_MOB )
-		return 0;
-
-	switch(sg->unit_id){
-	case 0x85:	/* �j���[�} */
-	case 0x7e:	/* �Z�C�t�e�B�E�H�[�� */
-	case 0x8e:	/* �N�@�O�}�C�� */
-	case 0x9a:	/* �{���P�[�m */
-	case 0x9b:	/* �f�����[�W */
-	case 0x9c:	/* �o�C�I�����g�Q�C�� */
-	case 0x9e:	/* �q��S */
-	case 0x9f:	/* �j�����h�̉� */
-	case 0xa0:	/* �i���̍��� */
-	case 0xa1:	/* �푾�ۂ̋��� */
-	case 0xa2:	/* �j�[�x�����O�̎w�� */
-	case 0xa3:	/* ���L�̋��� */
-	case 0xa4:	/* �[���̒��� */
-	case 0xa5:	/* �s���g�̃W�[�N�t���[�h */
-	case 0xa6:	/* �s���a�� */
-	case 0xa7:	/* ���J */
-	case 0xa8:	/* �[�z�̃A�T�V���N���X */
-	case 0xa9:	/* �u���M�̎� */
-	case 0xaa:	/* �C�h�D���̗ь� */
-	case 0xab:	/* ��������ȃ_���X */
-	case 0xac:	/* �n�~���O */
-	case 0xad:	/* ����Y��Ȃ��Łc */
-	case 0xae:	/* �K�^�̃L�X */
-	case 0xaf:	/* �T�[�r�X�t�H�[���[ */
-	case 0xb4:
-		return skill_unit_onout(src,bl,tick);
-
-/*	default:
-		if(battle_config.error_log)
-			printf("skill_unit_ondelete: Unknown skill unit id=%d block=%d\n",sg->unit_id,bl->id);
-		break;*/
-	}
-	skill_unitgrouptickset_delete(bl,sg->group_id);
-	return 0;
-}
-/*==========================================
- * �X�L�����j�b�g�̌��E�C�x���g
- *------------------------------------------
- */
-int skill_unit_onlimit(struct skill_unit *src,unsigned int tick)
-{
-	struct skill_unit_group *sg;
-
-	nullpo_retr(0, src);
-	nullpo_retr(0, sg=src->group);
-
-	switch(sg->unit_id){
-	case 0x81:	/* ���[�v�|�[�^��(�����O) */
-		{
-			struct skill_unit_group *group=
-				skill_unitsetting(map_id2bl(sg->src_id),sg->skill_id,sg->skill_lv,
-					src->bl.x,src->bl.y,1);
-			if(group == NULL)
-				return 0;
-			group->valstr=calloc(24, 1);
-			if(group->valstr==NULL){
-				printf("skill_unit_onlimit: out of memory !\n");
-				exit(1);
-			}
-			memcpy(group->valstr,sg->valstr,24);
-			group->val2=sg->val2;
-		}
-		break;
-
-	case 0x8d:	/* �A�C�X�E�H�[�� */
-		map_setcell(src->bl.m,src->bl.x,src->bl.y,src->val2);
-		clif_changemapcell(src->bl.m,src->bl.x,src->bl.y,src->val2,1);
-		break;
-	case 0xb2:	/* ���Ȃ��ɉ���� */
-		{
-			struct map_session_data *sd = NULL;
-			struct map_session_data *p_sd = NULL;
-			if((sd = (struct map_session_data *)(map_id2bl(sg->src_id))) == NULL)
-				return 0;
-			if((p_sd = pc_get_partner(sd)) == NULL)
-				return 0;
-
-			pc_setpos(p_sd,map[src->bl.m].name,src->bl.x,src->bl.y,3);
-		}
-		break;
-	}
-	return 0;
-}
-/*==========================================
- * �X�L�����j�b�g�̃_���[�W�C�x���g
- *------------------------------------------
- */
-int skill_unit_ondamaged(struct skill_unit *src,struct block_list *bl,
-	int damage,unsigned int tick)
-{
-	struct skill_unit_group *sg;
-
-	nullpo_retr(0, src);
-	nullpo_retr(0, sg=src->group);
-
-	switch(sg->unit_id){
-	case 0x8d:	/* �A�C�X�E�H�[�� */
-		src->val1-=damage;
-		break;
-	case 0x8f:	/* �u���X�g�}�C�� */
-	case 0x98:	/* �N���C���A�[�g���b�v */
-		skill_blown(bl,&src->bl,2); //������΂��Ă݂�
-		break;
-	default:
-		damage = 0;
-		break;
-	}
-	return damage;
-}
-
-
-/*---------------------------------------------------------------------------- */
-
-/*==========================================
- * �X�L���g�p�i�r�������A�ꏊ�w��j
- *------------------------------------------
- */
-int skill_castend_pos( int tid, unsigned int tick, int id,int data )
-{
-	struct map_session_data* sd=map_id2sd(id)/*,*target_sd=NULL*/;
-	int range,maxcount;
-
-	nullpo_retr(0, sd);
-
-	if( sd->bl.prev == NULL )
-		return 0;
-	if( sd->skilltimer != tid )	/* �^�C�}ID�̊m�F */
-		return 0;
-	if(sd->skilltimer != -1 && pc_checkskill(sd,SA_FREECAST) > 0) {
-		sd->speed = sd->prev_speed;
-		clif_updatestatus(sd,SP_SPEED);
-	}
-	sd->skilltimer=-1;
-	if(pc_isdead(sd)) {
-		sd->canact_tick = tick;
-		sd->canmove_tick = tick;
-		sd->skillitem = sd->skillitemlv = -1;
-		return 0;
-	}
-
-	if(battle_config.pc_skill_reiteration == 0) {
-		range = -1;
-		switch(sd->skillid) {
-			case MG_SAFETYWALL:
-			case WZ_FIREPILLAR:
-			case HT_SKIDTRAP:
-			case HT_LANDMINE:
-			case HT_ANKLESNARE:
-			case HT_SHOCKWAVE:
-			case HT_SANDMAN:
-			case HT_FLASHER:
-			case HT_FREEZINGTRAP:
-			case HT_BLASTMINE:
-			case HT_CLAYMORETRAP:
-			case HT_TALKIEBOX:
-			case AL_WARP:
-			case PF_SPIDERWEB:		/* �X�p�C�_�[�E�F�b�u */
-			case RG_GRAFFITI:		/* �O���t�B�e�B */
-				range = 0;
-				break;
-			case AL_PNEUMA:
-				range = 1;
-				break;
-		}
-		if(range >= 0) {
-			if(skill_check_unit_range(sd->bl.m,sd->skillx,sd->skilly,range,sd->skillid) > 0) {
-				clif_skill_fail(sd,sd->skillid,0,0);
-				sd->canact_tick = tick;
-				sd->canmove_tick = tick;
-				sd->skillitem = sd->skillitemlv = -1;
-				return 0;
-			}
-		}
-	}
-	if(battle_config.pc_skill_nofootset) {
-		range = -1;
-		switch(sd->skillid) {
-			case WZ_FIREPILLAR:
-			case HT_SKIDTRAP:
-			case HT_LANDMINE:
-			case HT_ANKLESNARE:
-			case HT_SHOCKWAVE:
-			case HT_SANDMAN:
-			case HT_FLASHER:
-			case HT_FREEZINGTRAP:
-			case HT_BLASTMINE:
-			case HT_CLAYMORETRAP:
-			case HT_TALKIEBOX:
-			case PF_SPIDERWEB:		/* �X�p�C�_�[�E�F�b�u */
-			case WZ_ICEWALL:
-				range = 1;
-				break;
-			case AL_WARP:
-				range = 0;
-				break;
-		}
-		if(range >= 0) {
-			if(skill_check_unit_range2(sd->bl.m,sd->skillx,sd->skilly,range) > 0) {
-				clif_skill_fail(sd,sd->skillid,0,0);
-				sd->canact_tick = tick;
-				sd->canmove_tick = tick;
-				sd->skillitem = sd->skillitemlv = -1;
-				return 0;
-			}
-		}
-	}
-
-	if(battle_config.pc_land_skill_limit) {
-		maxcount = skill_get_maxcount(sd->skillid);
-		if(maxcount > 0) {
-			int i,c;
-			for(i=c=0;i<MAX_SKILLUNITGROUP;i++) {
-				if(sd->skillunit[i].alive_count > 0 && sd->skillunit[i].skill_id == sd->skillid)
-					c++;
-			}
-			if(c >= maxcount) {
-				clif_skill_fail(sd,sd->skillid,0,0);
-				sd->canact_tick = tick;
-				sd->canmove_tick = tick;
-				sd->skillitem = sd->skillitemlv = -1;
-				return 0;
-			}
-		}
-	}
-
-	range = skill_get_range(sd->skillid,sd->skilllv);
-	if(range < 0)
-		range = battle_get_range(&sd->bl) - (range + 1);
-	range += battle_config.pc_skill_add_range;
-	if(battle_config.skill_out_range_consume) {  // changed to allow casting when target walks out of range [Valaris]
-		if(range < distance(sd->bl.x,sd->bl.y,sd->skillx,sd->skilly)) {
-			clif_skill_fail(sd,sd->skillid,0,0);
-			sd->canact_tick = tick;
-			sd->canmove_tick = tick;
-			sd->skillitem = sd->skillitemlv = -1;
-			return 0;
-		}
-	}
-	if(!skill_check_condition(sd,1)) {		/* �g�p�����`�F�b�N */
-		sd->canact_tick = tick;
-		sd->canmove_tick = tick;
-		sd->skillitem = sd->skillitemlv = -1;
-		return 0;
-	}
-	sd->skillitem = sd->skillitemlv = -1;
-	if(battle_config.skill_out_range_consume) {
-		if(range < distance(sd->bl.x,sd->bl.y,sd->skillx,sd->skilly)) {
-			clif_skill_fail(sd,sd->skillid,0,0);
-			sd->canact_tick = tick;
-			sd->canmove_tick = tick;
-			return 0;
-		}
-	}
-
-	if(battle_config.pc_skill_log)
-		printf("PC %d skill castend skill=%d\n",sd->bl.id,sd->skillid);
-	pc_stop_walking(sd,0);
-
-	skill_castend_pos2(&sd->bl,sd->skillx,sd->skilly,sd->skillid,sd->skilllv,tick,0);
-
-	return 0;
-}
-
-/*==========================================
- * �͈͓��L�������݊m�F���菈��(foreachinarea)
- *------------------------------------------
- */
-
-static int skill_check_condition_char_sub(struct block_list *bl,va_list ap)
-{
-	int *c;
-	struct block_list *src;
-	struct map_session_data *sd;
-	struct map_session_data *ssd;
-	struct pc_base_job s_class;
-	struct pc_base_job ss_class;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, sd=(struct map_session_data*)bl);
-	nullpo_retr(0, src=va_arg(ap,struct block_list *));
-	nullpo_retr(0, c=va_arg(ap,int *));
-	nullpo_retr(0, ssd=(struct map_session_data*)src);
-
-	s_class = pc_calc_base_job(sd->status.class);
-	//�`�F�b�N���Ȃ��ݒ�Ȃ�c�ɂ��肦�Ȃ��傫�Ȑ�����Ԃ��ďI��
-	if(!battle_config.player_skill_partner_check){	//�{����foreach�̑O�ɂ�肽�����ǐݒ�K�p�ӏ����܂Ƃ߂邽�߂ɂ�����
-		(*c)=99;
-		return 0;
-	}
-
-	;
-	ss_class = pc_calc_base_job(ssd->status.class);
-
-	switch(ssd->skillid){
-	case PR_BENEDICTIO:				/* ���̍~�� */
-		if(sd != ssd && (sd->status.class == 4 || sd->status.class == 8 || sd->status.class == 15 ||
-			sd->status.class == 4005 || sd->status.class == 4009 || sd->status.class == 4016) &&
-			(sd->bl.x == ssd->bl.x - 1 || sd->bl.x == ssd->bl.x + 1) && sd->status.sp >= 10)
-			(*c)++;
-		break;
-	case BD_LULLABY:				/* �q��� */
-	case BD_RICHMANKIM:				/* �j�����h�̉� */
-	case BD_ETERNALCHAOS:			/* �i���̍��� */
-	case BD_DRUMBATTLEFIELD:		/* �푾�ۂ̋��� */
-	case BD_RINGNIBELUNGEN:			/* �j�[�x�����O�̎w�� */
-	case BD_ROKISWEIL:				/* ���L�̋��� */
-	case BD_INTOABYSS:				/* �[���̒��� */
-	case BD_SIEGFRIED:				/* �s���g�̃W�[�N�t���[�h */
-	case BD_RAGNAROK:				/* �_�X�̉��� */
-	case CG_MOONLIT:				/* ������̐�ɗ�����Ԃт� */
-		if(sd != ssd &&
-		 ((ssd->status.class==19 && sd->status.class==20) ||
-		 (ssd->status.class==20 && sd->status.class==19) ||
-		 (ssd->status.class==4020 && sd->status.class==4021) ||
-		 (ssd->status.class==4021 && sd->status.class==4020) ||
-		 (ssd->status.class==20 && sd->status.class==4020) ||
-		 (ssd->status.class==19 && sd->status.class==4021)) &&
-		 pc_checkskill(sd,ssd->skillid) > 0 &&
-		 (*c)==0 &&
-		 sd->status.party_id == ssd->status.party_id &&
-		 !pc_issit(sd) &&
-		 sd->sc_data[SC_DANCING].timer==-1
-		 )
-			(*c)=pc_checkskill(sd,ssd->skillid);
-		break;
-	}
-	return 0;
-}
-/*==========================================
- * �͈͓��L�������݊m�F�����X�L���g�p����(foreachinarea)
- *------------------------------------------
- */
-
-static int skill_check_condition_use_sub(struct block_list *bl,va_list ap)
-{
-	int *c;
-	struct block_list *src;
-	struct map_session_data *sd;
-	struct map_session_data *ssd;
-	struct pc_base_job s_class;
-	struct pc_base_job ss_class;
-	int skillid,skilllv;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, sd=(struct map_session_data*)bl);
-	nullpo_retr(0, src=va_arg(ap,struct block_list *));
-	nullpo_retr(0, c=va_arg(ap,int *));
-	nullpo_retr(0, ssd=(struct map_session_data*)src);
-
-	s_class = pc_calc_base_job(sd->status.class);
-	
-	//�`�F�b�N���Ȃ��ݒ�Ȃ�c�ɂ��肦�Ȃ��傫�Ȑ�����Ԃ��ďI��
-	if(!battle_config.player_skill_partner_check){	//�{����foreach�̑O�ɂ�肽�����ǐݒ�K�p�ӏ����܂Ƃ߂邽�߂ɂ�����
-		(*c)=99;
-		return 0;
-	}
-
-	ss_class = pc_calc_base_job(ssd->status.class);
-	skillid=ssd->skillid;
-	skilllv=ssd->skilllv;
-	switch(skillid){
-	case PR_BENEDICTIO:				/* ���̍~�� */
-		if(sd != ssd && (sd->status.class == 4 || sd->status.class == 8 || sd->status.class == 15 ||
-			sd->status.class == 4005 || sd->status.class == 4009 || sd->status.class == 4016) &&
-			(sd->bl.x == ssd->bl.x - 1 || sd->bl.x == ssd->bl.x + 1) && sd->status.sp >= 10){
-			sd->status.sp -= 10;
-			pc_calcstatus(sd,0);
-			(*c)++;
-		}
-		break;
-	case BD_LULLABY:				/* �q��� */
-	case BD_RICHMANKIM:				/* �j�����h�̉� */
-	case BD_ETERNALCHAOS:			/* �i���̍��� */
-	case BD_DRUMBATTLEFIELD:		/* �푾�ۂ̋��� */
-	case BD_RINGNIBELUNGEN:			/* �j�[�x�����O�̎w�� */
-	case BD_ROKISWEIL:				/* ���L�̋��� */
-	case BD_INTOABYSS:				/* �[���̒��� */
-	case BD_SIEGFRIED:				/* �s���g�̃W�[�N�t���[�h */
-	case BD_RAGNAROK:				/* �_�X�̉��� */
-	case CG_MOONLIT:				/* ������̐�ɗ�����Ԃт� */
-		if(sd != ssd && //�{�l�ȊO��
-		  ((ssd->status.class==19 && sd->status.class==20) ||
-		 (ssd->status.class==20 && sd->status.class==19) ||
-		 (ssd->status.class==4020 && sd->status.class==4021) ||
-		 (ssd->status.class==4021 && sd->status.class==4020) ||
-		 (ssd->status.class==20 && sd->status.class==4020) ||
-		 (ssd->status.class==19 && sd->status.class==4021)) && //�������_���T�[�Ȃ�o�[�h��
-		   pc_checkskill(sd,skillid) > 0 && //�X�L������������
-		   (*c)==0 && //�ŏ��̈�l��
-		   sd->status.party_id == ssd->status.party_id && //�p�[�e�B�[��������
-		   !pc_issit(sd) && //�����ĂȂ�
-		   sd->sc_data[SC_DANCING].timer==-1 //�_���X������Ȃ�
-		  ){
-			ssd->sc_data[SC_DANCING].val4=bl->id;
-			clif_skill_nodamage(bl,src,skillid,skilllv,1);
-			skill_status_change_start(bl,SC_DANCING,skillid,ssd->sc_data[SC_DANCING].val2,0,src->id,skill_get_time(skillid,skilllv)+1000,0);
-			sd->skillid_dance=sd->skillid=skillid;
-			sd->skilllv_dance=sd->skilllv=skilllv;
-			(*c)++;
-		}
-		break;
-	}
-	return 0;
-}
-/*==========================================
- * �͈͓��o�C�I�v�����g�A�X�t�B�A�}�C���pMob���݊m�F���菈��(foreachinarea)
- *------------------------------------------
- */
-
-static int skill_check_condition_mob_master_sub(struct block_list *bl,va_list ap)
-{
-	int *c,src_id=0,mob_class=0;
-	struct mob_data *md;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, md=(struct mob_data*)bl);
-	nullpo_retr(0, src_id=va_arg(ap,int));
-	nullpo_retr(0, mob_class=va_arg(ap,int));
-	nullpo_retr(0, c=va_arg(ap,int *));
-
-	if(md->class==mob_class && md->master_id==src_id)
-		(*c)++;
-	return 0;
-}
-
-/*==========================================
- * �X�L���g�p�����i�U�Ŏg�p���s�j
- *------------------------------------------
- */
-int skill_check_condition(struct map_session_data *sd,int type)
-{
-	int i,hp,sp,hp_rate,sp_rate,zeny,weapon,state,spiritball,skill,lv,mhp;
-	int	index[10],itemid[10],amount[10];
-
-	nullpo_retr(0, sd);
-
-	if( battle_config.gm_skilluncond>0 && pc_isGM(sd)>= battle_config.gm_skilluncond ) {
-		sd->skillitem = sd->skillitemlv = -1;
-		return 1;
-	}
-
-	if( sd->opt1>0) {
-		clif_skill_fail(sd,sd->skillid,0,0);
-		sd->skillitem = sd->skillitemlv = -1;
-		return 0;
-	}
-	if(pc_is90overweight(sd)) {
-		clif_skill_fail(sd,sd->skillid,9,0);
-		sd->skillitem = sd->skillitemlv = -1;
-		return 0;
-	}
-
-	if(sd->skillid == AC_MAKINGARROW &&	sd->state.make_arrow_flag == 1) {
-		sd->skillitem = sd->skillitemlv = -1;
-		return 0;
-	}
-	if(sd->skillid == AM_PHARMACY &&	sd->state.produce_flag == 1) {
-		sd->skillitem = sd->skillitemlv = -1;
-		return 0;
-	}
-
-	if(sd->skillitem == sd->skillid) {	/* �A�C�e���̏ꍇ���������� */
-		if(type&1)
-			sd->skillitem = sd->skillitemlv = -1;
-		return 1;
-	}
-	if( sd->opt1>0 ){
-		clif_skill_fail(sd,sd->skillid,0,0);
-		return 0;
-	}
-	if(sd->sc_data){
-		if( sd->sc_data[SC_DIVINA].timer!=-1 ||
-			sd->sc_data[SC_ROKISWEIL].timer!=-1 ||
-			(sd->sc_data[SC_AUTOCOUNTER].timer != -1 && sd->skillid != KN_AUTOCOUNTER) ||
-			sd->sc_data[SC_STEELBODY].timer != -1 ||
-			sd->sc_data[SC_BERSERK].timer != -1
-		){
-		clif_skill_fail(sd,sd->skillid,0,0);
-			return 0;	/* ��Ԉُ�Ⓘ�قȂ� */
-		}
-	}
-	skill = sd->skillid;
-	lv = sd->skilllv;
-	hp=skill_get_hp(skill, lv);	/* ����HP */
-	sp=skill_get_sp(skill, lv);	/* ����SP */
-	if((sd->skillid_old == BD_ENCORE) && skill==sd->skillid_dance)
-		sp=sp/2;	//�A���R�[������SP�������
-	hp_rate = (lv <= 0)? 0:skill_db[skill].hp_rate[lv-1];
-	sp_rate = (lv <= 0)? 0:skill_db[skill].sp_rate[lv-1];
-	zeny = skill_get_zeny(skill,lv);
-	weapon = skill_db[skill].weapon;
-	state = skill_db[skill].state;
-	spiritball = (lv <= 0)? 0:skill_db[skill].spiritball[lv-1];
-	mhp=skill_get_mhp(skill, lv);	/* ����HP */
-	for(i=0;i<10;i++) {
-		itemid[i] = skill_db[skill].itemid[i];
-		amount[i] = skill_db[skill].amount[i];
-	}
-	if(mhp > 0)
-		hp += (sd->status.max_hp * mhp)/100;
-	if(hp_rate > 0)
-		hp += (sd->status.hp * hp_rate)/100;
-	else
-		hp += (sd->status.max_hp * abs(hp_rate))/100;
-	if(sp_rate > 0)
-		sp += (sd->status.sp * sp_rate)/100;
-	else
-		sp += (sd->status.max_sp * abs(sp_rate))/100;
-	if(sd->dsprate!=100)
-		sp=sp*sd->dsprate/100;	/* ����SP�C�� */
-
-	switch(skill) {
-	case SA_CASTCANCEL:
-		if(sd->skilltimer == -1) {
-			clif_skill_fail(sd,skill,0,0);
-			return 0;
-		}
-		break;
-	case BS_MAXIMIZE:		/* �}�L�V�}�C�Y�p���[ */
-	case NV_TRICKDEAD:		/* ���񂾂ӂ� */
-	case TF_HIDING:			/* �n�C�f�B���O */
-	case AS_CLOAKING:		/* �N���[�L���O */
-	case CR_AUTOGUARD:				/* �I�[�g�K�[�h */
-	case CR_DEFENDER:				/* �f�B�t�F���_�[ */
-	case ST_CHASEWALK:
-		if(sd->sc_data[SkillStatusChangeTable[skill]].timer!=-1)
-			return 1;			/* ��������ꍇ��SP����Ȃ� */
-		break;
-	case AL_TELEPORT:
-	case AL_WARP:
-		if(map[sd->bl.m].flag.noteleport) {
-			clif_skill_teleportmessage(sd,0);
-			return 0;
-		}
-		break;
-	case MO_CALLSPIRITS:	/* �C�� */
-		if(sd->spiritball >= lv) {
-			clif_skill_fail(sd,skill,0,0);
-			return 0;
-		}
-		break;
-	case CH_SOULCOLLECT:	/* ���C�� */
-		if(sd->spiritball >= 5) {
-			clif_skill_fail(sd,skill,0,0);
-			return 0;
-		}
-		break;
-	case MO_FINGEROFFENSIVE:				//�w�e
-		if (sd->spiritball > 0 && sd->spiritball < spiritball) {
-			spiritball = sd->spiritball;
-			sd->spiritball_old = sd->spiritball;
-		}
-		else sd->spiritball_old = lv;
-		break;
-	case MO_CHAINCOMBO:						//�A�ŏ�
-		if(sd->sc_data[SC_BLADESTOP].timer==-1){
-		if(sd->sc_data[SC_COMBO].timer == -1 || sd->sc_data[SC_COMBO].val1 != MO_TRIPLEATTACK)
-			return 0;
-		}
-		break;
-	case MO_COMBOFINISH:					//�җ���
-		if(sd->sc_data[SC_COMBO].timer == -1 || sd->sc_data[SC_COMBO].val1 != MO_CHAINCOMBO)
-			return 0;
-		break;
-	case CH_TIGERFIST:						//���Ռ�
-		if(sd->sc_data[SC_COMBO].timer == -1 || sd->sc_data[SC_COMBO].val1 != MO_COMBOFINISH)
-			return 0;
-		break;
-	case CH_CHAINCRUSH:						//�A������
-		if(sd->sc_data[SC_COMBO].timer == -1)
-			return 0;
-		if(sd->sc_data[SC_COMBO].val1 != MO_COMBOFINISH && sd->sc_data[SC_COMBO].val1 != CH_TIGERFIST)
-			return 0;
-		break;
-	case MO_EXTREMITYFIST:					// ���C���e�P��
-		if((sd->sc_data[SC_COMBO].timer != -1 && (sd->sc_data[SC_COMBO].val1 == MO_COMBOFINISH || sd->sc_data[SC_COMBO].val1 == CH_CHAINCRUSH)) || sd->sc_data[SC_BLADESTOP].timer!=-1)
-			spiritball--;
-		break;
-	case BD_ADAPTATION:				/* �A�h���u */
-		{
-			struct skill_unit_group *group=NULL;
-			if(sd->sc_data[SC_DANCING].timer==-1 || ((group=(struct skill_unit_group*)sd->sc_data[SC_DANCING].val2) && (skill_get_time(sd->sc_data[SC_DANCING].val1,group->skill_lv) - sd->sc_data[SC_DANCING].val3*1000) <= skill_get_time2(skill,lv))){ //�_���X���Ŏg�p��5�b�ȏ�̂݁H
-				clif_skill_fail(sd,skill,0,0);
-				return 0;
-			}
-		}
-		break;
-	case PR_BENEDICTIO:				/* ���̍~�� */
-		{
-			int range=1;
-			int c=0;
-			if(!(type&1)){
-			map_foreachinarea(skill_check_condition_char_sub,sd->bl.m,
-				sd->bl.x-range,sd->bl.y-range,
-				sd->bl.x+range,sd->bl.y+range,BL_PC,&sd->bl,&c);
-			if(c<2){
-				clif_skill_fail(sd,skill,0,0);
-				return 0;
-			}
-			}else{
-				map_foreachinarea(skill_check_condition_use_sub,sd->bl.m,
-					sd->bl.x-range,sd->bl.y-range,
-					sd->bl.x+range,sd->bl.y+range,BL_PC,&sd->bl,&c);
-			}
-		}
-		break;
-	case WE_CALLPARTNER:		/* ���Ȃ��Ɉ������� */
-		if(!sd->status.partner_id){
-			clif_skill_fail(sd,skill,0,0);
-			return 0;
-		}
-		break;
-	case AM_CANNIBALIZE:		/* �o�C�I�v�����g */
-	case AM_SPHEREMINE:			/* �X�t�B�A�[�}�C�� */
-		if(type&1){
-			int c=0;
-			int maxcount=skill_get_maxcount(skill);
-			int mob_class=(skill==AM_CANNIBALIZE)?1118:1142;
-			if(battle_config.pc_land_skill_limit && maxcount>0) {
-				map_foreachinarea(skill_check_condition_mob_master_sub ,sd->bl.m, 0, 0, map[sd->bl.m].xs, map[sd->bl.m].ys, BL_MOB, sd->bl.id, mob_class,&c );
-				if(c >= maxcount){
-					clif_skill_fail(sd,skill,0,0);
-					return 0;
-				}
-			}
-		}
-		break;
-	case MG_FIREWALL:		/* �t�@�C�A�[�E�H�[�� */
-		/* ������ */
-		if(battle_config.pc_land_skill_limit) {
-			int maxcount = skill_get_maxcount(skill);
-			if(maxcount > 0) {
-				int i,c;
-				for(i=c=0;i<MAX_SKILLUNITGROUP;i++) {
-					if(sd->skillunit[i].alive_count > 0 && sd->skillunit[i].skill_id == skill)
-						c++;
-				}
-				if(c >= maxcount) {
-					clif_skill_fail(sd,skill,0,0);
-					return 0;
-				}
-			}
-		}
-		break;
-	}
-
-	if(!(type&2)){
-		if( hp>0 && sd->status.hp < hp) {				/* HP�`�F�b�N */
-			clif_skill_fail(sd,skill,2,0);		/* HP�s���F���s�ʒm */
-			return 0;
-		}
-		if( sp>0 && sd->status.sp < sp) {				/* SP�`�F�b�N */
-			clif_skill_fail(sd,skill,1,0);		/* SP�s���F���s�ʒm */
-			return 0;
-		}
-		if( zeny>0 && sd->status.zeny < zeny) {
-			clif_skill_fail(sd,skill,5,0);
-			return 0;
-		}
-		if(!(weapon & (1<<sd->status.weapon) ) ) {
-			clif_skill_fail(sd,skill,6,0);
-			return 0;
-		}
-		if( spiritball > 0 && sd->spiritball < spiritball) {
-			clif_skill_fail(sd,skill,0,0);		// �����s��
-			return 0;
-		}
-	}
-
-	switch(state) {
-	case ST_HIDING:
-		if(!(sd->status.option&2)) {
-			clif_skill_fail(sd,skill,0,0);
-			return 0;
-		}
-		break;
-	case ST_CLOAKING:
-		if(!(sd->status.option&4)) {
-			clif_skill_fail(sd,skill,0,0);
-			return 0;
-		}
-		break;
-	case ST_HIDDEN:
-		if(!pc_ishiding(sd)) {
-			clif_skill_fail(sd,skill,0,0);
-			return 0;
-		}
-		break;
-	case ST_RIDING:
-		if(!pc_isriding(sd)) {
-			clif_skill_fail(sd,skill,0,0);
-			return 0;
-		}
-		break;
-	case ST_FALCON:
-		if(!pc_isfalcon(sd)) {
-			clif_skill_fail(sd,skill,0,0);
-			return 0;
-		}
-		break;
-	case ST_CART:
-		if(!pc_iscarton(sd)) {
-			clif_skill_fail(sd,skill,0,0);
-			return 0;
-		}
-		break;
-	case ST_SHIELD:
-		if(sd->status.shield <= 0) {
-			clif_skill_fail(sd,skill,0,0);
-			return 0;
-		}
-		break;
-	case ST_SIGHT:
-		if(sd->sc_data[SC_SIGHT].timer == -1 && type&1) {
-			clif_skill_fail(sd,skill,0,0);
-			return 0;
-		}
-		break;
-	case ST_EXPLOSIONSPIRITS:
-		if(sd->sc_data[SC_EXPLOSIONSPIRITS].timer == -1) {
-			clif_skill_fail(sd,skill,0,0);
-			return 0;
-		}
-		break;
-	case ST_RECOV_WEIGHT_RATE:
-		if(battle_config.natural_heal_weight_rate <= 100 && sd->weight*100/sd->max_weight >= battle_config.natural_heal_weight_rate) {
-			clif_skill_fail(sd,skill,0,0);
-			return 0;
-		}
-		break;
-	case ST_MOVE_ENABLE:
-		{
-			struct walkpath_data wpd;
-			if(path_search(&wpd,sd->bl.m,sd->bl.x,sd->bl.y,sd->skillx,sd->skilly,1)==-1) {
-				clif_skill_fail(sd,skill,0,0);
-				return 0;
-			}
-		}
-		break;
-	case ST_WATER:
-		if(map_getcell(sd->bl.m,sd->bl.x,sd->bl.y) != 3 && (sd->sc_data[SC_DELUGE].timer==-1)){	//���ꔻ��
-			clif_skill_fail(sd,skill,0,0);
-			return 0;
-		}
-		break;
-	}
-
-	for(i=0;i<10;i++) {
-		int x = lv%11 - 1;
-		index[i] = -1;
-		if(itemid[i] <= 0)
-			continue;
-		if(itemid[i] >= 715 && itemid[i] <= 717 && sd->special_state.no_gemstone)
-			continue;
-		if(((itemid[i] >= 715 && itemid[i] <= 717) || itemid[i] == 1065) && sd->sc_data[SC_INTOABYSS].timer != -1)
-			continue;
-		if(skill == AM_POTIONPITCHER && i != x)
-			continue;
-
-		index[i] = pc_search_inventory(sd,itemid[i]);
-		if(index[i] < 0 || sd->status.inventory[index[i]].amount < amount[i]) {
-			if(itemid[i] == 716 || itemid[i] == 717)
-				clif_skill_fail(sd,skill,(7+(itemid[i]-716)),0);
-			else
-				clif_skill_fail(sd,skill,0,0);
-			return 0;
-		}
-	}
-
-	if(!(type&1))
-		return 1;
-
-	if(skill != AM_POTIONPITCHER) {
-		if(skill == AL_WARP && !(type&2))
-			return 1;
-		for(i=0;i<10;i++) {
-			if(index[i] >= 0)
-				pc_delitem(sd,index[i],amount[i],0);		// �A�C�e������
-		}
-	}
-
-	if(type&2)
-		return 1;
-
-	if(sp > 0) {					// SP����
-		sd->status.sp-=sp;
-		clif_updatestatus(sd,SP_SP);
-	}
-	if(hp > 0) {					// HP����
-		sd->status.hp-=hp;
-		clif_updatestatus(sd,SP_HP);
-	}
-	if(zeny > 0)					// Zeny����
-		pc_payzeny(sd,zeny);
-	if(spiritball > 0)				// ��������
-		pc_delspiritball(sd,spiritball,0);
-
-
-	return 1;
-}
-
-/*==========================================
- * �r�����Ԍv�Z
- *------------------------------------------
- */
-int skill_castfix( struct block_list *bl, int time )
-{
-	struct map_session_data *sd;
-	struct mob_data *md; // [Valaris]
-	struct status_change *sc_data;
-	int dex;
-	int castrate=100;
-	int skill,lv,castnodex;
-
-	nullpo_retr(0, bl);
-
-	if(bl->type==BL_MOB){ // Crash fix [Valaris]
-		md=(struct mob_data*)bl;
-		skill = md->skillid;
-		lv = md->skilllv;
-	}
-
-	else { 
-	sd=(struct map_session_data*)bl;
-		skill = sd->skillid;
-		lv = sd->skilllv;
-	}
-
-	sc_data = battle_get_sc_data(bl);
-	dex=battle_get_dex(bl);
-
-	if (skill > MAX_SKILL_DB || skill < 0)
-	    return 0;
-
-	castnodex=skill_get_castnodex(skill, lv);
-
-	if(time==0)
-		return 0;
-	if(castnodex > 0 && bl->type==BL_PC)
-		castrate=((struct map_session_data *)bl)->castrate;
-	else if (castnodex <= 0 && bl->type==BL_PC) {
-		castrate=((struct map_session_data *)bl)->castrate;
-		time=time*castrate*(battle_config.castrate_dex_scale - dex)/(battle_config.castrate_dex_scale * 100);
-		time=time*battle_config.cast_rate/100;
-	}
-
-	/* �T�t���M�E�� */
-	if(sc_data && sc_data[SC_SUFFRAGIUM].timer!=-1 ){
-		time=time*(100-sc_data[SC_SUFFRAGIUM].val1*15)/100;
-		skill_status_change_end( bl, SC_SUFFRAGIUM, -1);
-	}
-	/* �u���M�̎� */
-	if(sc_data && sc_data[SC_POEMBRAGI].timer!=-1 )
-		time=time*(100-(sc_data[SC_POEMBRAGI].val1*3+sc_data[SC_POEMBRAGI].val2
-				+(sc_data[SC_POEMBRAGI].val3>>16)))/100;
-
-	return (time>0)?time:0;
-}
-/*==========================================
- * �f�B���C�v�Z
- *------------------------------------------
- */
-int skill_delayfix( struct block_list *bl, int time )
-{
-	struct status_change *sc_data;
-
-	nullpo_retr(0, bl);
-
-	sc_data = battle_get_sc_data(bl);
-	if(time<=0)
-		return 0;
-
-	if(bl->type == BL_PC) {
-		if( battle_config.delay_dependon_dex )	/* dex�̉e�����v�Z���� */
-			time=time*(battle_config.castrate_dex_scale - battle_get_dex(bl))/battle_config.castrate_dex_scale;
-		time=time*battle_config.delay_rate/100;
-	}
-
-	/* �u���M�̎� */
-	if(sc_data && sc_data[SC_POEMBRAGI].timer!=-1 )
-		time=time*(100-(sc_data[SC_POEMBRAGI].val1*3+sc_data[SC_POEMBRAGI].val2
-				+(sc_data[SC_POEMBRAGI].val3&0xffff)))/100;
-
-	return (time>0)?time:0;
-}
-
-/*==========================================
- * �X�L���g�p�iID�w��j
- *------------------------------------------
- */
-int skill_use_id( struct map_session_data *sd, int target_id,
-	int skill_num, int skill_lv)
-{
-	unsigned int tick;
-	int casttime=0,delay=0,skill,range;
-	struct map_session_data* target_sd=NULL;
-	int forcecast=0;
-	struct block_list *bl;
-	struct status_change *sc_data;
-	tick=gettick();
-
-	nullpo_retr(0, sd);
-
-	if( (bl=map_id2bl(target_id)) == NULL ){
-/*		if(battle_config.error_log)
-			printf("skill target not found %d\n",target_id); */
-		return 0;
-	}
-	if(sd->bl.m != bl->m || pc_isdead(sd))
-		return 0;
-	
-	if(skillnotok(skill_num, sd)) // [MouseJstr]
-		return 0;
-	
-	if(sd->skillid==WZ_ICEWALL && map[sd->bl.m].flag.noicewall && !map[sd->bl.m].flag.pvp)  { // noicewall flag [Valaris]
-		clif_skill_fail(sd,sd->skillid,0,0);
-	return 0;
-	}
-	sc_data=sd->sc_data;
-
-	/* ���ق�ُ�i�������A�O�����Ȃǂ̔��������j */
-	if( sd->opt1>0 )
-		return 0;
-	if(sd->sc_data){
-		if(sc_data[SC_CHASEWALK].timer != -1) return 0;
-		if(sc_data[SC_VOLCANO].timer != -1){
-			if(skill_num==WZ_ICEWALL) return 0;
-		}
-		if(sc_data[SC_ROKISWEIL].timer!=-1){
-			if(skill_num==BD_ADAPTATION) return 0;
-		}
-		if( sd->sc_data[SC_DIVINA].timer!=-1 ||
-			sd->sc_data[SC_ROKISWEIL].timer!=-1 ||
-			(sd->sc_data[SC_AUTOCOUNTER].timer != -1 && sd->skillid != KN_AUTOCOUNTER) ||
-			sd->sc_data[SC_STEELBODY].timer != -1 ||
-			sd->sc_data[SC_BERSERK].timer != -1 ){
-			return 0;	/* ��Ԉُ�Ⓘ�قȂ� */
-		}
-
-		if(sc_data[SC_BLADESTOP].timer != -1){
-		int lv = sc_data[SC_BLADESTOP].val1;
-		if(sc_data[SC_BLADESTOP].val2==1) return 0;//���H���ꂽ���Ȃ̂Ń_��
-		if(lv==1) return 0;
-		if(lv==2 && skill_num!=MO_FINGEROFFENSIVE) return 0;
-		if(lv==3 && skill_num!=MO_FINGEROFFENSIVE && skill_num!=MO_INVESTIGATE) return 0;
-		if(lv==4 && skill_num!=MO_FINGEROFFENSIVE && skill_num!=MO_INVESTIGATE && skill_num!=MO_CHAINCOMBO) return 0;
-		if(lv==5 && skill_num!=MO_FINGEROFFENSIVE && skill_num!=MO_INVESTIGATE && skill_num!=MO_CHAINCOMBO && skill_num!=MO_EXTREMITYFIST) return 0;
-	}
-	}
-
-	if(sd->status.option&4 && skill_num==TF_HIDING)
-		return 0;
-	if(sd->status.option&2 && skill_num!=TF_HIDING && skill_num!=AS_GRIMTOOTH && skill_num!=RG_BACKSTAP && skill_num!=RG_RAID )
-		return 0;
-
-	if(map[sd->bl.m].flag.gvg){ //GvG�Ŏg�p�ł��Ȃ��X�L��
-		switch(skill_num){
-		case SM_ENDURE:
-		case AL_TELEPORT:
-		case AL_WARP:
-		case WZ_ICEWALL:
-		case TF_BACKSLIDING:
-		case LK_BERSERK:
-		case HP_BASILICA:
-		case ST_CHASEWALK:
-		return 0;
-		}
-	}
-
-	/* ���t/�_���X�� */
-	if( sc_data && sc_data[SC_DANCING].timer!=-1 ){
-//		if(battle_config.pc_skill_log)
-//			printf("dancing! %d\n",skill_num);
-		if( sc_data[SC_DANCING].val4 && skill_num!=BD_ADAPTATION ) //���t���̓A�h���u�ȊO�s��
-			return 0;
-		if(skill_num!=BD_ADAPTATION && skill_num!=BA_MUSICALSTRIKE && skill_num!=DC_THROWARROW){
-			return 0;
-		}
-	}
-
-	if(skill_get_inf2(skill_num)&0x200 && sd->bl.id == target_id)
-		return 0;
-	//���O�̃X�L���������o����K�v�̂���X�L��
-	switch(skill_num){
-	case SA_CASTCANCEL:
-		if(sd->skillid != skill_num){ //�L���X�g�L�����Z�����̂͊o���Ȃ�
-			sd->skillid_old = sd->skillid;
-			sd->skilllv_old = sd->skilllv;
-			break;
-		}
-	case BD_ENCORE:					/* �A���R�[�� */
-		if(!sd->skillid_dance){ //�O��g�p�����x�肪�Ȃ��Ƃ���
-			clif_skill_fail(sd,skill_num,0,0);
-			return 0;
-		}else{
-			sd->skillid_old = skill_num;
-		}
-		break;
-	}
-
-	sd->skillid = skill_num;
-	sd->skilllv = skill_lv;
-
-	switch(skill_num){ //���O�Ƀ��x�����ς�����肷��X�L��
-	case BD_LULLABY:				/* �q��� */
-	case BD_RICHMANKIM:				/* �j�����h�̉� */
-	case BD_ETERNALCHAOS:			/* �i���̍��� */
-	case BD_DRUMBATTLEFIELD:		/* �푾�ۂ̋��� */
-	case BD_RINGNIBELUNGEN:			/* �j�[�x�����O�̎w�� */
-	case BD_ROKISWEIL:				/* ���L�̋��� */
-	case BD_INTOABYSS:				/* �[���̒��� */
-	case BD_SIEGFRIED:				/* �s���g�̃W�[�N�t���[�h */
-	case BD_RAGNAROK:				/* �_�X�̉��� */
-	case CG_MOONLIT:				/* ������̐�ɗ�����Ԃт� */
-		{
-			int range=1;
-			int c=0;
-			map_foreachinarea(skill_check_condition_char_sub,sd->bl.m,
-				sd->bl.x-range,sd->bl.y-range,
-				sd->bl.x+range,sd->bl.y+range,BL_PC,&sd->bl,&c);
-			if(c<1){
-				clif_skill_fail(sd,skill_num,0,0);
-				return 0;
-			}else if(c==99){ //�����s�v�ݒ肾����
-				;
-			}else{
-				sd->skilllv=(c + skill_lv)/2;
-			}
-		}
-		break;
-	}
-
-	if(!skill_check_condition(sd,0)) return 0;
-
-	/* �˒��Ə�Q���`�F�b�N */
-	range = skill_get_range(skill_num,skill_lv);
-	if(range < 0)
-		range = battle_get_range(&sd->bl) - (range + 1);
-	if(!battle_check_range(&sd->bl,bl,range) )
-		return 0;
-
-	if(bl->type==BL_PC) {
-		target_sd=(struct map_session_data*)bl;
-		if(target_sd && skill_num == ALL_RESURRECTION && !pc_isdead(target_sd))
-			return 0;
-	}
-	if((skill_num != MO_CHAINCOMBO &&
-	    skill_num != MO_COMBOFINISH &&
-	    skill_num != MO_EXTREMITYFIST &&
-	    skill_num != CH_TIGERFIST &&
-	    skill_num != CH_CHAINCRUSH) ||
-		(skill_num == MO_EXTREMITYFIST && sd->state.skill_flag) )
-		pc_stopattack(sd);
-
-	casttime=skill_castfix(&sd->bl, skill_get_cast( skill_num,skill_lv) );
-	if(skill_num != SA_MAGICROD)
-		delay=skill_delayfix(&sd->bl, skill_get_delay( skill_num,skill_lv) );
-	sd->state.skillcastcancel = skill_db[skill_num].castcancel;
-
-	switch(skill_num){	/* ��������ȏ������K�v */
-//	case AL_HEAL:	/* �q�[�� */
-//		if(battle_check_undead(battle_get_race(bl),battle_get_elem_type(bl)))
-//			forcecast=1;	/* �q�[���A�^�b�N�Ȃ�r���G�t�F�N�g�L�� */
-//		break;
-	case ALL_RESURRECTION:	/* ���U���N�V���� */
-		if(bl->type != BL_PC && battle_check_undead(battle_get_race(bl),battle_get_elem_type(bl))){	/* �G���A���f�b�h�Ȃ� */
-			forcecast=1;	/* �^�[���A���f�b�g�Ɠ����r������ */
-			casttime=skill_castfix(&sd->bl, skill_get_cast(PR_TURNUNDEAD,skill_lv) );
-		}
-		break;
-	case MO_FINGEROFFENSIVE:	/* �w�e */
-		casttime += casttime * ((skill_lv > sd->spiritball)? sd->spiritball:skill_lv);
-		break;
-	case MO_CHAINCOMBO:		/*�A�ŏ�*/
-		target_id = sd->attacktarget;
-		if( sc_data && sc_data[SC_BLADESTOP].timer!=-1 ){
-			struct block_list *tbl;
-			if((tbl=(struct block_list *)sc_data[SC_BLADESTOP].val4) == NULL) //�^�[�Q�b�g�����Ȃ��H
-				return 0;
-			target_id = tbl->id;
-		}
-		break;
-	case MO_COMBOFINISH:		/*�җ���*/
-	case CH_TIGERFIST:		/* ���Ռ� */
-	case CH_CHAINCRUSH:		/* �A������ */
-		target_id = sd->attacktarget;
-		break;
-
-// -- moonsoul	(altered to allow proper usage of extremity from new champion combos)
-//
-	case MO_EXTREMITYFIST:	/*���C���e�P��*/
-		if(sc_data && sc_data[SC_COMBO].timer != -1 && (sc_data[SC_COMBO].val1 == MO_COMBOFINISH || sc_data[SC_COMBO].val1 == CH_CHAINCRUSH)) {
-			casttime = 0;
-			target_id = sd->attacktarget;
-		}
-		forcecast=1;
-		break;
-	case SA_MAGICROD:
-	case SA_SPELLBREAKER:
-		forcecast=1;
-		break;
-	case WE_MALE:
-	case WE_FEMALE:
-		{
-		struct map_session_data *p_sd = NULL;
-		if((p_sd = pc_get_partner(sd)) == NULL)
-			return 0;
-		target_id = p_sd->bl.id;
-		//range������1�񌟍�
-		range = skill_get_range(skill_num,skill_lv);
-		if(range < 0)
-			range = battle_get_range(&sd->bl) - (range + 1);
-		if(!battle_check_range(&sd->bl,&p_sd->bl,range) ){
-			return 0;
-			}
-		}
-		break;
-	case AS_SPLASHER:				/* �x�i���X�v���b�V���[ */
-		{
-			struct status_change *t_sc_data = battle_get_sc_data(bl);
-			if(t_sc_data && t_sc_data[SC_POISON].timer==-1){
-				clif_skill_fail(sd,skill_num,0,10);
-				return 0;
-			}
-		}
-		break;
-	case PF_MEMORIZE:				/* �������C�Y */
-		casttime = 12000;
-		break;
-
-	}
-
-	//�������C�Y��ԂȂ�L���X�g�^�C����1/3
-	if(sc_data && sc_data[SC_MEMORIZE].timer != -1 && casttime > 0){
-		casttime = casttime/3;
-		if((--sc_data[SC_MEMORIZE].val2)<=0)
-			skill_status_change_end(&sd->bl, SC_MEMORIZE, -1);
-	}
-
-	if(battle_config.pc_skill_log)
-		printf("PC %d skill use target_id=%d skill=%d lv=%d cast=%d\n",sd->bl.id,target_id,skill_num,skill_lv,casttime);
-
-//	if(sd->skillitem == skill_num)
-//		casttime = delay = 0;
-
-	if( casttime>0 || forcecast ){ /* �r�����K�v */
-		struct mob_data *md;
-		clif_skillcasting( &sd->bl,
-			sd->bl.id, target_id, 0,0, skill_num,casttime);
-
-		/* �r�����������X�^�[ */
-		if( bl->type==BL_MOB && (md=(struct mob_data *)bl) && mob_db[md->class].mode&0x10 &&
-			md->state.state!=MS_ATTACK && sd->invincible_timer == -1){
-				md->target_id=sd->bl.id;
-				md->state.targettype = ATTACKABLE;
-				md->min_chase=13;
-		}
-	}
-
-	if( casttime<=0 )	/* �r���̖������̂̓L�����Z������Ȃ� */
-		sd->state.skillcastcancel=0;
-
-	sd->skilltarget	= target_id;
-/*	sd->cast_target_bl	= bl; */
-	sd->skillx		= 0;
-	sd->skilly		= 0;
-	sd->canact_tick = tick + casttime + delay;
-	sd->canmove_tick = tick;
-	if(!(battle_config.pc_cloak_check_type&2) && sc_data && sc_data[SC_CLOAKING].timer != -1 && sd->skillid != AS_CLOAKING)
-		skill_status_change_end(&sd->bl,SC_CLOAKING,-1);
-	if(casttime > 0) {
-		sd->skilltimer = add_timer( tick+casttime, skill_castend_id, sd->bl.id, 0 );
-		if((skill = pc_checkskill(sd,SA_FREECAST)) > 0) {
-			sd->prev_speed = sd->speed;
-			sd->speed = sd->speed*(175 - skill*5)/100;
-			clif_updatestatus(sd,SP_SPEED);
-		}
-		else
-			pc_stop_walking(sd,0);
-	}
-	else {
-		if(skill_num != SA_CASTCANCEL)
-			sd->skilltimer = -1;
-		skill_castend_id(sd->skilltimer,tick,sd->bl.id,0);
-	}
-
-	//�}�W�b�N�p���[�̌��ʏI��
-	if(sc_data && sc_data[SC_MAGICPOWER].timer != -1 && skill_num != HW_MAGICPOWER)
-		skill_status_change_end(&sd->bl,SC_MAGICPOWER,-1);
-
-	return 0;
-}
-
-/*==========================================
- * �X�L���g�p�i�ꏊ�w��j
- *------------------------------------------
- */
-int skill_use_pos( struct map_session_data *sd,
-	int skill_x, int skill_y, int skill_num, int skill_lv)
-{
-	struct block_list bl;
-	struct status_change *sc_data;
-	unsigned int tick;
-	int casttime=0,delay=0,skill,range;
-
-	nullpo_retr(0, sd);
-
-	if(pc_isdead(sd))
-		return 0;
-
-        if (skillnotok(skill_num, sd)) // [MoueJstr]
-                return 0;
-
-	sc_data=sd->sc_data;
-
-	if( sd->opt1>0 )
-		return 0;
-	if(sc_data){
-		if( sc_data[SC_DIVINA].timer!=-1 ||
-			sc_data[SC_ROKISWEIL].timer!=-1 ||
-			sc_data[SC_AUTOCOUNTER].timer != -1 ||
-			sc_data[SC_STEELBODY].timer != -1 ||
-			sc_data[SC_DANCING].timer!=-1 ||
-			sc_data[SC_BERSERK].timer != -1 )
-			return 0;	/* ��Ԉُ�Ⓘ�قȂ� */
-	}
-
-	if(sd->status.option&2)
-		return 0;
-
-	if(map[sd->bl.m].flag.gvg && (skill_num == SM_ENDURE || skill_num == AL_TELEPORT || skill_num == AL_WARP ||
-		skill_num == WZ_ICEWALL || skill_num == TF_BACKSLIDING))
-		return 0;
-
-	sd->skillid = skill_num;
-	sd->skilllv = skill_lv;
-	sd->skillx = skill_x;
-	sd->skilly = skill_y;
-	if(!skill_check_condition(sd,0)) return 0;
-
-	/* �˒��Ə�Q���`�F�b�N */
-	bl.type = BL_NUL;
-	bl.m = sd->bl.m;
-	bl.x = skill_x;
-	bl.y = skill_y;
-	range = skill_get_range(skill_num,skill_lv);
-	if(range < 0)
-		range = battle_get_range(&sd->bl) - (range + 1);
-	if(!battle_check_range(&sd->bl,&bl,range) )
-		return 0;
-
-	pc_stopattack(sd);
-
-	casttime=skill_castfix(&sd->bl, skill_get_cast( skill_num,skill_lv) );
-	delay=skill_delayfix(&sd->bl, skill_get_delay( skill_num,skill_lv) );
-	sd->state.skillcastcancel = skill_db[skill_num].castcancel;
-
-	if(battle_config.pc_skill_log)
-		printf("PC %d skill use target_pos=(%d,%d) skill=%d lv=%d cast=%d\n",sd->bl.id,skill_x,skill_y,skill_num,skill_lv,casttime);
-
-//	if(sd->skillitem == skill_num)
-//		casttime = delay = 0;
-	//�������C�Y��ԂȂ�L���X�g�^�C����1/3
-	if(sc_data && sc_data[SC_MEMORIZE].timer != -1 && casttime > 0){
-		casttime = casttime/3;
-		if((--sc_data[SC_MEMORIZE].val2)<=0)
-			skill_status_change_end(&sd->bl, SC_MEMORIZE, -1);
-	}
-
-	if( casttime>0 )	/* �r�����K�v */
-		clif_skillcasting( &sd->bl,
-			sd->bl.id, 0, skill_x,skill_y, skill_num,casttime);
-
-	if( casttime<=0 )	/* �r���̖������̂̓L�����Z������Ȃ� */
-		sd->state.skillcastcancel=0;
-
-	sd->skilltarget	= 0;
-/*	sd->cast_target_bl	= NULL; */
-	tick=gettick();
-	sd->canact_tick = tick + casttime + delay;
-	sd->canmove_tick = tick;
-	if(!(battle_config.pc_cloak_check_type&2) && sc_data && sc_data[SC_CLOAKING].timer != -1)
-		skill_status_change_end(&sd->bl,SC_CLOAKING,-1);
-	if(casttime > 0) {
-		sd->skilltimer = add_timer( tick+casttime, skill_castend_pos, sd->bl.id, 0 );
-		if((skill = pc_checkskill(sd,SA_FREECAST)) > 0) {
-			sd->prev_speed = sd->speed;
-			sd->speed = sd->speed*(175 - skill*5)/100;
-			clif_updatestatus(sd,SP_SPEED);
-		}
-		else
-			pc_stop_walking(sd,0);
-	}
-	else {
-		sd->skilltimer = -1;
-		skill_castend_pos(sd->skilltimer,tick,sd->bl.id,0);
-	}
-	//�}�W�b�N�p���[�̌��ʏI��
-	if(sc_data && sc_data[SC_MAGICPOWER].timer != -1 && skill_num != HW_MAGICPOWER)
-		skill_status_change_end(&sd->bl,SC_MAGICPOWER,-1);
-
-	return 0;
-}
-
-/*==========================================
- * �X�L���r���L�����Z��
- *------------------------------------------
- */
-int skill_castcancel(struct block_list *bl,int type)
-{
-	int inf;
-	int ret=0;
-
-	nullpo_retr(0, bl);
-
-	if(bl->type==BL_PC){
-		struct map_session_data *sd=(struct map_session_data *)bl;
-		unsigned long tick=gettick();
-		nullpo_retr(0, sd);
-		sd->canact_tick=tick;
-		sd->canmove_tick = tick;
-		if( sd->skilltimer!=-1){
-			if(pc_checkskill(sd,SA_FREECAST) > 0) {
-				sd->speed = sd->prev_speed;
-				clif_updatestatus(sd,SP_SPEED);
-			}
-			if(!type) {
-				if((inf = skill_get_inf( sd->skillid )) == 2 || inf == 32)
-					ret=delete_timer( sd->skilltimer, skill_castend_pos );
-				else
-					ret=delete_timer( sd->skilltimer, skill_castend_id );
-				if(ret<0)
-					printf("delete timer error : skillid : %d\n",sd->skillid);
-			}
-			else {
-				if((inf = skill_get_inf( sd->skillid_old )) == 2 || inf == 32)
-					ret=delete_timer( sd->skilltimer, skill_castend_pos );
-				else
-					ret=delete_timer( sd->skilltimer, skill_castend_id );
-				if(ret<0)
-					printf("delete timer error : skillid : %d\n",sd->skillid_old);
-			}
-			sd->skilltimer=-1;
-			clif_skillcastcancel(bl);
-		}
-
-		return 0;
-	}else if(bl->type==BL_MOB){
-		struct mob_data *md=(struct mob_data *)bl;
-		nullpo_retr(0, md);
-		if( md->skilltimer!=-1 ){
-			if((inf = skill_get_inf( md->skillid )) == 2 || inf == 32)
-				ret=delete_timer( md->skilltimer, mobskill_castend_pos );
-			else
-				ret=delete_timer( md->skilltimer, mobskill_castend_id );
-			md->skilltimer=-1;
-			clif_skillcastcancel(bl);
-		}
-		if(ret<0)
-			printf("delete timer error : skillid : %d\n",md->skillid);
-		return 0;
-	}
-	return 1;
-}
-/*=========================================
- * �u�����f�B�b�V���X�s�A �����͈͌���
- *----------------------------------------
- */
-void skill_brandishspear_first(struct square *tc,int dir,int x,int y){
-
-	nullpo_retv(tc);
-
-	if(dir == 0){
-		tc->val1[0]=x-2;
-		tc->val1[1]=x-1;
-		tc->val1[2]=x;
-		tc->val1[3]=x+1;
-		tc->val1[4]=x+2;
-		tc->val2[0]=
-		tc->val2[1]=
-		tc->val2[2]=
-		tc->val2[3]=
-		tc->val2[4]=y-1;
-	}
-	else if(dir==2){
-		tc->val1[0]=
-		tc->val1[1]=
-		tc->val1[2]=
-		tc->val1[3]=
-		tc->val1[4]=x+1;
-		tc->val2[0]=y+2;
-		tc->val2[1]=y+1;
-		tc->val2[2]=y;
-		tc->val2[3]=y-1;
-		tc->val2[4]=y-2;
-	}
-	else if(dir==4){
-		tc->val1[0]=x-2;
-		tc->val1[1]=x-1;
-		tc->val1[2]=x;
-		tc->val1[3]=x+1;
-		tc->val1[4]=x+2;
-		tc->val2[0]=
-		tc->val2[1]=
-		tc->val2[2]=
-		tc->val2[3]=
-		tc->val2[4]=y+1;
-	}
-	else if(dir==6){
-		tc->val1[0]=
-		tc->val1[1]=
-		tc->val1[2]=
-		tc->val1[3]=
-		tc->val1[4]=x-1;
-		tc->val2[0]=y+2;
-		tc->val2[1]=y+1;
-		tc->val2[2]=y;
-		tc->val2[3]=y-1;
-		tc->val2[4]=y-2;
-	}
-	else if(dir==1){
-		tc->val1[0]=x-1;
-		tc->val1[1]=x;
-		tc->val1[2]=x+1;
-		tc->val1[3]=x+2;
-		tc->val1[4]=x+3;
-		tc->val2[0]=y-4;
-		tc->val2[1]=y-3;
-		tc->val2[2]=y-1;
-		tc->val2[3]=y;
-		tc->val2[4]=y+1;
-	}
-	else if(dir==3){
-		tc->val1[0]=x+3;
-		tc->val1[1]=x+2;
-		tc->val1[2]=x+1;
-		tc->val1[3]=x;
-		tc->val1[4]=x-1;
-		tc->val2[0]=y-1;
-		tc->val2[1]=y;
-		tc->val2[2]=y+1;
-		tc->val2[3]=y+2;
-		tc->val2[4]=y+3;
-	}
-	else if(dir==5){
-		tc->val1[0]=x+1;
-		tc->val1[1]=x;
-		tc->val1[2]=x-1;
-		tc->val1[3]=x-2;
-		tc->val1[4]=x-3;
-		tc->val2[0]=y+3;
-		tc->val2[1]=y+2;
-		tc->val2[2]=y+1;
-		tc->val2[3]=y;
-		tc->val2[4]=y-1;
-	}
-	else if(dir==7){
-		tc->val1[0]=x-3;
-		tc->val1[1]=x-2;
-		tc->val1[2]=x-1;
-		tc->val1[3]=x;
-		tc->val1[4]=x+1;
-		tc->val2[1]=y;
-		tc->val2[0]=y+1;
-		tc->val2[2]=y-1;
-		tc->val2[3]=y-2;
-		tc->val2[4]=y-3;
-	}
-
-}
-
-/*=========================================
- * �u�����f�B�b�V���X�s�A �������� �͈͊g��
- *-----------------------------------------
- */
-void skill_brandishspear_dir(struct square *tc,int dir,int are){
-
-	int c;
-
-	nullpo_retv(tc);
-
-	for(c=0;c<5;c++){
-		if(dir==0){
-			tc->val2[c]+=are;
-		}else if(dir==1){
-			tc->val1[c]-=are; tc->val2[c]+=are;
-		}else if(dir==2){
-			tc->val1[c]-=are;
-		}else if(dir==3){
-			tc->val1[c]-=are; tc->val2[c]-=are;
-		}else if(dir==4){
-			tc->val2[c]-=are;
-		}else if(dir==5){
-			tc->val1[c]+=are; tc->val2[c]-=are;
-		}else if(dir==6){
-			tc->val1[c]+=are;
-		}else if(dir==7){
-			tc->val1[c]+=are; tc->val2[c]+=are;
-		}
-	}
-}
-
-/*==========================================
- * �f�B�{�[�V���� �L���m�F
- *------------------------------------------
- */
-void skill_devotion(struct map_session_data *md,int target)
-{
-	// ���m�F
-	int n;
-
-	nullpo_retv(md);
-
-	for(n=0;n<5;n++){
-		if(md->dev.val1[n]){
-			struct map_session_data *sd = map_id2sd(md->dev.val1[n]);
-			// ���肪���‚���Ȃ� // ������f�B�{���Ă�̂���������Ȃ� // ����������Ă�
-			if( sd == NULL || (sd->sc_data && (md->bl.id != sd->sc_data[SC_DEVOTION].val1)) || skill_devotion3(&md->bl,md->dev.val1[n])){
-				skill_devotion_end(md,sd,n);
-			}
-		}
-	}
-}
-void skill_devotion2(struct block_list *bl,int crusader)
-{
-	// ��f�B�{�[�V���������������̋����`�F�b�N
-	struct map_session_data *sd = map_id2sd(crusader);
-
-	nullpo_retv(bl);
-
-	if(sd) skill_devotion3(&sd->bl,bl->id);
-}
-int skill_devotion3(struct block_list *bl,int target)
-{
-	// �N���Z�����������̋����`�F�b�N
-	struct map_session_data *md;
-	struct map_session_data *sd;
-	int n,r=0;
-
-	nullpo_retr(1, bl);
-
-	if( (md = (struct map_session_data *)bl) == NULL || (sd = map_id2sd(target)) == NULL )
-		return 1;
-	else
-		r = distance(bl->x,bl->y,sd->bl.x,sd->bl.y);
-
-	if(pc_checkskill(sd,CR_DEVOTION)+6 < r){	// ���e�͈͂𒴂��Ă�
-		for(n=0;n<5;n++)
-			if(md->dev.val1[n]==target)
-				md->dev.val2[n]=0;	// ���ꂽ���́A����؂邾��
-		clif_devotion(md,sd->bl.id);
-		return 1;
-	}
-	return 0;
-}
-
-void skill_devotion_end(struct map_session_data *md,struct map_session_data *sd,int target)
-{
-	// �N���Z�Ɣ�f�B�{�L�����̃��Z�b�g
-	nullpo_retv(md);
-	nullpo_retv(sd);
-
-	md->dev.val1[target]=md->dev.val2[target]=0;
-	if(sd && sd->sc_data){
-	//	skill_status_change_end(sd->bl,SC_DEVOTION,-1);
-		sd->sc_data[SC_DEVOTION].val1=0;
-		sd->sc_data[SC_DEVOTION].val2=0;
-		clif_status_change(&sd->bl,SC_DEVOTION,0);
-		clif_devotion(md,sd->bl.id);
-	}
-}
-/*==========================================
- * �I�[�g�X�y��
- *------------------------------------------
- */
-int skill_autospell(struct map_session_data *sd,int skillid)
-{
-	int skilllv;
-	int maxlv=1,lv;
-
-	nullpo_retr(0, sd);
-
-	skilllv = pc_checkskill(sd,SA_AUTOSPELL);
-
-	if(skillid==MG_NAPALMBEAT)	maxlv=3;
-	else if(skillid==MG_COLDBOLT || skillid==MG_FIREBOLT || skillid==MG_LIGHTNINGBOLT){
-		if(skilllv==2) maxlv=1;
-		else if(skilllv==3) maxlv=2;
-		else if(skilllv>=4) maxlv=3;
-	}
-	else if(skillid==MG_SOULSTRIKE){
-		if(skilllv==5) maxlv=1;
-		else if(skilllv==6) maxlv=2;
-		else if(skilllv>=7) maxlv=3;
-	}
-	else if(skillid==MG_FIREBALL){
-		if(skilllv==8) maxlv=1;
-		else if(skilllv>=9) maxlv=2;
-	}
-	else if(skillid==MG_FROSTDIVER) maxlv=1;
-	else return 0;
-
-	if(maxlv > (lv=pc_checkskill(sd,skillid)))
-		maxlv = lv;
-
-	skill_status_change_start(&sd->bl,SC_AUTOSPELL,skilllv,skillid,maxlv,0,	// val1:�X�L��ID val2:�g�p�ő�Lv
-		skill_get_time(SA_AUTOSPELL,skilllv),0);// �ɂ��Ă݂�����bscript�������Ղ��E�E�E�H
-	return 0;
-}
-
-/*==========================================
- * �M�����O�X�^�[�p���_�C�X���菈��(foreachinarea)
- *------------------------------------------
- */
-
-static int skill_gangster_count(struct block_list *bl,va_list ap)
-{
-	int *c;
-	struct map_session_data *sd;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-
-	sd=(struct map_session_data*)bl;
-	c=va_arg(ap,int *);
-
-	if(sd && c && pc_issit(sd) && pc_checkskill(sd,RG_GANGSTER) > 0)
-		(*c)++;
-	return 0;
-}
-
-static int skill_gangster_in(struct block_list *bl,va_list ap)
-{
-	struct map_session_data *sd;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-
-	sd=(struct map_session_data*)bl;
-	if(sd && pc_issit(sd) && pc_checkskill(sd,RG_GANGSTER) > 0)
-		sd->state.gangsterparadise=1;
-	return 0;
-}
-
-static int skill_gangster_out(struct block_list *bl,va_list ap)
-{
-	struct map_session_data *sd;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-
-	sd=(struct map_session_data*)bl;
-	if(sd && sd->state.gangsterparadise)
-		sd->state.gangsterparadise=0;
-	return 0;
-}
-
-int skill_gangsterparadise(struct map_session_data *sd ,int type)
-{
-	int range=1;
-	int c=0;
-
-	nullpo_retr(0, sd);
-
-	if(pc_checkskill(sd,RG_GANGSTER) <= 0)
-		return 0;
-
-	if(type==1) {/* ���������̏��� */
-		map_foreachinarea(skill_gangster_count,sd->bl.m,
-			sd->bl.x-range,sd->bl.y-range,
-			sd->bl.x+range,sd->bl.y+range,BL_PC,&c);
-		if(c > 0) {/*�M�����O�X�^�[���������玩���ɂ��M�����O�X�^�[�����t�^*/
-			map_foreachinarea(skill_gangster_in,sd->bl.m,
-				sd->bl.x-range,sd->bl.y-range,
-				sd->bl.x+range,sd->bl.y+range,BL_PC);
-			sd->state.gangsterparadise = 1;
-		}
-		return 0;
-	}
-	else if(type==0) {/* �����オ�����Ƃ��̏��� */
-		map_foreachinarea(skill_gangster_count,sd->bl.m,
-			sd->bl.x-range,sd->bl.y-range,
-			sd->bl.x+range,sd->bl.y+range,BL_PC,&c);
-		if(c < 1)
-			map_foreachinarea(skill_gangster_out,sd->bl.m,
-				sd->bl.x-range,sd->bl.y-range,
-				sd->bl.x+range,sd->bl.y+range,BL_PC);
-		sd->state.gangsterparadise = 0;
-		return 0;
-	}
-	return 0;
-}
-/*==========================================
- * �����W���[�N�E�X�N���[�����菈��(foreachinarea)
- *------------------------------------------
- */
-int skill_frostjoke_scream(struct block_list *bl,va_list ap)
-{
-	struct block_list *src;
-	int skillnum,skilllv;
-	unsigned int tick;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, src=va_arg(ap,struct block_list*));
-
-	skillnum=va_arg(ap,int);
-	skilllv=va_arg(ap,int);
-	tick=va_arg(ap,unsigned int);
-
-	if(src == bl)//�����ɂ͌����Ȃ�
-		return 0;
-
-	if(battle_check_target(src,bl,BCT_ENEMY) > 0)
-		skill_additional_effect(src,bl,skillnum,skilllv,BF_MISC,tick);
-	else if(battle_check_target(src,bl,BCT_PARTY) > 0) {
-		if(rand()%100 < 10)//PT�����o�ɂ���m���ł�����(�Ƃ肠����10%)
-			skill_additional_effect(src,bl,skillnum,skilllv,BF_MISC,tick);
-	}
-
-	return 0;
-}
-
-/*==========================================
- *�A�u���J�_�u���̎g�p�X�L������(����X�L�����_���Ȃ�0��Ԃ�)
- *------------------------------------------
- */
-int skill_abra_dataset(int skilllv)
-{
-	int skill = rand()%331;
-	//db�Ɋ�Â����x���E�m������
-	if(skill_abra_db[skill].req_lv > skilllv || rand()%10000 >= skill_abra_db[skill].per) return 0;
-	//NPC�X�L���̓_��
-	if(skill >= NPC_PIERCINGATT && skill <= NPC_SUMMONMONSTER) return 0;
-	//���t�X�L���̓_��
-	if(skill_is_danceskill(skill)) return 0;
-
-	return skill;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int skill_attack_area(struct block_list *bl,va_list ap)
-{
-	struct block_list *src,*dsrc;
-	int atk_type,skillid,skilllv,flag,type;
-	unsigned int tick;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-
-	atk_type = va_arg(ap,int);
-	if((src=va_arg(ap,struct block_list*)) == NULL)
-		return 0;
-	if((dsrc=va_arg(ap,struct block_list*)) == NULL)
-		return 0;
-	skillid=va_arg(ap,int);
-	skilllv=va_arg(ap,int);
-	tick=va_arg(ap,unsigned int);
-	flag=va_arg(ap,int);
-	type=va_arg(ap,int);
-
-	if(battle_check_target(dsrc,bl,type) > 0)
-		skill_attack(atk_type,src,dsrc,bl,skillid,skilllv,tick,flag);
-
-	return 0;
-}
-/*==========================================
- *
- *------------------------------------------
- */
-int skill_clear_element_field(struct block_list *bl)
-{
-	struct mob_data *md=NULL;
-	struct map_session_data *sd=NULL;
-	int i,skillid;
-
-	nullpo_retr(0, bl);
-
-	if(bl->type==BL_MOB)
-		md=(struct mob_data *)bl;
-	if(bl->type==BL_PC)
-		sd=(struct map_session_data *)bl;
-
-	for(i=0;i<MAX_MOBSKILLUNITGROUP;i++){
-		if(sd){
-			skillid=sd->skillunit[i].skill_id;
-			if(skillid==SA_DELUGE||skillid==SA_VOLCANO||skillid==SA_VIOLENTGALE||skillid==SA_LANDPROTECTOR)
-				skill_delunitgroup(&sd->skillunit[i]);
-		}else if(md){
-			skillid=md->skillunit[i].skill_id;
-			if(skillid==SA_DELUGE||skillid==SA_VOLCANO||skillid==SA_VIOLENTGALE||skillid==SA_LANDPROTECTOR)
-				skill_delunitgroup(&md->skillunit[i]);
-		}
-	}
-	return 0;
-}
-/*==========================================
- * �����h�v���e�N�^�[�`�F�b�N(foreachinarea)
- *------------------------------------------
- */
-int skill_landprotector(struct block_list *bl, va_list ap )
-{
-	int skillid;
-	int *alive;
-	struct skill_unit *unit;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-
-	skillid=va_arg(ap,int);
-	alive=va_arg(ap,int *);
-	if((unit=(struct skill_unit *)bl) == NULL)
-		return 0;
-
-	if(skillid==SA_LANDPROTECTOR){
-		skill_delunit(unit);
-	}else{
-		if(alive && unit->group->skill_id==SA_LANDPROTECTOR)
-			(*alive)=0;
-	}
-	return 0;
-}
-/*==========================================
- * �C�h�D���̗ь�̉񕜏���(foreachinarea)
- *------------------------------------------
- */
-int skill_idun_heal(struct block_list *bl, va_list ap )
-{
-	struct skill_unit *unit;
-	struct skill_unit_group *sg;
-	int heal;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, unit = va_arg(ap,struct skill_unit *));
-	nullpo_retr(0, sg = unit->group);
-
-	heal=30+sg->skill_lv*5+((sg->val1)>>16)*5+((sg->val1)&0xfff)/2;
-
-	if(bl->type == BL_SKILL || bl->id == sg->src_id)
-		return 0;
-
-	if(bl->type == BL_PC || bl->type == BL_MOB){
-	clif_skill_nodamage(&unit->bl,bl,AL_HEAL,heal,1);
-	battle_heal(NULL,bl,heal,0,0);
-	}
-	return 0;
-}
-
-/*==========================================
- * �w��͈͓���src�ɑ΂��ėL���ȃ^�[�Q�b�g��bl�̐��𐔂���(foreachinarea)
- *------------------------------------------
- */
-int skill_count_target(struct block_list *bl, va_list ap ){
-	struct block_list *src;
-	int *c;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-
-	if((src = va_arg(ap,struct block_list *)) == NULL)
-		return 0;
-	if((c = va_arg(ap,int *)) == NULL)
-		return 0;
-	if(battle_check_target(src,bl,BCT_ENEMY) > 0)
-		(*c)++;
-	return 0;
-}
-/*==========================================
- * �g���b�v�͈͏���(foreachinarea)
- *------------------------------------------
- */
-int skill_trap_splash(struct block_list *bl, va_list ap )
-{
-	struct block_list *src;
-	int tick;
-	int splash_count;
-	struct skill_unit *unit;
-	struct skill_unit_group *sg;
-	struct block_list *ss;
-	int i;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, src = va_arg(ap,struct block_list *));
-	nullpo_retr(0, unit = (struct skill_unit *)src);
-	nullpo_retr(0, sg = unit->group);
-	nullpo_retr(0, ss = map_id2bl(sg->src_id));
-
-	tick = va_arg(ap,int);
-	splash_count = va_arg(ap,int);
-
-	if(battle_check_target(src,bl,BCT_ENEMY) > 0){
-		switch(sg->unit_id){
-			case 0x95:	/* �T���h�}�� */
-			case 0x96:	/* �t���b�V���[ */
-			case 0x94:	/* �V���b�N�E�F�[�u�g���b�v */
-				skill_additional_effect(ss,bl,sg->skill_id,sg->skill_lv,BF_MISC,tick);
-				break;
-			case 0x8f:	/* �u���X�g�}�C�� */
-			case 0x98:	/* �N���C���A�[�g���b�v */
-				for(i=0;i<splash_count;i++){
-					skill_attack(BF_MISC,ss,src,bl,sg->skill_id,sg->skill_lv,tick,(sg->val2)?0x0500:0);
-				}
-			case 0x97:	/* �t���[�W���O�g���b�v */
-					skill_attack(BF_WEAPON,	ss,src,bl,sg->skill_id,sg->skill_lv,tick,(sg->val2)?0x0500:0);
-				break;
-			default:
-				break;
-		}
-	}
-
-	return 0;
-}
-/*----------------------------------------------------------------------------
- * �X�e�[�^�X�ُ�
- *----------------------------------------------------------------------------
- */
-
-/*==========================================
- * �X�e�[�^�X�ُ�^�C�}�[�͈͏���
- *------------------------------------------
- */
-int skill_status_change_timer_sub(struct block_list *bl, va_list ap )
-{
-	struct block_list *src;
-	int type;
-	unsigned int tick;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, src=va_arg(ap,struct block_list*));
-	type=va_arg(ap,int);
-	tick=va_arg(ap,unsigned int);
-
-	if(bl->type!=BL_PC && bl->type!=BL_MOB)
-		return 0;
-
-	switch( type ){
-	case SC_SIGHT:	/* �T�C�g */
-	case SC_CONCENTRATE:
-		if( (*battle_get_option(bl))&6 ){
-			skill_status_change_end( bl, SC_HIDING, -1);
-			skill_status_change_end( bl, SC_CLOAKING, -1);
-		}
-		break;
-	case SC_RUWACH:	/* ���A�t */
-		if( (*battle_get_option(bl))&6 ){
-			skill_status_change_end( bl, SC_HIDING, -1);
-			skill_status_change_end( bl, SC_CLOAKING, -1);
-			if(battle_check_target( src,bl, BCT_ENEMY ) > 0) {
-				struct status_change *sc_data = battle_get_sc_data(bl);
-				skill_attack(BF_MAGIC,src,src,bl,AL_RUWACH,sc_data[type].val1,tick,0);
-			}
-		}
-		break;
-	}
-	return 0;
-}
-
-/*==========================================
- * �X�e�[�^�X�ُ�I��
- *------------------------------------------
- */
-int skill_status_change_end(struct block_list* bl, int type, int tid) 
-{
-	struct status_change* sc_data;
-	int opt_flag=0, calc_flag = 0;
-	short *sc_count, *option, *opt1, *opt2, *opt3;
-
-	nullpo_retr(0, bl);
-	if(bl->type!=BL_PC && bl->type!=BL_MOB) {
-		if(battle_config.error_log)
-			printf("skill_status_change_end: neither MOB nor PC !\n");
-		return 0;
-	}
-	nullpo_retr(0, sc_data = battle_get_sc_data(bl));
-	nullpo_retr(0, sc_count = battle_get_sc_count(bl));
-	nullpo_retr(0, option = battle_get_option(bl));
-	nullpo_retr(0, opt1 = battle_get_opt1(bl));
-	nullpo_retr(0, opt2 = battle_get_opt2(bl));
-	nullpo_retr(0, opt3 = battle_get_opt3(bl));
-
-	if ((*sc_count) > 0 && sc_data[type].timer != -1 && (sc_data[type].timer == tid || tid == -1)) {
-
-		if (tid == -1)	// �^�C�}����Ă΂�Ă��Ȃ��Ȃ�^�C�}�폜������
-			delete_timer(sc_data[type].timer,skill_status_change_timer);
-
-		/* �Y���ُ̈�𐳏�ɖ߂� */
-		sc_data[type].timer=-1;
-		(*sc_count)--;
-
-		switch(type){	/* �ُ�̎�ނ��Ƃ̏��� */
-			case SC_PROVOKE:			/* �v���{�b�N */
-			case SC_CONCENTRATE:		/* �W���͌��� */
-			case SC_BLESSING:			/* �u���b�V���O */
-			case SC_ANGELUS:			/* �A���[���X */
-			case SC_INCREASEAGI:		/* ���x�㏸ */
-			case SC_DECREASEAGI:		/* ���x���� */
-			case SC_SIGNUMCRUCIS:		/* �V�O�i���N���V�X */
-			case SC_HIDING:
-			case SC_TWOHANDQUICKEN:		/* 2HQ */
-			case SC_ADRENALINE:			/* �A�h���i�������b�V�� */
-			case SC_ENCPOISON:			/* �G���`�����g�|�C�Y�� */
-			case SC_IMPOSITIO:			/* �C���|�V�e�B�I�}�k�X */
-			case SC_GLORIA:				/* �O�����A */
-			case SC_LOUD:				/* ���E�h�{�C�X */
-			case SC_QUAGMIRE:			/* �N�@�O�}�C�A */
-			case SC_PROVIDENCE:			/* �v�����B�f���X */
-			case SC_SPEARSQUICKEN:		/* �X�s�A�N�C�b�P�� */
-			case SC_VOLCANO:
-			case SC_DELUGE:
-			case SC_VIOLENTGALE:
-			case SC_ETERNALCHAOS:		/* �G�^�[�i���J�I�X */
-			case SC_DRUMBATTLE:			/* �푾�ۂ̋��� */
-			case SC_NIBELUNGEN:			/* �j�[�x�����O�̎w�� */
-			case SC_SIEGFRIED:			/* �s���g�̃W�[�N�t���[�h */
-			case SC_WHISTLE:			/* ���J */
-			case SC_ASSNCROS:			/* �[�z�̃A�T�V���N���X */
-			case SC_HUMMING:			/* �n�~���O */
-			case SC_DONTFORGETME:		/* ����Y��Ȃ��� */
-			case SC_FORTUNE:			/* �K�^�̃L�X */
-			case SC_SERVICE4U:			/* �T�[�r�X�t�H�[���[ */
-			case SC_EXPLOSIONSPIRITS:	// �����g��
-			case SC_STEELBODY:			// ����
-			case SC_DEFENDER:
-			case SC_SPEEDPOTION0:		/* �����|�[�V���� */
-			case SC_SPEEDPOTION1:
-			case SC_SPEEDPOTION2:
-			case SC_APPLEIDUN:			/* �C�h�D���̗ь� */
-			case SC_RIDING:
-			case SC_BLADESTOP_WAIT:
-			case SC_AURABLADE:			/* �I�[���u���[�h */
-			case SC_PARRYING:			/* �p���C���O */
-			case SC_CONCENTRATION:		/* �R���Z���g���[�V���� */
-			case SC_TENSIONRELAX:		/* �e���V���������b�N�X */
-			case SC_ASSUMPTIO:			/* �A�V�����v�e�B�I */
-			case SC_WINDWALK:		/* �E�C���h�E�H�[�N */
-			case SC_TRUESIGHT:		/* �g�D���[�T�C�g */
-			case SC_SPIDERWEB:		/* �X�p�C�_�[�E�F�b�u */
-			case SC_MAGICPOWER:		/* ���@�͑��� */
-			case SC_CHASEWALK:
-			case SC_ATKPOT:		/* attack potion [Valaris] */
-			case SC_MATKPOT:		/* magic attack potion [Valaris] */
-			case SC_WEDDING:	//�����p(�����ߏւɂȂ��ĕ����̂��x���Ƃ�)
-			case SC_MELTDOWN:		/* �����g�_�E�� */
-				calc_flag = 1;
-				break;
-			case SC_BERSERK:			/* �o�[�T�[�N */
-				calc_flag = 1;
-				clif_status_change(bl,SC_INCREASEAGI,0);	/* �A�C�R������ */
-				break;
-			case SC_DEVOTION:		/* �f�B�{�[�V���� */
-				{
-					struct map_session_data *md = map_id2sd(sc_data[type].val1);
-					sc_data[type].val1=sc_data[type].val2=0;
-					skill_devotion(md,bl->id);
-					calc_flag = 1;
-				}
-				break;
-			case SC_BLADESTOP:
-				{
-					struct status_change *t_sc_data = battle_get_sc_data((struct block_list *)sc_data[type].val4);
-					//�Е����؂ꂽ�̂ő���̔��n��Ԃ��؂�ĂȂ��̂Ȃ����
-					if(t_sc_data && t_sc_data[SC_BLADESTOP].timer!=-1)
-						skill_status_change_end((struct block_list *)sc_data[type].val4,SC_BLADESTOP,-1);
-
-					if(sc_data[type].val2==2)
-						clif_bladestop((struct block_list *)sc_data[type].val3,(struct block_list *)sc_data[type].val4,0);
-				}
-				break;
-			case SC_DANCING:
-				{
-					struct map_session_data *dsd;
-					struct status_change *d_sc_data;
-					if(sc_data[type].val4 && (dsd=map_id2sd(sc_data[type].val4))){
-						d_sc_data = dsd->sc_data;
-						//���t�ő��肪����ꍇ�����val4��0�ɂ���
-						if(d_sc_data && d_sc_data[type].timer!=-1)
-							d_sc_data[type].val4=0;
-					}
-				}
-				calc_flag = 1;
-				break;
-			case SC_GRAFFITI:
-				{
-					struct skill_unit_group *sg=(struct skill_unit_group *)sc_data[type].val4;	//val4���O���t�B�e�B��group_id
-					if(sg)
-						skill_delunitgroup(sg);
-				}
-				break;
-			case SC_NOCHAT:	//�`���b�g�֎~���
-				{
-					struct map_session_data *sd=NULL;
-					if(bl->type == BL_PC && (sd=(struct map_session_data *)bl)){
-						sd->status.manner = 0;
-						clif_updatestatus(sd,SP_MANNER);
-					}
-				}
-				break;
-			case SC_SPLASHER:		/* �x�i���X�v���b�V���[ */
-				{
-					struct block_list *src=map_id2bl(sc_data[type].val3);
-					if(src && tid!=-1){
-						//�����Ƀ_���[�W������3*3�Ƀ_���[�W
-						skill_castend_damage_id(src, bl,sc_data[type].val2,sc_data[type].val1,gettick(),0 );
-					}
-				}
-				break;
-			case SC_SELFDESTRUCTION:		/* ���� */
-				{
-					//�����̃_���[�W��0�ɂ���
-					struct mob_data *md=NULL;
-					if(bl->type == BL_MOB && (md=(struct mob_data*)bl))
-						skill_castend_damage_id(bl, bl,sc_data[type].val2,sc_data[type].val1,gettick(),0 );
-				}
-				break;
-		/* option1 */
-			case SC_FREEZE:
-				sc_data[type].val3 = 0;
-				break;
-
-		/* option2 */
-			case SC_POISON:				/* �� */
-			case SC_BLIND:				/* �� */
-			case SC_CURSE:
-				calc_flag = 1;
-				break;
-		}
-
-		if(bl->type==BL_PC && type<SC_SENDMAX)
-			clif_status_change(bl,type,0);	/* �A�C�R������ */
-
-		switch(type){	/* ����ɖ߂�Ƃ��Ȃɂ��������K�v */
-		case SC_STONE:
-		case SC_FREEZE:
-		case SC_STAN:
-		case SC_SLEEP:
-			*opt1 = 0;
-			opt_flag = 1;
-			break;
-
-		case SC_POISON:
-		case SC_CURSE:
-		case SC_SILENCE:
-		case SC_BLIND:
-			*opt2 &= ~(1<<(type-SC_POISON));
-			opt_flag = 1;
-			break;
-
-		case SC_SIGNUMCRUCIS:
-			*opt2 &= ~0x40;
-			opt_flag = 1;
-			break;
-
-		case SC_HIDING:
-		case SC_CLOAKING:
-			*option &= ~((type == SC_HIDING) ? 2 : 4);
-			opt_flag = 1 ;
-			break;
-
-		case SC_CHASEWALK:
-			*option &= ~16388;
-			opt_flag = 1 ;
-			break;
-
-		case SC_SIGHT:
-			*option &= ~1;
-			opt_flag = 1;
-			break;
-		case SC_WEDDING:	//�����p(�����ߏւɂȂ��ĕ����̂��x���Ƃ�)
-			*option &= ~4096;
-			opt_flag = 1;
-			break;
-		case SC_RUWACH:
-			*option &= ~8192;
-			opt_flag = 1;
-			break;
-			
-		//opt3
-		case SC_TWOHANDQUICKEN:		/* 2HQ */
-		case SC_SPEARSQUICKEN:		/* �X�s�A�N�C�b�P�� */
-		case SC_CONCENTRATION:		/* �R���Z���g���[�V���� */
-			*opt3 &= ~1;
-			break;
-		case SC_OVERTHRUST:			/* �I�[�o�[�X���X�g */
-			*opt3 &= ~2;
-			break;
-		case SC_ENERGYCOAT:			/* �G�i�W�[�R�[�g */
-			*opt3 &= ~4;
-			break;
-		case SC_EXPLOSIONSPIRITS:	// �����g��
-			*opt3 &= ~8;
-			break;
-		case SC_STEELBODY:			// ����
-			*opt3 &= ~16;
-			break;
-		case SC_BLADESTOP:		/* ���n��� */
-			*opt3 &= ~32;
-			break;
-		case SC_BERSERK:		/* �o�[�T�[�N */
-			*opt3 &= ~128;
-			break;
-		case SC_MARIONETTE:		/* �}���I�l�b�g�R���g���[�� */
-			*opt3 &= ~1024;
-			break;
-		case SC_ASSUMPTIO:		/* �A�X���v�e�B�I */
-			*opt3 &= ~2048;
-			break;
-		}
-
-		if (night_flag == 1 && (*opt2 & STATE_BLIND) == 0 && bl->type == BL_PC) { // by [Yor]
-			*opt2 |= STATE_BLIND;
-			opt_flag = 1;
-		}
-
-		if(opt_flag)	/* option�̕ύX��`���� */
-			clif_changeoption(bl);
-
-		if (bl->type == BL_PC && calc_flag)
-			pc_calcstatus((struct map_session_data *)bl,0);	/* �X�e�[�^�X�Čv�Z */
-	}
-
-	return 0;
-}
-/*==========================================
- * �X�e�[�^�X�ُ�I���^�C�}�[
- *------------------------------------------
- */
-int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
-{
-	int type=data;
-	struct block_list *bl;
-	struct map_session_data *sd=NULL;
-	struct status_change *sc_data;
-	//short *sc_count; //�g���ĂȂ��H
-
-	if( (bl=map_id2bl(id)) == NULL )
-		return 0; //�Y��ID�����łɏ��ł��Ă���Ƃ����̂͂����ɂ����肻���Ȃ̂ŃX���[���Ă݂�
-	nullpo_retr(0, sc_data=battle_get_sc_data(bl));
-
-	if(bl->type==BL_PC)
-		sd=(struct map_session_data *)bl;
-
-	//sc_count=battle_get_sc_count(bl); //�g���ĂȂ��H
-
-	if(sc_data[type].timer != tid) {
-		if(battle_config.error_log)
-			printf("skill_status_change_timer %d != %d\n",tid,sc_data[type].timer);
-	}
-
-	switch(type){	/* ����ȏ����ɂȂ�ꍇ */
-	case SC_MAXIMIZEPOWER:	/* �}�L�V�}�C�Y�p���[ */
-	case SC_CLOAKING:		/* �N���[�L���O */
-	case SC_CHASEWALK:
-		if(sd){
-			if( sd->status.sp > 0 ){	/* SP�؂��܂Ŏ��� */
-				sd->status.sp--;
-				clif_updatestatus(sd,SP_SP);
-				sc_data[type].timer=add_timer(	/* �^�C�}�[�Đݒ� */
-					sc_data[type].val2+tick, skill_status_change_timer,
-					bl->id, data);
-				return 0;
-			}
-		}
-		break;
-
-	case SC_HIDING:		/* �n�C�f�B���O */
-		if(sd){		/* SP�������āA���Ԑ����̊Ԃ͎��� */
-			if( sd->status.sp > 0 && (--sc_data[type].val2)>0 ){
-				if(sc_data[type].val2 % (sc_data[type].val1+3) ==0 ){
-					sd->status.sp--;
-					clif_updatestatus(sd,SP_SP);
-				}
-				sc_data[type].timer=add_timer(	/* �^�C�}�[�Đݒ� */
-					1000+tick, skill_status_change_timer,
-					bl->id, data);
-				return 0;
-			}
-		}
-		break;
-
-	case SC_SIGHT:	/* �T�C�g */
-		{
-			const int range=7;
-			map_foreachinarea( skill_status_change_timer_sub,
-				bl->m, bl->x-range, bl->y-range, bl->x+range,bl->y+range,0,
-				bl,type,tick);
-
-			if( (--sc_data[type].val2)>0 ){
-				sc_data[type].timer=add_timer(	/* �^�C�}�[�Đݒ� */
-					250+tick, skill_status_change_timer,
-					bl->id, data);
-				return 0;
-			}
-		}
-		break;
-	case SC_RUWACH:	/* ���A�t */
-		{
-			const int range=5;
-			map_foreachinarea( skill_status_change_timer_sub,
-				bl->m, bl->x-range, bl->y-range, bl->x+range,bl->y+range,0,
-				bl,type,tick);
-
-			if( (--sc_data[type].val2)>0 ){
-				sc_data[type].timer=add_timer(	/* �^�C�}�[�Đݒ� */
-					250+tick, skill_status_change_timer,
-					bl->id, data);
-				return 0;
-			}
-		}
-		break;
-
-	case SC_SIGNUMCRUCIS:		/* �V�O�i���N���V�X */
-		{
-			int race = battle_get_race(bl);
-			if(race == 6 || battle_check_undead(race,battle_get_elem_type(bl))) {
-				sc_data[type].timer=add_timer(1000*600+tick,skill_status_change_timer, bl->id, data );
-				return 0;
-			}
-		}
-		break;
-
-	case SC_PROVOKE:	/* �v���{�b�N/�I�[�g�o�[�T�[�N */
-		if(sc_data[type].val2!=0){	/* �I�[�g�o�[�T�[�N�i�P�b���Ƃ�HP�`�F�b�N�j */
-			if(sd && sd->status.hp>sd->status.max_hp>>2)	/* ��~ */
-				break;
-			sc_data[type].timer=add_timer( 1000+tick,skill_status_change_timer, bl->id, data );
-			return 0;
-		}
-		break;
-
-	case SC_WATERBALL:	/* �E�H�[�^�[�{�[�� */
-		{
-			struct block_list *target=map_id2bl(sc_data[type].val2);
-			if(target==NULL || target->prev==NULL)
-				break;
-			skill_attack(BF_MAGIC,bl,bl,target,WZ_WATERBALL,sc_data[type].val1,tick,0);
-			if((--sc_data[type].val3)>0) {
-				sc_data[type].timer=add_timer( 150+tick,skill_status_change_timer, bl->id, data );
-				return 0;
-			}
-		}
-		break;
-
-	case SC_ENDURE:	/* �C���f���A */
-		if(sd && sd->special_state.infinite_endure) {
-			sc_data[type].timer=add_timer( 1000*600+tick,skill_status_change_timer, bl->id, data );
-			sc_data[type].val2=1;
-			return 0;
-		}
-		break;
-
-	case SC_DISSONANCE:	/* �s���a�� */
-		if( (--sc_data[type].val2)>0){
-			struct skill_unit *unit=
-				(struct skill_unit *)sc_data[type].val4;
-			struct block_list *src;
-
-			if(!unit || !unit->group)
-				break;
-			src=map_id2bl(unit->group->src_id);
-			if(!src)
-				break;
-			skill_attack(BF_MISC,src,&unit->bl,bl,unit->group->skill_id,sc_data[type].val1,tick,0);
-			sc_data[type].timer=add_timer(skill_get_time2(unit->group->skill_id,unit->group->skill_lv)+tick,
-				skill_status_change_timer, bl->id, data );
-			return 0;
-		}
-		break;
-
-	case SC_LULLABY:	/* �q��S */
-		if( (--sc_data[type].val2)>0){
-			struct skill_unit *unit=
-				(struct skill_unit *)sc_data[type].val4;
-			if(!unit || !unit->group || unit->group->src_id==bl->id)
-				break;
-			skill_additional_effect(bl,bl,unit->group->skill_id,sc_data[type].val1,BF_LONG|BF_SKILL|BF_MISC,tick);
-			sc_data[type].timer=add_timer(skill_get_time(unit->group->skill_id,unit->group->skill_lv)/10+tick,
-				skill_status_change_timer, bl->id, data );
-			return 0;
-		}
-		break;
-
-	case SC_STONE:
-		if(sc_data[type].val2 != 0) {
-			short *opt1 = battle_get_opt1(bl);
-			sc_data[type].val2 = 0;
-			sc_data[type].val4 = 0;
-			battle_stopwalking(bl,1);
-			if(opt1) {
-				*opt1 = 1;
-				clif_changeoption(bl);
-			}
-			sc_data[type].timer=add_timer(1000+tick,skill_status_change_timer, bl->id, data );
-			return 0;
-		}
-		else if( (--sc_data[type].val3) > 0) {
-			int hp = battle_get_max_hp(bl);
-			if((++sc_data[type].val4)%5 == 0 && battle_get_hp(bl) > hp>>2) {
-				hp = hp/100;
-				if(hp < 1) hp = 1;
-				if(bl->type == BL_PC)
-					pc_heal((struct map_session_data *)bl,-hp,0);
-				else if(bl->type == BL_MOB){
-					struct mob_data *md;
-					if((md=((struct mob_data *)bl)) == NULL)
-						break;
-					md->hp -= hp;
-				}
-			}
-			sc_data[type].timer=add_timer(1000+tick,skill_status_change_timer, bl->id, data );
-			return 0;
-		}
-		break;
-	case SC_POISON:
-		if(sc_data[SC_SLOWPOISON].timer == -1) {
-			if( (--sc_data[type].val3) > 0) {
-				int hp = battle_get_max_hp(bl);
-				if(battle_get_hp(bl) > hp>>2) {
-					if(bl->type == BL_PC) {
-						hp = 3 + hp*3/200;
-						pc_heal((struct map_session_data *)bl,-hp,0);
-					}
-					else if(bl->type == BL_MOB) {
-						struct mob_data *md;
-						if((md=((struct mob_data *)bl)) == NULL)
-							break;
-						hp = 3 + hp/200;
-						md->hp -= hp;
-					}
-				}
-				sc_data[type].timer=add_timer(1000+tick,skill_status_change_timer, bl->id, data );
-			}
-		}
-		else
-			sc_data[type].timer=add_timer(1000+tick,skill_status_change_timer, bl->id, data );
-		break;
-		case SC_TENSIONRELAX:	/* �e���V���������b�N�X */
-		if(sd){		/* SP�������āAHP�����^���łȂ���Όp�� */
-			if( sd->status.sp > 12 && sd->status.max_hp > sd->status.hp ){
-				if(sc_data[type].val2 % (sc_data[type].val1+3) ==0 ){
-					sd->status.sp -= 12;
-					clif_updatestatus(sd,SP_SP);
-				}
-				sc_data[type].timer=add_timer(	/* �^�C�}�[�Đݒ� */
-					10000+tick, skill_status_change_timer,
-					bl->id, data);
-				return 0;
-			}
-			if(sd->status.max_hp <= sd->status.hp)
-				skill_status_change_end(&sd->bl,SC_TENSIONRELAX,-1);
-		}
-		break;
-
-	/* ���Ԑ؂ꖳ���H�H */
-	case SC_AETERNA:
-	case SC_TRICKDEAD:
-	case SC_RIDING:
-	case SC_FALCON:
-	case SC_WEIGHT50:
-	case SC_WEIGHT90:
-	case SC_MAGICPOWER:		/* ���@�͑��� */
-	case SC_REJECTSWORD:	/* ���W�F�N�g�\�[�h */
-	case SC_MEMORIZE:	/* �������C�Y */
-	case SC_BROKNWEAPON:
-	case SC_BROKNARMOR:
-		if(sc_data[type].timer==tid)
-			sc_data[type].timer=add_timer( 1000*600+tick,skill_status_change_timer, bl->id, data );
-		return 0;
-
-	case SC_DANCING: //�_���X�X�L���̎���SP����
-		{
-			int s=0;
-			if(sd){
-				if(sd->status.sp > 0 && (--sc_data[type].val3)>0){
-					switch(sc_data[type].val1){
-					case BD_RICHMANKIM:				/* �j�����h�̉� 3�b��SP1 */
-					case BD_DRUMBATTLEFIELD:		/* �푾�ۂ̋��� 3�b��SP1 */
-					case BD_RINGNIBELUNGEN:			/* �j�[�x�����O�̎w�� 3�b��SP1 */
-					case BD_SIEGFRIED:				/* �s���g�̃W�[�N�t���[�h 3�b��SP1 */
-					case BA_DISSONANCE:				/* �s���a�� 3�b��SP1 */
-					case BA_ASSASSINCROSS:			/* �[�z�̃A�T�V���N���X 3�b��SP1 */
-					case DC_UGLYDANCE:				/* ��������ȃ_���X 3�b��SP1 */
-						s=3;
-						break;
-					case BD_LULLABY:				/* �q��� 4�b��SP1 */
-					case BD_ETERNALCHAOS:			/* �i���̍��� 4�b��SP1 */
-					case BD_ROKISWEIL:				/* ���L�̋��� 4�b��SP1 */
-					case DC_FORTUNEKISS:			/* �K�^�̃L�X 4�b��SP1 */
-						s=4;
-						break;
-					case BD_INTOABYSS:				/* �[���̒��� 5�b��SP1 */
-					case BA_WHISTLE:				/* ���J 5�b��SP1 */
-					case DC_HUMMING:				/* �n�~���O 5�b��SP1 */
-					case BA_POEMBRAGI:				/* �u���M�̎� 5�b��SP1 */
-					case DC_SERVICEFORYOU:			/* �T�[�r�X�t�H�[���[ 5�b��SP1 */
-						s=5;
-						break;
-					case BA_APPLEIDUN:				/* �C�h�D���̗ь� 6�b��SP1 */
-						s=6;
-						break;
-					case DC_DONTFORGETME:			/* ����Y��Ȃ��Łc 10�b��SP1 */
-					case CG_MOONLIT:				/* ������̐�ɗ�����Ԃт� 10�b��SP1�H */
-						s=10;
-						break;
-					}
-					if(s && ((sc_data[type].val3 % s) == 0)){
-						sd->status.sp--;
-						clif_updatestatus(sd,SP_SP);
-					}
-					sc_data[type].timer=add_timer(	/* �^�C�}�[�Đݒ� */
-						1000+tick, skill_status_change_timer,
-						bl->id, data);
-					return 0;
-				}
-			}
-		}
-		break;
-	case SC_BERSERK:		/* �o�[�T�[�N */
-		if(sd){		/* HP��100�ȏ�Ȃ�p�� */
-			if( (sd->status.hp - sd->status.hp/100) > 100 ){
-				sd->status.hp -= sd->status.hp/100;
-				clif_updatestatus(sd,SP_HP);
-				sc_data[type].timer=add_timer(	/* �^�C�}�[�Đݒ� */
-					15000+tick, skill_status_change_timer,
-					bl->id, data);
-				return 0;
-			}
-		}
-		break;
-	case SC_WEDDING:	//�����p(�����ߏւɂȂ��ĕ����̂��x���Ƃ�)
-		if(sd){
-			time_t timer;
-			if(time(&timer) < ((sc_data[type].val2) + 3600)){	//1���Ԃ����Ă��Ȃ��̂Ōp��
-				sc_data[type].timer=add_timer(	/* �^�C�}�[�Đݒ� */
-					10000+tick, skill_status_change_timer,
-					bl->id, data);
-				return 0;
-			}
-		}
-		break;
-	case SC_NOCHAT:	//�`���b�g�֎~���
-		if(sd && battle_config.muting_players){
-			time_t timer;
-			if((++sd->status.manner) && time(&timer) < ((sc_data[type].val2) + 60*(0-sd->status.manner))){	//�J�n����status.manner���o���ĂȂ��̂Ōp��
-				clif_updatestatus(sd,SP_MANNER);
-				sc_data[type].timer=add_timer(	/* �^�C�}�[�Đݒ�(60�b) */
-					60000+tick, skill_status_change_timer,
-					bl->id, data);
-				return 0;
-			}
-		}
-		break;
-	case SC_SELFDESTRUCTION:		/* ���� */
-		if(--sc_data[type].val3>0){
-			struct mob_data *md;
-			if(bl->type==BL_MOB && (md=(struct mob_data *)bl) && md->speed > 250){
-				md->speed -= 250;
-				md->next_walktime=tick;
-			}
-			sc_data[type].timer=add_timer(	/* �^�C�}�[�Đݒ� */
-				1000+tick, skill_status_change_timer,
-				bl->id, data);
-				return 0;
-		}
-		break;
-	}
-
-	return skill_status_change_end( bl,type,tid );
-}
-
-/*==========================================
- * �X�e�[�^�X�ُ�I��
- *------------------------------------------
- */
-int skill_encchant_eremental_end(struct block_list *bl,int type)
-{
-	struct status_change *sc_data;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, sc_data=battle_get_sc_data(bl));
-
-	if( type!=SC_ENCPOISON && sc_data[SC_ENCPOISON].timer!=-1 )	/* �G���`�����g�|�C�Y������ */
-		skill_status_change_end(bl,SC_ENCPOISON,-1);
-	if( type!=SC_ASPERSIO && sc_data[SC_ASPERSIO].timer!=-1 )	/* �A�X�y���V�I���� */
-		skill_status_change_end(bl,SC_ASPERSIO,-1);
-	if( type!=SC_FLAMELAUNCHER && sc_data[SC_FLAMELAUNCHER].timer!=-1 )	/* �t���C�������`������ */
-		skill_status_change_end(bl,SC_FLAMELAUNCHER,-1);
-	if( type!=SC_FROSTWEAPON && sc_data[SC_FROSTWEAPON].timer!=-1 )	/* �t���X�g�E�F�|������ */
-		skill_status_change_end(bl,SC_FROSTWEAPON,-1);
-	if( type!=SC_LIGHTNINGLOADER && sc_data[SC_LIGHTNINGLOADER].timer!=-1 )	/* ���C�g�j���O���[�_�[���� */
-		skill_status_change_end(bl,SC_LIGHTNINGLOADER,-1);
-	if( type!=SC_SEISMICWEAPON && sc_data[SC_SEISMICWEAPON].timer!=-1 )	/* �T�C�X�~�b�N�E�F�|������ */
-		skill_status_change_end(bl,SC_SEISMICWEAPON,-1);
-
-	return 0;
-}
-/*==========================================
- * �X�e�[�^�X�ُ�J�n
- *------------------------------------------
- */
-int skill_status_change_start(struct block_list *bl, int type, int val1, int val2, int val3, int val4, int tick, int flag) 
-{
-	struct map_session_data *sd = NULL;
-	struct status_change* sc_data;
-	short *sc_count, *option, *opt1, *opt2, *opt3;
-	int opt_flag = 0, calc_flag = 0,updateflag = 0, race, mode, elem, undead_flag;
-	int scdef=0;
-
-	nullpo_retr(0, bl);
-	if(bl->type == BL_SKILL)
-		return 0;
-	nullpo_retr(0, sc_data=battle_get_sc_data(bl));
-	nullpo_retr(0, sc_count=battle_get_sc_count(bl));
-	nullpo_retr(0, option=battle_get_option(bl));
-	nullpo_retr(0, opt1=battle_get_opt1(bl));
-	nullpo_retr(0, opt2=battle_get_opt2(bl));
-	nullpo_retr(0, opt3=battle_get_opt3(bl));
-
-
-	race=battle_get_race(bl);
-	mode=battle_get_mode(bl);
-	elem=battle_get_elem_type(bl);
-	undead_flag=battle_check_undead(race,elem);
-
-	if(type == SC_AETERNA && (sc_data[SC_STONE].timer != -1 || sc_data[SC_FREEZE].timer != -1) )
-		return 0;
-
-	switch(type){
-		case SC_STONE:
-		case SC_FREEZE:
-			scdef=3+battle_get_mdef(bl)+battle_get_luk(bl)/3;
-			break;
-		case SC_STAN:
-		case SC_SILENCE:
-		case SC_POISON:
-			scdef=3+battle_get_vit(bl)+battle_get_luk(bl)/3;
-			break;
-		case SC_SLEEP:
-		case SC_BLIND:
-			scdef=3+battle_get_int(bl)+battle_get_luk(bl)/3;
-			break;
-		case SC_CURSE:
-			scdef=3+battle_get_luk(bl);
-			break;
-
-//		case SC_CONFUSION:
-		default:
-			scdef=0;
-	}
-	if(scdef>=100)
-		return 0;
-	if(bl->type==BL_PC){
-		sd=(struct map_session_data *)bl;
-		if( sd && type == SC_ADRENALINE && !(skill_get_weapontype(BS_ADRENALINE)&(1<<sd->status.weapon)))
-			return 0;
-
-		if(SC_STONE<=type && type<=SC_BLIND){	/* �J�[�h�ɂ��ϐ� */
-			if( sd && sd->reseff[type-SC_STONE] > 0 && rand()%10000<sd->reseff[type-SC_STONE]){
-				if(battle_config.battle_log)
-					printf("PC %d skill_sc_start: card�ɂ��ُ�ϐ�����\n",sd->bl.id);
-				return 0;
-			}
-		}
-	}
-	else if(bl->type == BL_MOB) {
-	}
-	else {
-		if(battle_config.error_log)
-			printf("skill_status_change_start: neither MOB nor PC !\n");
-		return 0;
-	}
-
-	if(type==SC_FREEZE && undead_flag && !(flag&1))
-		return 0;
-
-	if((type == SC_ADRENALINE || type == SC_WEAPONPERFECTION || type == SC_OVERTHRUST) &&
-		sc_data[type].timer != -1 && sc_data[type].val2 && !val2)
-		return 0;
-
-	if(mode & 0x20 && (type==SC_STONE || type==SC_FREEZE ||
-		type==SC_STAN || type==SC_SLEEP || type==SC_SILENCE || type==SC_QUAGMIRE || type == SC_DECREASEAGI || type == SC_SIGNUMCRUCIS || type == SC_PROVOKE ||
-		(type == SC_BLESSING && (undead_flag || race == 6))) && !(flag&1)){
-		/* �{�X�ɂ͌����Ȃ�(�������J�[�h�ɂ����ʂ͓K�p�����) */
-		return 0;
-	}
-	if(type==SC_FREEZE || type==SC_STAN || type==SC_SLEEP)
-		battle_stopwalking(bl,1);
-
-	if(sc_data[type].timer != -1){	/* ���łɓ����ُ�ɂȂ��Ă���ꍇ�^�C�}���� */
-		if(sc_data[type].val1 > val1 && type != SC_COMBO && type != SC_DANCING && type != SC_DEVOTION &&
-			type != SC_SPEEDPOTION0 && type != SC_SPEEDPOTION1 && type != SC_SPEEDPOTION2
-						 && type != SC_ATKPOT && type != SC_MATKPOT) // added atk and matk potions [Valaris]
-			return 0;
-		if(type >=SC_STAN && type <= SC_BLIND)
-			return 0;/* �p���������ł��Ȃ���Ԉُ�ł��鎞�͏�Ԉُ���s��Ȃ� */
-		if(type == SC_GRAFFITI){	//�ُ풆�ɂ�����x��Ԉُ�ɂȂ������ɉ������Ă���ēx������
-			skill_status_change_end(bl,type,-1);
-		}else{
-		(*sc_count)--;
-		delete_timer(sc_data[type].timer, skill_status_change_timer);
-		sc_data[type].timer = -1;
-	}
-	}
-
-	switch(type){	/* �ُ�̎�ނ��Ƃ̏��� */
-		case SC_PROVOKE:			/* �v���{�b�N */
-			calc_flag = 1;
-			if(tick <= 0) tick = 1000;	/* (�I�[�g�o�[�T�[�N) */
-			break;
-		case SC_ENDURE:				/* �C���f���A */
-			if(tick <= 0) tick = 1000 * 60;
-			break;
-		case SC_CONCENTRATE:		/* �W���͌��� */
-			calc_flag = 1;
-			break;
-		case SC_BLESSING:			/* �u���b�V���O */
-			{
-				if(bl->type == BL_PC || (!undead_flag && race != 6)) {
-					if(sc_data[SC_CURSE].timer!=-1 )
-						skill_status_change_end(bl,SC_CURSE,-1);
-					if(sc_data[SC_STONE].timer!=-1 && sc_data[SC_STONE].val2 == 0)
-						skill_status_change_end(bl,SC_STONE,-1);
-				}
-				calc_flag = 1;
-			}
-			break;
-		case SC_ANGELUS:			/* �A���[���X */
-			calc_flag = 1;
-			break;
-		case SC_INCREASEAGI:		/* ���x�㏸ */
-			calc_flag = 1;
-			if(sc_data[SC_DECREASEAGI].timer!=-1 )
-				skill_status_change_end(bl,SC_DECREASEAGI,-1);
-			if(sc_data[SC_WINDWALK].timer!=-1 )	/* �E�C���h�E�H�[�N */
-				skill_status_change_end(bl,SC_WINDWALK,-1);
-			break;
-		case SC_DECREASEAGI:		/* ���x���� */
-			calc_flag = 1;
-			if(sc_data[SC_INCREASEAGI].timer!=-1 )
-				skill_status_change_end(bl,SC_INCREASEAGI,-1);
-			break;
-		case SC_SIGNUMCRUCIS:		/* �V�O�i���N���V�X */
-			calc_flag = 1;
-//			val2 = 14 + val1;
-			val2 = 10 + val1*2;
-			tick = 600*1000;
-			clif_emotion(bl,4);
-			break;
-		case SC_SLOWPOISON:
-			if(sc_data[SC_POISON].timer == -1 )
-				return 0;
-			break;
-		case SC_TWOHANDQUICKEN:		/* 2HQ */
-			*opt3 |= 1;
-			calc_flag = 1;
-			break;
-		case SC_ADRENALINE:			/* �A�h���i�������b�V�� */
-			calc_flag = 1;
-			break;
-		case SC_WEAPONPERFECTION:	/* �E�F�|���p�[�t�F�N�V���� */
-			if(battle_config.party_skill_penaly && !val2) tick /= 5;
-			break;
-		case SC_OVERTHRUST:			/* �I�[�o�[�X���X�g */
-			*opt3 |= 2;
-			if(battle_config.party_skill_penaly && !val2) tick /= 10;
-			break;
-		case SC_MAXIMIZEPOWER:		/* �}�L�V�}�C�Y�p���[(SP��1���鎞��,val2�ɂ�) */
-			if(bl->type == BL_PC)
-				val2 = tick;
-			else
-				tick = 5000*val1;
-			break;
-		case SC_ENCPOISON:			/* �G���`�����g�|�C�Y�� */
-			calc_flag = 1;
-			val2=(((val1 - 1) / 2) + 3)*100;	/* �ŕt�^�m�� */
-			skill_encchant_eremental_end(bl,SC_ENCPOISON);
-			break;
-		case SC_POISONREACT:	/* �|�C�Y�����A�N�g */
-			break;
-		case SC_IMPOSITIO:			/* �C���|�V�e�B�I�}�k�X */
-			calc_flag = 1;
-			break;
-		case SC_ASPERSIO:			/* �A�X�y���V�I */
-			skill_encchant_eremental_end(bl,SC_ASPERSIO);
-			break;
-		case SC_SUFFRAGIUM:			/* �T�t���M�� */
-		case SC_BENEDICTIO:			/* ���� */
-		case SC_MAGNIFICAT:			/* �}�O�j�t�B�J�[�g */
-		case SC_AETERNA:			/* �G�[�e���i */
-			break;
-		case SC_ENERGYCOAT:			/* �G�i�W�[�R�[�g */
-			*opt3 |= 4;
-			break;
-		case SC_MAGICROD:
-			val2 = val1*20;
-			break;
-		case SC_KYRIE:				/* �L���G�G���C�\�� */
-			val2 = battle_get_max_hp(bl) * (val1 * 2 + 10) / 100;/* �ϋv�x */
-			val3 = (val1 / 2 + 5);	/* �� */
-// -- moonsoul (added to undo assumptio status if target has it)
-			if(sc_data[SC_ASSUMPTIO].timer!=-1 )
-				skill_status_change_end(bl,SC_ASSUMPTIO,-1);
-			break;
-		case SC_MINDBREAKER:
-			calc_flag = 1;
-			if(tick <= 0) tick = 1000;	/* (�I�[�g�o�[�T�[�N) */
-		case SC_GLORIA:				/* �O�����A */
-			calc_flag = 1;
-			break;
-		case SC_LOUD:				/* ���E�h�{�C�X */
-			calc_flag = 1;
-			break;
-		case SC_TRICKDEAD:			/* ���񂾂ӂ� */
-			break;
-		case SC_QUAGMIRE:			/* �N�@�O�}�C�A */
-			calc_flag = 1;
-			if(sc_data[SC_CONCENTRATE].timer!=-1 )	/* �W���͌������ */
-				skill_status_change_end(bl,SC_CONCENTRATE,-1);
-			if(sc_data[SC_INCREASEAGI].timer!=-1 )	/* ���x�㏸���� */
-				skill_status_change_end(bl,SC_INCREASEAGI,-1);
-			if(sc_data[SC_TWOHANDQUICKEN].timer!=-1 )
-				skill_status_change_end(bl,SC_TWOHANDQUICKEN,-1);
-			if(sc_data[SC_SPEARSQUICKEN].timer!=-1 )
-				skill_status_change_end(bl,SC_SPEARSQUICKEN,-1);
-			if(sc_data[SC_ADRENALINE].timer!=-1 )
-				skill_status_change_end(bl,SC_ADRENALINE,-1);
-			if(sc_data[SC_LOUD].timer!=-1 )
-				skill_status_change_end(bl,SC_LOUD,-1);
-			if(sc_data[SC_TRUESIGHT].timer!=-1 )	/* �g�D���[�T�C�g */
-				skill_status_change_end(bl,SC_TRUESIGHT,-1);
-			if(sc_data[SC_WINDWALK].timer!=-1 )	/* �E�C���h�E�H�[�N */
-				skill_status_change_end(bl,SC_WINDWALK,-1);
-			if(sc_data[SC_CARTBOOST].timer!=-1 )	/* �J�[�g�u�[�X�g */
-				skill_status_change_end(bl,SC_CARTBOOST,-1);
-			break;
-		case SC_FLAMELAUNCHER:		/* �t���[�������`���[ */
-			skill_encchant_eremental_end(bl,SC_FLAMELAUNCHER);
-			break;
-		case SC_FROSTWEAPON:		/* �t���X�g�E�F�|�� */
-			skill_encchant_eremental_end(bl,SC_FROSTWEAPON);
-			break;
-		case SC_LIGHTNINGLOADER:	/* ���C�g�j���O���[�_�[ */
-			skill_encchant_eremental_end(bl,SC_LIGHTNINGLOADER);
-			break;
-		case SC_SEISMICWEAPON:		/* �T�C�Y�~�b�N�E�F�|�� */
-			skill_encchant_eremental_end(bl,SC_SEISMICWEAPON);
-			break;
-		case SC_DEVOTION:			/* �f�B�{�[�V���� */
-			calc_flag = 1;
-			break;
-		case SC_PROVIDENCE:			/* �v�����B�f���X */
-			calc_flag = 1;
-			val2=val1*5;
-			break;
-		case SC_REFLECTSHIELD:
-			val2=10+val1*3;
-			break;
-		case SC_STRIPWEAPON:
-		case SC_STRIPSHIELD:
-		case SC_STRIPARMOR:
-		case SC_STRIPHELM:
-		case SC_CP_WEAPON:
-		case SC_CP_SHIELD:
-		case SC_CP_ARMOR:
-		case SC_CP_HELM:
-			break;
-
-		case SC_AUTOSPELL:			/* �I�[�g�X�y�� */
-			val4 = 5 + val1*2;
-			break;
-
-		case SC_VOLCANO:
-			calc_flag = 1;
-			val3 = val1*10;
-			val4 = val1>=5?20: (val1==4?19: (val1==3?17: ( val1==2?14:10 ) ) );
-			break;
-		case SC_DELUGE:
-			calc_flag = 1;
-			val3 = val1>=5?15: (val1==4?14: (val1==3?12: ( val1==2?9:5 ) ) );
-			val4 = val1>=5?20: (val1==4?19: (val1==3?17: ( val1==2?14:10 ) ) );
-			break;
-		case SC_VIOLENTGALE:
-			calc_flag = 1;
-			val3 = val1*3;
-			val4 = val1>=5?20: (val1==4?19: (val1==3?17: ( val1==2?14:10 ) ) );
-			break;
-
-		case SC_SPEARSQUICKEN:		/* �X�s�A�N�C�b�P�� */
-			calc_flag = 1;
-			val2 = 20+val1;
-			*opt3 |= 1;
-			break;
-		case SC_COMBO:
-			break;
-		case SC_BLADESTOP_WAIT:		/* ���n���(�҂�) */
-			break;
-		case SC_BLADESTOP:		/* ���n��� */
-			if(val2==2) clif_bladestop((struct block_list *)val3,(struct block_list *)val4,1);
-			*opt3 |= 32;
-			break;
-
-		case SC_LULLABY:			/* �q��S */
-			val2 = 11;
-			break;
-		case SC_RICHMANKIM:
-			break;
-		case SC_ETERNALCHAOS:		/* �G�^�[�i���J�I�X */
-			calc_flag = 1;
-			break;
-		case SC_DRUMBATTLE:			/* �푾�ۂ̋��� */
-			calc_flag = 1;
-			val2 = (val1+1)*25;
-			val3 = (val1+1)*2;
-			break;
-		case SC_NIBELUNGEN:			/* �j�[�x�����O�̎w�� */
-			calc_flag = 1;
-			val2 = (val1+2)*50;
-			val3 = (val1+2)*25;
-			break;
-		case SC_ROKISWEIL:			/* ���L�̋��� */
-			break;
-		case SC_INTOABYSS:			/* �[���̒��� */
-			break;
-		case SC_SIEGFRIED:			/* �s���g�̃W�[�N�t���[�h */
-			calc_flag = 1;
-			val2 = 40 + val1*5;
-			val3 = val1*10;
-			break;
-		case SC_DISSONANCE:			/* �s���a�� */
-			val2 = 10;
-			break;
-		case SC_WHISTLE:			/* ���J */
-			calc_flag = 1;
-			break;
-		case SC_ASSNCROS:			/* �[�z�̃A�T�V���N���X */
-			calc_flag = 1;
-			break;
-		case SC_POEMBRAGI:			/* �u���M�̎� */
-			break;
-		case SC_APPLEIDUN:			/* �C�h�D���̗ь� */
-			calc_flag = 1;
-			break;
-		case SC_UGLYDANCE:			/* ��������ȃ_���X */
-			val2 = 10;
-			break;
-		case SC_HUMMING:			/* �n�~���O */
-			calc_flag = 1;
-			break;
-		case SC_DONTFORGETME:		/* ����Y��Ȃ��� */
-			calc_flag = 1;
-			if(sc_data[SC_INCREASEAGI].timer!=-1 )	/* ���x�㏸���� */
-				skill_status_change_end(bl,SC_INCREASEAGI,-1);
-			if(sc_data[SC_TWOHANDQUICKEN].timer!=-1 )
-				skill_status_change_end(bl,SC_TWOHANDQUICKEN,-1);
-			if(sc_data[SC_SPEARSQUICKEN].timer!=-1 )
-				skill_status_change_end(bl,SC_SPEARSQUICKEN,-1);
-			if(sc_data[SC_ADRENALINE].timer!=-1 )
-				skill_status_change_end(bl,SC_ADRENALINE,-1);
-			if(sc_data[SC_ASSNCROS].timer!=-1 )
-				skill_status_change_end(bl,SC_ASSNCROS,-1);
-			if(sc_data[SC_TRUESIGHT].timer!=-1 )	/* �g�D���[�T�C�g */
-				skill_status_change_end(bl,SC_TRUESIGHT,-1);
-			if(sc_data[SC_WINDWALK].timer!=-1 )	/* �E�C���h�E�H�[�N */
-				skill_status_change_end(bl,SC_WINDWALK,-1);
-			if(sc_data[SC_CARTBOOST].timer!=-1 )	/* �J�[�g�u�[�X�g */
-				skill_status_change_end(bl,SC_CARTBOOST,-1);
-			break;
-		case SC_FORTUNE:			/* �K�^�̃L�X */
-			calc_flag = 1;
-			break;
-		case SC_SERVICE4U:			/* �T�[�r�X�t�H�[���[ */
-			calc_flag = 1;
-			break;
-		case SC_DANCING:			/* �_���X/���t�� */
-			calc_flag = 1;
-			val3= tick / 1000;
-			tick = 1000;
-			break;
-
-		case SC_EXPLOSIONSPIRITS:	// �����g��
-			calc_flag = 1;
-			val2 = 75 + 25*val1;
-			*opt3 |= 8;
-			break;
-		case SC_STEELBODY:			// ����
-			calc_flag = 1;
-			*opt3 |= 16;
-			break;
-		case SC_EXTREMITYFIST:		/* ���C���e���� */
-			break;
-		case SC_AUTOCOUNTER:
-			val3 = val4 = 0;
-			break;
-
-		case SC_SPEEDPOTION0:		/* �����|�[�V���� */
-		case SC_SPEEDPOTION1:
-		case SC_SPEEDPOTION2:
-			calc_flag = 1;
-			tick = 1000 * tick;
-			val2 = 5*(2+type-SC_SPEEDPOTION0);
-			break;
-
-		/* atk & matk potions [Valaris] */
-		case SC_ATKPOT:
-		case SC_MATKPOT:
-			calc_flag = 1;
-			tick = 1000 * tick;
-			break;
-		case SC_WEDDING:	//�����p(�����ߏւɂȂ��ĕ����̂��x���Ƃ�)
-			{
-				time_t timer;
-	
-				calc_flag = 1;
-				tick = 10000;
-				if(!val2)
-					val2 = time(&timer);
-			}
-			break;
-		case SC_NOCHAT:	//�`���b�g�֎~���
-			{
-				time_t timer;
-
-				if(!battle_config.muting_players)
-					break;
-				
-				tick = 60000;
-				if(!val2)
-					val2 = time(&timer);
-				updateflag = SP_MANNER;
-			}
-			break;
-		case SC_SELFDESTRUCTION: //����
-			clif_skillcasting(bl,bl->id, bl->id,0,0,331,skill_get_time(val2,val1));
-			val3 = tick / 1000;
-			tick = 1000;
-			break;
-
-		/* option1 */
-		case SC_STONE:				/* �Ή� */
-			if(!(flag&2)) {
-				int sc_def = battle_get_mdef(bl)*200;
-				tick = tick - sc_def;
-			}
-			val3 = tick/1000;
-			if(val3 < 1) val3 = 1;
-			tick = 5000;
-			val2 = 1;
-			break;
-		case SC_SLEEP:				/* ���� */
-			if(!(flag&2)) {
-//				int sc_def = 100 - (battle_get_int(bl) + battle_get_luk(bl)/3);
-//				tick = tick * sc_def / 100;
-//				if(tick < 1000) tick = 1000;
-				tick = 30000;//�����̓X�e�[�^�X�ϐ��Ɋւ�炸30�b
-			}
-			break;
-		case SC_FREEZE:				/* ���� */
-			if(!(flag&2)) {
-				int sc_def = 100 - battle_get_mdef(bl);
-				tick = tick * sc_def / 100;
-			}
-			break;
-		case SC_STAN:				/* �X�^���ival2�Ƀ~���b�Z�b�g�j */
-			if(!(flag&2)) {
-				int sc_def = 100 - (battle_get_vit(bl) + battle_get_luk(bl)/3);
-				tick = tick * sc_def / 100;
-			}
-			break;
-
-		/* option2 */
-		case SC_POISON:				/* �� */
-			calc_flag = 1;
-			if(!(flag&2)) {
-				int sc_def = 100 - (battle_get_vit(bl) + battle_get_luk(bl)/5);
-				tick = tick * sc_def / 100;
-			}
-			val3 = tick/1000;
-			if(val3 < 1) val3 = 1;
-			tick = 1000;
-			break;
-		case SC_SILENCE:			/* ���فi���b�N�X�f�r�[�i�j */
-			if(!(flag&2)) {
-				int sc_def = 100 - battle_get_vit(bl);
-				tick = tick * sc_def / 100;
-			}
-			break;
-		case SC_BLIND:				/* �� */
-			calc_flag = 1;
-			if(!(flag&2)) {
-				int sc_def = battle_get_lv(bl)/10 + battle_get_int(bl)/15;
-				tick = 30000 - sc_def;
-			}
-			break;
-		case SC_CURSE:
-			calc_flag = 1;
-			if(!(flag&2)) {
-				int sc_def = 100 - battle_get_vit(bl);
-				tick = tick * sc_def / 100;
-			}
-			break;
-
-		/* option */
-		case SC_HIDING:		/* �n�C�f�B���O */
-			calc_flag = 1;
-			if(bl->type == BL_PC) {
-				val2 = tick / 1000;		/* �������� */
-				tick = 1000;
-			}
-			break;
-		case SC_CHASEWALK:
-		case SC_CLOAKING:		/* �N���[�L���O */
-			if(bl->type == BL_PC)
-				val2 = tick;
-			else
-				tick = 5000*val1;
-			break;
-		case SC_SIGHT:			/* �T�C�g/���A�t */
-		case SC_RUWACH:
-			val2 = tick/250;
-			tick = 10;
-			break;
-
-		/* �Z�[�t�e�B�E�H�[���A�j���[�} */
-		case SC_SAFETYWALL:	case SC_PNEUMA:
-			tick=((struct skill_unit *)val2)->group->limit;
-			break;
-
-		/* �A���N�� */
-		case SC_ANKLE:
-			break;
-
-		/* �E�H�[�^�[�{�[�� */
-		case SC_WATERBALL:
-			tick=150;
-			if(val1>5) //���x����5�ȏ�̏ꍇ��25���ɐ���(1���ڂ͂��łɑł��Ă�̂�-1)
-				val3=5*5-1;
-			else
-			val3= (val1|1)*(val1|1)-1;
-			break;
-
-		/* �X�L������Ȃ�/���ԂɊ֌W���Ȃ� */
-		case SC_RIDING:
-			calc_flag = 1;
-			tick = 600*1000;
-			break;
-		case SC_FALCON:
-		case SC_WEIGHT50:
-		case SC_WEIGHT90:
-		case SC_BROKNWEAPON:
-		case SC_BROKNARMOR:
-			tick=600*1000;
-			break;
-
-		case SC_AUTOGUARD:
-			{
-				int i,t;
-				for(i=val2=0;i<val1;i++) {
-					t = 5-(i>>1);
-					val2 += (t < 0)? 1:t;
-				}
-			}
-			break;
-
-		case SC_DEFENDER:
-			calc_flag = 1;
-			val2 = 5 + val1*15;
-			break;
-
-		case SC_KEEPING:
-		case SC_BARRIER:
-		case SC_HALLUCINATION:
-			break;
-		case SC_CONCENTRATION:	/* �R���Z���g���[�V���� */
-			*opt3 |= 1;
-			calc_flag = 1;
-			break;
-		case SC_TENSIONRELAX:	/* �e���V���������b�N�X */
-			calc_flag = 1;
-			if(bl->type == BL_PC) {
-				tick = 10000;
-			}
-			break;
-		case SC_AURABLADE:		/* �I�[���u���[�h */
-		case SC_PARRYING:		/* �p���C���O */
-//		case SC_ASSUMPTIO:		/*  */
-		case SC_HEADCRUSH:		/* �w�b�h�N���b�V�� */
-		case SC_JOINTBEAT:		/* �W���C���g�r�[�g */
-//		case SC_MARIONETTE:		/* �}���I�l�b�g�R���g���[�� */
-
-			//�Ƃ肠�����蔲��
-			break;
-
-// -- moonsoul	(for new upper class related skill status effects)
-/*
-		case SC_AURABLADE:
-			val2 = val1*10;
-			break;
-		case SC_PARRYING:
-			val2=val1*3;
-			break;
-		case SC_CONCENTRATION:
-			calc_flag=1;
-			val2=val1*10;
-			val3=val1*5;
-			break;
-		case SC_TENSIONRELAX:
-//			val2 = 10;
-//			val3 = 15;
-			break;
-		case SC_BERSERK:
-			calc_flag=1;
-			break;
-		case SC_ASSUMPTIO:
-			if(sc_data[SC_KYRIE].timer!=-1 )
-				skill_status_change_end(bl,SC_KYRIE,-1);
-				break;
-*/
-		case SC_WINDWALK:		/* �E�C���h�E�H�[�N */
-			calc_flag = 1;
-			val2 = (val1 / 2); //Flee�㏸��
-			break;
-		case SC_BERSERK:		/* �o�[�T�[�N */
-			if(sd){
-				sd->status.sp = 0;
-				clif_updatestatus(sd,SP_SP);
-				clif_status_change(bl,SC_INCREASEAGI,1);	/* �A�C�R���\�� */
-			}
-			*opt3 |= 128;
-			tick = 1000;
-			calc_flag = 1;
-			break;
-		case SC_ASSUMPTIO:		/* �A�X���v�e�B�I */
-			*opt3 |= 2048;
-			break;
-		case SC_MARIONETTE:		/* �}���I�l�b�g�R���g���[�� */
-			*opt3 |= 1024;
-			break;
-		case SC_MELTDOWN:		/* �����g�_�E�� */
-		case SC_CARTBOOST:		/* �J�[�g�u�[�X�g */
-		case SC_TRUESIGHT:		/* �g�D���[�T�C�g */
-		case SC_SPIDERWEB:		/* �X�p�C�_�[�E�F�b�u */
-		case SC_MAGICPOWER:		/* ���@�͑��� */
-			calc_flag = 1;
-			break;
-		case SC_REJECTSWORD:	/* ���W�F�N�g�\�[�h */
-			val2 = 3; //3��U���𒵂˕Ԃ�
-			break;
-		case SC_MEMORIZE:		/* �������C�Y */
-			val2 = 3; //3��r����1/3�ɂ���
-			break;
-		case SC_GRAFFITI:		/* �O���t�B�e�B */
-			{
-				struct skill_unit_group *sg = skill_unitsetting(bl,RG_GRAFFITI,val1,val2,val3,0);
-				if(sg)
-					val4 = (int)sg;
-			}
-			break;
-		case SC_SPLASHER:		/* �x�i���X�v���b�V���[ */
-			break;
-		default:
-			if(battle_config.error_log)
-				printf("UnknownStatusChange [%d]\n", type);
-			return 0;
-	}
-
-	if(bl->type==BL_PC && type<SC_SENDMAX)
-		clif_status_change(bl,type,1);	/* �A�C�R���\�� */
-
-	/* option�̕ύX */
-	switch(type){
-		case SC_STONE:
-		case SC_FREEZE:
-		case SC_STAN:
-		case SC_SLEEP:
-			battle_stopattack(bl);	/* �U����~ */
-			skill_stop_dancing(bl,0);	/* ���t/�_���X�̒��f */
-			{	/* �����Ɋ|����Ȃ��X�e�[�^�X�ُ������ */
-				int i;
-				for(i = SC_STONE; i <= SC_SLEEP; i++){
-					if(sc_data[i].timer != -1){
-						(*sc_count)--;
-						delete_timer(sc_data[i].timer, skill_status_change_timer);
-						sc_data[i].timer = -1;
-					}
-				}
-			}
-			if(type == SC_STONE)
-				*opt1 = 6;
-			else
-				*opt1 = type - SC_STONE + 1;
-			opt_flag = 1;
-			break;
-		case SC_POISON:
-		case SC_CURSE:
-		case SC_SILENCE:
-		case SC_BLIND:
-			*opt2 |= 1<<(type-SC_POISON);
-			opt_flag = 1;
-			break;
-		case SC_SIGNUMCRUCIS:
-			*opt2 |= 0x40;
-			opt_flag = 1;
-			break;
-		case SC_HIDING:
-		case SC_CLOAKING:
-			battle_stopattack(bl);	/* �U����~ */
-			*option |= ((type==SC_HIDING)?2:4);
-			opt_flag =1 ;
-			break;
-		case SC_CHASEWALK:
-			battle_stopattack(bl);	/* �U����~ */
-			*option |= 16388;
-			opt_flag =1 ;
-			break;
-		case SC_SIGHT:
-			*option |= 1;
-			opt_flag = 1;
-			break;
-		case SC_RUWACH:
-			*option |= 8192;
-			opt_flag = 1;
-			break;
-		case SC_WEDDING:
-			*option |= 4096;
-			opt_flag = 1;
-	}
-
-	if(opt_flag)	/* option�̕ύX */
-		clif_changeoption(bl);
-
-	(*sc_count)++;	/* �X�e�[�^�X�ُ�̐� */
-
-	sc_data[type].val1 = val1;
-	sc_data[type].val2 = val2;
-	sc_data[type].val3 = val3;
-	sc_data[type].val4 = val4;
-	/* �^�C�}�[�ݒ� */
-	sc_data[type].timer = add_timer(
-		gettick() + tick, skill_status_change_timer, bl->id, type);
-
-	if(bl->type==BL_PC && calc_flag)
-		pc_calcstatus(sd,0);	/* �X�e�[�^�X�Čv�Z */
-
-	if(bl->type==BL_PC && updateflag)
-		clif_updatestatus(sd,updateflag);	/* �X�e�[�^�X���N���C�A���g�ɑ��� */
-
-	return 0;
-}
-/*==========================================
- * �X�e�[�^�X�ُ�S����
- *------------------------------------------
- */
-int skill_status_change_clear(struct block_list *bl, int type)
-{
-	struct status_change* sc_data;
-	short *sc_count, *option, *opt1, *opt2, *opt3;
-	int i;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, sc_data = battle_get_sc_data(bl));
-	nullpo_retr(0, sc_count = battle_get_sc_count(bl));
-	nullpo_retr(0, option = battle_get_option(bl));
-	nullpo_retr(0, opt1 = battle_get_opt1(bl));
-	nullpo_retr(0, opt2 = battle_get_opt2(bl));
-	nullpo_retr(0, opt3 = battle_get_opt3(bl));
-
-	if (*sc_count == 0)
-		return 0;
-	for(i = 0; i < MAX_STATUSCHANGE; i++){
-		if(sc_data[i].timer != -1){	/* �ُ킪����Ȃ�^�C�}�[���폜���� */
-/*
-			delete_timer(sc_data[i].timer, skill_status_change_timer);
-			sc_data[i].timer = -1;
-
-			if (!type && i < SC_SENDMAX)
-				clif_status_change(bl, i, 0);
-*/
-
-			skill_status_change_end(bl, i, -1);
-		}
-	}
-	*sc_count = 0;
-	*opt1 = 0;
-	*opt2 = 0;
-	*opt3 = 0;
-	*option &= OPTION_MASK;
-
-	if (night_flag == 1 && type == BL_PC) // by [Yor]
-		*opt2 |= STATE_BLIND;
-
-	if(!type || type&2)
-		clif_changeoption(bl);
-
-	return 0;
-}
-
-/* �N���[�L���O�����i����Ɉړ��s�”\�n�т����邩�j */
-int skill_check_cloaking(struct block_list *bl) 
-{
-	struct map_session_data *sd=NULL;
-	static int dx[]={-1, 0, 1,-1, 1,-1, 0, 1};
-	static int dy[]={-1,-1,-1, 0, 0, 1, 1, 1};
-	int end=1,i;
-
-	nullpo_retr(0, bl);
-
-	if(pc_checkskill(sd,AS_CLOAKING)>2)
-		return 0;
-	if(bl->type == BL_PC && battle_config.pc_cloak_check_type&1)
-		return 0;
-	if(bl->type == BL_MOB && battle_config.monster_cloak_check_type&1)
-		return 0;
-	for(i=0;i<sizeof(dx)/sizeof(dx[0]);i++){
-		int c=map_getcell(bl->m,bl->x+dx[i],bl->y+dy[i]);
-		if(c==1 || c==5) end=0;
-	}
-	if(end){
-		skill_status_change_end(bl, SC_CLOAKING, -1);
-		*battle_get_option(bl)&=~4;	/* �O�̂��߂̏��� */
-	}
-	return end;
-}
-
-/*
- *----------------------------------------------------------------------------
- * �X�L�����j�b�g
- *----------------------------------------------------------------------------
- */
-
-/*==========================================
- * ���t/�_���X�X�L�����ǂ�������
- * ���� �X�L��ID
- * �߂� �_���X����Ȃ�=0 ���t=2 ����ȊO�̃_���X=1
- *------------------------------------------
- */
-int skill_is_danceskill(int id)
-{
-	int i;
-	switch(id){
-	case BD_LULLABY:				/* �q��� */
-	case BD_RICHMANKIM:				/* �j�����h�̉� */
-	case BD_ETERNALCHAOS:			/* �i���̍��� */
-	case BD_DRUMBATTLEFIELD:		/* �푾�ۂ̋��� */
-	case BD_RINGNIBELUNGEN:			/* �j�[�x�����O�̎w�� */
-	case BD_ROKISWEIL:				/* ���L�̋��� */
-	case BD_INTOABYSS:				/* �[���̒��� */
-	case BD_SIEGFRIED:				/* �s���g�̃W�[�N�t���[�h */
-	case BD_RAGNAROK:				/* �_�X�̉��� */
-	case CG_MOONLIT:				/* ������̐�ɗ�����Ԃт� */
-		i=2;
-		break;
-	case BA_DISSONANCE:				/* �s���a�� */
-	case BA_FROSTJOKE:				/* �����W���[�N */
-	case BA_WHISTLE:				/* ���J */
-	case BA_ASSASSINCROSS:			/* �[�z�̃A�T�V���N���X */
-	case BA_POEMBRAGI:				/* �u���M�̎� */
-	case BA_APPLEIDUN:				/* �C�h�D���̗ь� */
-	case DC_UGLYDANCE:				/* ��������ȃ_���X */
-	case DC_SCREAM:					/* �X�N���[�� */
-	case DC_HUMMING:				/* �n�~���O */
-	case DC_DONTFORGETME:			/* ����Y��Ȃ��Łc */
-	case DC_FORTUNEKISS:			/* �K�^�̃L�X */
-	case DC_SERVICEFORYOU:			/* �T�[�r�X�t�H�[���[ */
-		i=1;
-		break;
-	default:
-		i=0;
-	}
-	return i;
-}
-
-/*==========================================
- * ���t/�_���X����߂�
- * flag 1�ō��t���Ȃ瑊���Ƀ��j�b�g��C����
- *
- *------------------------------------------
- */
-void skill_stop_dancing(struct block_list *src, int flag)
-{
-	struct status_change* sc_data;
-	struct skill_unit_group* group;
-
-	nullpo_retv(src);
-
-	sc_data=battle_get_sc_data(src);
-	if(sc_data && sc_data[SC_DANCING].timer==-1)
-		return;
-	group=(struct skill_unit_group *)sc_data[SC_DANCING].val2; //�_���X�̃X�L�����j�b�gID��val2�ɓ����Ă�
-	if(group && src->type==BL_PC && sc_data && sc_data[SC_DANCING].val4){ //���t���f
-		struct map_session_data* dsd=map_id2sd(sc_data[SC_DANCING].val4); //������sd�擾
-		if(flag){ //���O�A�E�g�ȂǕЕ��������Ă����t���p�������
-			if(dsd && src->id == group->src_id){ //�O���[�v��������PC��������
-				group->src_id=sc_data[SC_DANCING].val4; //�����ɃO���[�v��C����
-				if(flag&1) //���O�A�E�g
-				dsd->sc_data[SC_DANCING].val4=0; //�����̑�����0�ɂ��č��t�I�����ʏ�̃_���X���
-				if(flag&2) //�n�G��тȂ�
-					return; //���t���_���X��Ԃ��I�������Ȃ����X�L�����j�b�g�͒u���Ă��ڂ�
-			}else if(dsd && dsd->bl.id == group->src_id){ //�������O���[�v�������Ă���PC��������(�����̓O���[�v�������Ă��Ȃ�)
-				if(flag&1) //���O�A�E�g
-				dsd->sc_data[SC_DANCING].val4=0; //�����̑�����0�ɂ��č��t�I�����ʏ�̃_���X���
-				if(flag&2) //�n�G��тȂ�
-					return; //���t���_���X��Ԃ��I�������Ȃ����X�L�����j�b�g�͒u���Ă��ڂ�
-			}
-			skill_status_change_end(src,SC_DANCING,-1);//�����̃X�e�[�^�X���I��������
-			//�����ăO���[�v�͏����Ȃ��������Ȃ��̂ŃX�e�[�^�X�v�Z������Ȃ��H
-			return;
-		}else{
-			if(dsd && src->id == group->src_id){ //�O���[�v�������Ă�PC���~�߂�
-				skill_status_change_end((struct block_list *)dsd,SC_DANCING,-1);//����̃X�e�[�^�X���I��������
-			}
-			if(dsd && dsd->bl.id == group->src_id){ //�������O���[�v�������Ă���PC���~�߂�(�����̓O���[�v�������Ă��Ȃ�)
-				skill_status_change_end(src,SC_DANCING,-1);//�����̃X�e�[�^�X���I��������
-			}
-		}
-	}
-	if(flag&2 && group && src->type==BL_PC){ //�n�G�Ŕ�񂾂Ƃ��Ƃ��̓��j�b�g�����
-		struct map_session_data *sd = (struct map_session_data *)src;
-		skill_unit_move_unit_group(group, sd->bl.m,(sd->to_x - sd->bl.x),(sd->to_y - sd->bl.y));
-		return;
-	}
-	skill_delunitgroup(group);
-	if(src->type==BL_PC)
-		pc_calcstatus((struct map_session_data *)src,0);
-}
-
-/*==========================================
- * �X�L�����j�b�g������
- *------------------------------------------
- */
-struct skill_unit *skill_initunit(struct skill_unit_group *group,int idx,int x,int y)
-{
-	struct skill_unit *unit;
-
-	nullpo_retr(NULL, group);
-	nullpo_retr(NULL, unit=&group->unit[idx]);
-
-	if(!unit->alive)
-		group->alive_count++;
-
-	unit->bl.id=map_addobject(&unit->bl);
-	unit->bl.type=BL_SKILL;
-	unit->bl.m=group->map;
-	unit->bl.x=x;
-	unit->bl.y=y;
-	unit->group=group;
-	unit->val1=unit->val2=0;
-	unit->alive=1;
-
-	map_addblock(&unit->bl);
-	clif_skill_setunit(unit);
-	return unit;
-}
-
-int skill_unit_timer_sub_ondelete( struct block_list *bl, va_list ap );
-/*==========================================
- * �X�L�����j�b�g�폜
- *------------------------------------------
- */
-int skill_delunit(struct skill_unit *unit)
-{
-	struct skill_unit_group *group;
-	int range;
-
-	nullpo_retr(0, unit);
-	if(!unit->alive)
-		return 0;
-	nullpo_retr(0, group=unit->group);
-
-	/* onlimit�C�x���g�Ăяo�� */
-	skill_unit_onlimit( unit,gettick() );
-
-	/* ondelete�C�x���g�Ăяo�� */
-	range=group->range;
-	map_foreachinarea( skill_unit_timer_sub_ondelete, unit->bl.m,
-		unit->bl.x-range,unit->bl.y-range,unit->bl.x+range,unit->bl.y+range,0,
-		&unit->bl,gettick() );
-
-	clif_skill_delunit(unit);
-
-	unit->group=NULL;
-	unit->alive=0;
-	map_delobjectnofree(unit->bl.id);
-	if(group->alive_count>0 && (--group->alive_count)<=0)
-		skill_delunitgroup(group);
-
-	return 0;
-}
-/*==========================================
- * �X�L�����j�b�g�O���[�v������
- *------------------------------------------
- */
-static int skill_unit_group_newid=10;
-struct skill_unit_group *skill_initunitgroup(struct block_list *src,
-	int count,int skillid,int skilllv,int unit_id)
-{
-	int i;
-	struct skill_unit_group *group=NULL, *list=NULL;
-	int maxsug=0;
-
-	nullpo_retr(NULL, src);
-
-	if(src->type==BL_PC){
-		list=((struct map_session_data *)src)->skillunit;
-		maxsug=MAX_SKILLUNITGROUP;
-	}else if(src->type==BL_MOB){
-		list=((struct mob_data *)src)->skillunit;
-		maxsug=MAX_MOBSKILLUNITGROUP;
-	}else if(src->type==BL_PET){
-		list=((struct pet_data *)src)->skillunit;
-		maxsug=MAX_MOBSKILLUNITGROUP;
-	}
-	if(list){
-		for(i=0;i<maxsug;i++)	/* �󂢂Ă�����̌��� */
-			if(list[i].group_id==0){
-				group=&list[i];
-				break;
-			}
-
-		if(group==NULL){	/* �󂢂ĂȂ��̂ŌÂ����̌��� */
-			int j=0;
-			unsigned maxdiff=0,x,tick=gettick();
-			for(i=0;i<maxsug;i++)
-				if((x=DIFF_TICK(tick,list[i].tick))>maxdiff){
-					maxdiff=x;
-					j=i;
-				}
-			skill_delunitgroup(&list[j]);
-			group=&list[j];
-		}
-	}
-
-	if(group==NULL){
-		printf("skill_initunitgroup: error unit group !\n");
-		exit(1);
-	}
-
-	group->src_id=src->id;
-	group->party_id=battle_get_party_id(src);
-	group->guild_id=battle_get_guild_id(src);
-	group->group_id=skill_unit_group_newid++;
-	if(skill_unit_group_newid<=0)
-		skill_unit_group_newid=10;
-	group->unit=(struct skill_unit *)aCalloc(count,sizeof(struct skill_unit));
-	group->unit_count=count;
-	group->val1=group->val2=0;
-	group->skill_id=skillid;
-	group->skill_lv=skilllv;
-	group->unit_id=unit_id;
-	group->map=src->m;
-	group->range=0;
-	group->limit=10000;
-	group->interval=1000;
-	group->tick=gettick();
-	group->valstr=NULL;
-
-	if( skill_is_danceskill(skillid) ){
-		struct map_session_data *sd = NULL;
-		if(src->type==BL_PC && (sd=(struct map_session_data *)src) ){
-			sd->skillid_dance=skillid;
-			sd->skilllv_dance=skilllv;
-		}
-		skill_status_change_start(src,SC_DANCING,skillid,(int)group,0,0,skill_get_time(skillid,skilllv)+1000,0);
-		switch(skillid){ //���t�X�L���͑������_���X��Ԃɂ���
-		case BD_LULLABY:				/* �q��� */
-		case BD_RICHMANKIM:				/* �j�����h�̉� */
-		case BD_ETERNALCHAOS:			/* �i���̍��� */
-		case BD_DRUMBATTLEFIELD:		/* �푾�ۂ̋��� */
-		case BD_RINGNIBELUNGEN:			/* �j�[�x�����O�̎w�� */
-		case BD_ROKISWEIL:				/* ���L�̋��� */
-		case BD_INTOABYSS:				/* �[���̒��� */
-		case BD_SIEGFRIED:				/* �s���g�̃W�[�N�t���[�h */
-		case BD_RAGNAROK:				/* �_�X�̉��� */
-		case CG_MOONLIT:				/* ������̐�ɗ�����Ԃт� */
-			{
-				int range=1;
-				int c=0;
-				if(sd){
-					map_foreachinarea(skill_check_condition_use_sub,sd->bl.m,
-						sd->bl.x-range,sd->bl.y-range,
-						sd->bl.x+range,sd->bl.y+range,BL_PC,&sd->bl,&c);
-				}
-			}
-		}
-	}
-	return group;
-}
-
-/*==========================================
- * �X�L�����j�b�g�O���[�v�폜
- *------------------------------------------
- */
-int skill_delunitgroup(struct skill_unit_group *group)
-{
-	struct block_list *src;
-	int i;
-
-	nullpo_retr(0, group);
-	if(group->unit_count<=0)
-		return 0;
-
-	src=map_id2bl(group->src_id);
-	if( skill_is_danceskill(group->skill_id) ){ //�_���X�X�L���̓_���X��Ԃ���������
-		if(src)
-			skill_status_change_end(src,SC_DANCING,-1);
-		}
-
-	group->alive_count=0;
-	if(group->unit!=NULL){
-		for(i=0;i<group->unit_count;i++)
-			if(group->unit[i].alive)
-				skill_delunit(&group->unit[i]);
-	}
-	if(group->valstr!=NULL){
-		map_freeblock(group->valstr);
-		group->valstr=NULL;
-	}
-
-	map_freeblock(group->unit);	/* free()�̑ւ�� */
-	group->unit=NULL;
-	group->src_id=0;
-	group->group_id=0;
-	group->unit_count=0;
-	return 0;
-}
-
-/*==========================================
- * �X�L�����j�b�g�O���[�v�S�폜
- *------------------------------------------
- */
-int skill_clear_unitgroup(struct block_list *src)
-{
-	struct skill_unit_group *group=NULL;
-	int maxsug=0;
-
-	nullpo_retr(0, src);
-
-	if(src->type==BL_PC){
-		group=((struct map_session_data *)src)->skillunit;
-		maxsug=MAX_SKILLUNITGROUP;
-	}else if(src->type==BL_MOB){
-		group=((struct mob_data *)src)->skillunit;
-		maxsug=MAX_MOBSKILLUNITGROUP;
-	}else if(src->type==BL_PET){ // [Valaris]
-		group=((struct pet_data *)src)->skillunit;
-		maxsug=MAX_MOBSKILLUNITGROUP;
-	}
-	if(group){
-		int i;
-		for(i=0;i<maxsug;i++)
-			if(group[i].group_id>0 && group[i].src_id == src->id)
-				skill_delunitgroup(&group[i]);
-	}
-	return 0;
-}
-
-/*==========================================
- * �X�L�����j�b�g�O���[�v�̔�e��tick����
- *------------------------------------------
- */
-struct skill_unit_group_tickset *skill_unitgrouptickset_search(
-	struct block_list *bl,int group_id)
-{
-	int i,j=0,k,s=group_id%MAX_SKILLUNITGROUPTICKSET;
-	struct skill_unit_group_tickset *set=NULL;
-
-	nullpo_retr(0, bl);
-
-	if(bl->type==BL_PC){
-		set=((struct map_session_data *)bl)->skillunittick;
-	}else{
-		set=((struct mob_data *)bl)->skillunittick;
-	}
-	if(set==NULL)
-		return 0;
-	for(i=0;i<MAX_SKILLUNITGROUPTICKSET;i++)
-		if( set[(k=(i+s)%MAX_SKILLUNITGROUPTICKSET)].group_id == group_id )
-			return &set[k];
-		else if( set[k].group_id==0 )
-			j=k;
-
-	return &set[j];
-}
-
-/*==========================================
- * �X�L�����j�b�g�O���[�v�̔�e��tick�폜
- *------------------------------------------
- */
-int skill_unitgrouptickset_delete(struct block_list *bl,int group_id)
-{
-	int i,s=group_id%MAX_SKILLUNITGROUPTICKSET;
-	struct skill_unit_group_tickset *set=NULL,*ts;
-
-	nullpo_retr(0, bl);
-
-	if(bl->type==BL_PC){
-		set=((struct map_session_data *)bl)->skillunittick;
-	}else{
-		set=((struct mob_data *)bl)->skillunittick;
-	}
-
-	if(set!=NULL){
-
-		for(i=0;i<MAX_SKILLUNITGROUPTICKSET;i++)
-			if( (ts=&set[(i+s)%MAX_SKILLUNITGROUPTICKSET])->group_id == group_id )
-				ts->group_id=0;
-
-	}
-	return 0;
-}
-
-/*==========================================
- * �X�L�����j�b�g�^�C�}�[���������p(foreachinarea)
- *------------------------------------------
- */
-int skill_unit_timer_sub_onplace( struct block_list *bl, va_list ap )
-{
-	struct block_list *src;
-	struct skill_unit *su;
-	unsigned int tick;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	src=va_arg(ap,struct block_list*);
-
-	tick=va_arg(ap,unsigned int);
-	su = (struct skill_unit *)src;
-
-	if( su && su->alive ) {
-		struct skill_unit_group *sg;
-		sg = su->group;
-		if(sg && battle_check_target(src,bl,sg->target_flag )>0)
-			skill_unit_onplace( su, bl, tick );
-	}
-	return 0;
-}
-
-/*==========================================
- * �X�L�����j�b�g�^�C�}�[�폜�����p(foreachinarea)
- *------------------------------------------
- */
-int skill_unit_timer_sub_ondelete( struct block_list *bl, va_list ap )
-{
-	struct block_list *src;
-	struct skill_unit *su;
-	unsigned int tick;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	src=va_arg(ap,struct block_list*);
-
-	tick=va_arg(ap,unsigned int);
-	su = (struct skill_unit *)src;
-
-	if( su && su->alive ){
-		struct skill_unit_group *sg;
-		sg = su->group;
-		if( sg && battle_check_target(src,bl,sg->target_flag )>0 )
-			skill_unit_ondelete( su, bl, tick );
-	}
-	return 0;
-}
-
-/*==========================================
- * �X�L�����j�b�g�^�C�}�[�����p(foreachobject)
- *------------------------------------------
- */
-int skill_unit_timer_sub( struct block_list *bl, va_list ap )
-{
-	struct skill_unit *unit;
-	struct skill_unit_group *group;
-	int range;
-	unsigned int tick;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, unit=(struct skill_unit *)bl);
-	nullpo_retr(0, group=unit->group);
-	tick=va_arg(ap,unsigned int);
-
-	if(!unit->alive)
-		return 0;
-
-	range=(unit->range!=0)?unit->range:group->range;
-
-	/* onplace�C�x���g�Ăяo�� */
-	if(unit->alive && unit->range>=0){
-		map_foreachinarea( skill_unit_timer_sub_onplace, bl->m,
-			bl->x-range,bl->y-range,bl->x+range,bl->y+range,0,
-			bl,tick);
-		if(group->unit_id == 0xaa && DIFF_TICK(tick,group->tick)>=6000*group->val2){
-			map_foreachinarea( skill_idun_heal, bl->m,
-				bl->x-range,bl->y-range,bl->x+range,bl->y+range,0,unit);
-			group->val2++;
-		}
-	}
-	/* ���Ԑ؂�폜 */
-	if(unit->alive &&
-		(DIFF_TICK(tick,group->tick)>=group->limit || DIFF_TICK(tick,group->tick)>=unit->limit) ){
-		switch(group->unit_id){
-
-
-
-
-
-
-			case 0x8f:	/* �u���X�g�}�C�� */
-				group->unit_id = 0x8c;
-				clif_changelook(bl,LOOK_BASE,group->unit_id);
-				group->limit=DIFF_TICK(tick+1500,group->tick);
-				unit->limit=DIFF_TICK(tick+1500,group->tick);
-				break;
-			case 0x90:	/* �X�L�b�h�g���b�v */
-			case 0x91:	/* �A���N���X�l�A */
-			case 0x93:	/* �����h�}�C�� */
-			case 0x94:	/* �V���b�N�E�F�[�u�g���b�v */
-			case 0x95:	/* �T���h�}�� */
-			case 0x96:	/* �t���b�V���[ */
-			case 0x97:	/* �t���[�W���O�g���b�v */
-			case 0x98:	/* �N���C���A�[�g���b�v */
-			case 0x99:	/* �g�[�L�[�{�b�N�X */
-				{
-					struct block_list *src=map_id2bl(group->src_id);
-					if(group->unit_id == 0x91 && group->val2);
-					else{
-						if(src && src->type==BL_PC){
-							struct item item_tmp;
-							memset(&item_tmp,0,sizeof(item_tmp));
-							item_tmp.nameid=1065;
-							item_tmp.identify=1;
-							map_addflooritem(&item_tmp,1,bl->m,bl->x,bl->y,NULL,NULL,NULL,0);	// 㩕Ԋ�
-						}
-					}
-				}
-			default:
-				skill_delunit(unit);
-		}
-	}
-
-	if(group->unit_id == 0x8d) {
-		unit->val1 -= 5;
-		if(unit->val1 <= 0 && unit->limit + group->tick > tick + 700)
-			unit->limit = DIFF_TICK(tick+700,group->tick);
-	}
-
-	return 0;
-}
-/*==========================================
- * �X�L�����j�b�g�^�C�}�[����
- *------------------------------------------
- */
-int skill_unit_timer( int tid,unsigned int tick,int id,int data)
-{
-	map_freeblock_lock();
-
-	map_foreachobject( skill_unit_timer_sub, BL_SKILL, tick );
-
-	map_freeblock_unlock();
-
-	return 0;
-}
-
-/*==========================================
- * �X�L�����j�b�g�ړ��������p(foreachinarea)
- *------------------------------------------
- */
-int skill_unit_out_all_sub( struct block_list *bl, va_list ap )
-{
-	struct skill_unit *unit;
-	struct skill_unit_group *group;
-	struct block_list *src;
-	int range;
-	unsigned int tick;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, src=va_arg(ap,struct block_list*));
-	nullpo_retr(0, unit=(struct skill_unit *)bl);
-	nullpo_retr(0, group=unit->group);
-
-	tick=va_arg(ap,unsigned int);
-
-	if(!unit->alive || src->prev==NULL)
-		return 0;
-
-	range=(unit->range!=0)?unit->range:group->range;
-
-	if( range<0 || battle_check_target(bl,src,group->target_flag )<=0 )
-		return 0;
-
-	if( src->x >= bl->x-range && src->x <= bl->x+range &&
-		src->y >= bl->y-range && src->y <= bl->y+range )
-		skill_unit_onout( unit, src, tick );
-
-	return 0;
-}
-
-
-/*==========================================
- * �X�L�����j�b�g�ړ�������
- *------------------------------------------
- */
-int skill_unit_out_all( struct block_list *bl,unsigned int tick,int range)
-{
-	nullpo_retr(0, bl);
-
-	if( bl->prev==NULL )
-		return 0;
-
-	if(range<7)
-		range=7;
-	map_foreachinarea( skill_unit_out_all_sub,
-		bl->m,bl->x-range,bl->y-range,bl->x+range,bl->y+range,BL_SKILL,
-		bl,tick );
-
-	return 0;
-}
-
-/*==========================================
- * �X�L�����j�b�g�ړ��������p(foreachinarea)
- *------------------------------------------
- */
-int skill_unit_move_sub( struct block_list *bl, va_list ap )
-{
-	struct skill_unit *unit;
-	struct skill_unit_group *group;
-	struct block_list *src;
-	int range;
-	unsigned int tick;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, unit=(struct skill_unit *)bl);
-	nullpo_retr(0, src=va_arg(ap,struct block_list*));
-
-	tick=va_arg(ap,unsigned int);
-
-	if(!unit->alive || src->prev==NULL)
-		return 0;
-
-	if((group=unit->group) == NULL)
-		return 0;
-	range=(unit->range!=0)?unit->range:group->range;
-
-	if( range<0 || battle_check_target(bl,src,group->target_flag )<=0 )
-		return 0;
-
-	if( src->x >= bl->x-range && src->x <= bl->x+range &&
-		src->y >= bl->y-range && src->y <= bl->y+range )
-		skill_unit_onplace( unit, src, tick );
-	else
-		skill_unit_onout( unit, src, tick );
-
-	return 0;
-}
-
-/*==========================================
- * �X�L�����j�b�g�ړ�������
- *------------------------------------------
- */
-int skill_unit_move( struct block_list *bl,unsigned int tick,int range)
-{
-	nullpo_retr(0, bl);
-
-	if( bl->prev==NULL )
-		return 0;
-
-	if(range<7)
-		range=7;
-	map_foreachinarea( skill_unit_move_sub,
-		bl->m,bl->x-range,bl->y-range,bl->x+range,bl->y+range,BL_SKILL,
-		bl,tick );
-
-	return 0;
-}
-
-/*==========================================
- * �X�L�����j�b�g���̂̈ړ�������(foreachinarea)
- *------------------------------------------
- */
-int skill_unit_move_unit_group_sub( struct block_list *bl, va_list ap )
-{
-	struct skill_unit *unit;
-	struct skill_unit_group *group;
-	struct block_list *src;
-	int range;
-	unsigned int tick;
-
-	nullpo_retr(0, bl);
-	nullpo_retr(0, ap);
-	nullpo_retr(0, src=va_arg(ap,struct block_list*));
-	nullpo_retr(0, unit=(struct skill_unit *)src);
-	nullpo_retr(0, group=unit->group);
-
-	tick=va_arg(ap,unsigned int);
-
-	if(!unit->alive || bl->prev==NULL)
-		return 0;
-
-	range=(unit->range!=0)?unit->range:group->range;
-
-	if( range<0 || battle_check_target(src,bl,group->target_flag )<=0 )
-		return 0;
-	if( bl->x >= src->x-range && bl->x <= src->x+range &&
-		bl->y >= src->y-range && bl->y <= src->y+range )
-		skill_unit_onplace( unit, bl, tick );
-	else
-		skill_unit_onout( unit, bl, tick );
-	return 0;
-}
-
-/*==========================================
- * �X�L�����j�b�g���̂̈ړ�������
- * �����̓O���[�v�ƈړ���
- *------------------------------------------
- */
-int skill_unit_move_unit_group( struct skill_unit_group *group, int m,int dx,int dy)
-{
-	nullpo_retr(0, group);
-
-	if( group->unit_count<=0)
-		return 0;
-
-	if(group->unit!=NULL){
-		if(!battle_config.unit_movement_type){
-		int i;
-		for(i=0;i<group->unit_count;i++){
-			struct skill_unit *unit=&group->unit[i];
-			if(unit->alive && !(m==unit->bl.m && dx==0 && dy==0)){
-				int range=unit->range;
-				map_delblock(&unit->bl);
-				unit->bl.m = m;
-				unit->bl.x += dx;
-				unit->bl.y += dy;
-				map_addblock(&unit->bl);
-				clif_skill_setunit(unit);
-				if(range>0){
-					if(range<7)
-						range=7;
-					map_foreachinarea( skill_unit_move_unit_group_sub, unit->bl.m,
-						unit->bl.x-range,unit->bl.y-range,unit->bl.x+range,unit->bl.y+range,0,
-						&unit->bl,gettick() );
-				}
-			}
-		}
-		}else{
-			int i,j, *r_flag, *s_flag, *m_flag;
-			struct skill_unit *unit1;
-			struct skill_unit *unit2;
-                        r_flag = (int *) malloc(sizeof(int) * group->unit_count);
-                        s_flag = (int *) malloc(sizeof(int) * group->unit_count);
-                        m_flag = (int *) malloc(sizeof(int) * group->unit_count);
-			memset(r_flag,0, sizeof(int) * group->unit_count);// �p���t���O
-			memset(s_flag,0, sizeof(int) * group->unit_count);// �p���t���O
-			memset(m_flag,0, sizeof(int) * group->unit_count);// �p���t���O
-
-			//��Ƀt���O��S�����߂�
-		for(i=0;i<group->unit_count;i++){
-				int move_check=0;// ���Ԃ�t���O
-				unit1=&group->unit[i];
-			for(j=0;j<group->unit_count;j++){
-					unit2=&group->unit[j];
-					if(unit1->bl.m==m && unit1->bl.x+dx==unit2->bl.x && unit1->bl.y+dy==unit2->bl.y){
-						//�ړ���Ƀ��j�b�g�����Ԃ��Ă���
-						s_flag[i]=1;// �ړ��O�̃��j�b�g�i���o�[�̌p���t���Oon
-						r_flag[j]=1;// ���Ԃ郆�j�b�g�i���o�[�̎c���t���Oon
-						move_check=1;//���j�b�g�����Ԃ����B
-						break;
-					}
-				}
-				if(!move_check)// ���j�b�g�����Ԃ��ĂȂ�������
-					m_flag[i]=1;// �ړ��O���j�b�g�i���o�[�̈ړ��t���Oon
-			}
-
-			//�t���O�Ɋ�Â��ă��j�b�g�ړ�
-			for(i=0;i<group->unit_count;i++){
-				unit1=&group->unit[i];
-				if(m_flag[i]){// �ړ��t���O��on��
-					if(!r_flag[i]){// �c���t���O��off�Ȃ�
-						//�P���ړ�(range���p���̕K�v����)
-						int range=unit1->range;
-						map_delblock(&unit1->bl);
-					unit1->bl.m = m;
-					unit1->bl.x += dx;
-					unit1->bl.y += dy;
-						map_addblock(&unit1->bl);
-						clif_skill_setunit(unit1);
-						if(range > 0){
-							if(range < 7)
-								range = 7;
-							map_foreachinarea( skill_unit_move_unit_group_sub, unit1->bl.m,
-								unit1->bl.x-range,unit1->bl.y-range,unit1->bl.x+range,unit1->bl.y+range,0,
-								&unit1->bl,gettick() );
-						}
-					}else{// �c���t���O��on�Ȃ�
-						//�󃆃j�b�g�ɂȂ�̂ŁA�p���”\�ȃ��j�b�g��T��
-						for(j=0;j<group->unit_count;j++){
-							unit2=&group->unit[j];
-							if(s_flag[j] && !r_flag[j]){
-								// �p���ړ�(range�p���t��)
-								int range=unit1->range;
-								map_delblock(&unit2->bl);
-								unit2->bl.m = m;
-								unit2->bl.x = unit1->bl.x + dx;
-								unit2->bl.y = unit1->bl.y + dy;
-								unit2->range = unit1->range;
-								map_addblock(&unit2->bl);
-								clif_skill_setunit(unit2);
-								if(range > 0){
-									if(range < 7)
-										range = 7;
-									map_foreachinarea( skill_unit_move_unit_group_sub, unit2->bl.m,
-										unit2->bl.x-range,unit2->bl.y-range,unit2->bl.x+range,unit2->bl.y+range,0,
-										&unit2->bl,gettick() );
-								}
-								s_flag[j]=0;// �p�����������̂�off
-								break;
-							}
-						}
-					}
-				}
-			}
-                        free(r_flag);
-                        free(s_flag);
-                        free(m_flag);
-		}
-	}
-	return 0;
-}
-
-/*----------------------------------------------------------------------------
- * �A�C�e������
- *----------------------------------------------------------------------------
- */
-
-/*==========================================
- * �A�C�e�������”\����
- *------------------------------------------
- */
-int skill_can_produce_mix( struct map_session_data *sd, int nameid, int trigger )
-{
-	int i,j;
-
-	nullpo_retr(0, sd);
-
-	if(nameid<=0)
-		return 0;
-
-	for(i=0;i<MAX_SKILL_PRODUCE_DB;i++){
-		if(skill_produce_db[i].nameid == nameid )
-			break;
-	}
-	if( i >= MAX_SKILL_PRODUCE_DB )	/* �f�[�^�x�[�X�ɂȂ� */
-		return 0;
-
-	if(trigger>=0){
-		if(trigger==32 || trigger==16 || trigger==64){
-			if(skill_produce_db[i].itemlv!=trigger)	/* �t�@�[�}�V�[���|�[�V�����ނƗn�z�F���z�ΈȊO�͂��� */
-				return 0;
-		}else{
-			if(skill_produce_db[i].itemlv>=16)		/* ����ȊO�͂��� */
-				return 0;
-			if( itemdb_wlv(nameid)>trigger )	/* ����Lv���� */
-				return 0;
-		}
-	}
-	if( (j=skill_produce_db[i].req_skill)>0 && pc_checkskill(sd,j)<=0 )
-		return 0;		/* �X�L��������Ȃ� */
-
-	for(j=0;j<5;j++){
-		int id,x,y;
-		if( (id=skill_produce_db[i].mat_id[j]) <= 0 )	/* ����ȏ�͍ޗ��v��Ȃ� */
-			continue;
-		if(skill_produce_db[i].mat_amount[j] <= 0) {
-			if(pc_search_inventory(sd,id) < 0)
-				return 0;
-		}
-		else {
-			for(y=0,x=0;y<MAX_INVENTORY;y++)
-				if( sd->status.inventory[y].nameid == id )
-					x+=sd->status.inventory[y].amount;
-			if(x<skill_produce_db[i].mat_amount[j])	/* �A�C�e��������Ȃ� */
-				return 0;
-		}
-	}
-	return i+1;
-}
-
-/*==========================================
- * �A�C�e�������”\����
- *------------------------------------------
- */
-int skill_produce_mix( struct map_session_data *sd,
-	int nameid, int slot1, int slot2, int slot3 )
-{
-	int slot[3];
-	int i,sc,ele,idx,equip,wlv,make_per,flag;
-
-	nullpo_retr(0, sd);
-
-	if( !(idx=skill_can_produce_mix(sd,nameid,-1)) )	/* �����s�� */
-		return 0;
-	idx--;
-	slot[0]=slot1;
-	slot[1]=slot2;
-	slot[2]=slot3;
-
-	/* ���ߍ��ݏ��� */
-	for(i=0,sc=0,ele=0;i<3;i++){
-		int j;
-		if( slot[i]<=0 )
-			continue;
-		j = pc_search_inventory(sd,slot[i]);
-		if(j < 0)	/* �s���p�P�b�g(�A�C�e������)�`�F�b�N */
-			continue;
-		if(slot[i]==1000){	/* ���̂����� */
-			pc_delitem(sd,j,1,1);
-			sc++;
-		}
-		if(slot[i]>=994 && slot[i]<=997 && ele==0){	/* ������ */
-			static const int ele_table[4]={3,1,4,2};
-			pc_delitem(sd,j,1,1);
-			ele=ele_table[slot[i]-994];
-		}
-	}
-
-	/* �ޗ����� */
-	for(i=0;i<5;i++){
-		int j,id,x;
-		if( (id=skill_produce_db[idx].mat_id[i]) <= 0 )
-			continue;
-		x=skill_produce_db[idx].mat_amount[i];	/* �K�v�Ȍ� */
-		do{	/* �Q�ˆȏ�̃C���f�b�N�X�ɂ܂������Ă��邩������Ȃ� */
-			int y=0;
-			j = pc_search_inventory(sd,id);
-
-			if(j >= 0){
-				y = sd->status.inventory[j].amount;
-				if(y>x)y=x;	/* ������� */
-				pc_delitem(sd,j,y,0);
-			}else {
-				if(battle_config.error_log)
-					printf("skill_produce_mix: material item error\n");
-			}
-
-			x-=y;	/* �܂�����Ȃ������v�Z */
-		}while( j>=0 && x>0 );	/* �ޗ�������邩�A�G���[�ɂȂ�܂ŌJ��Ԃ� */
-	}
-
-	/* �m������ */
-	equip = itemdb_isequip(nameid);
-	if(!equip) {
-		if(skill_produce_db[idx].req_skill==AM_PHARMACY) {
-			if((nameid >= 501 && nameid <= 506) || (nameid >= 545 && nameid <= 547) || nameid == 525)
-				make_per = 2000 + sd->status.base_level*30 + sd->paramc[3]*20 + sd->paramc[4]*15 + pc_checkskill(sd,AM_LEARNINGPOTION)*100 + pc_checkskill(sd,AM_PHARMACY)*300 + pc_checkskill(sd,AM_POTIONPITCHER)*100;
-			else if(nameid == 970)
-				make_per = 1500 + sd->status.base_level*30 + sd->paramc[3]*20 + sd->paramc[4]*15 + pc_checkskill(sd,AM_LEARNINGPOTION)*100 + pc_checkskill(sd,AM_PHARMACY)*300;
-			else if(nameid == 7135)
-				make_per = 1000 + sd->status.base_level*30 + sd->paramc[3]*20 + sd->paramc[4]*15 + pc_checkskill(sd,AM_LEARNINGPOTION)*100 + pc_checkskill(sd,AM_PHARMACY)*300 + pc_checkskill(sd,AM_DEMONSTRATION)*100;
-			else if(nameid == 7136)
-				make_per = 1000 + sd->status.base_level*30 + sd->paramc[3]*20 + sd->paramc[4]*15 + pc_checkskill(sd,AM_LEARNINGPOTION)*100 + pc_checkskill(sd,AM_PHARMACY)*300 + pc_checkskill(sd,AM_ACIDTERROR)*100;
-			else if(nameid == 7137)
-				make_per = 1000 + sd->status.base_level*30 + sd->paramc[3]*20 + sd->paramc[4]*15 + pc_checkskill(sd,AM_LEARNINGPOTION)*100 + pc_checkskill(sd,AM_PHARMACY)*300 + pc_checkskill(sd,AM_CANNIBALIZE)*100;
-			else if(nameid == 7138)
-				make_per = 1000 + sd->status.base_level*30 + sd->paramc[3]*20 + sd->paramc[4]*15 + pc_checkskill(sd,AM_LEARNINGPOTION)*100 + pc_checkskill(sd,AM_PHARMACY)*300 + pc_checkskill(sd,AM_SPHEREMINE)*100;
-			else if(nameid == 7139)
-				make_per = 1000 + sd->status.base_level*30 + sd->paramc[3]*20 + sd->paramc[4]*15 + pc_checkskill(sd,AM_LEARNINGPOTION)*100 + pc_checkskill(sd,AM_PHARMACY)*300 + pc_checkskill(sd,AM_CP_WEAPON)*100 +
-					pc_checkskill(sd,AM_CP_SHIELD)*100 + pc_checkskill(sd,AM_CP_ARMOR)*100 + pc_checkskill(sd,AM_CP_HELM)*100;
-			else
-				make_per = 1000 + sd->status.base_level*30 + sd->paramc[3]*20 + sd->paramc[4]*15 + pc_checkskill(sd,AM_LEARNINGPOTION)*100 + pc_checkskill(sd,AM_PHARMACY)*300;
-		}
-		else {
-			if(nameid == 998)
-				make_per = 2000 + sd->status.base_level*30 + sd->paramc[4]*20 + sd->paramc[5]*10 + pc_checkskill(sd,skill_produce_db[idx].req_skill)*600;
-			else if(nameid == 985)
-				make_per = 1000 + sd->status.base_level*30 + sd->paramc[4]*20 + sd->paramc[5]*10 + (pc_checkskill(sd,skill_produce_db[idx].req_skill)-1)*500;
-			else
-				make_per = 1000 + sd->status.base_level*30 + sd->paramc[4]*20 + sd->paramc[5]*10 + pc_checkskill(sd,skill_produce_db[idx].req_skill)*500;
-		}
-	}
-	else {
-		int add_per;
-		if(pc_search_inventory(sd,989) >= 0) add_per = 750;
-		else if(pc_search_inventory(sd,988) >= 0) add_per = 500;
-		else if(pc_search_inventory(sd,987) >= 0) add_per = 250;
-		else if(pc_search_inventory(sd,986) >= 0) add_per = 0;
-		else add_per = -500;
-		if(ele) add_per -= 500;
-		add_per -= sc*500;
-		wlv = itemdb_wlv(nameid);
-		make_per = ((250 + sd->status.base_level*15 + sd->paramc[4]*10 + sd->paramc[5]*5 + pc_checkskill(sd,skill_produce_db[idx].req_skill)*500 +
-			add_per) * (100 - (wlv - 1)*20))/100 + pc_checkskill(sd,BS_WEAPONRESEARCH)*100 + ((wlv >= 3)? pc_checkskill(sd,BS_ORIDEOCON)*100 : 0);
-	}
-
-	if(make_per < 1) make_per = 1;
-
-	if(skill_produce_db[idx].req_skill==AM_PHARMACY) {
-		if( battle_config.pp_rate!=100 )
-			make_per=make_per*battle_config.pp_rate/100;
-	}
-	else {
-		if( battle_config.wp_rate!=100 )	/* �m���␳ */
-			make_per=make_per*battle_config.wp_rate/100;
-	}
-
-//	if(battle_config.etc_log)
-//		printf("make rate = %d\n",make_per);
-
-	if(rand()%10000 < make_per){
-		/* ���� */
-		struct item tmp_item;
-		memset(&tmp_item,0,sizeof(tmp_item));
-		tmp_item.nameid=nameid;
-		tmp_item.amount=1;
-		tmp_item.identify=1;
-		if(equip){	/* ����̏ꍇ */
-			tmp_item.card[0]=0x00ff; /* ��������t���O */
-			tmp_item.card[1]=((sc*5)<<8)+ele;	/* �����Ƃ‚悳 */
-			*((unsigned long *)(&tmp_item.card[2]))=sd->char_id;	/* �L����ID */
-		}
-		else if((battle_config.produce_item_name_input && skill_produce_db[idx].req_skill!=AM_PHARMACY) ||
-			(battle_config.produce_potion_name_input && skill_produce_db[idx].req_skill==AM_PHARMACY)) {
-			tmp_item.card[0]=0x00fe;
-			tmp_item.card[1]=0;
-			*((unsigned long *)(&tmp_item.card[2]))=sd->char_id;	/* �L����ID */
-		}
-
-		if(skill_produce_db[idx].req_skill!=AM_PHARMACY && skill_produce_db[idx].req_skill!=WS_CREATECOIN) {	//���퐻���̏ꍇ
-			clif_produceeffect(sd,0,nameid);/* ���퐻���G�t�F�N�g�p�P�b�g */
-			clif_misceffect(&sd->bl,3); /* ���l�ɂ�������ʒm�i���B�����G�t�F�N�g�Ɠ����ł����́H�j */
-		}
-		else if(skill_produce_db[idx].req_skill==AM_PHARMACY){	//�t�@�[�}�V�[�̏ꍇ
-			clif_produceeffect(sd,2,nameid);/* ����G�t�F�N�g�p�P�b�g */
-			clif_misceffect(&sd->bl,5); /* ���l�ɂ�������ʒm*/
-		}else{
-			clif_produceeffect(sd,0,nameid);/* �s���Ȃ̂łƂ肠���������G�t�F�N�g�p�P�b�g */
-			clif_misceffect(&sd->bl,3); /* ���l�ɂ�������ʒm*/
-		}
-
-		if((flag = pc_additem(sd,&tmp_item,1))) {
-			clif_additem(sd,0,0,flag);
-			map_addflooritem(&tmp_item,1,sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
-		}
-	}
-	else {
-		if(skill_produce_db[idx].req_skill!=AM_PHARMACY) {	//���퐻���̏ꍇ
-			clif_produceeffect(sd,1,nameid);/* ���퐻�����s�G�t�F�N�g�p�P�b�g */
-			clif_misceffect(&sd->bl,2); /* ���l�ɂ����s��ʒm */
-		}
-		else if(skill_produce_db[idx].req_skill==AM_PHARMACY){	//�t�@�[�}�V�[�̏ꍇ
-			clif_produceeffect(sd,3,nameid);/* ���򎸔s�G�t�F�N�g�p�P�b�g */
-			clif_misceffect(&sd->bl,6); /* ���l�ɂ����s��ʒm*/
-		}else{
-			clif_produceeffect(sd,1,nameid);/* �s���Ȃ̂łƂ肠�����������s�G�t�F�N�g�p�P�b�g */
-			clif_misceffect(&sd->bl,2); /* ���l�ɂ����s��ʒm*/
-		}
-	}
-	return 0;
-}
-
-int skill_arrow_create( struct map_session_data *sd,int nameid)
-{
-	int i,j,flag,index=-1;
-	struct item tmp_item;
-
-	nullpo_retr(0, sd);
-
-	if(nameid <= 0)
-		return 1;
-
-	for(i=0;i<MAX_SKILL_ARROW_DB;i++)
-		if(nameid == skill_arrow_db[i].nameid) {
-			index = i;
-			break;
-		}
-
-	if(index < 0 || (j = pc_search_inventory(sd,nameid)) < 0)
-		return 1;
-
-	pc_delitem(sd,j,1,0);
-	for(i=0;i<5;i++) {
-		memset(&tmp_item,0,sizeof(tmp_item));
-		tmp_item.identify = 1;
-		tmp_item.nameid = skill_arrow_db[index].cre_id[i];
-		tmp_item.amount = skill_arrow_db[index].cre_amount[i];
-		if(battle_config.making_arrow_name_input) {
-			tmp_item.card[0]=0x00fe;
-			tmp_item.card[1]=0;
-			*((unsigned long *)(&tmp_item.card[2]))=sd->char_id;	/* �L����ID */
-		}
-		if(tmp_item.nameid <= 0 || tmp_item.amount <= 0)
-			continue;
-		if((flag = pc_additem(sd,&tmp_item,tmp_item.amount))) {
-			clif_additem(sd,0,0,flag);
-			map_addflooritem(&tmp_item,tmp_item.amount,sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
-		}
-	}
-
-	return 0;
-}
-
-/*----------------------------------------------------------------------------
- * �������n
- */
-
-/*==========================================
- * �X�L���֌W�t�@�C���ǂݍ���
- * skill_db.txt �X�L���f�[�^
- * skill_cast_db.txt �X�L���̉r�����Ԃƃf�B���C�f�[�^
- * produce_db.txt �A�C�e���쐬�X�L���p�f�[�^
- * create_arrow_db.txt ��쐬�X�L���p�f�[�^
- * abra_db.txt �A�u���J�_�u�������X�L���f�[�^
- *------------------------------------------
- */
-int skill_readdb(void)
-{
-	int i,j,k,l,m;
-	FILE *fp;
-	char line[1024],*p;
-	char *filename[]={"db/produce_db.txt","db/produce_db2.txt"};
-
-	/* �X�L���f�[�^�x�[�X */
-	memset(skill_db,0,sizeof(skill_db));
-	fp=fopen("db/skill_db.txt","r");
-	if(fp==NULL){
-		printf("can't read db/skill_db.txt\n");
-		return 1;
-	}
-	while(fgets(line,1020,fp)){
-		char *split[50], *split2[MAX_SKILL_LEVEL];
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		for(j=0,p=line;j<14 && p;j++){
-			split[j]=p;
-			p=strchr(p,',');
-			if(p) *p++=0;
-		}
-		if(split[13]==NULL || j<14)
-			continue;
-
-		i=atoi(split[0]);
-		if(i<0 || i>MAX_SKILL_DB)
-			continue;
-
-/*		printf("skill id=%d\n",i); */
-		memset(split2,0,sizeof(split2));
-		for(j=0,p=split[1];j<MAX_SKILL_LEVEL && p;j++){
-			split2[j]=p;
-			p=strchr(p,':');
-			if(p) *p++=0;
-		}
-		for(k=0;k<MAX_SKILL_LEVEL;k++)
-			skill_db[i].range[k]=(split2[k])? atoi(split2[k]):atoi(split2[0]);
-		skill_db[i].hit=atoi(split[2]);
-		skill_db[i].inf=atoi(split[3]);
-		skill_db[i].pl=atoi(split[4]);
-		skill_db[i].nk=atoi(split[5]);
-		skill_db[i].max=atoi(split[6]);
-
-		memset(split2,0,sizeof(split2));
-		for(j=0,p=split[7];j<MAX_SKILL_LEVEL && p;j++){
-			split2[j]=p;
-			p=strchr(p,':');
-			if(p) *p++=0;
-		}
-		for(k=0;k<MAX_SKILL_LEVEL;k++)
-			skill_db[i].num[k]=(split2[k])? atoi(split2[k]):atoi(split2[0]);
-
-		if(strcmpi(split[8],"yes") == 0)
-			skill_db[i].castcancel=1;
-		else
-			skill_db[i].castcancel=0;
-		skill_db[i].cast_def_rate=atoi(split[9]);
-		skill_db[i].inf2=atoi(split[10]);
-		skill_db[i].maxcount=atoi(split[11]);
-		if(strcmpi(split[12],"weapon") == 0)
-			skill_db[i].skill_type=BF_WEAPON;
-		else if(strcmpi(split[12],"magic") == 0)
-			skill_db[i].skill_type=BF_MAGIC;
-		else if(strcmpi(split[12],"misc") == 0)
-			skill_db[i].skill_type=BF_MISC;
-		else
-			skill_db[i].skill_type=0;
-		memset(split2,0,sizeof(split2));
-		for(j=0,p=split[13];j<MAX_SKILL_LEVEL && p;j++){
-			split2[j]=p;
-			p=strchr(p,':');
-			if(p) *p++=0;
-		}
-		for(k=0;k<MAX_SKILL_LEVEL;k++)
-			skill_db[i].blewcount[k]=(split2[k])? atoi(split2[k]):atoi(split2[0]);
-	}
-	fclose(fp);
-	printf("read db/skill_db.txt done\n");
-
-	fp=fopen("db/skill_require_db.txt","r");
-	if(fp==NULL){
-		printf("can't read db/skill_require_db.txt\n");
-		return 1;
-	}
-	while(fgets(line,1020,fp)){
-		char *split[51], *split2[MAX_SKILL_LEVEL];
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		for(j=0,p=line;j<30 && p;j++){
-			split[j]=p;
-			p=strchr(p,',');
-			if(p) *p++=0;
-		}
-		if(split[29]==NULL || j<30)
-			continue;
-
-		i=atoi(split[0]);
-		if(i<0 || i>MAX_SKILL_DB)
-			continue;
-
-		memset(split2,0,sizeof(split2));
-		for(j=0,p=split[1];j<MAX_SKILL_LEVEL && p;j++){
-			split2[j]=p;
-			p=strchr(p,':');
-			if(p) *p++=0;
-		}
-		for(k=0;k<MAX_SKILL_LEVEL;k++)
-			skill_db[i].hp[k]=(split2[k])? atoi(split2[k]):atoi(split2[0]);
-
-		memset(split2,0,sizeof(split2));
-		for(j=0,p=split[2];j<MAX_SKILL_LEVEL && p;j++){
-			split2[j]=p;
-			p=strchr(p,':');
-			if(p) *p++=0;
-		}
-		for(k=0;k<MAX_SKILL_LEVEL;k++)
-			skill_db[i].mhp[k]=(split2[k])? atoi(split2[k]):atoi(split2[0]);
-
-		memset(split2,0,sizeof(split2));
-		for(j=0,p=split[3];j<MAX_SKILL_LEVEL && p;j++){
-			split2[j]=p;
-			p=strchr(p,':');
-			if(p) *p++=0;
-		}
-		for(k=0;k<MAX_SKILL_LEVEL;k++)
-			skill_db[i].sp[k]=(split2[k])? atoi(split2[k]):atoi(split2[0]);
-
-		memset(split2,0,sizeof(split2));
-		for(j=0,p=split[4];j<MAX_SKILL_LEVEL && p;j++){
-			split2[j]=p;
-			p=strchr(p,':');
-			if(p) *p++=0;
-		}
-		for(k=0;k<MAX_SKILL_LEVEL;k++)
-			skill_db[i].hp_rate[k]=(split2[k])? atoi(split2[k]):atoi(split2[0]);
-
-		memset(split2,0,sizeof(split2));
-		for(j=0,p=split[5];j<MAX_SKILL_LEVEL && p;j++){
-			split2[j]=p;
-			p=strchr(p,':');
-			if(p) *p++=0;
-		}
-		for(k=0;k<MAX_SKILL_LEVEL;k++)
-			skill_db[i].sp_rate[k]=(split2[k])? atoi(split2[k]):atoi(split2[0]);
-
-		memset(split2,0,sizeof(split2));
-		for(j=0,p=split[6];j<MAX_SKILL_LEVEL && p;j++){
-			split2[j]=p;
-			p=strchr(p,':');
-			if(p) *p++=0;
-		}
-		for(k=0;k<MAX_SKILL_LEVEL;k++)
-			skill_db[i].zeny[k]=(split2[k])? atoi(split2[k]):atoi(split2[0]);
-
-		memset(split2,0,sizeof(split2));
-		for(j=0,p=split[7];j<32 && p;j++){
-			split2[j]=p;
-			p=strchr(p,':');
-			if(p) *p++=0;
-		}
-		for(k=0;k<32 && split2[k];k++) {
-			l = atoi(split2[k]);
-			if(l == 99) {
-				skill_db[i].weapon = 0xffffffff;
-				break;
-			}
-			else
-				skill_db[i].weapon |= 1<<l;
-		}
-
-		if( strcmpi(split[8],"hiding")==0 ) skill_db[i].state=ST_HIDING;
-		else if( strcmpi(split[8],"cloaking")==0 ) skill_db[i].state=ST_CLOAKING;
-		else if( strcmpi(split[8],"hidden")==0 ) skill_db[i].state=ST_HIDDEN;
-		else if( strcmpi(split[8],"riding")==0 ) skill_db[i].state=ST_RIDING;
-		else if( strcmpi(split[8],"falcon")==0 ) skill_db[i].state=ST_FALCON;
-		else if( strcmpi(split[8],"cart")==0 ) skill_db[i].state=ST_CART;
-		else if( strcmpi(split[8],"shield")==0 ) skill_db[i].state=ST_SHIELD;
-		else if( strcmpi(split[8],"sight")==0 ) skill_db[i].state=ST_SIGHT;
-		else if( strcmpi(split[8],"explosionspirits")==0 ) skill_db[i].state=ST_EXPLOSIONSPIRITS;
-		else if( strcmpi(split[8],"recover_weight_rate")==0 ) skill_db[i].state=ST_RECOV_WEIGHT_RATE;
-		else if( strcmpi(split[8],"move_enable")==0 ) skill_db[i].state=ST_MOVE_ENABLE;
-		else if( strcmpi(split[8],"water")==0 ) skill_db[i].state=ST_WATER;
-		else skill_db[i].state=ST_NONE;
-
-		memset(split2,0,sizeof(split2));
-		for(j=0,p=split[9];j<MAX_SKILL_LEVEL && p;j++){
-			split2[j]=p;
-			p=strchr(p,':');
-			if(p) *p++=0;
-		}
-		for(k=0;k<MAX_SKILL_LEVEL;k++)
-			skill_db[i].spiritball[k]=(split2[k])? atoi(split2[k]):atoi(split2[0]);
-		skill_db[i].itemid[0]=atoi(split[10]);
-		skill_db[i].amount[0]=atoi(split[11]);
-		skill_db[i].itemid[1]=atoi(split[12]);
-		skill_db[i].amount[1]=atoi(split[13]);
-		skill_db[i].itemid[2]=atoi(split[14]);
-		skill_db[i].amount[2]=atoi(split[15]);
-		skill_db[i].itemid[3]=atoi(split[16]);
-		skill_db[i].amount[3]=atoi(split[17]);
-		skill_db[i].itemid[4]=atoi(split[18]);
-		skill_db[i].amount[4]=atoi(split[19]);
-		skill_db[i].itemid[5]=atoi(split[20]);
-		skill_db[i].amount[5]=atoi(split[21]);
-		skill_db[i].itemid[6]=atoi(split[22]);
-		skill_db[i].amount[6]=atoi(split[23]);
-		skill_db[i].itemid[7]=atoi(split[24]);
-		skill_db[i].amount[7]=atoi(split[25]);
-		skill_db[i].itemid[8]=atoi(split[26]);
-		skill_db[i].amount[8]=atoi(split[27]);
-		skill_db[i].itemid[9]=atoi(split[28]);
-		skill_db[i].amount[9]=atoi(split[29]);
-	}
-	fclose(fp);
-	printf("read db/skill_require_db.txt done\n");
-
-	/* �L���X�e�B���O�f�[�^�x�[�X */
-	fp=fopen("db/skill_cast_db.txt","r");
-	if(fp==NULL){
-		printf("can't read db/skill_cast_db.txt\n");
-		return 1;
-	}
-	while(fgets(line,1020,fp)){
-		char *split[50], *split2[MAX_SKILL_LEVEL];
-		memset(split,0,sizeof(split));	// [Valaris] thanks to fov
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		for(j=0,p=line;j<5 && p;j++){
-			split[j]=p;
-			p=strchr(p,',');
-			if(p) *p++=0;
-		}
-		if(split[4]==NULL || j<5)
-			continue;
-
-		i=atoi(split[0]);
-		if(i<0 || i>MAX_SKILL_DB)
-			continue;
-
-		memset(split2,0,sizeof(split2));
-		for(j=0,p=split[1];j<MAX_SKILL_LEVEL && p;j++){
-			split2[j]=p;
-			p=strchr(p,':');
-			if(p) *p++=0;
-		}
-		for(k=0;k<MAX_SKILL_LEVEL;k++)
-			skill_db[i].cast[k]=(split2[k])? atoi(split2[k]):atoi(split2[0]);
-
-		memset(split2,0,sizeof(split2));
-		for(j=0,p=split[2];j<MAX_SKILL_LEVEL && p;j++){
-			split2[j]=p;
-			p=strchr(p,':');
-			if(p) *p++=0;
-		}
-		for(k=0;k<MAX_SKILL_LEVEL;k++)
-			skill_db[i].delay[k]=(split2[k])? atoi(split2[k]):atoi(split2[0]);
-
-		memset(split2,0,sizeof(split2));
-		for(j=0,p=split[3];j<MAX_SKILL_LEVEL && p;j++){
-			split2[j]=p;
-			p=strchr(p,':');
-			if(p) *p++=0;
-		}
-		for(k=0;k<MAX_SKILL_LEVEL;k++)
-			skill_db[i].upkeep_time[k]=(split2[k])? atoi(split2[k]):atoi(split2[0]);
-
-		memset(split2,0,sizeof(split2));
-		for(j=0,p=split[4];j<MAX_SKILL_LEVEL && p;j++){
-			split2[j]=p;
-			p=strchr(p,':');
-			if(p) *p++=0;
-		}
-		for(k=0;k<MAX_SKILL_LEVEL;k++)
-			skill_db[i].upkeep_time2[k]=(split2[k])? atoi(split2[k]):atoi(split2[0]);
-	}
-	fclose(fp);
-	printf("read db/skill_cast_db.txt done\n");
-
-	/* �����n�X�L���f�[�^�x�[�X */
-	memset(skill_produce_db,0,sizeof(skill_produce_db));
-	for(m=0;m<2;m++){
-		fp=fopen(filename[m],"r");
-		if(fp==NULL){
-			if(m>0)
-				continue;
-			printf("can't read %s\n",filename[m]);
-			return 1;
-		}
-		k=0;
-		while(fgets(line,1020,fp)){
-			char *split[16];
-			int x,y;
-			if(line[0]=='/' && line[1]=='/')
-				continue;
-			memset(split,0,sizeof(split));
-			for(j=0,p=line;j<13 && p;j++){
-				split[j]=p;
-				p=strchr(p,',');
-				if(p) *p++=0;
-			}
-			if(split[0]==NULL)
-				continue;
-			i=atoi(split[0]);
-			if(i<=0)
-				continue;
-
-			skill_produce_db[k].nameid=i;
-			skill_produce_db[k].itemlv=atoi(split[1]);
-			skill_produce_db[k].req_skill=atoi(split[2]);
-
-			for(x=3,y=0;split[x] && split[x+1] && y<5;x+=2,y++){
-				skill_produce_db[k].mat_id[y]=atoi(split[x]);
-				skill_produce_db[k].mat_amount[y]=atoi(split[x+1]);
-			}
-			k++;
-			if(k >= MAX_SKILL_PRODUCE_DB)
-				break;
-		}
-		fclose(fp);
-		printf("read %s done (count=%d)\n",filename[m],k);
-	}
-
-	memset(skill_arrow_db,0,sizeof(skill_arrow_db));
-	fp=fopen("db/create_arrow_db.txt","r");
-	if(fp==NULL){
-		printf("can't read db/create_arrow_db.txt\n");
-		return 1;
-	}
-	k=0;
-	while(fgets(line,1020,fp)){
-		char *split[16];
-		int x,y;
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		memset(split,0,sizeof(split));
-		for(j=0,p=line;j<13 && p;j++){
-			split[j]=p;
-			p=strchr(p,',');
-			if(p) *p++=0;
-		}
-		if(split[0]==NULL)
-			continue;
-		i=atoi(split[0]);
-		if(i<=0)
-			continue;
-
-		skill_arrow_db[k].nameid=i;
-
-		for(x=1,y=0;split[x] && split[x+1] && y<5;x+=2,y++){
-			skill_arrow_db[k].cre_id[y]=atoi(split[x]);
-			skill_arrow_db[k].cre_amount[y]=atoi(split[x+1]);
-		}
-		k++;
-		if(k >= MAX_SKILL_ARROW_DB)
-			break;
-	}
-	fclose(fp);
-	printf("read db/create_arrow_db.txt done (count=%d)\n",k);
-
-	memset(skill_abra_db,0,sizeof(skill_abra_db));
-	fp=fopen("db/abra_db.txt","r");
-	if(fp==NULL){
-		printf("can't read db/abra_db.txt\n");
-		return 1;
-	}
-	k=0;
-	while(fgets(line,1020,fp)){
-		char *split[16];
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		memset(split,0,sizeof(split));
-		for(j=0,p=line;j<13 && p;j++){
-			split[j]=p;
-			p=strchr(p,',');
-			if(p) *p++=0;
-		}
-		if(split[0]==NULL)
-			continue;
-		i=atoi(split[0]);
-		if(i<=0)
-			continue;
-
-		skill_abra_db[i].req_lv=atoi(split[2]);
-		skill_abra_db[i].per=atoi(split[3]);
-
-		k++;
-		if(k >= MAX_SKILL_ABRA_DB)
-			break;
-	}
-	fclose(fp);
-	printf("read db/abra_db.txt done (count=%d)\n",k);
-
-	fp=fopen("db/skill_castnodex_db.txt","r");
-	if(fp==NULL){
-		printf("can't read db/skill_castnodex_db.txt\n");
-		return 1;
-	}
-	while(fgets(line,1020,fp)){
-		char *split[50], *split2[MAX_SKILL_LEVEL];
-		memset(split,0,sizeof(split));
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		for(j=0,p=line;j<2 && p;j++){
-			split[j]=p;
-			p=strchr(p,',');
-			if(p) *p++=0;
-		}
-
-		i=atoi(split[0]);
-		if(i<0 || i>MAX_SKILL_DB)
-			continue;
-
-		memset(split2,0,sizeof(split2));
-		for(j=0,p=split[1];j<MAX_SKILL_LEVEL && p;j++){
-			split2[j]=p;
-			p=strchr(p,':');
-			if(p) *p++=0;
-		}
-		for(k=0;k<MAX_SKILL_LEVEL;k++)
-			skill_db[i].castnodex[k]=(split2[k])? atoi(split2[k]):atoi(split2[0]);
-	}
-	fclose(fp);
-	printf("read db/skill_castnodex_db.txt done\n");
-
-	return 0;
-}
-
-void skill_reload(void)
-{
-	/*
-
-	<empty skill database>
-	<?>
-
-	*/
-
-	do_init_skill();
-}
-
-/*==========================================
- * �X�L���֌W����������
- *------------------------------------------
- */
-int do_init_skill(void)
-{
-	skill_readdb();
-
-	add_timer_func_list(skill_unit_timer,"skill_unit_timer");
-	add_timer_func_list(skill_castend_id,"skill_castend_id");
-	add_timer_func_list(skill_castend_pos,"skill_castend_pos");
-	add_timer_func_list(skill_timerskill,"skill_timerskill");
-	add_timer_func_list(skill_status_change_timer,"skill_status_change_timer");
-	add_timer_interval(gettick()+SKILLUNITTIMER_INVERVAL,skill_unit_timer,0,0,SKILLUNITTIMER_INVERVAL);
-
-	return 0;
-}
diff --git a/misc/src/map/skill.h b/misc/src/map/skill.h
deleted file mode 100644
index 6cb3d88..0000000
--- a/misc/src/map/skill.h
+++ /dev/null
@@ -1,842 +0,0 @@
-// $Id: skill.h,v 1.5 2004/09/25 05:32:19 MouseJstr Exp $
-#ifndef _SKILL_H_
-#define _SKILL_H_
-
-#include "map.h"
-
-#define MAX_SKILL_DB			450
-#define MAX_SKILL_PRODUCE_DB	 150
-#define MAX_SKILL_ARROW_DB	 150
-#define MAX_SKILL_ABRA_DB	 350
-
-// �X�L���f�[�^�x�[�X
-struct skill_db {
-	int range[MAX_SKILL_LEVEL],hit,inf,pl,nk,max;
-	int num[MAX_SKILL_LEVEL];
-	int cast[MAX_SKILL_LEVEL],delay[MAX_SKILL_LEVEL];
-	int upkeep_time[MAX_SKILL_LEVEL],upkeep_time2[MAX_SKILL_LEVEL];
-	int castcancel,cast_def_rate;
-	int inf2,maxcount,skill_type;
-	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,state,spiritball[MAX_SKILL_LEVEL];
-	int itemid[10],amount[10];
-	int castnodex[MAX_SKILL_LEVEL];
-};
-extern struct skill_db skill_db[MAX_SKILL_DB];
-
-struct skill_name_db { 
-        int id;     // skill id
-        char *name; // search strings
-        char *desc; // description that shows up for search's
-};
-extern struct skill_name_db skill_names[];
-
-// �A�C�e���쐬�f�[�^�x�[�X
-struct skill_produce_db {
-	int nameid, trigger;
-	int req_skill,itemlv;
-	int mat_id[5],mat_amount[5];
-};
-extern struct skill_produce_db skill_produce_db[MAX_SKILL_PRODUCE_DB];
-
-// ��쐬�f�[�^�x�[�X
-struct skill_arrow_db {
-	int nameid, trigger;
-	int cre_id[5],cre_amount[5];
-};
-extern struct skill_arrow_db skill_arrow_db[MAX_SKILL_ARROW_DB];
-
-// �A�u���J�_�u���f�[�^�x�[�X
-struct skill_abra_db {
-	int nameid;
-	int req_lv;
-	int per;
-};
-extern struct skill_abra_db skill_abra_db[MAX_SKILL_ABRA_DB];
-
-struct block_list;
-struct map_session_data;
-struct skill_unit;
-struct skill_unit_group;
-
-int do_init_skill(void);
-
-// �X�L���f�[�^�x�[�X�ւ̃A�N�Z�T
-int	skill_get_hit( int id );
-int	skill_get_inf( int id );
-int	skill_get_pl( int id );
-int	skill_get_nk( int id );
-int	skill_get_max( int id );
-int skill_get_range( int id , int lv );
-int	skill_get_hp( int id ,int lv );
-int	skill_get_mhp( int id ,int lv );
-int	skill_get_sp( int id ,int lv );
-int	skill_get_zeny( int id ,int lv );
-int	skill_get_num( int id ,int lv );
-int	skill_get_cast( int id ,int lv );
-int	skill_get_delay( int id ,int lv );
-int	skill_get_time( int id ,int lv );
-int	skill_get_time2( int id ,int lv );
-int	skill_get_castdef( int id );
-int	skill_get_weapontype( int id );
-int skill_get_unit_id(int id,int flag);
-int	skill_get_inf2( int id );
-int	skill_get_maxcount( int id );
-int	skill_get_blewcount( int id ,int lv );
-
-// �X�L���̎g�p
-int skill_use_id( struct map_session_data *sd, int target_id,
-	int skill_num,int skill_lv);
-int skill_use_pos( struct map_session_data *sd,
-	int skill_x, int skill_y, int skill_num, int skill_lv);
-
-int skill_castend_map( struct map_session_data *sd,int skill_num, const char *map);
-
-int skill_cleartimerskill(struct block_list *src);
-int skill_addtimerskill(struct block_list *src,unsigned int tick,int target,int x,int y,int skill_id,int skill_lv,int type,int flag);
-
-// �lj�����
-int skill_additional_effect( struct block_list* src, struct block_list *bl,int skillid,int skilllv,int attack_type,unsigned int tick);
-
-// ���j�b�g�X�L��
-struct skill_unit *skill_initunit(struct skill_unit_group *group,int idx,int x,int y);
-int skill_delunit(struct skill_unit *unit);
-struct skill_unit_group *skill_initunitgroup(struct block_list *src,
-	int count,int skillid,int skilllv,int unit_id);
-int skill_delunitgroup(struct skill_unit_group *group);
-struct skill_unit_group_tickset *skill_unitgrouptickset_search(
-	struct block_list *bl,int group_id);
-int skill_unitgrouptickset_delete(struct block_list *bl,int group_id);
-int skill_clear_unitgroup(struct block_list *src);
-
-int skill_unit_ondamaged(struct skill_unit *src,struct block_list *bl,
-	int damage,unsigned int tick);
-
-int skill_castfix( struct block_list *bl, int time );
-int skill_delayfix( struct block_list *bl, int time );
-int skill_check_unit_range(int m,int x,int y,int range,int skillid);
-int skill_check_unit_range2(int m,int x,int y,int range);
-// -- moonsoul	(added skill_check_unit_cell)
-int skill_check_unit_cell(int skillid,int m,int x,int y,int unit_id);
-int skill_unit_out_all( struct block_list *bl,unsigned int tick,int range);
-int skill_unit_move( struct block_list *bl,unsigned int tick,int range);
-int skill_unit_move_unit_group( struct skill_unit_group *group, int m,int dx,int dy);
-
-struct skill_unit_group *skill_check_dancing( struct block_list *src );
-void skill_stop_dancing(struct block_list *src, int flag);
-
-// �r���L�����Z��
-int skill_castcancel(struct block_list *bl,int type);
-
-int skill_gangsterparadise(struct map_session_data *sd ,int type);
-void skill_brandishspear_first(struct square *tc,int dir,int x,int y);
-void skill_brandishspear_dir(struct square *tc,int dir,int are);
-int skill_autospell(struct map_session_data *md,int skillid);
-void skill_devotion(struct map_session_data *md,int target);
-void skill_devotion2(struct block_list *bl,int crusader);
-int skill_devotion3(struct block_list *bl,int target);
-void skill_devotion_end(struct map_session_data *md,struct map_session_data *sd,int target);
-
-#define skill_calc_heal(bl,skill_lv) (( battle_get_lv(bl)+battle_get_int(bl) )/8 *(4+ skill_lv*8))
-
-// ���̑�
-int skill_check_cloaking(struct block_list *bl);
-int skill_is_danceskill(int id);
-
-// �X�e�[�^�X�ُ�
-int skill_status_change_start(struct block_list *bl,int type,int val1,int val2,int val3,int val4,int tick,int flag);
-int skill_status_change_timer(int tid, unsigned int tick, int id, int data);
-int skill_encchant_eremental_end(struct block_list *bl, int type);
-int skill_status_change_end( struct block_list* bl , int type,int tid );
-int skill_status_change_clear(struct block_list *bl,int type);
-
-
-// �A�C�e���쐬
-int skill_can_produce_mix( struct map_session_data *sd, int nameid, int trigger );
-int skill_produce_mix( struct map_session_data *sd,
-	int nameid, int slot1, int slot2, int slot3 );
-
-int skill_arrow_create( struct map_session_data *sd,int nameid);
-
-// mob�X�L���̂���
-int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int skillid,int skilllv,unsigned int tick,int flag );
-int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int skillid,int skilllv,unsigned int tick,int flag );
-int skill_castend_pos2( struct block_list *src, int x,int y,int skillid,int skilllv,unsigned int tick,int flag);
-
-// �X�L���U���ꊇ����
-int skill_attack( int attack_type, struct block_list* src, struct block_list *dsrc,
-	 struct block_list *bl,int skillid,int skilllv,unsigned int tick,int flag );
-
-void skill_reload(void);
-
-enum {
-	ST_NONE,ST_HIDING,ST_CLOAKING,ST_HIDDEN,ST_RIDING,ST_FALCON,ST_CART,ST_SHIELD,ST_SIGHT,ST_EXPLOSIONSPIRITS,
-	ST_RECOV_WEIGHT_RATE,ST_MOVE_ENABLE,ST_WATER,
-};
-
-enum {	// struct map_session_data �� status_change�̔ԍ��e�[�u��
-// SC_SENDMAX�����̓N���C�A���g�ւ̒ʒm����B
-// 2-2���E�̒l�͂Ȃ񂩂߂��Ⴍ������ۂ��̂Ŏb��B���Ԃ�ύX����܂��B
-	SC_SENDMAX				=128,
-	SC_PROVOKE			= 0,
-	SC_ENDURE			= 1,
-	SC_TWOHANDQUICKEN		= 2,
-	SC_CONCENTRATE		= 3,
-	SC_HIDING			= 4,
-	SC_CLOAKING			= 5,
-	SC_ENCPOISON			= 6,
-	SC_POISONREACT		= 7,
-	SC_QUAGMIRE			= 8,
-	SC_ANGELUS			= 9,
-	SC_BLESSING			=10,
-	SC_SIGNUMCRUCIS		=11,
-	SC_INCREASEAGI			=12,
-	SC_DECREASEAGI		=13,
-	SC_SLOWPOISON			=14,
-	SC_IMPOSITIO			=15,
-	SC_SUFFRAGIUM			=16,
-	SC_ASPERSIO			=17,
-	SC_BENEDICTIO			=18,
-	SC_KYRIE			=19,
-	SC_MAGNIFICAT			=20,
-	SC_GLORIA			=21,
-	SC_AETERNA			=22,
-	SC_ADRENALINE			=23,
-	SC_WEAPONPERFECTION		=24,
-	SC_OVERTHRUST			=25,
-	SC_MAXIMIZEPOWER		=26,
-	SC_RIDING			=27,
-	SC_FALCON			=28,
-	SC_TRICKDEAD			=29,
-	SC_LOUD			=30,
-	SC_ENERGYCOAT		=31,
-	SC_HALLUCINATION		=34,
-	SC_WEIGHT50			=35,
-	SC_WEIGHT90			=36,
-	SC_SPEEDPOTION0		=37,
-	SC_SPEEDPOTION1		=38,
-	SC_SPEEDPOTION2		=39,
-	SC_STRIPWEAPON		=50,
-	SC_STRIPSHIELD			=51,
-	SC_STRIPARMOR			=52,
-	SC_STRIPHELM			=53,
-	SC_CP_WEAPON			=54,
-	SC_CP_SHIELD			=55,
-	SC_CP_ARMOR			=56,
-	SC_CP_HELM			=57,
-	SC_AUTOGUARD			=58,
-	SC_REFLECTSHIELD		=59,
-	SC_DEVOTION			=60,
-	SC_PROVIDENCE			=61,
-	SC_DEFENDER			=62,
-	SC_AUTOSPELL			=65,
-	SC_SPEARSQUICKEN		=68,
-	SC_EXPLOSIONSPIRITS		=86,
-	SC_STEELBODY			=87,
-	SC_COMBO			=89,
-	SC_FLAMELAUNCHER		=90,
-	SC_FROSTWEAPON		=91,
-	SC_LIGHTNINGLOADER		=92,
-	SC_SEISMICWEAPON		=93,
-	SC_AURABLADE			=103, /* �I�[���u���[�h */
-	SC_PARRYING			=104, /* �p���C���O */
-	SC_CONCENTRATION		=105, /* �R���Z���g���[�V���� */
-	SC_TENSIONRELAX		=106, /* �e���V���������b�N�X */
-	SC_BERSERK			=107, /* �o�[�T�[�N */
-	SC_ASSUMPTIO			=110, /* �A�V�����v�e�B�I */
-	SC_MAGICPOWER		=113, /* ���@�͑��� */
-	SC_TRUESIGHT			=115, /* �g�D���[�T�C�g */
-	SC_WINDWALK			=116, /* �E�C���h�E�H�[�N */
-	SC_MELTDOWN			=117, /* �����g�_�E�� */
-	SC_CARTBOOST			=118, /* �J�[�g�u�[�X�g */
-	SC_REJECTSWORD		=120, /* ���W�F�N�g�\�[�h */
-	SC_MARIONETTE			=121, /* �}���I�l�b�g�R���g���[�� */
-	SC_HEADCRUSH			=124, /* �w�b�h�N���b�V�� */
-	SC_JOINTBEAT			=125, /* �W���C���g�r�[�g */
-
-	SC_STONE			=128,
-	SC_FREEZE			=129,
-	SC_STAN			=130,
-	SC_SLEEP			=131,
-	SC_POISON			=132,
-	SC_CURSE			=133,
-	SC_SILENCE			=134,
-	SC_CONFUSION			=135,
-	SC_BLIND			=136,
-	SC_DIVINA			= SC_SILENCE,
-
-	SC_SAFETYWALL			=140,
-	SC_PNEUMA			=141,
-	SC_WATERBALL			=142,
-	SC_ANKLE			=143,
-	SC_DANCING			=144,
-	SC_KEEPING			=145,
-	SC_BARRIER			=146,
-
-	SC_MAGICROD			=149,
-	SC_SIGHT			=150,
-	SC_RUWACH			=151,
-	SC_AUTOCOUNTER		=152,
-	SC_VOLCANO			=153,
-	SC_DELUGE			=154,
-	SC_VIOLENTGALE		=155,
-	SC_BLADESTOP_WAIT		=156,
-	SC_BLADESTOP			=157,
-	SC_EXTREMITYFIST		=158,
-	SC_GRAFFITI				=159,
-
-	SC_LULLABY			=160,
-	SC_RICHMANKIM			=161,
-	SC_ETERNALCHAOS		=162,
-	SC_DRUMBATTLE		=163,
-	SC_NIBELUNGEN			=164,
-	SC_ROKISWEIL			=165,
-	SC_INTOABYSS			=166,
-	SC_SIEGFRIED			=167,
-	SC_DISSONANCE			=168,
-	SC_WHISTLE			=169,
-	SC_ASSNCROS			=170,
-	SC_POEMBRAGI			=171,
-	SC_APPLEIDUN			=172,
-	SC_UGLYDANCE			=173,
-	SC_HUMMING			=174,
-	SC_DONTFORGETME		=175,
-	SC_FORTUNE			=176,
-	SC_SERVICE4U			=177,
-
-	SC_SPIDERWEB			=180,		/* �X�p�C�_�[�E�F�b�u */
-	SC_MEMORIZE			=181,		/* �������C�Y */
-
-	SC_WEDDING			=187,	//�����p(�����ߏւɂȂ��ĕ����̂��x���Ƃ�)
-	SC_NOCHAT			=188,	//�ԃG�����
-	SC_SPLASHER			=189,	/* �x�i���X�v���b�V���[ */
-	SC_SELFDESTRUCTION		=190,	/* ���� */
-
-
-// Used by English Team
-	SC_BROKNARMOR		=32,
-	SC_BROKNWEAPON		=33,
-	SC_SIGHTTRASHER		=73,
-	SC_BASILICA			=125,
-	SC_ENSEMBLE			=159,
-	SC_FOGWALL			=178,
-	SC_GOSPEL			=179,
-	SC_LANDPROTECTOR		=182,
-	SC_ADAPTATION			=183,
-	SC_CHASEWALK			=184,
-	SC_ATKPOT			=185,	// [Valaris]
-	SC_MATKPOT			=186,	// [Valaris]
-	SC_MINDBREAKER		=191,
-	SC_SPELLBREAKER		=192,
-
-// -- testing various SC effects
-//	SC_AURABLADE			=81,
-//	SC_CONCENTRATION		=83,
-//	SC_TENSIONRELAX		=84,
-//	SC_BERSERK			=85,
-//	SC_CALLSPIRITS			=100,
-//	SC_PARRYING			=100,
-//	SC_FREECAST			=101,
-//	SC_ABSORBSPIRIT		=102,
-//	SC_ASSUMPTIO			=114,
-//	SC_SHARPSHOOT			=127,
-//	SC_GANGSTER			=184,
-//	SC_CANNIBALIZE			=186,
-//	SC_SPHEREMINE			=187,
-//	SC_METEOSTORM		=189,
-//	SC_CASTCANCEL			=190,
-//	SC_SPIDERWEB			=191,
-};
-extern int SkillStatusChangeTable[];
-
-enum {
-	NV_BASIC = 1,
-
-	SM_SWORD,
-	SM_TWOHAND,
-	SM_RECOVERY,
-	SM_BASH,
-	SM_PROVOKE,
-	SM_MAGNUM,
-	SM_ENDURE,
-
-	MG_SRECOVERY,
-	MG_SIGHT,
-	MG_NAPALMBEAT,
-	MG_SAFETYWALL,
-	MG_SOULSTRIKE,
-	MG_COLDBOLT,
-	MG_FROSTDIVER,
-	MG_STONECURSE,
-	MG_FIREBALL,
-	MG_FIREWALL,
-	MG_FIREBOLT,
-	MG_LIGHTNINGBOLT,
-	MG_THUNDERSTORM,
-
-	AL_DP,
-	AL_DEMONBANE,
-	AL_RUWACH,
-	AL_PNEUMA,
-	AL_TELEPORT,
-	AL_WARP,
-	AL_HEAL,
-	AL_INCAGI,
-	AL_DECAGI,
-	AL_HOLYWATER,
-	AL_CRUCIS,
-	AL_ANGELUS,
-	AL_BLESSING,
-	AL_CURE,
-
-	MC_INCCARRY,
-	MC_DISCOUNT,
-	MC_OVERCHARGE,
-	MC_PUSHCART,
-	MC_IDENTIFY,
-	MC_VENDING,
-	MC_MAMMONITE,
-
-	AC_OWL,
-	AC_VULTURE,
-	AC_CONCENTRATION,
-	AC_DOUBLE,
-	AC_SHOWER,
-
-	TF_DOUBLE,
-	TF_MISS,
-	TF_STEAL,
-	TF_HIDING,
-	TF_POISON,
-	TF_DETOXIFY,
-
-	ALL_RESURRECTION,
-
-	KN_SPEARMASTERY,
-	KN_PIERCE,
-	KN_BRANDISHSPEAR,
-	KN_SPEARSTAB,
-	KN_SPEARBOOMERANG,
-	KN_TWOHANDQUICKEN,
-	KN_AUTOCOUNTER,
-	KN_BOWLINGBASH,
-	KN_RIDING,
-	KN_CAVALIERMASTERY,
-
-	PR_MACEMASTERY,
-	PR_IMPOSITIO,
-	PR_SUFFRAGIUM,
-	PR_ASPERSIO,
-	PR_BENEDICTIO,
-	PR_SANCTUARY,
-	PR_SLOWPOISON,
-	PR_STRECOVERY,
-	PR_KYRIE,
-	PR_MAGNIFICAT,
-	PR_GLORIA,
-	PR_LEXDIVINA,
-	PR_TURNUNDEAD,
-	PR_LEXAETERNA,
-	PR_MAGNUS,
-
-	WZ_FIREPILLAR,
-	WZ_SIGHTRASHER,
-	WZ_FIREIVY,
-	WZ_METEOR,
-	WZ_JUPITEL,
-	WZ_VERMILION,
-	WZ_WATERBALL,
-	WZ_ICEWALL,
-	WZ_FROSTNOVA,
-	WZ_STORMGUST,
-	WZ_EARTHSPIKE,
-	WZ_HEAVENDRIVE,
-	WZ_QUAGMIRE,
-	WZ_ESTIMATION,
-
-	BS_IRON,
-	BS_STEEL,
-	BS_ENCHANTEDSTONE,
-	BS_ORIDEOCON,
-	BS_DAGGER,
-	BS_SWORD,
-	BS_TWOHANDSWORD,
-	BS_AXE,
-	BS_MACE,
-	BS_KNUCKLE,
-	BS_SPEAR,
-	BS_HILTBINDING,
-	BS_FINDINGORE,
-	BS_WEAPONRESEARCH,
-	BS_REPAIRWEAPON,
-	BS_SKINTEMPER,
-	BS_HAMMERFALL,
-	BS_ADRENALINE,
-	BS_WEAPONPERFECT,
-	BS_OVERTHRUST,
-	BS_MAXIMIZE,
-
-	HT_SKIDTRAP,
-	HT_LANDMINE,
-	HT_ANKLESNARE,
-	HT_SHOCKWAVE,
-	HT_SANDMAN,
-	HT_FLASHER,
-	HT_FREEZINGTRAP,
-	HT_BLASTMINE,
-	HT_CLAYMORETRAP,
-	HT_REMOVETRAP,
-	HT_TALKIEBOX,
-	HT_BEASTBANE,
-	HT_FALCON,
-	HT_STEELCROW,
-	HT_BLITZBEAT,
-	HT_DETECTING,
-	HT_SPRINGTRAP,
-
-	AS_RIGHT,
-	AS_LEFT,
-	AS_KATAR,
-	AS_CLOAKING,
-	AS_SONICBLOW,
-	AS_GRIMTOOTH,
-	AS_ENCHANTPOISON,
-	AS_POISONREACT,
-	AS_VENOMDUST,
-	AS_SPLASHER,
-
-	NV_FIRSTAID,
-	NV_TRICKDEAD,
-	SM_MOVINGRECOVERY,
-	SM_FATALBLOW,
-	SM_AUTOBERSERK,
-	AC_MAKINGARROW,
-	AC_CHARGEARROW,
-	TF_SPRINKLESAND,
-	TF_BACKSLIDING,
-	TF_PICKSTONE,
-	TF_THROWSTONE,
-	MC_CARTREVOLUTION,
-	MC_CHANGECART,
-	MC_LOUD,
-	AL_HOLYLIGHT,
-	MG_ENERGYCOAT,
-
-	NPC_PIERCINGATT,
-	NPC_MENTALBREAKER,
-	NPC_RANGEATTACK,
-	NPC_ATTRICHANGE,
-	NPC_CHANGEWATER,
-	NPC_CHANGEGROUND,
-	NPC_CHANGEFIRE,
-	NPC_CHANGEWIND,
-	NPC_CHANGEPOISON,
-	NPC_CHANGEHOLY,
-	NPC_CHANGEDARKNESS,
-	NPC_CHANGETELEKINESIS,
-	NPC_CRITICALSLASH,
-	NPC_COMBOATTACK,
-	NPC_GUIDEDATTACK,
-	NPC_SELFDESTRUCTION,
-	NPC_SPLASHATTACK,
-	NPC_SUICIDE,
-	NPC_POISON,
-	NPC_BLINDATTACK,
-	NPC_SILENCEATTACK,
-	NPC_STUNATTACK,
-	NPC_PETRIFYATTACK,
-	NPC_CURSEATTACK,
-	NPC_SLEEPATTACK,
-	NPC_RANDOMATTACK,
-	NPC_WATERATTACK,
-	NPC_GROUNDATTACK,
-	NPC_FIREATTACK,
-	NPC_WINDATTACK,
-	NPC_POISONATTACK,
-	NPC_HOLYATTACK,
-	NPC_DARKNESSATTACK,
-	NPC_TELEKINESISATTACK,
-	NPC_MAGICALATTACK,
-	NPC_METAMORPHOSIS,
-	NPC_PROVOCATION,
-	NPC_SMOKING,
-	NPC_SUMMONSLAVE,
-	NPC_EMOTION,
-	NPC_TRANSFORMATION,
-	NPC_BLOODDRAIN,
-	NPC_ENERGYDRAIN,
-	NPC_KEEPING,
-	NPC_DARKBREATH,
-	NPC_DARKBLESSING,
-	NPC_BARRIER,
-	NPC_DEFENDER,
-	NPC_LICK,
-	NPC_HALLUCINATION,
-	NPC_REBIRTH,
-	NPC_SUMMONMONSTER,
-
-	RG_SNATCHER,
-	RG_STEALCOIN,
-	RG_BACKSTAP,
-	RG_TUNNELDRIVE,
-	RG_RAID,
-	RG_STRIPWEAPON,
-	RG_STRIPSHIELD,
-	RG_STRIPARMOR,
-	RG_STRIPHELM,
-	RG_INTIMIDATE,
-	RG_GRAFFITI,
-	RG_FLAGGRAFFITI,
-	RG_CLEANER,
-	RG_GANGSTER,
-	RG_COMPULSION,
-	RG_PLAGIARISM,
-
-	AM_AXEMASTERY,
-	AM_LEARNINGPOTION,
-	AM_PHARMACY,
-	AM_DEMONSTRATION,
-	AM_ACIDTERROR,
-	AM_POTIONPITCHER,
-	AM_CANNIBALIZE,
-	AM_SPHEREMINE,
-	AM_CP_WEAPON,
-	AM_CP_SHIELD,
-	AM_CP_ARMOR,
-	AM_CP_HELM,
-	AM_BIOETHICS,
-	AM_BIOTECHNOLOGY,
-	AM_CREATECREATURE,
-	AM_CULTIVATION,
-	AM_FLAMECONTROL,
-	AM_CALLHOMUN,
-	AM_REST,
-	AM_DRILLMASTER,
-	AM_HEALHOMUN,
-	AM_RESURRECTHOMUN,
-
-	CR_TRUST,
-	CR_AUTOGUARD,
-	CR_SHIELDCHARGE,
-	CR_SHIELDBOOMERANG,
-	CR_REFLECTSHIELD,
-	CR_HOLYCROSS,
-	CR_GRANDCROSS,
-	CR_DEVOTION,
-	CR_PROVIDENCE,
-	CR_DEFENDER,
-	CR_SPEARQUICKEN,
-
-	MO_IRONHAND,
-	MO_SPIRITSRECOVERY,
-	MO_CALLSPIRITS,
-	MO_ABSORBSPIRITS,
-	MO_TRIPLEATTACK,
-	MO_BODYRELOCATION,
-	MO_DODGE,
-	MO_INVESTIGATE,
-	MO_FINGEROFFENSIVE,
-	MO_STEELBODY,
-	MO_BLADESTOP,
-	MO_EXPLOSIONSPIRITS,
-	MO_EXTREMITYFIST,
-	MO_CHAINCOMBO,
-	MO_COMBOFINISH,
-
-	SA_ADVANCEDBOOK,
-	SA_CASTCANCEL,
-	SA_MAGICROD,
-	SA_SPELLBREAKER,
-	SA_FREECAST,
-	SA_AUTOSPELL,
-	SA_FLAMELAUNCHER,
-	SA_FROSTWEAPON,
-	SA_LIGHTNINGLOADER,
-	SA_SEISMICWEAPON,
-	SA_DRAGONOLOGY,
-	SA_VOLCANO,
-	SA_DELUGE,
-	SA_VIOLENTGALE,
-	SA_LANDPROTECTOR,
-	SA_DISPELL,
-	SA_ABRACADABRA,
-	SA_MONOCELL,
-	SA_CLASSCHANGE,
-	SA_SUMMONMONSTER,
-	SA_REVERSEORCISH,
-	SA_DEATH,
-	SA_FORTUNE,
-	SA_TAMINGMONSTER,
-	SA_QUESTION,
-	SA_GRAVITY,
-	SA_LEVELUP,
-	SA_INSTANTDEATH,
-	SA_FULLRECOVERY,
-	SA_COMA,
-
-	BD_ADAPTATION,
-	BD_ENCORE,
-	BD_LULLABY,
-	BD_RICHMANKIM,
-	BD_ETERNALCHAOS,
-	BD_DRUMBATTLEFIELD,
-	BD_RINGNIBELUNGEN,
-	BD_ROKISWEIL,
-	BD_INTOABYSS,
-	BD_SIEGFRIED,
-	BD_RAGNAROK,
-
-	BA_MUSICALLESSON,
-	BA_MUSICALSTRIKE,
-	BA_DISSONANCE,
-	BA_FROSTJOKE,
-	BA_WHISTLE,
-	BA_ASSASSINCROSS,
-	BA_POEMBRAGI,
-	BA_APPLEIDUN,
-
-	DC_DANCINGLESSON,
-	DC_THROWARROW,
-	DC_UGLYDANCE,
-	DC_SCREAM,
-	DC_HUMMING,
-	DC_DONTFORGETME,
-	DC_FORTUNEKISS,
-	DC_SERVICEFORYOU,
-
-	WE_MALE = 334,
-	WE_FEMALE,
-	WE_CALLPARTNER,
-
-	NPC_SELFDESTRUCTION2 = 331,
-	NPC_DARKCROSS = 338,
-
-	LK_AURABLADE = 355,
-	LK_PARRYING,
-	LK_CONCENTRATION,
-	LK_TENSIONRELAX,
-	LK_BERSERK,
-	LK_FURY,
-	HP_ASSUMPTIO,
-	HP_BASILICA,
-	HP_MEDITATIO,
-	HW_SOULDRAIN,
-	HW_MAGICCRASHER,
-	HW_MAGICPOWER,
-	PA_PRESSURE,
-	PA_SACRIFICE,
-	PA_GOSPEL,
-	CH_PALMSTRIKE,
-	CH_TIGERFIST,
-	CH_CHAINCRUSH,
-	PF_HPCONVERSION,
-	PF_SOULCHANGE,
-	PF_SOULBURN,
-	ASC_KATAR,
-	ASC_HALLUCINATION,
-	ASC_EDP,
-	ASC_BREAKER,
-	SN_SIGHT,
-	SN_FALCONASSAULT,
-	SN_SHARPSHOOTING,
-	SN_WINDWALK,
-	WS_MELTDOWN,
-	WS_CREATECOIN,
-	WS_CREATENUGGET,
-	WS_CARTBOOST,
-	WS_SYSTEMCREATE,
-	ST_CHASEWALK,
-	ST_REJECTSWORD,
-	ST_STEALBACKPACK,
-	CR_ALCHEMY,
-	CR_SYNTHESISPOTION,
-	CG_ARROWVULCAN,
-	CG_MOONLIT,
-	CG_MARIONETTE,
-	LK_SPIRALPIERCE,
-	LK_HEADCRUSH,
-	LK_JOINTBEAT,
-	HW_NAPALMVULCAN,
-	CH_SOULCOLLECT,
-	PF_MINDBREAKER,
-	PF_MEMORIZE,
-	PF_FOGWALL,
-	PF_SPIDERWEB,
-	ASC_METEORASSAULT,
-	ASC_CDP,
-	WE_BABY,
-	WE_CALLPARENT,
-	WE_CALLBABY,
-	TK_RUN,
-	TK_READYSTORM,
-	TK_STORMKICK,
-	TK_READYDOWN,
-	TK_DOWNKICK,
-	TK_READYTURN,
-	TK_TURNKICK,
-	TK_READYCOUNTER,
-	TK_COUNTER,
-	TK_DODGE,
-	TK_JUMPKICK,
-	TK_HPTIME,
-	TK_SPTIME,
-	TK_POWER,
-	TK_SEVENWIND,
-	TK_HIGHJUMP,
-	SG_FEEL,
-	SG_SUN_WARM,
-	SG_MOON_WARM,
-	SG_STAR_WARM,
-	SG_SUN_COMFORT,
-	SG_MOON_COMFORT,
-	SG_STAR_COMFORT,
-	SG_HATE,
-	SG_SUN_ANGER,
-	SG_MOON_ANGER,
-	SG_STAR_ANGER,
-	SG_SUN_BLESS,
-	SG_MOON_BLESS,
-	SG_STAR_BLESS,
-	SG_DEVIL,
-	SG_FRIEND,
-	SG_KNOWLEDGE,
-	SG_FUSION,
-	SL_ALCHEMIST,
-	AM_BERSERKPITCHER,
-	SL_MONK,
-	SL_STAR,
-	SL_SAGE,
-	SL_CRUSADER,
-	SL_SUPERNOVICE,
-	SL_KNIGHT,
-	SL_WIZARD,
-	SL_PRIEST,
-	SL_BARDDANCER,
-	SL_ROGUE,
-	SL_ASSASIN,
-	SL_BLACKSMITH,
-	BS_ADRENALINE2,
-	SL_HUNTER,
-	SL_SOULLINKER,
-	SL_KAIZEL,
-	SL_KAAHI,
-	SL_KAUPE,
-	SL_KAITE,
-	SL_KAINA,
-	SL_STIN,
-	SL_STUN,
-	SL_SMA,
-	SL_SWOO,
-	SL_SKE,
-	SL_SKA,
-
-	GD_APPROVAL=10000,
-	GD_KAFRACONTACT,
-	GD_GUARDIANRESEARCH,
-	GD_CHARISMA,
-	GD_EXTENSION,
-};
-
-#endif
-
diff --git a/misc/src/map/storage.c b/misc/src/map/storage.c
deleted file mode 100644
index 696a74e..0000000
--- a/misc/src/map/storage.c
+++ /dev/null
@@ -1,576 +0,0 @@
-// $Id: storage.c,v 1.3 2004/09/25 02:05:22 MouseJstr Exp $
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "db.h"
-#include "itemdb.h"
-#include "clif.h"
-#include "intif.h"
-#include "pc.h"
-#include "storage.h"
-#include "guild.h"
-#include "nullpo.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-
-static struct dbt *storage_db;
-static struct dbt *guild_storage_db;
-
-/*==========================================
- * �q�ɓ��A�C�e���\�[�g
- *------------------------------------------
- */
-int storage_comp_item(const void *_i1, const void *_i2){
-struct item *i1=(struct item *)_i1;
-struct item *i2=(struct item *)_i2;
-
-	if (i1->nameid == i2->nameid) {
-		return 0;
-	} else if (!(i1->nameid) || !(i1->amount)){
-		return 1;
-	} else if (!(i2->nameid) || !(i2->amount)){
-		return -1;
-	} else {
-		return i1->nameid - i2->nameid;
-	}
-}
-
- 
-void sortage_sortitem(struct storage* stor){
-	nullpo_retv(stor);
-
-	qsort(stor->storage, MAX_STORAGE, sizeof(struct item), storage_comp_item);
-}
-
-void sortage_gsortitem(struct guild_storage* gstor){
-	nullpo_retv(gstor);
-
-	qsort(gstor->storage, MAX_GUILD_STORAGE, sizeof(struct item), storage_comp_item);
-}
-
-/*==========================================
- * �������Ƃ�
- *------------------------------------------
- */
-int do_init_storage(void) // map.c::do_init()����Ă΂��
-{
-	storage_db=numdb_init();
-	guild_storage_db=numdb_init();
-	return 1;
-}
-
-void do_final_storage(void) // map.c::do_final()����Ă΂��
-{
-}
-
-struct storage *account2storage(int account_id)
-{
-	struct storage *stor;
-	stor=numdb_search(storage_db,account_id);
-	if(stor == NULL) {
-		stor = calloc(sizeof(struct storage), 1);
-		if(stor == NULL){
-			printf("storage: out of memory!\n");
-			exit(0);
-		}
-		memset(stor,0,sizeof(struct storage));
-		stor->account_id=account_id;
-		numdb_insert(storage_db,stor->account_id,stor);
-	}
-	return stor;
-}
-
-// Just to ask storage, without creation
-struct storage *account2storage2(int account_id) {
-	return numdb_search(storage_db, account_id);
-}
-
-int storage_delete(int account_id)
-{
-	struct storage *stor = numdb_search(storage_db,account_id);
-	if(stor) {
-		numdb_erase(storage_db,account_id);
-		free(stor);
-	}
-	return 0;
-}
-
-/*==========================================
- * �J�v���q�ɂ��J��
- *------------------------------------------
- */
-int storage_storageopen(struct map_session_data *sd)
-{
-	struct storage *stor;
-
-	nullpo_retr(0, sd);
-
-	if((stor = numdb_search(storage_db,sd->status.account_id)) != NULL) {
-		stor->storage_status = 1;
-		sd->state.storage_flag = 0;
-		clif_storageitemlist(sd,stor);
-		clif_storageequiplist(sd,stor);
-		clif_updatestorageamount(sd,stor);
-		return 0;
-	} else
-		intif_request_storage(sd->status.account_id);
-
-	return 1;
-}
-
-/*==========================================
- * �J�v���q�ɂփA�C�e���lj�
- *------------------------------------------
- */
-int storage_additem(struct map_session_data *sd,struct storage *stor,struct item *item_data,int amount)
-{
-	struct item_data *data;
-	int i;
-
-	nullpo_retr(1, sd);
-	nullpo_retr(1, stor);
-	nullpo_retr(1, item_data);
-
-	if(item_data->nameid <= 0 || amount <= 0)
-		return 1;
-	nullpo_retr(1, data = itemdb_search(item_data->nameid));
-
-	i=MAX_STORAGE;
-	if(!itemdb_isequip2(data)){
-		// �����i�ł͂Ȃ��̂ŁA�����L�i�Ȃ���̂ݕω�������
-		for(i=0;i<MAX_STORAGE;i++){
-			if(stor->storage[i].nameid == item_data->nameid &&
-				stor->storage[i].card[0] == item_data->card[0] && stor->storage[i].card[1] == item_data->card[1] &&
-				stor->storage[i].card[2] == item_data->card[2] && stor->storage[i].card[3] == item_data->card[3]){
-				if(stor->storage[i].amount+amount > MAX_AMOUNT)
-					return 1;
-				stor->storage[i].amount+=amount;
-				clif_storageitemadded(sd,stor,i,amount);
-				break;
-			}
-		}
-	}
-	if(i>=MAX_STORAGE){
-		// �����i�������L�i�������̂ŋ󂫗��֒lj�
-		for(i=0;i<MAX_STORAGE;i++){
-			if(stor->storage[i].nameid==0){
-				memcpy(&stor->storage[i],item_data,sizeof(stor->storage[0]));
-				stor->storage[i].amount=amount;
-				stor->storage_amount++;
-				clif_storageitemadded(sd,stor,i,amount);
-				clif_updatestorageamount(sd,stor);
-				break;
-			}
-		}
-		if(i>=MAX_STORAGE)
-			return 1;
-	}
-	return 0;
-}
-/*==========================================
- * �J�v���q�ɃA�C�e�������炷
- *------------------------------------------
- */
-int storage_delitem(struct map_session_data *sd,struct storage *stor,int n,int amount)
-{
-	nullpo_retr(1, sd);
-	nullpo_retr(1, stor);
-
-	if(stor->storage[n].nameid==0 || stor->storage[n].amount<amount)
-		return 1;
-
-	stor->storage[n].amount-=amount;
-	if(stor->storage[n].amount==0){
-		memset(&stor->storage[n],0,sizeof(stor->storage[0]));
-		stor->storage_amount--;
-		clif_updatestorageamount(sd,stor);
-	}
-	clif_storageitemremoved(sd,n,amount);
-
-	return 0;
-}
-/*==========================================
- * �J�v���q�ɂ֓����
- *------------------------------------------
- */
-int storage_storageadd(struct map_session_data *sd,int index,int amount)
-{
-	struct storage *stor;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, stor=account2storage(sd->status.account_id));
-
-	if( (stor->storage_amount <= MAX_STORAGE) && (stor->storage_status == 1) ) { // storage not full & storage open
-		if(index>=0 && index<MAX_INVENTORY) { // valid index
-			if( (amount <= sd->status.inventory[index].amount) && (amount > 0) ) { //valid amount
-				if(storage_additem(sd,stor,&sd->status.inventory[index],amount)==0)
-				// remove item from inventory
-					pc_delitem(sd,index,amount,0);
-			} // valid amount
-		}// valid index
-	}// storage not full & storage open
-
-	return 0;
-}
-
-/*==========================================
- * �J�v���q�ɂ���o��
- *------------------------------------------
- */
-int storage_storageget(struct map_session_data *sd,int index,int amount)
-{
-	struct storage *stor;
-	int flag;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, stor=account2storage(sd->status.account_id));
-
-	if(stor->storage_status == 1) { //  storage open
-		if(index>=0 && index<MAX_STORAGE) { // valid index
-			if( (amount <= stor->storage[index].amount) && (amount > 0) ) { //valid amount
-				if((flag = pc_additem(sd,&stor->storage[index],amount)) == 0)
-					storage_delitem(sd,stor,index,amount);
-				else
-					clif_additem(sd,0,0,flag);
-			} // valid amount
-		}// valid index
-	}// storage open
-
-	return 0;
-}
-/*==========================================
- * �J�v���q�ɂփJ�[�g��������
- *------------------------------------------
- */
-int storage_storageaddfromcart(struct map_session_data *sd,int index,int amount)
-{
-	struct storage *stor;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, stor=account2storage(sd->status.account_id));
-
-	if( (stor->storage_amount <= MAX_STORAGE) && (stor->storage_status == 1) ) { // storage not full & storage open
-		if(index>=0 && index<MAX_INVENTORY) { // valid index
-			if( (amount <= sd->status.cart[index].amount) && (amount > 0) ) { //valid amount
-				if(storage_additem(sd,stor,&sd->status.cart[index],amount)==0)
-					pc_cart_delitem(sd,index,amount,0);
-			} // valid amount
-		}// valid index
-	}// storage not full & storage open
-
-	return 0;
-}
-
-/*==========================================
- * �J�v���q�ɂ���J�[�g�֏o��
- *------------------------------------------
- */
-int storage_storagegettocart(struct map_session_data *sd,int index,int amount)
-{
-	struct storage *stor;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, stor=account2storage(sd->status.account_id));
-
-	if(stor->storage_status == 1) { //  storage open
-		if(index>=0 && index<MAX_STORAGE) { // valid index
-			if( (amount <= stor->storage[index].amount) && (amount > 0) ) { //valid amount
-				if(pc_cart_additem(sd,&stor->storage[index],amount)==0){
-					storage_delitem(sd,stor,index,amount);
-				}
-			} // valid amount
-		}// valid index
-	}// storage open
-
-	return 0;
-}
-
-
-/*==========================================
- * �J�v���q�ɂ�‚���
- *------------------------------------------
- */
-int storage_storageclose(struct map_session_data *sd)
-{
-	struct storage *stor;
-
-	nullpo_retr(0, sd);
-	nullpo_retr(0, stor=account2storage(sd->status.account_id));
-
-	stor->storage_status=0;
-	sd->state.storage_flag = 0;
-	clif_storageclose(sd);
-
-	sortage_sortitem(stor);
-	return 0;
-}
-
-/*==========================================
- * ���O�A�E�g���J���Ă���J�v���q�ɂ̕ۑ�
- *------------------------------------------
- */
-int storage_storage_quit(struct map_session_data *sd)
-{
-	struct storage *stor;
-
-	nullpo_retr(0, sd);
-
-	stor = numdb_search(storage_db,sd->status.account_id);
-	if(stor) stor->storage_status = 0;
-
-	return 0;
-}
-
-int storage_storage_save(struct map_session_data *sd)
-{
-	struct storage *stor;
-
-	nullpo_retr(0, sd);
-
-	stor=numdb_search(storage_db,sd->status.account_id);
-	if(stor) intif_send_storage(stor);
-
-	return 0;
-}
-
-struct guild_storage *guild2storage(int guild_id)
-{
-	struct guild_storage *gs = NULL;
-	if(guild_search(guild_id) != NULL) {
-		gs=numdb_search(guild_storage_db,guild_id);
-		if(gs == NULL) {
-			gs = calloc(sizeof(struct guild_storage), 1);
-			if(gs==NULL){
-				printf("storage: out of memory!\n");
-				exit(0);
-			}
-			gs->guild_id=guild_id;
-			numdb_insert(guild_storage_db,gs->guild_id,gs);
-		}
-	}
-	return gs;
-}
-
-int guild_storage_delete(int guild_id)
-{
-	struct guild_storage *gstor = numdb_search(guild_storage_db,guild_id);
-	if(gstor) {
-		numdb_erase(guild_storage_db,guild_id);
-		free(gstor);
-	}
-	return 0;
-}
-
-int storage_guild_storageopen(struct map_session_data *sd)
-{
-	struct guild_storage *gstor;
-
-	nullpo_retr(0, sd);
-
-	if(sd->status.guild_id <= 0)
-		return 2;
-	if((gstor = numdb_search(guild_storage_db,sd->status.guild_id)) != NULL) {
-		if(gstor->storage_status)
-			return 1;
-		gstor->storage_status = 1;
-		sd->state.storage_flag = 1;
-		clif_guildstorageitemlist(sd,gstor);
-		clif_guildstorageequiplist(sd,gstor);
-		clif_updateguildstorageamount(sd,gstor);
-		return 0;
-	}
-	else {
-		gstor = guild2storage(sd->status.guild_id);
-		gstor->storage_status = 1;
-		intif_request_guild_storage(sd->status.account_id,sd->status.guild_id);
-	}
-
-	return 0;
-}
-
-int guild_storage_additem(struct map_session_data *sd,struct guild_storage *stor,struct item *item_data,int amount)
-{
-	struct item_data *data;
-	int i;
-
-	nullpo_retr(1, sd);
-	nullpo_retr(1, stor);
-	nullpo_retr(1, item_data);
-	nullpo_retr(1, data = itemdb_search(item_data->nameid));
-
-	if(item_data->nameid <= 0 || amount <= 0)
-		return 1;
-
-	i=MAX_GUILD_STORAGE;
-	if(!itemdb_isequip2(data)){
-		// �����i�ł͂Ȃ��̂ŁA�����L�i�Ȃ���̂ݕω�������
-		for(i=0;i<MAX_GUILD_STORAGE;i++){
-			if(stor->storage[i].nameid == item_data->nameid &&
-				stor->storage[i].card[0] == item_data->card[0] && stor->storage[i].card[1] == item_data->card[1] &&
-				stor->storage[i].card[2] == item_data->card[2] && stor->storage[i].card[3] == item_data->card[3]){
-				if(stor->storage[i].amount+amount > MAX_AMOUNT)
-					return 1;
-				stor->storage[i].amount+=amount;
-				clif_guildstorageitemadded(sd,stor,i,amount);
-				break;
-			}
-		}
-	}
-	if(i>=MAX_GUILD_STORAGE){
-		// �����i�������L�i�������̂ŋ󂫗��֒lj�
-		for(i=0;i<MAX_GUILD_STORAGE;i++){
-			if(stor->storage[i].nameid==0){
-				memcpy(&stor->storage[i],item_data,sizeof(stor->storage[0]));
-				stor->storage[i].amount=amount;
-				stor->storage_amount++;
-				clif_guildstorageitemadded(sd,stor,i,amount);
-				clif_updateguildstorageamount(sd,stor);
-				break;
-			}
-		}
-		if(i>=MAX_GUILD_STORAGE)
-			return 1;
-	}
-	return 0;
-}
-
-int guild_storage_delitem(struct map_session_data *sd,struct guild_storage *stor,int n,int amount)
-{
-	nullpo_retr(1, sd);
-	nullpo_retr(1, stor);
-
-	if(stor->storage[n].nameid==0 || stor->storage[n].amount<amount)
-		return 1;
-
-	stor->storage[n].amount-=amount;
-	if(stor->storage[n].amount==0){
-		memset(&stor->storage[n],0,sizeof(stor->storage[0]));
-		stor->storage_amount--;
-		clif_updateguildstorageamount(sd,stor);
-	}
-	clif_storageitemremoved(sd,n,amount);
-
-	return 0;
-}
-
-int storage_guild_storageadd(struct map_session_data *sd,int index,int amount)
-{
-	struct guild_storage *stor;
-
-	nullpo_retr(0, sd);
-
-	if((stor=guild2storage(sd->status.guild_id)) != NULL) {
-		if( (stor->storage_amount <= MAX_GUILD_STORAGE) && (stor->storage_status == 1) ) { // storage not full & storage open
-			if(index>=0 && index<MAX_INVENTORY) { // valid index
-				if( (amount <= sd->status.inventory[index].amount) && (amount > 0) ) { //valid amount
-					if(guild_storage_additem(sd,stor,&sd->status.inventory[index],amount)==0)
-					// remove item from inventory
-						pc_delitem(sd,index,amount,0);
-				} // valid amount
-			}// valid index
-		}// storage not full & storage open
-	}
-
-	return 0;
-}
-
-int storage_guild_storageget(struct map_session_data *sd,int index,int amount)
-{
-	struct guild_storage *stor;
-	int flag;
-
-	nullpo_retr(0, sd);
-
-	if((stor=guild2storage(sd->status.guild_id)) != NULL) {
-		if(stor->storage_status == 1) { //  storage open
-			if(index>=0 && index<MAX_GUILD_STORAGE) { // valid index
-				if( (amount <= stor->storage[index].amount) && (amount > 0) ) { //valid amount
-					if((flag = pc_additem(sd,&stor->storage[index],amount)) == 0)
-						guild_storage_delitem(sd,stor,index,amount);
-					else
-						clif_additem(sd,0,0,flag);
-				} // valid amount
-			}// valid index
-		}// storage open
-	}
-
-	return 0;
-}
-
-int storage_guild_storageaddfromcart(struct map_session_data *sd,int index,int amount)
-{
-	struct guild_storage *stor;
-
-	nullpo_retr(0, sd);
-
-	if((stor=guild2storage(sd->status.guild_id)) != NULL) {
-		if( (stor->storage_amount <= MAX_GUILD_STORAGE) && (stor->storage_status == 1) ) { // storage not full & storage open
-			if(index>=0 && index<MAX_INVENTORY) { // valid index
-				if( (amount <= sd->status.cart[index].amount) && (amount > 0) ) { //valid amount
-					if(guild_storage_additem(sd,stor,&sd->status.cart[index],amount)==0)
-						pc_cart_delitem(sd,index,amount,0);
-				} // valid amount
-			}// valid index
-		}// storage not full & storage open
-	}
-
-	return 0;
-}
-
-int storage_guild_storagegettocart(struct map_session_data *sd,int index,int amount)
-{
-	struct guild_storage *stor;
-
-	nullpo_retr(0, sd);
-
-	if((stor=guild2storage(sd->status.guild_id)) != NULL) {
-		if(stor->storage_status == 1) { //  storage open
-			if(index>=0 && index<MAX_GUILD_STORAGE) { // valid index
-				if( (amount <= stor->storage[index].amount) && (amount > 0) ) { //valid amount
-					if(pc_cart_additem(sd,&stor->storage[index],amount)==0){
-						guild_storage_delitem(sd,stor,index,amount);
-					}
-				} // valid amount
-			}// valid index
-		}// storage open
-	}
-
-	return 0;
-}
-
-int storage_guild_storageclose(struct map_session_data *sd)
-{
-	struct guild_storage *stor;
-
-	nullpo_retr(0, sd);
-
-	if((stor=guild2storage(sd->status.guild_id)) != NULL) {
-		intif_send_guild_storage(sd->status.account_id,stor);
-		stor->storage_status = 0;
-		sd->state.storage_flag = 0;
-		sortage_gsortitem(stor);
-	}
-	clif_storageclose(sd);
-
-	return 0;
-}
-
-int storage_guild_storage_quit(struct map_session_data *sd,int flag)
-{
-	struct guild_storage *stor;
-
-	nullpo_retr(0, sd);
-
-	stor = numdb_search(guild_storage_db,sd->status.guild_id);
-	if(stor) {
-		if(!flag)
-			intif_send_guild_storage(sd->status.account_id,stor);
-		stor->storage_status = 0;
-		sd->state.storage_flag = 0;
-	}
-
-	return 0;
-}
diff --git a/misc/src/map/storage.h b/misc/src/map/storage.h
deleted file mode 100644
index 489741c..0000000
--- a/misc/src/map/storage.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// $Id: storage.h,v 1.3 2004/09/25 05:32:19 MouseJstr Exp $
-#ifndef _STORAGE_H_
-#define _STORAGE_H_
-
-#include "mmo.h"
-
-int storage_storageopen(struct map_session_data *sd);
-int storage_storageadd(struct map_session_data *sd,int index,int amount);
-int storage_storageget(struct map_session_data *sd,int index,int amount);
-int storage_storageaddfromcart(struct map_session_data *sd,int index,int amount);
-int storage_storagegettocart(struct map_session_data *sd,int index,int amount);
-int storage_storageclose(struct map_session_data *sd);
-int do_init_storage(void);
-void do_final_storage(void);
-struct storage *account2storage(int account_id);
-struct storage *account2storage2(int account_id);
-int storage_delete(int account_id);
-int storage_storage_quit(struct map_session_data *sd);
-int storage_storage_save(struct map_session_data *sd);
-
-struct guild_storage *guild2storage(int guild_id);
-int guild_storage_delete(int guild_id);
-int storage_guild_storageopen(struct map_session_data *sd);
-int guild_storage_additem(struct map_session_data *sd,struct guild_storage *stor,struct item *item_data,int amount);
-int guild_storage_delitem(struct map_session_data *sd,struct guild_storage *stor,int n,int amount);
-int storage_guild_storageadd(struct map_session_data *sd,int index,int amount);
-int storage_guild_storageget(struct map_session_data *sd,int index,int amount);
-int storage_guild_storageaddfromcart(struct map_session_data *sd,int index,int amount);
-int storage_guild_storagegettocart(struct map_session_data *sd,int index,int amount);
-int storage_guild_storageclose(struct map_session_data *sd);
-int storage_guild_storage_quit(struct map_session_data *sd,int flag);
-
-int storage_comp_item(const void *_i1, const void *_i2);
-//int storage_comp_item(const struct item* i1, const struct item* i2);
-void sortage_sortitem(struct storage* stor);
-void sortage_gsortitem(struct guild_storage* gstor);
-
-#endif
diff --git a/misc/src/map/trade.c b/misc/src/map/trade.c
deleted file mode 100644
index da43d67..0000000
--- a/misc/src/map/trade.c
+++ /dev/null
@@ -1,255 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-
-#include "clif.h"
-#include "itemdb.h"
-#include "map.h"
-#include "trade.h"
-#include "pc.h"
-#include "npc.h"
-#include "battle.h"
-#include "nullpo.h"
-
-/*==========================================
- * ����v���𑊎�ɑ���
- *------------------------------------------
- */
-void trade_traderequest(struct map_session_data *sd,int target_id)
-{
-	struct map_session_data *target_sd;
-
-	nullpo_retv(sd);
-
-	if((target_sd = map_id2sd(target_id)) != NULL){
-		if(!battle_config.invite_request_check) {
-			if(target_sd->guild_invite>0 || target_sd->party_invite>0){
-				clif_tradestart(sd,2);	// �����PT�v������Guild�v����
-				return;
-			}
-		}
-		if((target_sd->trade_partner !=0) || (sd->trade_partner !=0)) {
-			trade_tradecancel(sd); //person is in another trade
-		}
-		else{
-			if(sd->bl.m != target_sd->bl.m
-			 || (sd->bl.x - target_sd->bl.x <= -5 || sd->bl.x - target_sd->bl.x >= 5)
-			 || (sd->bl.y - target_sd->bl.y <= -5 || sd->bl.y - target_sd->bl.y >= 5)) {
-				clif_tradestart(sd,0); //too far
-			}
-			else if(sd!=target_sd) {
-				target_sd->trade_partner = sd->status.account_id;
-				sd->trade_partner = target_sd->status.account_id;
-				clif_traderequest(target_sd,sd->status.name);
-			}
-		}
-	}
-	else{
-		clif_tradestart(sd,1); //character does not exist
-	}
-}
-
-/*==========================================
- * ����v��
- *------------------------------------------
- */
-void trade_tradeack(struct map_session_data *sd,int type)
-{
-	struct map_session_data *target_sd;
-
-	nullpo_retv(sd);
-
-	if((target_sd = map_id2sd(sd->trade_partner)) != NULL){
-		clif_tradestart(target_sd,type);
-		clif_tradestart(sd,type);
-		if(type == 4){ // Cancel
-			sd->deal_locked =0;
-			sd->trade_partner=0;
-			target_sd->deal_locked=0;
-			target_sd->trade_partner=0;
-		}
-		if(sd->npc_id != 0)
-			npc_event_dequeue(sd);
-		if(target_sd->npc_id != 0)
-			npc_event_dequeue(target_sd);
-	}
-}
-
-/*==========================================
- * �A�C�e���lj�
- *------------------------------------------
- */
-void trade_tradeadditem(struct map_session_data *sd,int index,int amount)
-{
-	struct map_session_data *target_sd;
-	int trade_i;
-	int trade_weight=0;
-	int c;
-
-	nullpo_retv(sd);
-
-	if(((target_sd = map_id2sd(sd->trade_partner)) != NULL) && (sd->deal_locked < 1)){
-		if(index<2 || index>=MAX_INVENTORY+2){
-			if(index == 0 && amount > 0 && amount <= sd->status.zeny){
-				sd->deal_zeny=amount;
-				clif_tradeadditem(sd,target_sd,0,amount);
-			}
-		}else if(amount <= sd->status.inventory[index-2].amount && amount > 0){
-			for(trade_i=0; trade_i<10;trade_i++){
-				if(sd->deal_item_amount[trade_i] == 0){
-					trade_weight+=sd->inventory_data[index-2]->weight*amount;
-					if(target_sd->weight + trade_weight > target_sd->max_weight){
-						clif_tradeitemok(sd,index,0,1); //fail to add item -- the player was over weighted.
-                                                amount = 0; // [MouseJstr]
-					}else{
-						for(c=0; c==trade_i-1;c++){ // re-deal exploit protection [Valaris]
-							if(sd->deal_item_index[c]==index) {
-								trade_tradecancel(sd);
-								return;
-							}
-						}
-						sd->deal_item_index[trade_i] =index;
-						sd->deal_item_amount[trade_i]+=amount;
-						clif_tradeitemok(sd,index,amount,0); //success to add item
-						clif_tradeadditem(sd,target_sd,index,amount);
-					}
-					break;
-				}else{
-					trade_weight+=sd->inventory_data[sd->deal_item_index[trade_i]-2]->weight*sd->deal_item_amount[trade_i];
-				}
-			}
-		}
-	}
-}
-
-/*==========================================
- * �A�C�e���lj�����(ok����)
- *------------------------------------------
- */
-void trade_tradeok(struct map_session_data *sd)
-{
-	struct map_session_data *target_sd;
-	int trade_i;
-
-	nullpo_retv(sd);
-	
-	for(trade_i=0;trade_i<10;trade_i++) {
-		if(sd->deal_item_amount[trade_i]>sd->status.inventory[sd->deal_item_index[trade_i]-2].amount ||
-			sd->deal_item_amount[trade_i]<0) {
-			trade_tradecancel(sd);
-			return;
-		}
-	
-	}
-	
-	if((target_sd = map_id2sd(sd->trade_partner)) != NULL){
-		sd->deal_locked=1;
-		clif_tradeitemok(sd,0,0,0);
-		clif_tradedeal_lock(sd,0);
-		clif_tradedeal_lock(target_sd,1);
-	}
-}
-
-/*==========================================
- * ����L�����Z��
- *------------------------------------------
- */
-void trade_tradecancel(struct map_session_data *sd)
-{
-	struct map_session_data *target_sd;
-	int trade_i;
-
-	nullpo_retv(sd);
-
-	if((target_sd = map_id2sd(sd->trade_partner)) != NULL){
-		for(trade_i=0; trade_i<10;trade_i++) { //give items back (only virtual)
-			if(sd->deal_item_amount[trade_i] != 0) {
-				clif_additem(sd,sd->deal_item_index[trade_i]-2,sd->deal_item_amount[trade_i],0);
-				sd->deal_item_index[trade_i] =0;
-				sd->deal_item_amount[trade_i]=0;
-			}
-			if(target_sd->deal_item_amount[trade_i] != 0) {
-				clif_additem(target_sd,target_sd->deal_item_index[trade_i]-2,target_sd->deal_item_amount[trade_i],0);
-				target_sd->deal_item_index[trade_i] =0;
-				target_sd->deal_item_amount[trade_i]=0;
-			}
-		}
-		if(sd->deal_zeny) {
-			clif_updatestatus(sd,SP_ZENY);
-			sd->deal_zeny=0;
-		}
-		if(target_sd->deal_zeny) {
-			clif_updatestatus(target_sd,SP_ZENY);
-			target_sd->deal_zeny=0;
-		}
-		sd->deal_locked =0;
-		sd->trade_partner=0;
-		target_sd->deal_locked=0;
-		target_sd->trade_partner=0;
-		clif_tradecancelled(sd);
-		clif_tradecancelled(target_sd);
-	}
-}
-
-/*==========================================
- * �������(trade����)
- *------------------------------------------
- */
-void trade_tradecommit(struct map_session_data *sd)
-{
-	struct map_session_data *target_sd;
-	int trade_i;
-
-	nullpo_retv(sd);
-
-	if((target_sd = map_id2sd(sd->trade_partner)) != NULL){
-		if( (sd->deal_locked >=1) && (target_sd->deal_locked >=1) ){ // both have pressed 'ok'
-			if(sd->deal_locked < 2) {sd->deal_locked=2;} // set locked to 2
-			if(target_sd->deal_locked==2) { // the other one pressed 'trade' too
-				for(trade_i=0; trade_i<10;trade_i++) {
-					if(sd->deal_item_amount[trade_i] != 0) {
-						int n=sd->deal_item_index[trade_i]-2;
-						int flag;
-						flag = pc_additem(target_sd,&sd->status.inventory[n],sd->deal_item_amount[trade_i]);
-						if(flag==0)
-						pc_delitem(sd,n,sd->deal_item_amount[trade_i],1);
-						else
-							clif_additem(sd,n,sd->deal_item_amount[trade_i],0);
-						sd->deal_item_index[trade_i] =0;
-						sd->deal_item_amount[trade_i]=0;
-					}
-					if(target_sd->deal_item_amount[trade_i] != 0) {
-						int n=target_sd->deal_item_index[trade_i]-2;
-						int flag;
-						flag = pc_additem(sd,&target_sd->status.inventory[n],target_sd->deal_item_amount[trade_i]);
-						if(flag==0)
-						pc_delitem(target_sd,n,target_sd->deal_item_amount[trade_i],1);
-						else
-							clif_additem(target_sd,n,target_sd->deal_item_amount[trade_i],0);
-						target_sd->deal_item_index[trade_i] =0;
-						target_sd->deal_item_amount[trade_i]=0;
-					}
-				}
-				if(sd->deal_zeny) {
-					sd->status.zeny -= sd->deal_zeny;
-					clif_updatestatus(sd,SP_ZENY);
-					target_sd->status.zeny += sd->deal_zeny;
-					clif_updatestatus(target_sd,SP_ZENY);
-					sd->deal_zeny=0;
-				}
-				if(target_sd->deal_zeny) {
-					target_sd->status.zeny -= target_sd->deal_zeny;
-					clif_updatestatus(target_sd,SP_ZENY);
-					sd->status.zeny += target_sd->deal_zeny;
-					clif_updatestatus(sd,SP_ZENY);
-					target_sd->deal_zeny=0;
-				}
-				sd->deal_locked =0;
-				sd->trade_partner=0;
-				target_sd->deal_locked=0;
-				target_sd->trade_partner=0;
-				clif_tradecompleted(sd,0);
-				clif_tradecompleted(target_sd,0);
-			}
-		}
-	}
-}
diff --git a/misc/src/map/trade.h b/misc/src/map/trade.h
deleted file mode 100644
index 01cbce7..0000000
--- a/misc/src/map/trade.h
+++ /dev/null
@@ -1,13 +0,0 @@
-// $Id: trade.h,v 1.2 2004/09/25 05:32:19 MouseJstr Exp $
-#ifndef	_TRADE_H_
-#define	_TRADE_H_
-
-#include "map.h"
-void trade_traderequest(struct map_session_data *sd,int target_id);
-void trade_tradeack(struct map_session_data *sd,int type);
-void trade_tradeadditem(struct map_session_data *sd,int index,int amount);
-void trade_tradeok(struct map_session_data *sd);
-void trade_tradecancel(struct map_session_data *sd);
-void trade_tradecommit(struct map_session_data *sd);
-
-#endif	// _TRADE_H_
diff --git a/misc/src/map/vending.c b/misc/src/map/vending.c
deleted file mode 100644
index 189584d..0000000
--- a/misc/src/map/vending.c
+++ /dev/null
@@ -1,163 +0,0 @@
-// $Id: vending.c,v 1.2 2004/09/25 05:32:19 MouseJstr Exp $
-#include <stdio.h>
-#include <string.h>
-
-#include "clif.h"
-#include "itemdb.h"
-#include "map.h"
-#include "vending.h"
-#include "pc.h"
-#include "skill.h"
-#include "battle.h"
-#include "nullpo.h"
-
-/*==========================================
- * �I�X��
- *------------------------------------------
-*/
-void vending_closevending(struct map_session_data *sd)
-{
-
-	nullpo_retv(sd);
-
-	sd->vender_id=0;
-	clif_closevendingboard(&sd->bl,0);
-}
-
-/*==========================================
- * �I�X�A�C�e�����X�g�v��
- *------------------------------------------
- */
-void vending_vendinglistreq(struct map_session_data *sd,int id)
-{
-	struct map_session_data *vsd;
-
-	nullpo_retv(sd);
-
-	if( (vsd=map_id2sd(id)) == NULL )
-		return;
-	if(vsd->vender_id==0)
-		return;
-	clif_vendinglist(sd,id,vsd->vending);
-}
-
-/*==========================================
- * �I�X�A�C�e���w��
- *------------------------------------------
- */
-void vending_purchasereq(struct map_session_data *sd,int len,int id,unsigned char *p)
-{
-	int i,j,w,z,new=0,blank,vend_list[12];
-	short amount,index;
-	struct map_session_data *vsd=map_id2sd(id);
-
-	nullpo_retv(sd);
-
-	blank=pc_inventoryblank(sd);
-
-	if(vsd==NULL)
-		return;
-	if(vsd->vender_id==0)
-		return;
-	if(vsd->vender_id==sd->bl.id)
-		return;
-	for(i=0,w=z=0;8+4*i<len;i++){
-		amount=*(short*)(p+4*i);
-		index=*(short*)(p+2+4*i)-2;
-/*
-		if(amount < 0) return;	//add
-		for(j=0;j<vsd->vend_num;j++)
-			if(0<vsd->vending[j].amount && amount<=vsd->vending[j].amount && vsd->vending[j].index==index)
-				break;
-*/
-//ADD_start
-		for(j=0;j < vsd->vend_num;j++) {
-			if(0 < vsd->vending[j].amount && vsd->vending[j].index==index) {
-				if(amount > vsd->vending[j].amount || amount <= 0) {
-					clif_buyvending(sd,index,vsd->vending[j].amount,4);
-					return;
-				}
-				if(amount <= vsd->vending[j].amount) break;
-			}
-		}
-//ADD_end
-		if(j==vsd->vend_num)
-			return;	// ����؂�
-		vend_list[i]=j;
-		z+=vsd->vending[j].value*amount;
-		if(z > sd->status.zeny){
-			clif_buyvending(sd,index,amount,1);
-			return;	// zeny�s��
-		}
-		w+=itemdb_weight(vsd->status.cart[index].nameid)*amount;
-		if(w+sd->weight > sd->max_weight){
-			clif_buyvending(sd,index,amount,2);
-			return;	// �d�ʒ���
-		}
-		switch(pc_checkadditem(sd,vsd->status.cart[index].nameid,amount)){
-		case ADDITEM_EXIST:
-			break;
-		case ADDITEM_NEW:
-			new++;
-			if(new > blank)
-				return;	// ��ސ�����
-			break;
-		case ADDITEM_OVERAMOUNT:
-			return;	// �A�C�e��������
-		}
-	}
-		if(z < 0 || z > MAX_ZENY){  //Zeny Bug Fixed by Darkchild
-		clif_tradecancelled(sd);
-		clif_tradecancelled(vsd);
-		return;
-	}
-	pc_payzeny(sd,z);
-	pc_getzeny(vsd,z);
-	for(i=0;8+4*i<len;i++){
-		amount=*(short*)(p+4*i);
-		index=*(short*)(p+2+4*i)-2;
-		if(amount < 0) break;	//add
-		pc_additem(sd,&vsd->status.cart[index],amount);
-		vsd->vending[vend_list[i]].amount-=amount;
-		pc_cart_delitem(vsd,index,amount,0);
-		clif_vendingreport(vsd,index,amount);
-	}
-}
-
-/*==========================================
- * �I�X�J��
- *------------------------------------------
- */
-void vending_openvending(struct map_session_data *sd,int len,char *message,int flag,unsigned char *p)
-{
-	int i;
-
-	nullpo_retv(sd);
-
-	if(!pc_checkskill(sd,MC_VENDING) || !pc_iscarton(sd)) {	// cart skill and cart check [Valaris]
-		clif_skill_fail(sd,MC_VENDING,0,0);
-		return;
-	}
-
-	if(flag){
-		for(i=0;85+8*i<len;i++){
-			sd->vending[i].index=*(short*)(p+8*i)-2;
-			sd->vending[i].amount=*(short*)(p+2+8*i);
-			sd->vending[i].value=*(int*)(p+4+8*i);
-			if(sd->vending[i].value>battle_config.vending_max_value)sd->vending[i].value=battle_config.vending_max_value;
-			// �J�[�g���̃A�C�e�����Ɣ̔�����A�C�e�����ɑ��Ⴊ�������璆�~
-			if(pc_cartitem_amount(sd,sd->vending[i].index,sd->vending[i].amount)<0 || sd->vending[i].value < 0) { // fixes by Valaris and fritz
-				clif_skill_fail(sd,MC_VENDING,0,0);
-				return;
-			}
-		}
-		sd->vender_id=sd->bl.id;
-		sd->vend_num=i;
-		strcpy(sd->message,message);
-		if(clif_openvending(sd,sd->vender_id,sd->vending) > 0)
-			clif_showvendingboard(&sd->bl,message,0);
-		else
-			sd->vender_id=0;
-	}
-}
-
diff --git a/misc/src/map/vending.h b/misc/src/map/vending.h
deleted file mode 100644
index 41aa731..0000000
--- a/misc/src/map/vending.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// $Id: vending.h,v 1.2 2004/09/25 05:32:19 MouseJstr Exp $
-#ifndef	_VENDING_H_
-#define	_VENDING_H_
-
-#include "map.h"
-
-void vending_closevending(struct map_session_data *sd);
-void vending_openvending(struct map_session_data *sd,int len,char *message,int flag,unsigned char *p);
-void vending_vendinglistreq(struct map_session_data *sd,int id);
-void vending_purchasereq(struct map_session_data *sd,int len,int id,unsigned char *p);
-
-#endif	// _VENDING_H_
diff --git a/misc/src/mra.patch b/misc/src/mra.patch
deleted file mode 100644
index b8ae365..0000000
--- a/misc/src/mra.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-diff -u -r athena/src/map/clif.c athenanew/src/map/clif.c
---- athena/src/map/clif.c	2005-04-16 17:07:03.000000000 +0000
-+++ athenanew/src/map/clif.c	2005-05-21 18:25:01.121659080 +0000
-@@ -3208,17 +3208,19 @@
-  * �A�C�e���lj�����/���s
-  *------------------------------------------
-  */
--int clif_tradeitemok(struct map_session_data *sd,int index,int fail)
-+int clif_tradeitemok(struct map_session_data *sd,int index,int amount,int fail)
- {
- 	int fd;
- 
- 	nullpo_retr(0, sd);
- 
- 	fd=sd->fd;
--	WFIFOW(fd,0)=0xea;
-+    WFIFOW(fd,0)=0x1b1;
-+	//WFIFOW(fd,0)=0xea;
- 	WFIFOW(fd,2)=index;
--	WFIFOB(fd,4)=fail;
--	WFIFOSET(fd,packet_len_table[0xea]);
-+	WFIFOW(fd,4)=amount;
-+    WFIFOB(fd,6)=fail;
-+	WFIFOSET(fd,packet_len_table[0x1b1]);
- 
- 	return 0;
- }
-diff -u -r athena/src/map/clif.h athenanew/src/map/clif.h
---- athena/src/map/clif.h	2005-04-16 17:06:56.000000000 +0000
-+++ athenanew/src/map/clif.h	2005-05-21 18:25:33.040806632 +0000
-@@ -97,7 +97,7 @@
- int clif_traderequest(struct map_session_data *sd,char *name);
- int clif_tradestart(struct map_session_data *sd,int type);
- int clif_tradeadditem(struct map_session_data *sd,struct map_session_data *tsd,int index,int amount);
--int clif_tradeitemok(struct map_session_data *sd,int index,int fail);
-+int clif_tradeitemok(struct map_session_data *sd,int index,int amount,int fail);
- int clif_tradedeal_lock(struct map_session_data *sd,int fail);
- int clif_tradecancelled(struct map_session_data *sd);
- int clif_tradecompleted(struct map_session_data *sd,int fail);
-diff -u -r athena/src/map/trade.c athenanew/src/map/trade.c
---- athena/src/map/trade.c	2005-04-16 17:08:06.000000000 +0000
-+++ athenanew/src/map/trade.c	2005-05-21 18:26:46.750601040 +0000
-@@ -98,7 +98,7 @@
- 				if(sd->deal_item_amount[trade_i] == 0){
- 					trade_weight+=sd->inventory_data[index-2]->weight*amount;
- 					if(target_sd->weight + trade_weight > target_sd->max_weight){
--						clif_tradeitemok(sd,index,1); //fail to add item -- the player was over weighted.
-+						clif_tradeitemok(sd,index,0,1); //fail to add item -- the player was over weighted.
-                                                 amount = 0; // [MouseJstr]
- 					}else{
- 						for(c=0; c==trade_i-1;c++){ // re-deal exploit protection [Valaris]
-@@ -109,7 +109,7 @@
- 						}
- 						sd->deal_item_index[trade_i] =index;
- 						sd->deal_item_amount[trade_i]+=amount;
--						clif_tradeitemok(sd,index,0); //success to add item
-+						clif_tradeitemok(sd,index,amount,0); //success to add item
- 						clif_tradeadditem(sd,target_sd,index,amount);
- 					}
- 					break;
-@@ -143,7 +143,7 @@
- 	
- 	if((target_sd = map_id2sd(sd->trade_partner)) != NULL){
- 		sd->deal_locked=1;
--		clif_tradeitemok(sd,0,0);
-+		clif_tradeitemok(sd,0,0,0);
- 		clif_tradedeal_lock(sd,0);
- 		clif_tradedeal_lock(target_sd,1);
- 	}
diff --git a/misc/src/tmw-server.dev b/misc/src/tmw-server.dev
deleted file mode 100644
index 8098eb2..0000000
--- a/misc/src/tmw-server.dev
+++ /dev/null
@@ -1,169 +0,0 @@
-[Project]
-FileName=tmw-server.dev
-Name=tmw-server
-UnitCount=12
-Type=0
-Ver=1
-ObjFiles=
-Includes=
-Libs=
-PrivateResource=
-ResourceIncludes=
-MakeIncludes=
-Compiler=
-CppCompiler=
-Linker=
-IsCpp=1
-Icon=
-ExeOutput=
-ObjectOutput=
-OverrideOutput=0
-OverrideOutputName=
-HostApplication=
-Folders=
-CommandLine=
-UseCustomMakefile=0
-CustomMakefile=
-IncludeVersionInfo=0
-SupportXPThemes=0
-CompilerSet=0
-CompilerSettings=
-
-[Unit1]
-FileName=src\char\char.c
-CompileCpp=1
-Folder=tmw-server
-Compile=1
-Link=1
-Priority=1000
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit2]
-FileName=src\char\char.h
-CompileCpp=1
-Folder=tmw-server
-Compile=1
-Link=1
-Priority=1000
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit3]
-FileName=src\char\int_guild.c
-CompileCpp=1
-Folder=tmw-server
-Compile=1
-Link=1
-Priority=1000
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit4]
-FileName=src\char\int_guild.h
-CompileCpp=1
-Folder=tmw-server
-Compile=1
-Link=1
-Priority=1000
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit5]
-FileName=src\char\int_party.c
-CompileCpp=1
-Folder=tmw-server
-Compile=1
-Link=1
-Priority=1000
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit6]
-FileName=src\char\int_party.h
-CompileCpp=1
-Folder=tmw-server
-Compile=1
-Link=1
-Priority=1000
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit7]
-FileName=src\char\int_pet.c
-CompileCpp=1
-Folder=tmw-server
-Compile=1
-Link=1
-Priority=1000
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit8]
-FileName=src\char\int_pet.h
-CompileCpp=1
-Folder=tmw-server
-Compile=1
-Link=1
-Priority=1000
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit9]
-FileName=src\char\int_storage.c
-CompileCpp=1
-Folder=tmw-server
-Compile=1
-Link=1
-Priority=1000
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit10]
-FileName=src\char\int_storage.h
-CompileCpp=1
-Folder=tmw-server
-Compile=1
-Link=1
-Priority=1000
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit11]
-FileName=src\char\inter.c
-CompileCpp=1
-Folder=tmw-server
-Compile=1
-Link=1
-Priority=1000
-OverrideBuildCmd=0
-BuildCmd=
-
-[Unit12]
-FileName=src\char\inter.h
-CompileCpp=1
-Folder=tmw-server
-Compile=1
-Link=1
-Priority=1000
-OverrideBuildCmd=0
-BuildCmd=
-
-[VersionInfo]
-Major=0
-Minor=1
-Release=1
-Build=1
-LanguageID=1033
-CharsetID=1252
-CompanyName=
-FileVersion=
-FileDescription=Developed using the Dev-C++ IDE
-InternalName=
-LegalCopyright=
-LegalTrademarks=
-OriginalFilename=
-ProductName=
-ProductVersion=
-AutoIncBuildNr=0
-
diff --git a/misc/src/tmw-server.layout b/misc/src/tmw-server.layout
deleted file mode 100644
index 6a8b2b4..0000000
--- a/misc/src/tmw-server.layout
+++ /dev/null
@@ -1,43 +0,0 @@
-[Editor_0]
-CursorCol=23
-CursorRow=94
-TopLine=85
-LeftChar=1
-Open=0
-Top=0
-[Editors]
-Focused=-1
-Order=
-[Editor_1]
-Open=0
-Top=0
-[Editor_2]
-Open=0
-Top=0
-[Editor_3]
-Open=0
-Top=0
-[Editor_4]
-Open=0
-Top=0
-[Editor_5]
-Open=0
-Top=0
-[Editor_6]
-Open=0
-Top=0
-[Editor_7]
-Open=0
-Top=0
-[Editor_8]
-Open=0
-Top=0
-[Editor_9]
-Open=0
-Top=0
-[Editor_10]
-Open=0
-Top=0
-[Editor_11]
-Open=0
-Top=0
diff --git a/misc/src/tool/Makefile b/misc/src/tool/Makefile
deleted file mode 100644
index 8734041..0000000
--- a/misc/src/tool/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-all:
-	$(CC) -o adduser adduser.c
-
-clean:
-	rm -f adduser
-	rm -f *.exe
diff --git a/misc/src/tool/adduser.c b/misc/src/tool/adduser.c
deleted file mode 100644
index 1219540..0000000
--- a/misc/src/tool/adduser.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-	This program adds an user to account.txt
-	Don't usr it When login-sever is working.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-char *account_txt = "../save/account.txt";
-
-//-----------------------------------------------------
-// Function to suppress control characters in a string.
-//-----------------------------------------------------
-int remove_control_chars(unsigned char *str) {
-	int i;
-	int change = 0;
-
-	for(i = 0; str[i]; i++) {
-		if (str[i] < 32) {
-			str[i] = '_';
-			change = 1;
-		}
-	}
-
-	return change;
-}
-
-int main(int argc, char *argv[]) {
-
-	char username[24];
-	char password[24];
-	char sex[2];
-
-	int next_id, id;
-	char line[1024];
-
-	// Check to see if account.txt exists.
-	printf("Checking if '%s' file exists...\n", account_txt);
-	FILE *FPaccin = fopen(account_txt, "r");
-	if (FPaccin == NULL) {
-		printf("'%s' file not found!\n", account_txt);
-		printf("Run the setup wizard please.\n");
-		exit(0);
-	}
-
-	next_id = 2000000;
-	while(fgets(line, sizeof(line)-1, FPaccin)) {
-		if (line[0] == '/' && line[1] == '/') { continue; }
-		if (sscanf(line, "%d\t%%newid%%\n", &id) == 1) {
-			if (next_id < id) {
-				next_id = id;
-			}
-		} else {
-			sscanf(line,"%i%[^	]", &id);
-			if (next_id <= id) {
-				next_id = id +1;
-			}
-		}
-	}
-	close(FPaccin);
-	printf("File exists.\n");
-
-	printf("Don't create an account if the login-server is online!!!\n");
-	printf("If the login-server is online, press ctrl+C now to stop this software.\n");
-	printf("\n");
-
-	strcpy(username, "");
-	while (strlen(username) < 4 || strlen(username) > 23) {
-		printf("Enter an username (4-23 characters): ");
-		scanf("%s", &username);
-		username[23] = 0;
-		remove_control_chars(username);
-	}
-
-	strcpy(password, "");
-	while (strlen(password) < 4 || strlen(password) > 23) {
-		printf("Enter a password (4-23 characters): ");
-		scanf("%s", &password);
-		password[23] = 0;
-		remove_control_chars(password);
-	}
-
-	strcpy(sex, "");
-	while (strcmp(sex, "F") != 0 && strcmp(sex, "M") != 0) {
-		printf("Enter a gender (M for male, F for female): ");
-		scanf("%s", &sex);
-	}
-
-	FILE *FPaccout = fopen(account_txt, "r+");
-	fseek(FPaccout, 0, SEEK_END);
-	fprintf(FPaccout, "%i	%s	%s	-	%s	-\r\n", next_id, username, password, sex);
-	close(FPaccout);
-
-	printf("Account added.\n");
-}
diff --git a/misc/src/tool/backup b/misc/src/tool/backup
deleted file mode 100644
index 2b5a958..0000000
--- a/misc/src/tool/backup
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/perl
-
-##########################################################################
-# Athena�p�f�[�^�o�b�N�A�b�v�c�[��
-#
-# �@Athena�̊e��f�[�^�t�@�C��*.txt���o�b�N�A�b�v����c�[��
-#
-#-------------------------------------------------------------------------
-# �ݒ���@
-# �@���s���鎞�̃J�����g�t�H���_����̃f�[�^�ւ̃p�X�A�t�@�C���̃��X�g��
-# �@�������ݒ肵�܂��B�o�b�N�A�b�v��̃t�H���_�͎����쐬����Ȃ��̂ŁA
-# �@�����ō쐬���Ă����K�v������܂��B
-# �@�t�H���_�̍Ō�́u/�v�͏ȗ��ł��܂���B
-#
-# �@�t�H���_�͈����ł��w��ł��܂��B�၄./backup ../save/ ./backup_data/
-# �@�t�H���_�̍Ō�́u/�v�͏ȗ��ł��܂���B
-#
-# �@���s����ƃo�b�N�A�b�v��̃t�H���_�ցA�t�@�C�����Ɍ��݂̓��t�Ǝ�����
-# �@�‚��ăt�@�C�����R�s�[���܂��B
-#
-#   * tool�t�H���_����backup_data�t�H���_���쐬���A
-# �@  athena.sh�̒��Ɂu./tool/backup ./save/ ./tool/backup_data/�v
-#     �Ƃ����s��lj�����ƁAathena���N�����邽�тɃo�b�N�A�b�v�����܂�
-#
-#   ��������Ƃ��͈����Ɂu-r ���t�Ǝ����v���w�肵�܂��B
-# �@�܂����̌��Ƀt�H���_���w�肷�邱�Ƃ��o���܂�
-# �@��P�� ./backup -r 200309191607
-# �@��Q�� ./backup -r 200309191607 ../save ./backup_data/
-# �@���̗�ł�2003/09/19��16:07���Ƀo�b�N�A�b�v�����f�[�^�𕜌����Ă��܂�
-#
-# �@��������Ƃ��AAthena�f�B���N�g���ɂ���f�[�^�� *.bak �ɖ��O��ύX����
-# �@�c���Ă���̂ŁA����Ȃ��ꍇ�� rm *.bak �Ȃǂŏ����Ă��������B
-#
-##########################################################################
-
-$sdir="../save/";		#�o�b�N�A�b�v��(Athena�̃f�B���N�g��/save/)
-$tdir="./backup_data/";		#�o�b�N�A�b�v��
-
-@files=(			#�t�@�C���̃��X�g
-	"account","athena","storage","party","guild","castle","pet"
-);
-
-
-#-------------------------------�ݒ肱���܂�-----------------------------
-
-
-
-
-
-
-
-
-
-
-
-if($ARGV[0]=~/^\-r$/i || $ARGV[0]=~/\-\-(recover|restore)/i){
-	#��������
-
-	$file=$ARGV[1];
-	$sdir=$ARGV[2]||$sdir;
-	$tdir=$ARGV[3]||$tdir;
-	&restorecopy($_) foreach @files;
-	exit(0);
-}
-
-#�o�b�N�A�b�v����
-$sdir=$ARGV[0]||$sdir;
-$tdir=$ARGV[1]||$tdir;
-
-unless( -d $tdir ){
-	print "$0: \"$tdir\" : No such directory\n";
-	exit(1);
-}
-
-(undef,$min,$hour,$day,$month,$year)=localtime;
-
-$file=sprintf("%04d%02d%02d%02d%02d",
-	$year+1900, $month+1, $day, $hour, $min );
-
-&backupcopy($_) foreach @files;
-exit(0);
-
-sub backupcopy {
-	my($name)= @_;
-	system("cp $sdir$name.txt $tdir$name$file.txt");
-}
-
-sub restorecopy {
-	my($name)= @_;
-	unless( -f "$sdir$name.txt" ){
-		printf("$0: \"$sdir$name.txt\" not found!\n");
-		return 0;
-	}
-	unless( -f "$tdir$name$file.txt" ){
-		printf("$0: \"$tdir$name$file.txt\" not found!\n");
-		return 0;
-	}
-	rename "$sdir$name.txt","$sdir$name.bak";
-	system("cp $tdir$name$file.txt $sdir$name.txt");
-}
diff --git a/misc/src/tool/cgi/addaccount.cgi b/misc/src/tool/cgi/addaccount.cgi
deleted file mode 100644
index 7d1788c..0000000
--- a/misc/src/tool/cgi/addaccount.cgi
+++ /dev/null
@@ -1,204 +0,0 @@
-#!/usr/bin/perl
-
-#=========================================================================
-# addaccount.cgi  ver.1.00
-#	ladmin�����b�v�����A�A�J�E���g���쐬����CGI�B
-#	ladmin ver.1.04�ł̓�����m�F�B
-#
-# ** �ݒ���@ **
-#
-# - ����$ladmin�ϐ���ladmin�ւ̃p�X��ݒ肷�邱�ƁB
-# - UNIX�nOS�Ŏg�p����ꍇ��ladmin�Ƌ��ɉ��s�R�[�h��ϊ����邱�ƁA�܂�
-#   �t�@�C���擪�s��perl�̐������p�X�ɂ��邱�ƁB��> $ which perl
-# - �T�[�o�[�v���O������u���E�U�ɂ���Ă� $cgiuri �ɂ��̃t�@�C���ւ�
-#   ���S��URI���Z�b�g���Ȃ���΂Ȃ�Ȃ��ꍇ������B
-# - perl�Ƀp�X���ʂ��Ă��Ȃ��ꍇ�� $perl ��perl�ւ̐������p�X�ɂ��邱�ƁB
-# - ���͕��ʂ�CGI�Ɠ����ł��B�i���s����cgi-bin�t�H���_�Ȃǁj
-#
-# ** ���̑� **
-#   addaccount.cgi ���u���E�U�ŊJ���ƃT���v��HTML�i���̂܂܎g���܂��j��
-#   �J���܂��B�܂��A����cgi�̓u���E�U���瑗����Accept-Language��
-#   ja�Ŏn�܂��Ă���΃��b�Z�[�W�̈ꕔ����{��ɕϊ����܂��B
-#   (IE�Ȃ�C���^�[�l�b�g�I�v�V�����̌���ݒ�ň�ԏ�ɓ��{���u��)
-#	����ȊO�̏ꍇ�͉p��̂܂܏o�͂��܂��B
-#-------------------------------------------------------------------------
-
-my($ladmin)	= "../ladmin";			# ladmin�̃p�X(�����炭�ύX���K�v)
-
-my($cgiuri)	= "./addaccount.cgi";	# ���̃t�@�C����URI
-my($perl)	= "perl";				# perl�̃R�}���h��
-
-
-
-#--------------------------- �ݒ肱���܂� --------------------------------
-
-
-
-
-
-
-use strict;
-use CGI;
-
-my($cgi)= new CGI;
-my(%langconv)=(
-	'Athena login-server administration tool.*' => '',
-	'logged on.*' => '',
-);
-
-# ----- ���{��‹��Ȃ�ϊ��e�[�u�����Z�b�g -----
-if($ENV{'HTTP_ACCEPT_LANGUAGE'}=~/^ja/){
-	my(%tmp)=(
-		'Account \[(.+)\] is successfully created.*'
-			=> '�A�J�E���g "$1" ���쐬���܂���.',
-		'Account \[(.+)\] creation failed\. same account exists.*'
-			=> '�A�J�E���g "$1" �͊��ɑ��݂��܂�.',
-		'Illeagal charactor found in UserID.*'
-			=> 'ID�̒��ɕs���ȕ���������܂�.',
-		'Illeagal charactor found in Password.*'
-			=> 'Password�̒��ɕs���ȕ���������܂�.',
-		'input UserID 4-24 bytes.'
-			=> 'ID�͔��p4�`24�����œ��͂��Ă�������.',
-		'input Password 4-24 bytes.'
-			=> 'Password�͔��p4�`24�����œ��͂��Ă�������.',
-		'Illeagal gender.*'
-			=> '���ʂ����������ł�.',
-		'Cant connect to login server.*'
-			=> '���O�C���T�[�o�[�ɐڑ��ł��܂���.',
-		'login error.*'
-			=> '���O�C���T�[�o�[�ւ̊Ǘ��Ҍ������O�C���Ɏ��s���܂���',
-		"Can't execute ladmin.*"
-			=> 'ladmin�̎��s�Ɏ��s���܂���',
-		'UserID "(.+)" is already used.*'
-			=> 'ID "$1" �͊��Ɏg�p����Ă��܂�.',
-		'You can use UserID \"(.+)\".*'
-			=> 'ID "$1" �͎g�p�”\�ł�.',
-		
-		'account making'	=>'�A�J�E���g�쐬',
-		'\>UserID'			=>'>�h�c',
-		'\>Password'		=>'>�p�X���[�h',
-		'\>Gender'			=>'>����',
-		'\>Male'			=>'>�j��',
-		'\>Female'			=>'>����',
-		'\"Make Account\"'	=>'"�A�J�E���g�쐬"',
-		'\"Check UserID\"'	=>'"ID�̃`�F�b�N"',
-	);
-	map { $langconv{$_}=$tmp{$_}; } keys (%tmp);
-}
-
-# ----- �lj� -----
-if( $cgi->param("addaccount") ){
-	my($userid)= $cgi->param("userid");
-	my($passwd)= $cgi->param("passwd");
-	my($gender)= lc(substr($cgi->param("gender"),0,1));
-	if(length($userid)<4 || length($userid)>24){
-		HttpError("input UserID 4-24 bytes.");
-	}
-	if(length($passwd)<4 || length($passwd)>24){
-		HttpError("input Password 4-24 bytes.");
-	}
-	if($userid=~/[^0-9A-Za-z\@\_\-\']/){
-		HttpError("Illeagal charactor found in UserID.");
-	}
-	if($passwd=~/[\x00-\x1f\x80-\xff\']/){
-		HttpError("Illeagal charactor found in Password.");
-	}
-	if($gender!~/[mf]/){
-		HttpError("Gender error.");
-	}
-	open PIPE,"$perl $ladmin --add $userid $gender $passwd |"
-		or HttpError("Can't execute ladmin.");
-	my(@msg)=<PIPE>;
-	close PIPE;
-	HttpMsg(@msg);
-}
-# ----- ���݃`�F�b�N -----
-elsif( $cgi->param("check") ){
-	my($userid)= $cgi->param("userid");
-	if(length($userid)<4 || length($userid)>24){
-		HttpError("input UserID 4-24 bytes.");
-	}
-	if($userid=~/[^0-9A-Za-z\@\_\-\']/){
-		HttpError("Illeagal charactor found in UserID.");
-	}
-	open PIPE,"$perl $ladmin --search --regex \\b$userid\\b |"
-		or HttpError("Can't execute ladmin.");
-	my(@msg)=<PIPE>;
-	close PIPE;
-	if(scalar(@msg)==6 && (split /[\s\0]+/,substr($msg[4],11,24))[0] eq $userid){
-		HttpMsg("NG : UserID \"$userid\" is already used.");
-	}elsif(scalar(@msg)==5){
-		HttpMsg("OK : You can use UserID \"$userid\"");
-	}
-	HttpError("ladmin error ?\n---output---\n",@msg);
-}
-
-# ----- �t�H�[�� -----
-else{
-	print LangConv( <<"EOM" );
-Content-type: text/html\n
-<html>
- <head>
-  <title>Athena account making cgi</title>
- </head>
- <body>
-  <h1>Athena account making cgi</h1>
-  <form action="$cgiuri" method="post">
-   <table border=2>
-    <tr>
-     <th>UserID</th>
-     <td><input name="userid" size=24 maxlength=24></td>
-    </tr>
-    <tr>
-     <th>Password</th>
-     <td><input name="passwd" size=24 maxlength=24 type="password"></td>
-    </tr>
-    <tr>
-     <th>Gender</th>
-     <td>
-      <input type="radio" name="gender" value="male">Male
-      <input type="radio" name="gender" value="female">Female
-     </td>
-    </tr>
-    <tr>
-     <td colspan=2>
-      <input type="submit" name="addaccount" value="Make Account">
-      <input type="submit" name="check" value="Check UserID">
-     </td>
-    </tr>
-   </table>
-  </form>
- </body>
-</html>
-EOM
-	exit;
-}
-
-sub LangConv {
-	my(@lst)= @_;
-	my($a,$b,@out)=();
-	foreach $a(@lst){
-		foreach $b(keys %langconv){
-			$a=~s/$b/$langconv{$b}/g;
-			my($rep1)=$1;
-			$a=~s/\$1/$rep1/g;
-		}
-		push @out,$a;
-	}
-	return @out;
-}
-
-sub HttpMsg {
-	my($msg)=join("", LangConv(@_));
-	$msg=~s/\n/<br>\n/g;
-	print LangConv("Content-type: text/html\n\n"),$msg;
-	exit;
-}
-
-sub HttpError {
-	my($msg)=join("", LangConv(@_));
-	$msg=~s/\n/<br>\n/g;
-	print LangConv("Content-type: text/html\n\n"),$msg;
-	exit;
-}
-
diff --git a/misc/src/tool/checkversion b/misc/src/tool/checkversion
deleted file mode 100644
index 1351652..0000000
--- a/misc/src/tool/checkversion
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/perl -w
-
-##########################################################################
-# INFORMATION TOOL ABOUT THE SERVERS VERSION OF ATHENA
-#
-# By connection on a server, this software display the version of the
-# designed server.
-#-------------------------------------------------------------------------
-# Usages:
-#   ./checkversion IP:port
-#   ./checkversion IP port
-#   perl checkversion IP:port
-#   perl checkversion IP port
-#
-# note: default port: 6900
-#
-# When successfull, the software return the value 0.
-#
-##########################################################################
-
-#------------------------- start of configuration ------------------------
-
-$connecttimeout = 10;   # Connection Timeout (in seconds)
-
-#-------------------------- End of configuration -------------------------
-
-use IO::Socket;
-
-unless($ARGV[0]) {
-	print "USAGE: $0 server_ip:port\n";
-	exit(1);
-}
-
-$server = $ARGV[0];
-$port = $ARGV[1];
-$port = $1 if ($server =~ s/:(\d+)//);
-$port ||= 6900;
-
-# Connection to the server
-my($so,$er) = ();
-eval{
-	$so = IO::Socket::INET->new(
-		PeerAddr=> $server,
-		PeerPort=> $port,
-		Proto   => "tcp",
-		Timeout => $connecttimeout) or $er = 1;
-};
-
-if($er || $@) {
-	print "Can't not connect to server [$server:$port] !\n";
-	exit(2);
-}
-
-# Request for the server version
-print $so pack("v",30000); # 0x7530
-$so->flush();
-
-# Receiving of the answer of the server
-if (read($so,$buf,10) < 10) {
-	print "Invalid answer. It isn't an athena server or it is a too old version.\n";
-	exit(5);
-}
-
-# Sending end of connection to the server
-print $so pack("v",30002); # 0x7532
-$so->flush();
-
-# Analyse of the answer
-my($ret,$maver,$miver,$rev,$dev,$mod,$type,$mdver) = unpack("v c6 v",$buf);
-
-if ($ret != 30001) { # 0x7531
-	print "Invalid answer. It isn't an athena server or it is a too old version.\n";
-	exit(6);
-}
-
-my(@stype) = ();
-foreach $i(0..3) {
-	push @stype,(("login","char","inter","map")[$i]) if( $type & (1<<$i) );
-}
-print "  ".join("/",@stype)." server [$server:$port].\n";
-printf "  Athena version %s-%d.%d", ("stable","dev")[$dev], $maver,$miver;
-printf " revision %d",$rev if $rev;
-printf "%s%d\n",("","-mod")[$mod],$mdver;
-
-exit(0);
diff --git a/misc/src/tool/convert.c b/misc/src/tool/convert.c
deleted file mode 100644
index 16631c9..0000000
--- a/misc/src/tool/convert.c
+++ /dev/null
@@ -1,296 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-#define RETCODE	"\r\n"
-
-#define MAX_INVENTORY 100
-#define MAX_CART 100
-#define MAX_SKILL 350
-#define GLOBAL_REG_NUM 16
-
-struct item {
-	int id;
-	short nameid;
-	short amount;
-	short equip;
-	char identify;
-	char refine;
-	char attribute;
-	short card[4];
-};
-struct point{
-	char map[16];
-	short x,y;
-};
-struct skill {
-	unsigned short id,lv,flag;
-};
-struct global_reg {
-	char str[16];
-	int value;
-};
-
-struct mmo_charstatus {
-	int char_id;
-	int account_id;
-	int base_exp,job_exp,zeny;
-
-	short class;
-	short status_point,skill_point;
-	short hp,max_hp,sp,max_sp;
-	short option,karma,manner;
-	short hair,hair_color,clothes_color;
-	int party_id,guild_id,pet_id;
-
-	short weapon,shield;
-	short head_top,head_mid,head_bottom;
-
-	char name[24];
-	unsigned char base_level,job_level;
-	unsigned char str,agi,vit,int_,dex,luk,char_num,sex;
-
-	struct point last_point,save_point,memo_point[3];
-	struct item inventory[MAX_INVENTORY],cart[MAX_CART];
-	struct skill skill[MAX_SKILL];
-	int global_reg_num;
-	struct global_reg global_reg[GLOBAL_REG_NUM];
-};
-
-int mmo_char_tostr(char *str,struct mmo_charstatus *p)
-{
-  int i;
-  sprintf(str,"%d\t%d,%d\t%s\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
-	  "\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d,%d"
-	  "\t%s,%d,%d\t%s,%d,%d",
-	  p->char_id,p->account_id,p->char_num,p->name, //
-	  p->class,p->base_level,p->job_level,
-	  p->base_exp,p->job_exp,p->zeny,
-	  p->hp,p->max_hp,p->sp,p->max_sp,
-	  p->str,p->agi,p->vit,p->int_,p->dex,p->luk,
-	  p->status_point,p->skill_point,
-	  p->option,p->karma,p->manner,	//
-	  p->party_id,p->guild_id,p->pet_id,
-	  p->hair,p->hair_color,p->clothes_color,
-	  p->weapon,p->shield,p->head_top,p->head_mid,p->head_bottom,
-	  p->last_point.map,p->last_point.x,p->last_point.y, //
-	  p->save_point.map,p->save_point.x,p->save_point.y
-	  );
-  strcat(str,"\t");
-  for(i=0;i<3;i++)
-    if(p->memo_point[i].map[0]){
-      sprintf(str+strlen(str),"%s,%d,%d",p->memo_point[i].map,p->memo_point[i].x,p->memo_point[i].y);
-    }      
-  strcat(str,"\t");
-  for(i=0;i<MAX_INVENTORY;i++)
-    if(p->inventory[i].nameid){
-      sprintf(str+strlen(str),"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d ",
-	      p->inventory[i].id,p->inventory[i].nameid,p->inventory[i].amount,p->inventory[i].equip,
-	      p->inventory[i].identify,p->inventory[i].refine,p->inventory[i].attribute,
-	      p->inventory[i].card[0],p->inventory[i].card[1],p->inventory[i].card[2],p->inventory[i].card[3]);
-    }      
-  strcat(str,"\t");
-  for(i=0;i<MAX_CART;i++)
-    if(p->cart[i].nameid){
-      sprintf(str+strlen(str),"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d ",
-	      p->cart[i].id,p->cart[i].nameid,p->cart[i].amount,p->cart[i].equip,
-	      p->cart[i].identify,p->cart[i].refine,p->cart[i].attribute,
-	      p->cart[i].card[0],p->cart[i].card[1],p->cart[i].card[2],p->cart[i].card[3]);
-    }      
-  strcat(str,"\t");
-  for(i=0;i<MAX_SKILL;i++)
-    if(p->skill[i].id){
-      sprintf(str+strlen(str),"%d,%d ",p->skill[i].id,p->skill[i].lv);
-    }      
-  strcat(str,"\t");
-  for(i=0;i<p->global_reg_num;i++)
-    sprintf(str+strlen(str),"%s,%d ",p->global_reg[i].str,p->global_reg[i].value);
-  strcat(str,"\t");
-  return 0;
-}
-
-int mmo_char_fromstr(char *str,struct mmo_charstatus *p)
-{
-  int tmp_int[256];
-  int set,next,len,i;
-
-  set=sscanf(str,"%d\t%d,%d\t%[^\t]\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
-	   "\t%d,%d,%d\t%d,%d\t%d,%d,%d\t%d,%d,%d,%d,%d"
-	   "\t%[^,],%d,%d\t%[^,],%d,%d%n",
-	   &tmp_int[0],&tmp_int[1],&tmp_int[2],p->name, //
-	   &tmp_int[3],&tmp_int[4],&tmp_int[5],
-	   &tmp_int[6],&tmp_int[7],&tmp_int[8],
-	   &tmp_int[9],&tmp_int[10],&tmp_int[11],&tmp_int[12],
-	   &tmp_int[13],&tmp_int[14],&tmp_int[15],&tmp_int[16],&tmp_int[17],&tmp_int[18],
-	   &tmp_int[19],&tmp_int[20],
-	   &tmp_int[21],&tmp_int[22],&tmp_int[23], //
-	   &tmp_int[24],&tmp_int[25],
-	   &tmp_int[26],&tmp_int[27],&tmp_int[28],
-	   &tmp_int[29],&tmp_int[30],&tmp_int[31],&tmp_int[32],&tmp_int[33],
-	   p->last_point.map,&tmp_int[34],&tmp_int[35], //
-	   p->save_point.map,&tmp_int[36],&tmp_int[37],&next
-	 );
-  p->char_id=tmp_int[0];
-  p->account_id=tmp_int[1];
-  p->char_num=tmp_int[2];
-  p->class=tmp_int[3];
-  p->base_level=tmp_int[4];
-  p->job_level=tmp_int[5];
-  p->base_exp=tmp_int[6];
-  p->job_exp=tmp_int[7];
-  p->zeny=tmp_int[8];
-  p->hp=tmp_int[9];
-  p->max_hp=tmp_int[10];
-  p->sp=tmp_int[11];
-  p->max_sp=tmp_int[12];
-  p->str=tmp_int[13];
-  p->agi=tmp_int[14];
-  p->vit=tmp_int[15];
-  p->int_=tmp_int[16];
-  p->dex=tmp_int[17];
-  p->luk=tmp_int[18];
-  p->status_point=tmp_int[19];
-  p->skill_point=tmp_int[20];
-  p->option=tmp_int[21];
-  p->karma=tmp_int[22];
-  p->manner=tmp_int[23];
-  p->party_id=tmp_int[24];
-  p->guild_id=tmp_int[25];
-  p->pet_id=0;
-  p->hair=tmp_int[26];
-  p->hair_color=tmp_int[27];
-  p->clothes_color=tmp_int[28];
-  p->weapon=tmp_int[29];
-  p->shield=tmp_int[30];
-  p->head_top=tmp_int[31];
-  p->head_mid=tmp_int[32];
-  p->head_bottom=tmp_int[33];
-  p->last_point.x=tmp_int[34];
-  p->last_point.y=tmp_int[35];
-  p->save_point.x=tmp_int[36];
-  p->save_point.y=tmp_int[37];
-  if(set!=41)
-    return 0;
-  if(str[next]=='\n' || str[next]=='\r')
-    return 1;	// �V�K�f�[�^
-  next++;
-  for(i=0;str[next] && str[next]!='\t';i++){
-    set=sscanf(str+next,"%[^,],%d,%d%n",p->memo_point[i].map,&tmp_int[0],&tmp_int[1],&len);
-    if(set!=3) 
-      return 0;
-    p->memo_point[i].x=tmp_int[0];
-    p->memo_point[i].y=tmp_int[1];
-    next+=len;
-    if(str[next]==' ')
-      next++;
-  }
-  next++;
-  for(i=0;str[next] && str[next]!='\t';i++){
-    set=sscanf(str+next,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-	       &tmp_int[0],&tmp_int[1],&tmp_int[2],&tmp_int[3],
-	       &tmp_int[4],&tmp_int[5],&tmp_int[6],
-	       &tmp_int[7],&tmp_int[8],&tmp_int[9],&tmp_int[10],&len);
-    if(set!=11)
-      return 0;
-    p->inventory[i].id=tmp_int[0];
-    p->inventory[i].nameid=tmp_int[1];
-    p->inventory[i].amount=tmp_int[2];
-    p->inventory[i].equip=tmp_int[3];
-    p->inventory[i].identify=tmp_int[4];
-    p->inventory[i].refine=tmp_int[5];
-    p->inventory[i].attribute=tmp_int[6];
-    p->inventory[i].card[0]=tmp_int[7];
-    p->inventory[i].card[1]=tmp_int[8];
-    p->inventory[i].card[2]=tmp_int[9];
-    p->inventory[i].card[3]=tmp_int[10];
-    next+=len;
-    if(str[next]==' ')
-      next++;
-  }
-  next++;
-  for(i=0;str[next] && str[next]!='\t';i++){
-    set=sscanf(str+next,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-	       &tmp_int[0],&tmp_int[1],&tmp_int[2],&tmp_int[3],
-	       &tmp_int[4],&tmp_int[5],&tmp_int[6],
-	       &tmp_int[7],&tmp_int[8],&tmp_int[9],&tmp_int[10],&len);
-    if(set!=11)
-      return 0;
-    p->cart[i].id=tmp_int[0];
-    p->cart[i].nameid=tmp_int[1];
-    p->cart[i].amount=tmp_int[2];
-    p->cart[i].equip=tmp_int[3];
-    p->cart[i].identify=tmp_int[4];
-    p->cart[i].refine=tmp_int[5];
-    p->cart[i].attribute=tmp_int[6];
-    p->cart[i].card[0]=tmp_int[7];
-    p->cart[i].card[1]=tmp_int[8];
-    p->cart[i].card[2]=tmp_int[9];
-    p->cart[i].card[3]=tmp_int[10];
-    next+=len;
-    if(str[next]==' ')
-      next++;
-  }
-  next++;
-  for(i=0;str[next] && str[next]!='\t';i++){
-    set=sscanf(str+next,"%d,%d%n",
-	       &tmp_int[0],&tmp_int[1],&len);
-    if(set!=2)
-      return 0;
-    p->skill[tmp_int[0]].id=tmp_int[0];
-    p->skill[tmp_int[0]].lv=tmp_int[1];
-    next+=len;
-    if(str[next]==' ')
-      next++;
-  }
-  next++;
-  for(i=0;str[next] && str[next]!='\t' && str[next]!='\n' && str[next]!='\r';i++){ //global_reg�����ȑO��athena.txt�݊��̂��߈ꉞ'\n'�`�F�b�N
-    set=sscanf(str+next,"%[^,],%d%n",
-	       p->global_reg[i].str,&p->global_reg[i].value,&len);
-    if(set!=2)
-      return 0;
-    next+=len;
-    if(str[next]==' ')
-      next++;
-  }
-  p->global_reg_num=i;
-  return 1;
-}
-
-int mmo_char_convert(char *fname1,char *fname2)
-{
-  char line[65536];
-  int ret;
-	struct mmo_charstatus char_dat;
-  FILE *ifp,*ofp;
-
-	ifp=fopen(fname1,"r");
-	ofp=fopen(fname2,"w");
-  if(ifp==NULL) {
-  	printf("file not found %s\n",fname1);
-    return 0;
-  }
-  if(ofp==NULL) {
-  	printf("file open error %s\n",fname2);
-    return 0;
-  }
-  while(fgets(line,65535,ifp)){
-    memset(&char_dat,0,sizeof(struct mmo_charstatus));
-    ret=mmo_char_fromstr(line,&char_dat);
-    if(ret){
-	    mmo_char_tostr(line,&char_dat);
-  	  fprintf(ofp,"%s" RETCODE,line);
-    }
-  }
-  fcloseall();
-  return 0;
-}
-
-int main(int argc,char *argv[])
-{
-	if(argc < 3) {
-		printf("Usage: convert <input filename> <output filename>\n");
-		exit(0);
-	}
-	mmo_char_convert(argv[1],argv[2]);
-
-	return 0;
-}
diff --git a/misc/src/tool/getlogincount b/misc/src/tool/getlogincount
deleted file mode 100644
index 6a20992..0000000
--- a/misc/src/tool/getlogincount
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/usr/bin/perl -w
-
-##########################################################################
-# INFORMATION TOOL ABOUT THE # OF ONLINE PLAYERS ON ATHENA SERVERS
-#
-# By connection on the athena login-server, this software displays the
-# number of online players.
-#
-#-------------------------------------------------------------------------
-# Software usage:
-#   Configure the IP, the port and a valid account of the server.
-#   After, use at your choice:
-#   ./getlogincount - display the number of online players on all servers.
-#   ./getlogincount --premier or
-#   ./getlogincount --first -- display the number of online players of the
-#                              first server in the received list.
-#   ./getlogincount [servername] -- display the number of online players
-#                                   of the specified server.
-#
-# If successfull, the software return the value 0.
-#
-##########################################################################
-
-#------------------------------ CONFIGURATION ----------------------------
-
-$loginserverip = "127.0.0.1";  # IP of the login-server
-$loginserverport = 6900;       # port of the login-server
-$loginaccount = "s1";          # a valid account name
-$loginpasswd = "p1";           # the password of the valid account name
-
-$connecttimeout = 10;          # Connection timeout (in seconds)
-
-#-------------------------------------------------------------------------
-
-use IO::Socket;
-
-my($sname) = $ARGV[0];
-if (!defined($sname)) {
-	$sname = "";
-}
-
-# Connection to the login-server
-my($so,$er) = ();
-eval{
-	$so = IO::Socket::INET->new(
-		PeerAddr=> $loginserverip,
-		PeerPort=> $loginserverport,
-		Proto   => "tcp",
-		Timeout => $connecttimeout) or $er=1;
-};
-if($er || $@){
-	print "Can't not connect to the login-server [${loginserverip}:$loginserverport] !\n";
-	exit(2);
-}
-
-# Request to connect on login-server
-print $so pack("v V a24 a24 C",0x0064,9,$loginaccount,$loginpasswd,3);
-$so->flush();
-
-# Fail to connect
-if(unpack("v", &soread(\$so,2)) != 0x0069) {
-	print "Login error.\n";
-	exit(3);
-}
-
-# Get length of the received packet
-my($plen) = unpack("v",&soread(\$so,2))-4;
-
-# Suppress information of the account (we need only information about the servers)
-&soread(\$so,43);
-$plen -= 43;
-
-# Check about the number of online servers
-if ($plen < 32) {
-	printf "No server is connected to login-server.\n";
-	exit(1);
-}
-
-# Read information of the servers
-my(@slist) = ();
-for(;$plen > 0;$plen -= 32) {
-	my($name,$count) = unpack("x6 a20 V",&soread(\$so,32));
-	$name = substr($name,0,index($name,"\0"));
-	push @slist, [ $name, $count ];
-}
-
-# Display the result
-if($sname eq "--first" || $sname eq "--premier") { # If we ask only for the first server
-	printf "%-20s : %5d\n",$slist[0][0],$slist[0][1];
-} elsif ($sname eq "") { # If we ask for all servers
-	foreach $i(@slist) {
-		printf "%-20s : %5d\n",$i->[0],$i->[1];
-	}
-} else { # If we ask for a specified server (by its name)
-	my($flag) = 1;
-	foreach $i(@slist) {
-		if($i->[0] eq $sname) {
-			printf "%-20s : %5d\n",$i->[0],$i->[1];
-			$flag = 0;
-		}
-	}
-	if($flag) { # If the server doesn't exist
-		printf "The server [$sname] doesn't exist.\n";
-		exit(1);
-	}
-}
-
-# End of the software
-$so->shutdown(2);
-$so->close();
-exit(0);
-
-# Sub-function: get data from the socket
-sub soread {
-	my($so,$len) = @_;
-	my($sobuf);
-	if(read($$so,$sobuf,$len) < $len) {
-		print "Socket read error.\n";
-		exit(5);
-	}
-	return $sobuf;
-};
diff --git a/misc/src/tool/ladmin b/misc/src/tool/ladmin
deleted file mode 100644
index e3319d5..0000000
--- a/misc/src/tool/ladmin
+++ /dev/null
@@ -1,3793 +0,0 @@
-#!/usr/bin/perl
-use POSIX;
-##########################################################################
-# EAthena login-server remote administration tool
-# New ladamin by [Yor]
-##########################################################################
-#-------------------------------INSTRUCTIONS------------------------------
-# Set the 4 variables below:
-#   IP of the login server.
-#   Port where the login-server listens incoming packets.
-#   Password of administration (same of config_athena.conf).
-#   Displayed language of the sofware (if not correct, english is used).
-# IMPORTANT:
-#   Be sure that you authorize remote administration in login-server
-#   (see login_athena.conf, 'admin_state' parameter)
-#-------------------------------------------------------------------------
-my($loginserverip) = "127.0.0.1";        # IP of login-server
-my($loginserverport) = 6900;             # Port of login-server
-my($loginserveradminpassword) = "admin"; # Administration password
-my($connecttimeout) = 10;                # Timeout of connection (in seconds)
-my($passenc) = 2;                        # Encoding type of the password
-my($defaultlanguage) = "E";              # Default language (F: Fran�ais/E: English)
-                                         # (if it's not 'F', default is English)
-
-#-------------------------------------------------------------------------
-#  LIST of COMMANDs that you can type at the prompt:
-#    To use these commands you can only type only the first letters.
-#    You must type a minimum of letters (you can not type 'a',
-#      because ladmin doesn't know if it's for 'aide' or for 'add')
-#    <Example> q <= quit, li <= list, pass <= passwd, etc.
-#
-#  Note: every time you must give a account_name, you can use "" or '' (spaces can be included)
-#
-#  aide/help/?
-#    Display the description of the commands
-#  aide/help/? [command]
-#    Display the description of the specified command
-#
-#  add <account_name> <sex> <password>
-#    Create an account with the default email (a@a.com).
-#    Concerning the sex, only the first letter is used (F or M).
-#    The e-mail is set to a@a.com (default e-mail). It's like to have no e-mail.
-#    When the password is omitted, the input is done without displaying of the pressed keys.
-#    <example> add testname Male testpass
-#
-#  ban/banish yyyy/mm/dd hh:mm:ss <account name>
-#    Changes the final date of a banishment of an account.
-#    Same command of banset, except that account_name is at end
-#
-#  banadd <account_name> <modifier>
-#    Adds or substracts time from the final date of a banishment of an account.
-#    Modifier is done as follows:
-#      Adjustment value (-1, 1, +1, etc...)
-#      Modified element:
-#        a or y: year
-#        m:  month
-#        j or d: day
-#        h:  hour
-#        mn: minute
-#        s:  second
-#    <example> banadd testname +1m-2mn1s-6y
-#              this example adds 1 month and 1 second, and substracts 2 minutes and 6 years at the same time.
-#  NOTE: If you modify the final date of a non-banished account,
-#        you fix the final date to (actual time +- adjustments)
-#
-#  banset <account_name> yyyy/mm/dd [hh:mm:ss]
-#    Changes the final date of a banishment of an account.
-#    Default time: 23:59:59
-#  banset <account_name> 0
-#    Set a non-banished account (0 = unbanished).
-#
-#  block <account name>
-#    Set state 5 (You have been blocked by the GM Team) to an account.
-#    Same command of state <account_name> 5.
-#
-#  check <account_name> <password>
-#    Check the validity of a password for an account
-#    NOTE: Server will never sends back a password.
-#          It's the only method you have to know if a password is correct.
-#          The other method is to have a ('physical') access to the accounts file.
-#
-#  create <account_name> <sex> <email> <password>
-#    Like the 'add' command, but with e-mail moreover.
-#    <example> create testname Male my@mail.com testpass
-#
-#  del <account name>
-#    Remove an account.
-#    This order requires confirmation. After confirmation, the account is deleted.
-#
-#  email <account_name> <email>
-#    Modify the e-mail of an account.
-#
-#  getcount
-#    Give the number of players online on all char-servers.
-#
-#  gm <account_name> [GM_level]
-#    Modify the GM level of an account.
-#    Default value remove GM level (GM level = 0).
-#    <example> gm testname 80
-#
-#  id <account name>
-#    Give the id of an account.
-#
-#  info <account_id>
-#    Display complete information of an account.
-#
-#  kami <message>
-#    Sends a broadcast message on all map-server (in yellow).
-#  kamib <message>
-#    Sends a broadcast message on all map-server (in blue).
-#
-#  language <language>
-#    Change the language of displaying.
-#
-#  list/ls [start_id [end_id]]
-#    Display a list of accounts.
-#    'start_id', 'end_id': indicate end and start identifiers.
-#    Research by name is not possible with this command.
-#    <example> list 10 9999999
-#
-#  listBan/lsBan [start_id [end_id]]
-#    Like list/ls, but only for accounts with state or banished
-#
-#  listGM/lsGM [start_id [end_id]]
-#    Like list/ls, but only for GM accounts
-#
-#  listOK/lsOK [start_id [end_id]]
-#    Like list/ls, but only for accounts without state and not banished
-#
-#  memo <account_name> <memo>
-#    Modify the memo of an account.
-#    'memo': it can have until 253 characters (with spaces or not).
-#
-#  name <account_id>
-#    Give the name of an account.
-#
-#  passwd <account_name> <new_password>
-#    Change the password of an account.
-#    When new password is omitted, the input is done without displaying of the pressed keys.
-#
-#  quit/end/exit
-#    End of the program of administration
-#
-#  reloadGM
-#    Reload GM configuration file
-#
-#  search <expression>
-#    Seek accounts.
-#    Displays the accounts whose names correspond.
-#  search -r/-e/--expr/--regex <expression>
-#    Seek accounts by regular expression.
-#    Displays the accounts whose names correspond.
-#
-#  sex <account_name> <sex>
-#    Modify the sex of an account.
-#    <example> sex testname Male
-#
-#  state <account_name> <new_state> <error_message_#7>
-#    Change the state of an account.
-#    'new_state': state is the state of the packet 0x006a + 1. The possibilities are:
-#                 0 = Account ok            6 = Your Game's EXE file is not the latest version
-#                 1 = Unregistered ID       7 = You are Prohibited to log in until %s
-#                 2 = Incorrect Password    8 = Server is jammed due to over populated
-#                 3 = This ID is expired    9 = No MSG
-#                 4 = Rejected from Server  100 = This ID has been totally erased
-#                 5 = You have been blocked by the GM Team
-#                 all other values are 'No MSG', then use state 9 please.
-#    'error_message_#7': message of the code error 6 = Your are Prohibited to log in until %s (packet 0x006a)
-#
-#  timeadd <account_name> <modifier>
-#    Adds or substracts time from the validity limit of an account.
-#    Modifier is done as follows:
-#      Adjustment value (-1, 1, +1, etc...)
-#      Modified element:
-#        a or y: year
-#        m:  month
-#        j or d: day
-#        h:  hour
-#        mn: minute
-#        s:  second
-#    <example> timeadd testname +1m-2mn1s-6y
-#              this example adds 1 month and 1 second, and substracts 2 minutes and 6 years at the same time.
-#  NOTE: You can not modify a unlimited validity limit.
-#        If you want modify it, you want probably create a limited validity limit.
-#        So, at first, you must set the validity limit to a date/time.
-#
-#  timeset <account_name> yyyy/mm/dd [hh:mm:ss]
-#    Changes the validity limit of an account.
-#    Default time: 23:59:59
-#  timeset <account_name> 0
-#    Gives an unlimited validity limit (0 = unlimited).
-#
-#  unban/unbanish <account name>
-#    Unban an account.
-#    Same command of banset 0.
-#
-#  unblock <account name>
-#    Set state 0 (Account ok) to an account.
-#    Same command of state <account_name> 0.
-#
-#  version
-#    Display the version of the login-server.
-#
-#  who <account name>
-#    Displays complete information of an account.
-#
-#-------------------------------------------------------------------------
-# Possibilities to execute ladmin in command line by usage of the software with a parameter:
-# ./ladmin --mode param1 ...
-#
-#  --makesymlink                                    -- Create the symbolic links for a use in shell
-#  --add <account_name> <sex> <password>            -- Create an account with the default email (or -a)
-#  --ban yyyy/mm/dd hh:mm:ss <account_name>         -- Change the final date of a banishment of an account (or -b)
-#  --banadd <account_name> <modifier>               -- Add or substract time from the final date of a banishment of an account (or - ba)
-#  --banset <account_name> yyyy/mm/dd [hh:mm:ss]    -- Change the final date of a banishment of an account (or -bs)
-#  --banset <account_name> 0                        -- Unbanish an account (or -bs)
-#  --block <account_name>                           -- Set state 5 to an account (or -bl)
-#  --check <account_name> <password>                -- Check the validity of a password for an account (or -check)
-#  --create <account_name> <sex> <email> <password> -- Create an account with email (or -c)
-#  --del <account_name>                             -- Remove an account (or -d)
-#  --email <account_name> <email>                   -- Modify an email of an account (or -e)
-#  --getcount                                       -- Give the number of players online on all char-servers (or -g)
-#  --gm <account_name> <GM_level>                   -- Change the GM level of an account (or -gm)
-#  --id <account_name>                              -- Give the id of an account (or -i)
-#  --info <account_id>                              -- Display complete information of an account (or -info)
-#  --kami <message>                                 -- Sends a broadcast message on all map-server (in yellow).
-#  --kamib <message>                                -- Sends a broadcast message on all map-server (in blue).
-#  --language <language>                            -- Change the language of displaying (-lang).
-#  --list [First_id [Last_id]]                      -- Display a list of accounts (or -l)
-#  --listBan [start_id [end_id]]                    -- Display a list of accounts with state or banished (or -lBan)
-#  --listGM [First_id [Last_id]]                    -- Display a list of GM accounts (or -lGM)
-#  --listOK [start_id [end_id]]                     -- Display a list of accounts without state and not banished (or -lOK)
-#  --memo <account_name> <memo>                     -- Modify the memo of an account (or -e)
-#  --name <account_id>                              -- Give the name of an account (or -n)
-#  --passwd <account_name> <new_password>           -- Change the password of an account (or -p)
-#  --reloadGM                                       -- Reload GM configuration file (or -r)
-#  --search <expression>                            -- Seek accounts (or -s)
-#  --search -e/-r/--expr/--regex <expression>       -- Seek accounts by REGEX (or -s)
-#  --sex <account_name> <sex>                       -- Change the sex of an account (or -sex)
-#  --state <account_name> <new_state> <error_message_#7> -- Change the state of an account (or -t)
-#  --timeadd <account_name> <modifier>              -- Add or substract time from the validity limit of an account (or - ta)
-#  --timeset <account_name> yyyy/mm/dd [hh:mm:ss]   -- Change the validify limit of an account (or -ts)
-#  --timeset <account_name> 0                       -- Give a unlimited validity limit (or -ts)
-#  --unban/unbanish <account_name>                  -- Unban an account (or -uba)
-#  --unblock <account_name>                         -- Set state 0 to an account (or -ubl)
-#  --version                                        -- Display the version of the login-server (or -v)
-#  --who <account_name>                             -- Display complete information of an account (or -w)
-#
-#  <example> ./ladmin --addaccount testname Male testpass
-#
-#-------------------------------------------------------------------------
-# Possibilities to execute ladmin with symbolic links in Shell
-# To create the symbolic links, execute ladmin with the '-- makesymlink' option.
-#
-#  addaccount <account_name> <sex> <password>            -- Create an account with the default email
-#  banaccount yyyy/mm/dd hh:mm:ss <account_name>         -- Change the final date of a banishment of an account
-#  banaddaccount <account_name> <modifier>               -- Add or substract time from the final date of a banishment of an account
-#  bansetaccount <account_name> yyyy/mm/dd [hh:mm:ss]    -- Change the final date of a banishment of an account
-#  bansetaccount <account_name> 0                        -- Unbanish an account
-#  blockaccount <account_name>                           -- Set state 5 (blocked by the GM Team) to an account
-#  checkaccount <account_name> <password>                -- Check the validity of a password for an account
-#  createaccount <account_name> <sex> <email> <password> -- Create an account with email
-#  delaccount <account_name>                             -- Remove an account
-#  emailaccount <account_name> <email>                   -- Modify an email of an account
-#  getcount                                              -- Give the number of players online on all char-servers
-#  gmaccount <account_name> <GM_level>                   -- Change the GM level of an account
-#  idaccount <account_name>                              -- Give the id of an account
-#  infoaccount <account_id>                              -- Display complete information of an account
-#  kami <message>                                        -- Sends a broadcast message on all map-server (in yellow).
-#  kamib <message>                                       -- Sends a broadcast message on all map-server (in blue).
-#  ladminlanguage <language>                             -- Change the language of displaying.
-#  listaccount [First_id [Last_id]]                      -- Display a list of accounts
-#  listBanaccount [start_id [end_id]]                    -- Display a list of accounts with state or banished
-#  listGMaccount [First_id [Last_id]]                    -- Display a list of GM accounts
-#  listOKaccount [start_id [end_id]]                     -- Display a list of accounts without state and not banished
-#  loginserverversion                                    -- Display the version of the login-server
-#  memoaccount <account_name> <memo>                     -- Modify the memo of an account
-#  nameaccount <account_id>                              -- Give the name of an account
-#  passwdaccount <account_name> <new_password>           -- Change the password of an account
-#  reloadGM                                              -- Reload GM configuration file
-#  searchaccount <expression>                            -- Seek accounts
-#  searchaccount -e/-r/--expr/--regex <expression>       -- Seek accounts by REGEX
-#  sexaccount <account_name> <sex>                       -- Change the sex of an account (or -sex)
-#  stateaccount <account_name> <new_state> <error_message_#7> -- Change the state of an account
-#  timeaddaccount <account_name> <modifier>              -- Add or substract time from the validity limit of an account
-#  timesetaccount <account_name> yyyy/mm/dd [hh:mm:ss]   -- Change the validify limit of an account
-#  timesetaccount <account_name> 0                       -- Give a unlimited validity limit
-#  unbanaccount <account_name>                           -- Unban an account
-#  unblockaccount <account_name>                         -- Set state 0 (Account ok) to an account
-#  whoaccount <account_name>                             -- Display complete information of an account
-#  <exemple> ./addaccount testname Male testpass
-#
-#-------------------------------------------------------------------------
-# About the encoding:
-#
-#   The Digest::MD5 module is necessary to use the encrypted password system.
-#   When the software cannot found the Digest::MD5 module,
-#     encoding is automatically disabled ($passenc=0), which allows
-#     to use this program in any cases.
-#
-#-------------------------------------------------------------------------
-# How to use ladmin with UNIX:
-#
-# You excecute ladmin as a standard command.
-#  <Example of preparation to have an access to ladmin>
-#    $ mv ladmin ladmin_org
-#    $ nkf -eLu ladmin_org > ladmin
-#    $ chmod 700 ladmin
-#  <Example to start directly ladmin>
-#    $ perl ladmin
-#
-##########################################################################
-
-
-use strict;
-use IO::Socket;
-use Term::ReadLine;
-eval { use POSIX qw(:termios_h); };
-eval { use Digest::MD5 qw(md5); } if $passenc;
-$passenc = 0 if($@);
-
-my($ver) = "1.00";
-
-# Start of termios
-my($termios, $orgterml, $termlecho, $termlnoecho) = ();
-eval{
-	$termios = POSIX::Termios->new();
-	$termios->getattr(fileno(STDIN));
-	$orgterml = $termios->getlflag();
-	$termlecho = ECHO | ECHOK | ICANON;
-	$termlnoecho = $orgterml & ~$termlecho;
-};
-
-# Modification of termios for the displaying of passwords (no displays for pressed keys)
-sub cbreak() {
-	if ($termios) {
-		$termios->setlflag($termlnoecho);
-		$termios->setcc(VTIME, 1);
-		$termios->setattr(fileno(STDIN), TCSANOW);
-	}
-}
-# Modification of termios to return at the normal displaying (after input of the passwords)
-sub cooked() {
-	if ($termios) {
-		$termios->setlflag($orgterml);
-		$termios->setcc(VTIME,0);
-		$termios->setattr(fileno(STDIN),TCSANOW);
-	}
-}
-END{ cooked() }
-
-if ($defaultlanguage eq "F") {
-	print "Outil d'administration � distance de eAthena V.$ver\n";
-} else {
-	print "EAthena login-server administration tool V.$ver\n";
-}
-
-# Creation of the symbolic links for call of the program in line command of the shell
-if ($ARGV[0] eq "--makesymlink") {
-	symlink $0, "loginserverversion";
-	symlink $0, "addaccount";
-	symlink $0, "banaccount";
-	symlink $0, "banaddaccount";
-	symlink $0, "bansetaccount";
-	symlink $0, "blockaccount";
-	symlink $0, "checkaccount";
-	symlink $0, "createaccount";
-	symlink $0, "delaccount";
-	symlink $0, "emailaccount";
-	symlink $0, "getcount";
-	symlink $0, "gmaccount";
-	symlink $0, "idaccount";
-	symlink $0, "infoaccount";
-	symlink $0, "kami";
-	symlink $0, "kamib";
-	symlink $0, "ladminlanguage";
-	symlink $0, "listaccount";
-	symlink $0, "listBanaccount";
-	symlink $0, "listGMaccount";
-	symlink $0, "listOKaccount";
-	symlink $0, "memoaccount";
-	symlink $0, "nameaccount";
-	symlink $0, "passwdaccount";
-	symlink $0, "reloadGM";
-	symlink $0, "searchaccount";
-	symlink $0, "sexaccount";
-	symlink $0, "stateaccount";
-	symlink $0, "timeaddaccount";
-	symlink $0, "timesetaccount";
-	symlink $0, "unbanaccount";
-	symlink $0, "unblockaccount";
-	symlink $0, "whoaccount";
-	if ($defaultlanguage eq "F") {
-		print "Liens symbliques cr��s.\n";
-	} else {
-		print "Symbolic links created.\n";
-	}
-	exit(0);
-}
-
-# Connection to the login-server
-my($so,$er) = ();
-eval{
-	$so = IO::Socket::INET->new(
-		PeerAddr=> $loginserverip,
-		PeerPort=> $loginserverport,
-#		Proto   => "tcp",
-		Timeout => $connecttimeout) or $er = 1;
-};
-if ($er || $@) {
-	if ($defaultlanguage eq "F") {
-		print "\nImpossible de se connecter au serveur de login [${loginserverip}:$loginserverport] !\n";
-	} else {
-		print "\nImpossible to have a connection with the login-server [${loginserverip}:$loginserverport] !\n";
-	}
-	print "$!\n";	# Displaying of the error
-	exit(2);
-}
-
-# Sending the administration password
-if ($passenc == 0) {
-	print $so pack("v2a24",0x7918,0,$loginserveradminpassword);
-	$so->flush();
-} else {
-	print $so pack("v",0x791a);
-	$so->flush();
-	my($buf) = readso(4);
-	if (unpack("v",$buf) != 0x01dc) {
-		if ($defaultlanguage eq "F") {
-			print "Erreur au login (�chec de la cr�ation de la clef md5).\n";
-		} else {
-			print "Error at login (failure of the md5 key creation).\n";
-		}
-	}
-	$buf = readso(unpack("x2v",$buf)-4);
-	my($md5bin) = md5(($passenc == 1) ? $buf.$loginserveradminpassword : $loginserveradminpassword.$buf);
-	print $so pack("v2a16",0x7918,$passenc,$md5bin);
-	$so->flush();
-}
-
-# Waiting of the server reply
-my($buf) = readso(3);
-
-if (unpack("v",$buf) != 0x7919 || unpack("x2c",$buf) != 0) {
-	if ($defaultlanguage eq "F") {
-		print "Erreur de login:\n";
-		print " - mot de passe incorrect,\n";
-		print " - syst�me d'administration non activ�, ou\n";
-		print " - IP non autoris�e.\n";
-	} else {
-		print "Error at login:\n";
-		print " - incorrect password,\n";
-		print " - administration system not activated, or\n";
-		print " - unauthorised IP.\n";
-	}
-	quit();
-	exit(4);
-}
-
-if ($defaultlanguage eq "F") {
-	print "Connexion �tablie.\n";
-} else {
-	print "Established connection.\n";
-}
-
-#-------------------------------------------------------------------------
-# Here are checked the command lines with arguments and symbolic links (no prompt)
-
-if ($0 =~ /addaccount$/ ||
-    (($ARGV[0] eq "-a" || $ARGV[0] eq "--add") && ((shift @ARGV), 1))) {
-	my($r) = addaccount($ARGV[0], $ARGV[1], $ARGV[2]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /banaccount$/ || $0 =~ /banishaccount$/ ||
-         (($ARGV[0] eq "-b" || $ARGV[0] eq "--ban" || $ARGV[0] eq "--banish") && ((shift @ARGV), 1))) {
-	my($r) = bansetaccount($ARGV[1], $ARGV[2], $ARGV[0]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /banaddaccount$/ ||
-         (($ARGV[0] eq "-ba" || $ARGV[0] eq "--banadd") && ((shift @ARGV), 1))) {
-	my($r) = banaddaccount($ARGV[0], $ARGV[1]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /bansetaccount$/ ||
-         (($ARGV[0] eq "-bs" || $ARGV[0] eq "--banset") && ((shift @ARGV), 1))) {
-	my($r) = bansetaccount($ARGV[0], $ARGV[1], $ARGV[2]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /blockaccount$/ ||
-         (($ARGV[0] eq "-bl" || $ARGV[0] eq "--block") && ((shift @ARGV), 1))) {
-	my($r) = changestate($ARGV[0], 5, "");
-	quit();
-	exit($r);
-} elsif ($0 =~ /checkaccount$/ ||
-         (($ARGV[0] eq "-check" || $ARGV[0] eq "--check") && ((shift @ARGV), 1))) {
-	my($r) = checkaccount($ARGV[0], $ARGV[1]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /createaccount$/ ||
-         (($ARGV[0] eq "-c" || $ARGV[0] eq "--create") && ((shift @ARGV), 1))) {
-	my($r) = createaccount($ARGV[0], $ARGV[1], $ARGV[2], $ARGV[3]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /delaccount$/ ||
-         (($ARGV[0] eq "-d" || $ARGV[0] eq "--del") && ((shift @ARGV), 1))) {
-	my($r) = delaccount($ARGV[0]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /emailaccount$/ ||
-         (($ARGV[0] eq "-e" || $ARGV[0] eq "--email") && ((shift @ARGV), 1))) {
-	my($r) = changeemail($ARGV[0], $ARGV[1]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /getcount$/ ||
-         (($ARGV[0] eq "-g" || $ARGV[0] eq "--getcount") && ((shift @ARGV), 1))) {
-	my($r) = getlogincount();
-	quit();
-	exit($r);
-} elsif ($0 =~ /gmaccount$/ ||
-         (($ARGV[0] eq "-gm" || $ARGV[0] eq "--gm") && ((shift @ARGV), 1))) {
-	my($r) = changegmlevel($ARGV[0], $ARGV[1]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /id$/ ||
-         (($ARGV[0] eq "-i" || $ARGV[0] eq "--id") && ((shift @ARGV), 1))) {
-	my($r) = idaccount($ARGV[0]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /infoaccount$/ ||
-         (($ARGV[0] eq "-info" || $ARGV[0] eq "--info") && ((shift @ARGV), 1))) {
-	my($r) = infoaccount($ARGV[0]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /kami$/ ||
-         (($ARGV[0] eq "-kami" || $ARGV[0] eq "--kami") && ((shift @ARGV), 1))) {
-	my($r) = sendbroadcast(0, $ARGV[0]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /kamib$/ ||
-         (($ARGV[0] eq "-kamib" || $ARGV[0] eq "--kamib") && ((shift @ARGV), 1))) {
-	my($r) = sendbroadcast(0x10, $ARGV[0]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /ladminlanguage$/ ||
-         (($ARGV[0] eq "-lang" || $ARGV[0] eq "--language") && ((shift @ARGV), 1))) {
-	my($r) = changelanguage($ARGV[0]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /listaccount$/ ||
-         (($ARGV[0] eq "-l" || $ARGV[0] eq "--list") && ((shift @ARGV), 1))) {
-	my($r) = listaccount(int($ARGV[0]), int($ARGV[1]), 0); # 0: to list all
-	quit();
-	exit($r);
-} elsif ($0 =~ /listBanaccount$/ ||
-         (($ARGV[0] eq "-lBan" || $ARGV[0] eq "--listBan") && ((shift @ARGV), 1))) {
-	my($r) = listaccount(int($ARGV[0]), int($ARGV[1]), 3); # 3: to list only accounts with state or banished
-	quit();
-	exit($r);
-} elsif ($0 =~ /listGMaccount$/ ||
-         (($ARGV[0] eq "-lGM" || $ARGV[0] eq "--listGM") && ((shift @ARGV), 1))) {
-	my($r) = listaccount(int($ARGV[0]), int($ARGV[1]), 1); # 1: to list only GM
-	quit();
-	exit($r);
-} elsif ($0 =~ /listOKaccount$/ ||
-         (($ARGV[0] eq "-lOK" || $ARGV[0] eq "--listOK") && ((shift @ARGV), 1))) {
-	my($r) = listaccount(int($ARGV[0]), int($ARGV[1]), 4); # 4: to list only accounts without state and not banished
-	quit();
-	exit($r);
-} elsif ($0 =~ /loginserverversion$/ ||
-         (($ARGV[0] eq "-v" || $ARGV[0] eq "--version") && ((shift @ARGV), 1))) {
-	my($r) = checkloginversion();
-	quit();
-	exit($r);
-} elsif ($0 =~ /memoaccount$/ ||
-         (($ARGV[0] eq "-m" || $ARGV[0] eq "--memo") && ((shift @ARGV), 1))) {
-	my($r) = changememo($ARGV[0], $ARGV[1]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /nameaccount$/ ||
-         (($ARGV[0] eq "-n" || $ARGV[0] eq "--name") && ((shift @ARGV), 1))) {
-	my($r) = nameaccount(int($ARGV[0]));
-	quit();
-	exit($r);
-} elsif ($0 =~ /passwdaccount$/ ||
-         (($ARGV[0] eq "-p" || $ARGV[0] eq "--passwd") && ((shift @ARGV), 1))) {
-	my($r) = changepasswd($ARGV[0], $ARGV[1]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /reloadGM$/ ||
-         (($ARGV[0] eq "-r" || $ARGV[0] eq "--reloadGM") && ((shift @ARGV), 1))) {
-	my($r) = reloadGM();
-	quit();
-	exit($r);
-} elsif ($0 =~ /searchaccount$/ ||
-         (($ARGV[0] eq "-s" || $ARGV[0] eq "--search") && ((shift @ARGV), 1))) {
-	my($r) = searchaccount($ARGV[0], $ARGV[1]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /sexaccount$/ ||
-         (($ARGV[0] eq "-sex" || $ARGV[0] eq "--sex") && ((shift @ARGV), 1))) {
-	my($r) = changesex($ARGV[0], $ARGV[1]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /stateaccount$/ ||
-         (($ARGV[0] eq "-t" || $ARGV[0] eq "--state") && ((shift @ARGV), 1))) {
-	my($r) = changestate($ARGV[0], $ARGV[1], $ARGV[2]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /timeaddaccount$/ ||
-         (($ARGV[0] eq "-ta" || $ARGV[0] eq "--timeadd") && ((shift @ARGV), 1))) {
-	my($r) = timeaddaccount($ARGV[0], $ARGV[1]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /timesetaccount$/ ||
-         (($ARGV[0] eq "-ts" || $ARGV[0] eq "--timeset") && ((shift @ARGV), 1))) {
-	my($r) = timesetaccount($ARGV[0], $ARGV[1], $ARGV[2]);
-	quit();
-	exit($r);
-} elsif ($0 =~ /unbanaccount$/ || $0 =~ /unbanishaccount$/ ||
-         (($ARGV[0] eq "-uba" || $ARGV[0] eq "--unban" || $ARGV[0] eq "--unbanish") && ((shift @ARGV), 1))) {
-	my($r) = bansetaccount($ARGV[0], 0, "");
-	quit();
-	exit($r);
-} elsif ($0 =~ /unblockaccount$/ ||
-         (($ARGV[0] eq "-ubl" || $ARGV[0] eq "--unblock") && ((shift @ARGV), 1))) {
-	my($r) = changestate($ARGV[0], 0, "");
-	quit();
-	exit($r);
-} elsif ($0 =~ /whoaccount$/ ||
-         (($ARGV[0] eq "-w" || $ARGV[0] eq "--who") && ((shift @ARGV), 1))) {
-	my($r) = whoaccount($ARGV[0]);
-	quit();
-	exit($r);
-}
-
-#-------------------------------------------------------------------------
-if ($defaultlanguage eq "F") {
-	print "Lecture de la version du serveur de login...\n";
-} else {
-	print "Reading of the version of the login-server...\n";
-}
-checkloginversion();
-
-# Set the prompt line
-my($term) = new Term::ReadLine "ladmin";
-
-# Here begin the infinite loop to read prompts
-while(1) {
-	# Displaying of the prompt
-	print "\n";
-	if ($defaultlanguage eq "F") {
-		printf "\033[32mPour afficher les commandes, tapez 'Entr�e'.\033[0m\n";
-	} else {
-		printf "\033[32mTo list the commands, type 'enter'.\033[0m\n";
-	}
-	my($cmd) = $term->readline("ladmin> ");
-	# split and recovery of the input
-	chomp $cmd; # remove cariage return
-	$cmd =~ s/\x1b\[\d*\w//g; # remove (esc)[(number)(1alpha) = screen control sequence
-	$cmd =~ s/[\x00-\x1f]//g; # remove control char
-	my($command, $parameters) = split /\s+/,$cmd,2; # extract command and parameters
-	$command = lc($command); # command in lowercase
-	my(@paramlist) = split /\s+/,$parameters; # get list of parameters
-
-	if ($command eq "?" || $command eq "") {
-		$command = "aide" if ($defaultlanguage eq "F");
-		$command = "help" if ($defaultlanguage ne "F");
-	}
-
-	# Analyse of the command
-	eval {
-# help
-		if ("aide" =~ /^\Q$command/ && $command ne "a") { # check 1 letter command: 'aide' or 'add'?
-			displayhelp("aide", $paramlist[0]);
-		} elsif ("help" =~ /^\Q$command/) {
-			displayhelp("help", $paramlist[0]);
-
-# general commands
-		} elsif ("add" =~ /^\Q$command/ && $command ne "a") { # check 1 letter command: 'aide' or 'add'?
-			if (@paramlist = ($parameters =~ m/^"(.*)"\s+(\S+)\s+(.*)/)) {
-				addaccount($paramlist[0], $paramlist[1], $paramlist[2]); # <account_name> <sex> <password>
-			} elsif (@paramlist = ($parameters =~ m/^"(.*)"\s+(\S+)/)) {
-				addaccount($paramlist[0], $paramlist[1], ""); # <account_name> <sex> <password>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(\S+)\s+(.*)/)) {
-				addaccount($paramlist[0], $paramlist[1], $paramlist[2]); # <account_name> <sex> <password>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(\S+)/)) {
-				addaccount($paramlist[0], $paramlist[1], ""); # <account_name> <sex> <password>
-			} else {
-				@paramlist = split /\s+/,$parameters;
-				addaccount($paramlist[0], $paramlist[1], $paramlist[2]); # <account_name> <sex> <password>
-			}
-
-		} elsif ($command eq "ban" || ("banish" =~ /^\Q$command/ && length($command) >= 4)) {
-			if (@paramlist = ($parameters =~ m/^(\S+)\s+(\S+)\s+"(.*)"/)) { # yyyy/mm/dd hh:mm:ss <account_name>
-				bansetaccount($paramlist[2], $paramlist[0], $paramlist[1]); # <account_name> yyyy/mm/dd [hh:mm:ss]
-			} elsif (@paramlist = ($parameters =~ m/^(\S+)\s+(\S+)\s+'(.*)'/)) { # yyyy/mm/dd hh:mm:ss <account_name>
-				bansetaccount($paramlist[2], $paramlist[0], $paramlist[1]); # <account_name> yyyy/mm/dd [hh:mm:ss]
-			} else {
-				@paramlist = split /\s+/,$parameters,3; # yyyy/mm/dd hh:mm:ss <account_name>
-				bansetaccount($paramlist[2], $paramlist[0], $paramlist[1]); # <account_name> yyyy/mm/dd [hh:mm:ss]
-			}
-
-		} elsif (("banadd" =~ /^\Q$command/ || $command eq "ba") && $command ne "b") { # check 1 letter command: 'ba' or 'bs'?
-			if (@paramlist = ($parameters =~ m/^"(.*)"\s+(\S+)/)) {
-				banaddaccount($paramlist[0], $paramlist[1]); # <account_name> <modifier>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(\S+)/)) {
-				banaddaccount($paramlist[0], $paramlist[1]); # <account_name> <modifier>
-			} else {
-				@paramlist = split /\s+/,$parameters;
-				banaddaccount($paramlist[0], $paramlist[1]); # <account_name> <modifier>
-			}
-
-		} elsif (("banset" =~ /^\Q$command/ || $command eq "bs") && $command ne "b") { # check 1 letter command: 'ba' or 'bs'?
-			if (@paramlist = ($parameters =~ m/^"(.*)"\s+(\S+)\s+(\S+)/)) {
-				bansetaccount($paramlist[0], $paramlist[1], $paramlist[2]); # <account_name> yyyy/mm/dd [hh:mm:ss]
-			} elsif (@paramlist = ($parameters =~ m/^"(.*)"\s+(\S+)/)) {
-				bansetaccount($paramlist[0], $paramlist[1], "23:59:59"); # <account_name> yyyy/mm/dd [hh:mm:ss]
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(\S+)\s+(\S+)/)) {
-				bansetaccount($paramlist[0], $paramlist[1], $paramlist[2]); # <account_name> yyyy/mm/dd [hh:mm:ss]
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(\S+)/)) {
-				bansetaccount($paramlist[0], $paramlist[1], "23:59:59"); # <account_name> yyyy/mm/dd [hh:mm:ss]
-			} else {
-				@paramlist = split /\s+/,$parameters;
-				bansetaccount($paramlist[0], $paramlist[1], $paramlist[2]); # <account_name> yyyy/mm/dd [hh:mm:ss]
-			}
-
-		} elsif ("block" =~ /^\Q$command/ && length($command) >= 2) {
-			if (@paramlist = ($parameters =~ m/^"(.*)"/)) {
-				changestate($paramlist[0], 5, ""); # <account_name> <new_state> <error_message_#7>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'/)) {
-				changestate($paramlist[0], 5, ""); # <account_name> <new_state> <error_message_#7>
-			} else {
-				@paramlist = split /\s+/,$parameters,1;
-				changestate($paramlist[0], 5, ""); # <account_name> <new_state> <error_message_#7>
-			}
-
-		} elsif ("check" =~ /^\Q$command/ && $command ne "c") { # check 1 letter command: 'check' or 'create'?
-			if (@paramlist = ($parameters =~ m/^"(.*)"\s+(.*)/)) {
-				checkaccount($paramlist[0], $paramlist[1]); # <account_name> <password>
-			} elsif (@paramlist = ($parameters =~ m/^"(.*)"/)) {
-				checkaccount($paramlist[0], ""); # <account_name> <password>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(.*)/)) {
-				checkaccount($paramlist[0], $paramlist[1]); # <account_name> <password>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'/)) {
-				checkaccount($paramlist[0], ""); # <account_name> <password>
-			} else {
-				@paramlist = split /\s+/,$parameters;
-				checkaccount($paramlist[0], $paramlist[1]); # <account_name> <password>
-			}
-
-		} elsif ("create" =~ /^\Q$command/ && $command ne "c") { # check 1 letter command: 'check' or 'create'?
-			if (@paramlist = ($parameters =~ m/^"(.*)"\s+(\S+)\s+(\S+)\s+(.*)/)) {
-				createaccount($paramlist[0], $paramlist[1], $paramlist[2], $paramlist[3]); # <account_name> <sex> <email> <password>
-			} elsif (@paramlist = ($parameters =~ m/^"(.*)"\s+(\S+)\s+(\S+)/)) {
-				createaccount($paramlist[0], $paramlist[1], $paramlist[2], ""); # <account_name> <sex> <email> <password>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(\S+)\s+(\S+)\s+(.*)/)) {
-				createaccount($paramlist[0], $paramlist[1], $paramlist[2], $paramlist[3]); # <account_name> <sex> <email> <password>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(\S+)\s+(\S+)/)) {
-				createaccount($paramlist[0], $paramlist[1], $paramlist[2], ""); # <account_name> <sex> <email> <password>
-			} else {
-				@paramlist = split /\s+/,$parameters;
-				createaccount($paramlist[0], $paramlist[1], $paramlist[2], $paramlist[3]); # <account_name> <sex> <email> <password>
-			}
-
-		} elsif ("del" =~ /^\Q$command/ || "delete" =~ /^\Q$command/) {
-			if (@paramlist = ($parameters =~ m/^"(.*)"/)) {
-				delaccount($paramlist[0]); # <account_name>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'/)) {
-				delaccount($paramlist[0]); # <account_name>
-			} else {
-				@paramlist = split /\s+/,$parameters,1;
-				delaccount($paramlist[0]); # <account_name>
-			}
-
-		} elsif ("email" =~ /^\Q$command/ && $command ne "e") { # check 1 letter command: 'email', 'end' or 'exit'?
-			if (@paramlist = ($parameters =~ m/^"(.*)"\s+(\S+)/)) {
-				changeemail($paramlist[0], $paramlist[1]); # <account_name> <email>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(\S+)/)) {
-				changeemail($paramlist[0], $paramlist[1]); # <account_name> <email>
-			} else {
-				@paramlist = split /\s+/,$parameters;
-				changeemail($paramlist[0], $paramlist[1]); # <account_name> <email>
-			}
-
-		} elsif ("getcount" =~ /^\Q$command/ && $command ne "g") { # check 1 letter command: 'getcount' or 'gm'?
-			getlogincount();
-
-		} elsif ("gm" =~ /^\Q$command/ && $command ne "g") { # check 1 letter command: 'getcount' or 'gm'?
-			if (@paramlist = ($parameters =~ m/^"(.*)"\s+(\S+)/)) {
-				changegmlevel($paramlist[0], int($paramlist[1])); # <account_name> <GM_level>
-			} elsif (@paramlist = ($parameters =~ m/^"(.*)"/)) {
-				changegmlevel($paramlist[0], 0); # <account_name> <GM_level>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(\S+)/)) {
-				changegmlevel($paramlist[0], int($paramlist[1])); # <account_name> <GM_level>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'/)) {
-				changegmlevel($paramlist[0], 0); # <account_name> <GM_level>
-			} else {
-				@paramlist = split /\s+/,$parameters;
-				changegmlevel($paramlist[0], int($paramlist[1])); # <account_name> <GM_level>
-			}
-
-		} elsif ("id" =~ /^\Q$command/ && $command ne "i") { # check 1 letter command: 'id' or 'info'?
-			if (@paramlist = ($parameters =~ m/^"(.*)"/)) {
-				idaccount($paramlist[0]); # <account_name>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'/)) {
-				idaccount($paramlist[0]); # <account_name>
-			} else {
-				@paramlist = split /\s+/,$parameters,1;
-				idaccount($paramlist[0]); # <account_name>
-			}
-
-		} elsif ("info" =~ /^\Q$command/ && $command ne "i") { # check 1 letter command: 'id' or 'info'?
-			infoaccount(int($paramlist[0])); # <account_id>
-
-		} elsif ($command eq "kami") { # check all letters command: 'kami' or 'kamib'?
-			@paramlist = split /\s+/,$parameters,1;
-			sendbroadcast(0, $paramlist[0]); # <type> <message>
-
-		} elsif ($command eq "kamib") { # check all letters command: 'kami' or 'kamib'?
-			@paramlist = split /\s+/,$parameters,1;
-			sendbroadcast(0x10, $paramlist[0]); # <type> <message>
-
-		} elsif ("language" =~ /^\Q$command/ && $command ne "l") { # check 1 letter command: 'list' or 'language'?
-			changelanguage($paramlist[0]); # <language>
-
-		} elsif (("list" =~ /^\Q$command/ || $command eq "ls") && $command ne "l") { # check 1 letter command: 'list' or 'language'?
-			listaccount(int($paramlist[0]), int($paramlist[1]), 0); # [start_id [end_id]] 0: to list all
-
-		} elsif (("listban" =~ /^\Q$command/ || $command eq "lsban") && $command ne "l") { # need to specificaly write Ban to have this list # check 1 letter command: 'list' or 'language'?
-			listaccount(int($paramlist[0]), int($paramlist[1]), 3); # [start_id [end_id]] 3: to list only accounts with state or banished
-
-		} elsif (("listgm" =~ /^\Q$command/ || $command eq "lsgm") && $command ne "l") { # need to specificaly write GM to have this list # check 1 letter command: 'list' or 'language'?
-			listaccount(int($paramlist[0]), int($paramlist[1]), 1); # [start_id [end_id]] 1: to list only GM
-
-		} elsif (("listok" =~ /^\Q$command/ || $command eq "lsok") && $command ne "l") { # need to specificaly write OK to have this list # check 1 letter command: 'list' or 'language'?
-			listaccount(int($paramlist[0]), int($paramlist[1]), 4); # [start_id [end_id]] 4: to list only accounts without state and not banished
-
-		} elsif ("memo" =~ /^\Q$command/) {
-			if (@paramlist = ($parameters =~ m/^"(.*)"\s+(.*)/)) {
-				changememo($paramlist[0], $paramlist[1]); # <account_name> <memo>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(.*)/)) {
-				changememo($paramlist[0], $paramlist[1]); # <account_name> <memo>
-			} else {
-				@paramlist = split /\s+/,$parameters,2;
-				changememo($paramlist[0], $paramlist[1]); # <account_name> <memo>
-			}
-
-		} elsif ("name" =~ /^\Q$command/) {
-			nameaccount(int($paramlist[0])); # <account_id>
-
-		} elsif ("passwd" =~ /^\Q$command/ || "password" =~ /^\Q$command/) {
-			if (@paramlist = ($parameters =~ m/^"(.*)"\s+(.*)/)) {
-				changepasswd($paramlist[0], $paramlist[1]); # <account_name> <new_password>
-			} elsif (@paramlist = ($parameters =~ m/^"(.*)"/)) {
-				changepasswd($paramlist[0], ""); # <account_name> <new_password>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(.*)/)) {
-				changepasswd($paramlist[0], $paramlist[1]); # <account_name> <new_password>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'/)) {
-				changepasswd($paramlist[0], ""); # <account_name> <new_password>
-			} else {
-				@paramlist = split /\s+/,$parameters,2;
-				changepasswd($paramlist[0], $paramlist[1]); # <account_name> <new_password>
-			}
-
-		} elsif ("reloadgm" =~ /^\Q$command/) {
-			reloadGM();
-
-		} elsif ("search" =~ /^\Q$command/ && $command ne "s" && # check 1 letter command: 'search', 'state' or 'sex'?
-		          $command ne "se") { # check 2 letters command: 'search' or 'sex'?
-			if (@paramlist = ($parameters =~ m/^(-{1,2}[re]\S*)\s+(.*)/)) {
-				searchaccount($paramlist[0], $paramlist[1]); # -r/-e/--expr/--regex <expression> | <expression>
-			} else {
-				@paramlist = split /\s+/,$parameters,1;
-				searchaccount($paramlist[0], ""); # -r/-e/--expr/--regex <expression> | <expression>
-			}
-
-		} elsif ("sex" =~ /^\Q$command/ && $command ne "s" && # check 1 letter command: 'search', 'state' or 'sex'?
-		          $command ne "se") { # check 2 letters command: 'search' or 'sex'?
-			if (@paramlist = ($parameters =~ m/^"(.*)"\s+(\S+)/)) {
-				changesex($paramlist[0], $paramlist[1]); # <account_name> <sex>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(\S+)/)) {
-				changesex($paramlist[0], $paramlist[1]); # <account_name> <sex>
-			} else {
-				@paramlist = split /\s+/,$parameters;
-				changesex($paramlist[0], $paramlist[1]); # <account_name> <sex>
-			}
-
-		} elsif ("state" =~ /^\Q$command/ && $command ne "s") { # check 1 letter command: 'search', 'state' or 'sex'?
-			if (@paramlist = ($parameters =~ m/^"(.*)"\s+(\d+)\s+(.*)/)) {
-				changestate($paramlist[0], int($paramlist[1]), $paramlist[2]); # <account_name> <new_state> <error_message_#7>
-			} elsif (@paramlist = ($parameters =~ m/^"(.*)"\s+(\d+)/)) {
-				changestate($paramlist[0], int($paramlist[1]), ""); # <account_name> <new_state> <error_message_#7>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(\d+)\s+(.*)/)) {
-				changestate($paramlist[0], int($paramlist[1]), $paramlist[2]); # <account_name> <new_state> <error_message_#7>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(\d+)/)) {
-				changestate($paramlist[0], int($paramlist[1]), ""); # <account_name> <new_state> <error_message_#7>
-			} else {
-				@paramlist = split /\s+/,$parameters,3;
-				changestate($paramlist[0], int($paramlist[1]), $paramlist[2]); # <account_name> <new_state> <error_message_#7>
-			}
-
-		} elsif (("timeadd" =~ /^\Q$command/ || $command eq "ta") && $command ne "t") { # check 1 letter command: 'ta' or 'ts'?
-			if (@paramlist = ($parameters =~ m/^"(.*)"\s+(\S+)/)) {
-				timeaddaccount($paramlist[0], $paramlist[1]); # <account_name> <modifier>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(\S+)/)) {
-				timeaddaccount($paramlist[0], $paramlist[1]); # <account_name> <modifier>
-			} else {
-				@paramlist = split /\s+/,$parameters;
-				timeaddaccount($paramlist[0], $paramlist[1]); # <account_name> <modifier>
-			}
-
-		} elsif (("timeset" =~ /^\Q$command/ || $command eq "ts") && $command ne "t") { # check 1 letter command: 'ta' or 'ts'?
-			if (@paramlist = ($parameters =~ m/^"(.*)"\s+(\S+)\s+(\S+)/)) {
-				timesetaccount($paramlist[0], $paramlist[1], $paramlist[2]); # <account_name> yyyy/mm/dd [hh:mm:ss]
-			} elsif (@paramlist = ($parameters =~ m/^"(.*)"\s+(\S+)/)) {
-				timesetaccount($paramlist[0], $paramlist[1], "23:59:59"); # <account_name> yyyy/mm/dd [hh:mm:ss]
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(\S+)\s+(\S+)/)) {
-				timesetaccount($paramlist[0], $paramlist[1], $paramlist[2]); # <account_name> yyyy/mm/dd [hh:mm:ss]
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'\s+(\S+)/)) {
-				timesetaccount($paramlist[0], $paramlist[1], "23:59:59"); # <account_name> yyyy/mm/dd [hh:mm:ss]
-			} else {
-				@paramlist = split /\s+/,$parameters;
-				timesetaccount($paramlist[0], $paramlist[1], $paramlist[2]); # <account_name> yyyy/mm/dd [hh:mm:ss]
-			}
-
-		} elsif ($command eq "unban" || ("unbanish" =~ /^\Q$command/ && length($command) >= 4)) {
-			if (@paramlist = ($parameters =~ m/^"(.*)"/)) {
-				bansetaccount($paramlist[0], 0, ""); # <account_name> yyyy/mm/dd [hh:mm:ss]
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'/)) {
-				bansetaccount($paramlist[0], 0, ""); # <account_name> yyyy/mm/dd [hh:mm:ss]
-			} else {
-				@paramlist = split /\s+/,$parameters,1;
-				bansetaccount($paramlist[0], 0, ""); # <account_name> yyyy/mm/dd [hh:mm:ss]
-			}
-
-		} elsif ("unblock" =~ /^\Q$command/ && length($command) >= 4) {
-			if (@paramlist = ($parameters =~ m/^"(.*)"/)) {
-				changestate($paramlist[0], 0, ""); # <account_name> <new_state> <error_message_#7>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'/)) {
-				changestate($paramlist[0], 0, ""); # <account_name> <new_state> <error_message_#7>
-			} else {
-				@paramlist = split /\s+/,$parameters,1;
-				changestate($paramlist[0], 0, ""); # <account_name> <new_state> <error_message_#7>
-			}
-
-		} elsif ("version" =~ /^\Q$command/) {
-			checkloginversion();
-
-		} elsif ("who" =~ /^\Q$command/) {
-			if (@paramlist = ($parameters =~ m/^"(.*)"/)) {
-				whoaccount($paramlist[0]); # <account_name>
-			} elsif (@paramlist = ($parameters =~ m/^'(.*)'/)) {
-				whoaccount($paramlist[0]); # <account_name>
-			} else {
-				@paramlist = split /\s+/,$parameters,1;
-				whoaccount($paramlist[0]); # <account_name>
-			}
-
-# quit
-		} elsif ("quit" =~ /^\Q$command/ ||
-		         (("end" =~ /^\Q$command/ || "exit" =~ /^\Q$command/) && $command ne "e")) { # check 1 letter command: 'email', 'end' or 'exit'?
-			last;
-
-# unknown command
-		} elsif ($command) {
-			if ($defaultlanguage eq "F") {
-				print "Commande inconnue [".$command."]\n";
-			} else {
-				print "Unknown command [".$command."]\n";
-			}
-		}
-#		$term->addhistory($cmd) if $command;
-	};
-	if ($@) {
-		if ($defaultlanguage eq "F") {
-			print "Erreur [".$command."]\n$@";
-		} else {
-			print "Error [".$command."]\n$@";
-		}
-	}
-};
-
-# End of the software
-quit();
-
-if ($defaultlanguage eq "F") {
-	print "Au revoir.\n";
-} else {
-	print "Bye.\n";
-}
-exit(0);
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Displaying of the version of the login-server
-sub checkloginversion() {
-	print $so pack("v",30000); # 0x7530
-	$so->flush();
-	$buf = readso(10);
-	# Analyse du Packet
-	my($ret, $maver, $miver, $rev, $dev, $mod, $type, $mdver) = unpack("vc6v", $buf);
-	if ($ret != 30001) { #0x7531
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		exit(6);
-	}
-
-	print "  Login-Server [$loginserverip:$loginserverport]\n";
-	printf "  eAthena version %s-%d.%d", ("stable", "dev")[$dev], $maver, $miver;
-	printf " revision %d", $rev if $rev;
-	printf "%s%d.\n", ("", "-mod")[$mod], $mdver;
-	return 0;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Displaying of the help
-sub displayhelp() {
-	my($help, $receivedcommand) = @_;
-
-	my($command) = lc($receivedcommand); # command in lowercase
-
-	if ($command eq "") {
-		$command = "not a command"; # any value that is not a command
-	}
-
-	if ($command eq "?") {
-		$command = "aide" if ($defaultlanguage eq "F");
-		$command = "help" if ($defaultlanguage ne "F");
-	}
-
-	if ($help eq "aide") {
-		if ("aide" =~ /^\Q$command/ && $command ne "a") { # check 1 letter command: 'aide' or 'add'?
-			printf "aide/help/?\n";
-			printf "  Affiche la description des commandes\n";
-			printf "aide/help/? [commande]\n";
-			printf "  Affiche la description de la commande specifi�e\n";
-		} elsif ("help" =~ /^\Q$command/) {
-			printf "aide/help/?\n";
-			printf "  Display the description of the commands\n";
-			printf "aide/help/? [command]\n";
-			printf "  Display the description of the specified command\n";
-		} elsif ("add" =~ /^\Q$command/ && $command ne "a") { # check 1 letter command: 'aide' or 'add'?
-			printf "add <nomcompte> <sexe> <motdepasse>\n";
-			printf "  Cr�e un compte avec l'email par d�faut (a\@a.com).\n";
-			printf "  Concernant le sexe, seule la premi�re lettre compte (F ou M).\n";
-			printf "  L'e-mail est a\@a.com (e-mail par d�faut). C'est comme n'avoir aucun e-mail.\n";
-			printf "  Lorsque motdepasse est omis, la saisie se fait sans que la frappe se voit.\n";
-			printf "  <exemple> add testname Male testpass\n";
-		} elsif ($command eq "ban" || ("banish" =~ /^\Q$command/ && length($command) >= 4)) {
-			printf "ban/banish aaaa/mm/jj hh:mm:ss <nomcompte>\n";
-			printf "  Change la date de fin de bannissement d'un compte.\n";
-			printf "  La diff�rence avec banset est la position du nom du compte.\n";
-		} elsif (("banadd" =~ /^\Q$command/ || $command eq "ba") && $command ne "b") { # check 1 letter command: 'ba' or 'bs'?
-			printf "banadd <nomcompte> <Modificateur>\n";
-			printf "  Ajoute ou soustrait du temps � la date de banissement d'un compte.\n";
-			printf "  Les modificateurs sont construits comme suit:\n";
-			printf "    Valeur d'ajustement (-1, 1, +1, etc...)\n";
-			printf "    El�ment modifi�:\n";
-			printf "      a ou y: ann�e\n";
-			printf "      m:      mois\n";
-			printf "      j ou d: jour\n";
-			printf "      h:      heure\n";
-			printf "      mn:     minute\n";
-			printf "      s:      seconde\n";
-			printf "  <exemple> banadd testname +1m-2mn1s-6a\n";
-			printf "            Cette exemple ajoute 1 mois et une seconde, et soustrait 2 minutes\n";
-			printf "            et 6 ans dans le m�me temps.\n";
-			printf "NOTE: Si vous modifez la date de banissement d'un compte non bani,\n";
-			printf "      vous indiquez comme date (le moment actuel +- les ajustements)\n";
-		} elsif (("banset" =~ /^\Q$command/ || $command eq "bs") && $command ne "b") { # check 1 letter command: 'ba' or 'bs'?
-			printf "banset <nomcompte> aaaa/mm/jj [hh:mm:ss]\n";
-			printf "  Change la date de fin de bannissement d'un compte.\n";
-			printf "  Heure par d�faut: 23:59:59\n";
-			printf "banset <nomcompte> 0\n";
-			printf "  D�banni un compte (0 = de-banni).\n";
-		} elsif ("block" =~ /^\Q$command/ && length($command) >= 2) {
-			printf "block <nom compte>\n";
-			printf "  Place le status d'un compte � 5 (You have been blocked by the GM Team).\n";
-			printf "  La commande est l'�quivalent de state <nom_compte> 5.\n";
-		} elsif ("check" =~ /^\Q$command/ && $command ne "c") { # check 1 letter command: 'check' or 'create'?
-			printf "check <nomcompte> <motdepasse>\n";
-			printf "  V�rifie la validit� d'un mot de passe pour un compte\n";
-			printf "  NOTE: Le serveur n'enverra jamais un mot de passe.\n";
-			printf "        C'est la seule m�thode que vous poss�dez pour savoir\n";
-			printf "        si un mot de passe est le bon. L'autre m�thode est\n";
-			printf "        d'avoir un acc�s ('physique') au fichier des comptes.\n";
-		} elsif ("create" =~ /^\Q$command/ && $command ne "c") { # check 1 letter command: 'check' or 'create'?
-			printf "create <nomcompte> <sexe> <email> <motdepasse>\n";
-			printf "  Comme la commande add, mais avec l'e-mail en plus.\n";
-			printf "  <exemple> create testname Male mon\@mail.com testpass\n";
-		} elsif ("del" =~ /^\Q$command/ || "delete" =~ /^\Q$command/) {
-			printf "del <nomcompte>\n";
-			printf "  Supprime un compte.\n";
-			printf "  La commande demande confirmation. Apr�s confirmation, le compte est d�truit.\n";
-		} elsif ("email" =~ /^\Q$command/ && $command ne "e") { # check 1 letter command: 'email', 'end' or 'exit'?
-			printf "email <nomcompte> <email>\n";
-			printf "  Modifie l'e-mail d'un compte.\n";
-		} elsif ("getcount" =~ /^\Q$command/ && $command ne "g") { # check 1 letter command: 'getcount' or 'gm'?
-			printf "getcount\n";
-			printf "  Donne le nombre de joueurs en ligne par serveur de char.\n";
-		} elsif ("gm" =~ /^\Q$command/ && $command ne "g") { # check 1 letter command: 'getcount' or 'gm'?
-			printf "gm <nomcompte> [Niveau_GM]\n";
-			printf "  Modifie le niveau de GM d'un compte.\n";
-			printf "  Valeur par d�faut: 0 (suppression du niveau de GM).\n";
-			printf "  <exemple> gm nomtest 80\n";
-		} elsif ("id" =~ /^\Q$command/ && $command ne "i") { # check 1 letter command: 'id' or 'info'?
-			printf "id <nomcompte>\n";
-			printf "  Donne l'id d'un compte.\n";
-		} elsif ("info" =~ /^\Q$command/ && $command ne "i") { # check 1 letter command: 'id' or 'info'?
-			printf "info <idcompte>\n";
-			printf "  Affiche les informations sur un compte.\n";
-		} elsif ($command eq "kami") { # check all letters command: 'kami' or 'kamib'?
-			printf "kami <message>\n";
-			printf "  Envoi un message g�n�ral sur tous les serveurs de map (en jaune).\n";
-		} elsif ($command eq "kamib") { # check all letters command: 'kami' or 'kamib'?
-			printf "kamib <message>\n";
-			printf "  Envoi un message g�n�ral sur tous les serveurs de map (en bleu).\n";
-		} elsif ("language" =~ /^\Q$command/ && $command ne "l") { # check 1 letter command: 'list' or 'language'?
-			printf("language <langue>\n");
-			printf("  Change la langue d'affichage.\n");
-			printf("  Langues possibles: 'Fran�ais' ou 'English'.\n");
-		} elsif (("list" =~ /^\Q$command/ || $command eq "ls") && $command ne "l") { # check 1 letter command: 'list' or 'language'?
-			printf "list/ls [Premier_id [Dernier_id]]\n";
-			printf "  Affiche une liste de comptes.\n";
-			printf "  'Premier_id', 'Dernier_id': indique les identifiants de d�part et de fin.\n";
-			printf "  La recherche par nom n'est pas possible avec cette commande.\n";
-			printf "  <example> list 10 9999999\n";
-		} elsif (("listban" =~ /^\Q$command/ || $command eq "lsban") && $command ne "l") { # need to specificaly write Ban to have this list # check 1 letter command: 'list' or 'language'?
-			printf "listBan/lsBan [Premier_id [Dernier_id]]\n";
-			printf "  Comme list/ls, mais seulement pour les comptes GM avec un statut ou bannis.\n";
-		} elsif (("listgm" =~ /^\Q$command/ || $command eq "lsgm") && $command ne "l") { # need to specificaly write GM to have this list # check 1 letter command: 'list' or 'language'?
-			printf "listGM/lsGM [Premier_id [Dernier_id]]\n";
-			printf "  Comme list/ls, mais seulement pour les comptes GM.\n";
-		} elsif (("listok" =~ /^\Q$command/ || $command eq "lsok") && $command ne "l") { # need to specificaly write OK to have this list # check 1 letter command: 'list' or 'language'?
-			printf "listOK/lsOK [Premier_id [Dernier_id]]\n";
-			printf "  Comme list/ls, mais seulement pour les comptes sans statut et non bannis.\n";
-		} elsif ("memo" =~ /^\Q$command/) {
-			printf "memo <nomcompte> <memo>\n";
-			printf "  Modifie le m�mo d'un compte.\n";
-			printf "  'memo': Il peut avoir jusqu'� 253 caract�res (avec des espaces ou non).\n";
-		} elsif ("name" =~ /^\Q$command/) {
-			printf "name <idcompte>\n";
-			printf "  Donne le nom d'un compte.\n";
-		} elsif ("passwd" =~ /^\Q$command/ || "password" =~ /^\Q$command/) {
-			printf "passwd <nomcompte> <nouveaumotdepasse>\n";
-			printf "  Change le mot de passe d'un compte.\n";
-			printf "  Lorsque nouveaumotdepasse est omis,\n";
-			printf "  la saisie se fait sans que la frappe ne se voit.\n";
-		} elsif ("reloadgm" =~ /^\Q$command/) {
-			printf "reloadGM\n";
-			printf "  Reload GM configuration file\n";
-		} elsif ("search" =~ /^\Q$command/ && $command ne "s" && # check 1 letter command: 'search', 'state' or 'sex'?
-		          $command ne "se") { # check 2 letters command: 'search' or 'sex'?
-			printf "search <expression>\n";
-			printf "  Cherche des comptes.\n";
-			printf "  Affiche les comptes dont les noms correspondent.\n";
-			printf "search -r/-e/--expr/--regex <expression>\n";
-			printf "  Cherche des comptes par expression reguli�re.\n";
-			printf "  Affiche les comptes dont les noms correspondent.\n";
-		} elsif ("sex" =~ /^\Q$command/ && $command ne "s" && # check 1 letter command: 'search', 'state' or 'sex'?
-		          $command ne "se") { # check 2 letters command: 'search' or 'sex'?
-			printf "sex <nomcompte> <sexe>\n";
-			printf "  Modifie le sexe d'un compte.\n";
-			printf "  <exemple> sex testname Male\n";
-		} elsif ("state" =~ /^\Q$command/ && $command ne "s") { # check 1 letter command: 'search', 'state' or 'sex'?
-			printf "state <nomcompte> <nouveaustatut> <message_erreur_7>\n";
-			printf "  Change le statut d'un compte.\n";
-			printf "  'nouveaustatut': Le statut est le m�me que celui du packet 0x006a + 1.\n";
-			printf "               les possibilit�s sont:\n";
-			printf "               0 = Compte ok\n";
-			printf "               1 = Unregistered ID\n";
-			printf "               2 = Incorrect Password\n";
-			printf "               3 = This ID is expired\n";
-			printf "               4 = Rejected from Server\n";
-			printf "               5 = You have been blocked by the GM Team\n";
-			printf "               6 = Your Game's EXE file is not the latest version\n";
-			printf "               7 = You are Prohibited to log in until...\n";
-			printf "               8 = Server is jammed due to over populated\n";
-			printf "               9 = No MSG\n";
-			printf "               100 = This ID has been totally erased\n";
-			printf "               all other values are 'No MSG', then use state 9 please.\n";
-			printf "  'message_erreur_7': message du code erreur 6 =\n";
-			printf "                      = Your are Prohibited to log in until... (packet 0x006a)\n";
-		} elsif (("timeadd" =~ /^\Q$command/ || $command eq "ta") && $command ne "t") { # check 1 letter command: 'ta' or 'ts'?
-			printf "timeadd <nomcompte> <modificateur>\n";
-			printf "  Ajoute/soustrait du temps � la limite de validit� d'un compte.\n";
-			printf "  Le modificateur est compos� comme suit:\n";
-			printf "    Valeur modificatrice (-1, 1, +1, etc...)\n";
-			printf "    El�ment modifi�:\n";
-			printf "      a ou y: ann�e\n";
-			printf "      m:      mois\n";
-			printf "      j ou d: jour\n";
-			printf "      h:      heure\n";
-			printf "      mn:     minute\n";
-			printf "      s:      seconde\n";
-			printf "  <exemple> timeadd testname +1m-2mn1s-6a\n";
-			printf "            Cette exemple ajoute 1 mois et une seconde, et soustrait 2 minutes\n";
-			printf "            et 6 ans dans le m�me temps.\n";
-			printf "NOTE: Vous ne pouvez pas modifier une limite de validit� illimit�e. Si vous\n";
-			printf "      d�sirez le faire, c'est que vous voulez probablement cr�er un limite de\n";
-			printf "      validit� limit�e. Donc, en premier, fix� une limite de valitid�.\n";
-		} elsif (("timeset" =~ /^\Q$command/ || $command eq "ts") && $command ne "t") { # check 1 letter command: 'ta' or 'ts'?
-			printf "timeset <nomcompte> aaaa/mm/jj [hh:mm:ss]\n";
-			printf "  Change la limite de validit� d'un compte.\n";
-			printf "  Heure par d�faut: 23:59:59\n";
-			printf "timeset <nomcompte> 0\n";
-			printf "  Donne une limite de validit� illimit�e (0 = illimit�e).\n";
-		} elsif ($command eq "unban" || ("unbanish" =~ /^\Q$command/ && length($command) >= 4)) {
-			printf "unban/unbanish <nom compte>\n";
-			printf "  Ote le banissement d'un compte.\n";
-			printf "  La commande est l'�quivalent de banset <nom_compte> 0.\n";
-		} elsif ("unblock" =~ /^\Q$command/ && length($command) >= 4) {
-			printf "unblock <nom compte>\n";
-			printf "  Place le status d'un compte � 0 (Compte ok).\n";
-			printf "  La commande est l'�quivalent de state <nom_compte> 0.\n";
-		} elsif ("version" =~ /^\Q$command/) {
-			printf "version\n";
-			printf "  Affiche la version du login-serveur.\n";
-		} elsif ("who" =~ /^\Q$command/) {
-			printf "who <nomcompte>\n";
-			printf "  Affiche les informations sur un compte.\n";
-		} elsif ("quit" =~ /^\Q$command/ ||
-		         (("end" =~ /^\Q$command/ || "exit" =~ /^\Q$command/) && $command ne "e")) { # check 1 letter command: 'email', 'end' or 'exit'?\n";
-			printf "quit/end/exit\n";
-			printf "  Fin du programme d'administration.\n";
-		} else {
-			if ($receivedcommand ne "") {
-				printf "Commande inconnue [%s] pour l'aide. Affichage de toutes les commandes.\n", $receivedcommand;
-			}
-			print << "ENDOFAIDE";
- aide/help/?                             -- Affiche cet aide
- aide/help/? [commande]                  -- Affiche l'aide de la commande
- add <nomcompte> <sexe> <motdepasse>     -- Cr�e un compte (sans email)
- ban/banish aaaa/mm/jj hh:mm:ss <nomcompte>-- Change la date finale de banismnt
- banadd/ba <nomcompte> <modificateur>    -- Ajout/soustrait du temps � la
-   exemple: ba moncompte +1m-2mn1s-2y       date finale de banissement
- banset/bs <nomcompte> aaaa/mm/jj [hh:mm:ss] -- Change la date fin de banisemnt
- banset/bs <nomcompte> 0                 -- D�-banis un compte.
- block <nom compte>  -- Mets le status d'un compte � 5 (blocked by the GM Team)
- check <nomcompte> <motdepasse>          -- V�rifie un mot de passe d'un compte
- create <nomcompte> <sexe> <email> <motdepasse> -- Cr�e un compte (avec email)
- del <nomcompte>                         -- Supprime un compte
- email <nomcompte> <email>               -- Modifie l'e-mail d'un compte
- getcount                                -- Donne le nb de joueurs en ligne
- gm <nomcompte> [Niveau_GM]              -- Modifie le niveau de GM d'un compte
- id <nomcompte>                          -- Donne l'id d'un compte
- info <idcompte>                         -- Affiche les infos sur un compte
- kami <message>                          -- Envoi un message g�n�ral (en jaune)
- kamib <message>                         -- Envoi un message g�n�ral (en bleu)
- language <langue>                       -- Change la langue d'affichage.
- list/ls [Premier_id [Dernier_id] ]      -- Affiche une liste de comptes
- listBan/lsBan [Premier_id [Dernier_id] ]-- Affiche une liste de comptes
-                                            avec un statut ou bannis
- listGM/lsGM [Premier_id [Dernier_id] ]  -- Affiche une liste de comptes GM
- listOK/lsOK [Premier_id [Dernier_id] ]  -- Affiche une liste de comptes
-                                            sans status et non bannis
- memo <nomcompte> <memo>                 -- Modifie le memo d'un compte
- name <idcompte>                         -- Donne le nom d'un compte
- passwd <nomcompte> <nouveaumotdepasse>  -- Change le mot de passe d'un compte
- quit/end/exit                           -- Fin du programme d'administation
- reloadGM                              -- Recharger le fichier de config des GM
- search <expression>                     -- Cherche des comptes
- search -e/-r/--expr/--regex <expression> -- Cherche des comptes par REGEX
- sex <nomcompte> <sexe>                  -- Modifie le sexe d'un compte
- state <nomcompte> <nouveaustatut> <messageerr7> -- Change le statut d'1 compte
- timeadd/ta <nomcompte> <modificateur>   -- Ajout/soustrait du temps � la
-   exemple: ta moncompte +1m-2mn1s-2y       limite de validit�
- timeset/ts <nomcompte> aaaa/mm/jj [hh:mm:ss] -- Change la limite de validit�
- timeset/ts <nomcompte> 0                -- limite de validit� = illimit�e
- unban/unbanish <nom compte>             -- Ote le banissement d'un compte
- unblock <nom compte>            -- Mets le status d'un compte � 0 (Compte ok)
- version                                 -- Donne la version du login-serveur
- who <nomcompte>                         -- Affiche les infos sur un compte
-ENDOFAIDE
-			printf(" Note: Pour les noms de compte avec des espaces, tapez \"<nom compte>\" (ou ').\n");
-		}
-	} else {
-		if ("aide" =~ /^\Q$command/ && $command ne "a") { # check 1 letter command: 'aide' or 'add'?
-			printf "aide/help/?\n";
-			printf "  Display the description of the commands\n";
-			printf "aide/help/? [command]\n";
-			printf "  Display the description of the specified command\n";
-		} elsif ("help" =~ /^\Q$command/) {
-			printf "aide/help/?\n";
-			printf "  Display the description of the commands\n";
-			printf "aide/help/? [command]\n";
-			printf "  Display the description of the specified command\n";
-		} elsif ("add" =~ /^\Q$command/ && $command ne "a") { # check 1 letter command: 'aide' or 'add'?
-			printf "add <account_name> <sex> <password>\n";
-			printf "  Create an account with the default email (a\@a.com).\n";
-			printf "  Concerning the sex, only the first letter is used (F or M).\n";
-			printf "  The e-mail is set to a\@a.com (default e-mail). It's like to have no e-mail.\n";
-			printf "  When the password is omitted,\n";
-			printf "  the input is done without displaying of the pressed keys.\n";
-			printf "  <example> add testname Male testpass\n";
-		} elsif ($command eq "ban" || ("banish" =~ /^\Q$command/ && length($command) >= 4)) {
-			printf "ban/banish yyyy/mm/dd hh:mm:ss <account_name>\n";
-			printf "  Changes the final date of a banishment of an account.\n";
-			printf "  The difference with banset is the position of the account name.\n";
-		} elsif (("banadd" =~ /^\Q$command/ || $command eq "ba") && $command ne "b") { # check 1 letter command: 'ba' or 'bs'?
-			printf "banadd <account_name> <modifier>\n";
-			printf "  Adds or substracts time from the final date of a banishment of an account.\n";
-			printf "  Modifier is done as follows:\n";
-			printf "    Adjustment value (-1, 1, +1, etc...)\n";
-			printf "    Modified element:\n";
-			printf "      a or y: year\n";
-			printf "      m:  month\n";
-			printf "      j or d: day\n";
-			printf "      h:  hour\n";
-			printf "      mn: minute\n";
-			printf "      s:  second\n";
-			printf "  <example> banadd testname +1m-2mn1s-6y\n";
-			printf "            this example adds 1 month and 1 second, and substracts 2 minutes\n";
-			printf "            and 6 years at the same time.\n";
-			printf "NOTE: If you modify the final date of a non-banished account,\n";
-			printf "      you fix the final date to (actual time +- adjustments)\n";
-		} elsif (("banset" =~ /^\Q$command/ || $command eq "bs") && $command ne "b") { # check 1 letter command: 'ba' or 'bs'?
-			printf "banset <account_name> yyyy/mm/dd [hh:mm:ss]\n";
-			printf "  Changes the final date of a banishment of an account.\n";
-			printf "  Default time: 23:59:59\n";
-			printf "banset <account_name> 0\n";
-			printf "  Set a non-banished account (0 = unbanished).\n";
-		} elsif ("block" =~ /^\Q$command/ && length($command) >= 2) {
-			printf "block <account name>\n";
-			printf "  Set state 5 (You have been blocked by the GM Team) to an account.\n";
-			printf "  Same command of state <account_name> 5.\n";
-		} elsif ("check" =~ /^\Q$command/ && $command ne "c") { # check 1 letter command: 'check' or 'create'?
-			printf "check <account_name> <password>\n";
-			printf "  Check the validity of a password for an account.\n";
-			printf "  NOTE: Server will never sends back a password.\n";
-			printf "        It's the only method you have to know if a password is correct.\n";
-			printf "        The other method is to have a ('physical') access to the accounts file.\n";
-		} elsif ("create" =~ /^\Q$command/ && $command ne "c") { # check 1 letter command: 'check' or 'create'?
-			printf "create <account_name> <sex> <email> <password>\n";
-			printf "  Like the 'add' command, but with e-mail moreover.\n";
-			printf "  <example> create testname Male my\@mail.com testpass\n";
-		} elsif ("del" =~ /^\Q$command/ || "delete" =~ /^\Q$command/) {
-			printf "del <account_name>\n";
-			printf "  Remove an account.\n";
-			printf "  This order requires confirmation. After confirmation, the account is deleted.\n";
-		} elsif ("email" =~ /^\Q$command/ && $command ne "e") { # check 1 letter command: 'email', 'end' or 'exit'?
-			printf "email <account_name> <email>\n";
-			printf "  Modify the e-mail of an account.\n";
-		} elsif ("getcount" =~ /^\Q$command/ && $command ne "g") { # check 1 letter command: 'getcount' or 'gm'?
-			printf "getcount\n";
-			printf "  Give the number of players online on all char-servers.\n";
-		} elsif ("gm" =~ /^\Q$command/ && $command ne "g") { # check 1 letter command: 'getcount' or 'gm'?
-			printf "gm <account_name> [GM_level]\n";
-			printf "  Modify the GM level of an account.\n";
-			printf "  Default value remove GM level (GM level = 0).\n";
-			printf "  <example> gm testname 80\n";
-		} elsif ("id" =~ /^\Q$command/ && $command ne "i") { # check 1 letter command: 'id' or 'info'?
-			printf "id <account_name>\n";
-			printf "  Give the id of an account.\n";
-		} elsif ("info" =~ /^\Q$command/ && $command ne "i") { # check 1 letter command: 'id' or 'info'?
-			printf "info <account_id>\n";
-			printf "  Display complete information of an account.\n";
-		} elsif ($command eq "kami") { # check all letters command: 'kami' or 'kamib'?
-			printf "kami <message>\n";
-			printf "  Sends a broadcast message on all map-server (in yellow).\n";
-		} elsif ($command eq "kamib") { # check all letters command: 'kami' or 'kamib'?
-			printf "kamib <message>\n";
-			printf "  Sends a broadcast message on all map-server (in blue).\n";
-		} elsif ("language" =~ /^\Q$command/ && $command ne "l") { # check 1 letter command: 'list' or 'language'?
-			printf("language <language>\n");
-			printf("  Change the language of displaying.\n");
-			printf("  Possible languages: Fran�ais or English.\n");
-		} elsif (("list" =~ /^\Q$command/ || $command eq "ls") && $command ne "l") { # check 1 letter command: 'list' or 'language'?
-			printf "list/ls [start_id [end_id]]\n";
-			printf "  Display a list of accounts.\n";
-			printf "  'start_id', 'end_id': indicate end and start identifiers.\n";
-			printf "  Research by name is not possible with this command.\n";
-			printf "  <example> list 10 9999999\n";
-		} elsif (("listban" =~ /^\Q$command/ || $command eq "lsban") && $command ne "l") { # need to specificaly write Ban to have this list # check 1 letter command: 'list' or 'language'?
-			printf "listBan/lsBan [start_id [end_id]]\n";
-			printf "  Like list/ls, but only for accounts with state or banished.\n";
-		} elsif (("listgm" =~ /^\Q$command/ || $command eq "lsgm") && $command ne "l") { # need to specificaly write GM to have this list # check 1 letter command: 'list' or 'language'?
-			printf "listGM/lsGM [start_id [end_id]]\n";
-			printf "  Like list/ls, but only for GM accounts.\n";
-		} elsif (("listok" =~ /^\Q$command/ || $command eq "lsok") && $command ne "l") { # need to specificaly write OK to have this list # check 1 letter command: 'list' or 'language'?
-			printf "listOK/lsOK [start_id [end_id]]\n";
-			printf "  Like list/ls, but only for accounts without state and not banished.\n";
-		} elsif ("memo" =~ /^\Q$command/) {
-			printf "memo <account_name> <memo>\n";
-			printf "  Modify the memo of an account.\n";
-			printf "  'memo': it can have until 253 characters (with spaces or not).\n";
-		} elsif ("name" =~ /^\Q$command/) {
-			printf "name <account_id>\n";
-			printf "  Give the name of an account.\n";
-		} elsif ("passwd" =~ /^\Q$command/ || "password" =~ /^\Q$command/) {
-			printf "passwd <account_name> <new_password>\n";
-			printf "  Change the password of an account.\n";
-			printf "  When new password is omitted,\n";
-			printf "  the input is done without displaying of the pressed keys.\n";
-		} elsif ("reloadgm" =~ /^\Q$command/) {
-			printf "reloadGM\n";
-			printf "  Reload GM configuration file\n";
-		} elsif ("search" =~ /^\Q$command/ && $command ne "s" && # check 1 letter command: 'search', 'state' or 'sex'?
-		          $command ne "se") { # check 2 letters command: 'search' or 'sex'?
-			printf "search <expression>\n";
-			printf "  Seek accounts.\n";
-			printf "  Displays the accounts whose names correspond.\n";
-			printf "search -r/-e/--expr/--regex <expression>\n";
-			printf "  Seek accounts by regular expression.\n";
-			printf "  Displays the accounts whose names correspond.\n";
-		} elsif ("sex" =~ /^\Q$command/ && $command ne "s" && # check 1 letter command: 'search', 'state' or 'sex'?
-		          $command ne "se") { # check 2 letters command: 'search' or 'sex'?
-			printf "sex <account_name> <sex>\n";
-			printf "  Modify the sex of an account.\n";
-			printf "  <example> sex testname Male\n";
-		} elsif ("state" =~ /^\Q$command/ && $command ne "s") { # check 1 letter command: 'search', 'state' or 'sex'?
-			printf "state <account_name> <new_state> <error_message_#7>\n";
-			printf "  Change the state of an account.\n";
-			printf "  'new_state': state is the state of the packet 0x006a + 1.\n";
-			printf "               The possibilities are:\n";
-			printf "               0 = Account ok\n";
-			printf "               1 = Unregistered ID\n";
-			printf "               2 = Incorrect Password\n";
-			printf "               3 = This ID is expired\n";
-			printf "               4 = Rejected from Server\n";
-			printf "               5 = You have been blocked by the GM Team\n";
-			printf "               6 = Your Game's EXE file is not the latest version\n";
-			printf "               7 = You are Prohibited to log in until...\n";
-			printf "               8 = Server is jammed due to over populated\n";
-			printf "               9 = No MSG\n";
-			printf "               100 = This ID has been totally erased\n";
-			printf "               all other values are 'No MSG', then use state 9 please.\n";
-			printf "  'error_message_#7': message of the code error 6\n";
-			printf "                      = Your are Prohibited to log in until... (packet 0x006a)\n";
-		} elsif (("timeadd" =~ /^\Q$command/ || $command eq "ta") && $command ne "t") { # check 1 letter command: 'ta' or 'ts'?
-			printf "timeadd <account_name> <modifier>\n";
-			printf "  Adds or substracts time from the validity limit of an account.\n";
-			printf "  Modifier is done as follows:\n";
-			printf "    Adjustment value (-1, 1, +1, etc...)\n";
-			printf "    Modified element:\n";
-			printf "      a or y: year\n";
-			printf "      m:  month\n";
-			printf "      j or d: day\n";
-			printf "      h:  hour\n";
-			printf "      mn: minute\n";
-			printf "      s:  second\n";
-			printf "  <example> timeadd testname +1m-2mn1s-6y\n";
-			printf "            this example adds 1 month and 1 second, and substracts 2 minutes\n";
-			printf "            and 6 years at the same time.\n";
-			printf "NOTE: You can not modify a unlimited validity limit.\n";
-			printf "      If you want modify it, you want probably create a limited validity limit.\n";
-			printf "      So, at first, you must set the validity limit to a date/time.\n";
-		} elsif (("timeset" =~ /^\Q$command/ || $command eq "ts") && $command ne "t") { # check 1 letter command: 'ta' or 'ts'?
-			printf "timeset <account_name> yyyy/mm/dd [hh:mm:ss]\n";
-			printf "  Changes the validity limit of an account.\n";
-			printf "  Default time: 23:59:59\n";
-			printf "timeset <account_name> 0\n";
-			printf "  Gives an unlimited validity limit (0 = unlimited).\n";
-		} elsif ($command eq "unban" || ("unbanish" =~ /^\Q$command/ && length($command) >= 4)) {
-			printf "unban/unbanish <account name>\n";
-			printf "  Remove the banishment of an account.\n";
-			printf "  This command works like banset <account_name> 0.\n";
-		} elsif ("unblock" =~ /^\Q$command/ && length($command) >= 4) {
-			printf "unblock <account name>\n";
-			printf "  Set state 0 (Account ok) to an account.\n";
-			printf "  This command works like state <account_name> 0.\n";
-		} elsif ("version" =~ /^\Q$command/) {
-			printf "version\n";
-			printf "  Display the version of the login-server.\n";
-		} elsif ("who" =~ /^\Q$command/) {
-			printf "who <account_name>\n";
-			printf "  Displays complete information of an account.\n";
-		} elsif ("quit" =~ /^\Q$command/ ||
-		         (("end" =~ /^\Q$command/ || "exit" =~ /^\Q$command/) && $command ne "e")) { # check 1 letter command: 'email', 'end' or 'exit'?\n";
-			printf "quit/end/exit\n";
-			printf "  End of the program of administration.\n";
-		} else {
-			if ($receivedcommand ne "") {
-				printf "Unknown command [%s] for help. Displaying of all commands.\n", $receivedcommand;
-			}
-			print << "ENDOFHELP";
- aide/help/?                          -- Display this help
- aide/help/? [command]                -- Display the help of the command
- add <account_name> <sex> <password>  -- Create an account with default email
- ban/banish yyyy/mm/dd hh:mm:ss <account_name> -- Change final date of a ban
- banadd/ba <account_name> <modifier>  -- Add or substract time from the final
-   example: ba apple +1m-2mn1s-2y        date of a banishment of an account
- banset/bs <account_name> yyyy/mm/dd [hh:mm:ss] -- Change final date of a ban
- banset/bs <account_name> 0           -- Un-banish an account
- block <account name>    -- Set state 5 (blocked by the GM Team) to an account
- check <account_name> <password>      -- Check the validity of a password
- create <account_name> <sex> <email> <passwrd> -- Create an account with email
- del <account_name>                   -- Remove an account
- email <account_name> <email>         -- Modify an email of an account
- getcount                             -- Give the number of players online
- gm <account_name> [GM_level]         -- Modify the GM level of an account
- id <account_name>                    -- Give the id of an account
- info <account_id>                    -- Display all information of an account
- kami <message>                       -- Sends a broadcast message (in yellow)
- kamib <message>                      -- Sends a broadcast message (in blue)
- language <language>                  -- Change the language of displaying.
- list/ls [First_id [Last_id]]         -- Display a list of accounts
- listBan/lsBan [First_id [Last_id]]   -- Display a list of accounts
-                                         with state or banished
- listGM/lsGM [First_id [Last_id]]     -- Display a list of GM accounts
- listOK/lsOK [First_id [Last_id]]     -- Display a list of accounts
-                                         without state and not banished
- memo <account_name> <memo>           -- Modify the memo of an account
- name <account_id>                    -- Give the name of an account
- passwd <account_name> <new_password> -- Change the password of an account
- quit/end/exit                        -- End of the program of administation
- reloadGM                             -- Reload GM configuration file
- search <expression>                  -- Seek accounts
- search -e/-r/--expr/--regex <expressn> -- Seek accounts by regular-expression
- sex <nomcompte> <sexe>               -- Modify the sex of an account
- state <account_name> <new_state> <error_message_#7> -- Change the state
- timeadd/ta <account_name> <modifier> -- Add or substract time from the
-   example: ta apple +1m-2mn1s-2y        validity limit of an account
- timeset/ts <account_name> yyyy/mm/dd [hh:mm:ss] -- Change the validify limit
- timeset/ts <account_name> 0         -- Give a unlimited validity limit
- unban/unbanish <account name>       -- Remove the banishment of an account
- unblock <account name>              -- Set state 0 (Account ok) to an account
- version                             -- Gives the version of the login-server
- who <account_name>                  -- Display all information of an account
-ENDOFHELP
-			printf(" Note: To use spaces in an account name, type \"<account name>\" (or ').\n");
-		}
-	}
-
-	return 0;
-}
-#--------------------------------------------------------------------------
-
-# Sub-function: Displaying of the accounts list
-sub listaccount() {
-	my($st, $ed, $listflag) = @_;
-	my($i);
-	my($n) = (0);
-	#      0123456789 01 01234567890123456789012301234 012345 0123456789012345678901234567
-	if ($defaultlanguage eq "F") {
-		print " id_compte GM nom_utilisateur         sexe   count statut\n";
-	} else {
-		print "account_id GM user_name               sex    count state\n";
-	}
-	print "-------------------------------------------------------------------------------\n";
-	while(1) {
-		print $so pack("vV2", 0x7920, $st, $ed);
-		$so->flush();
-		$buf = readso(4);
-		if (unpack("v", $buf) != 0x7921) {
-			if ($defaultlanguage eq "F") {
-				print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-			} else {
-				print "Connection error to the server (incorrect answer).\n";
-			}
-			exit(10);
-		}
-		my($len) = unpack("x2v", $buf);
-		last if ($len <= 4);
-		for($i = 4; $i < $len; $i += 38) {
-			my(@dat) = unpack("VCa24cVV", readso(38));
-			$st = $dat[0] + 1;
-			if ($listflag == 0 ||
-			    ($listflag == 1 && $dat[1] > 0) || # check GM flag
-			    ($listflag == 3 && $dat[5] != 0) || # check with state or banished
-			    ($listflag == 4 && $dat[5] == 0)) { # check without state and not banished
-				printf "%10d %2s %-24s%-5s %6d %-27s\n", $dat[0],
-				        ($dat[1] == 0 ? "  " : $dat[1]),
-				        $dat[2],
-				        ($defaultlanguage eq "F" ? ("Femme","Male","Servr")[$dat[3]] : ("Femal","Male","Servr")[$dat[3]]),
-				        $dat[4],
-				        (($defaultlanguage eq "F" ? "Compte Ok" : "Account OK"),
-				         "Unregistered ID",
-				         "Incorrect Password",
-				         "This ID is expired",
-				         "Rejected from Server",
-				         "Blocked by the GM Team", # You have been blocked by the GM Team
-				         "Your EXE file is too old", # Your Game's EXE file is not the latest version
-				         "Banishement or\n                                                   Prohibited to login until %s", # You are Prohibited to log in until %s
-				         "Server is over populated", # Server is jammed due to over populated
-				         "No MSG",
-				         "This ID is totally erased")[$dat[5] == 100 ? 10 : $dat[5]]; # This ID has been totally erased
-				$n++;
-			}
-		}
-	}
-	if ($defaultlanguage eq "F") {
-		if ($n == 0) {
-			print "Aucun compte trouv�.\n";
-		} elsif ($n == 1) {
-			print "1 compte trouv�.\n";
-		} else {
-			print "$n comptes trouv�s.\n";
-		}
-	} else {
-		if ($n == 0) {
-			print "No account found.\n";
-		} elsif ($n == 1) {
-			print "1 account found.\n";
-		} else {
-			print "$n accounts found.\n";
-		}
-	}
-	return 0;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: add an account with the default e-mail
-sub addaccount() {
-	my($userid, $sex, $passwd) = @_;
-	if ($userid eq "" || !defined($userid)) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un nom de compte svp.\n";
-			print "<exemple> add nomtest Male motdepassetest\n";
-		} else {
-			print "Please input an account name.\n";
-			print "<example> add testname Male testpass\n";
-		}
-		return 136;
-	}
-	if (verify_accountname($userid) == 0) {
-		return 102;
-	}
-#	if ($userid =~ /[^A-Za-z0-9\@-_]/) {
-#		if ($defaultlanguage eq "F") {
-#			print "Caract�re interdit trouv� dans le nom du compte ".$`."[${&}]${'}\n";
-#		} else {
-#			print "Illegal character found in the account name ".$`."[${&}]${'}\n";
-#		}
-#		return 101;
-#	}
-	$sex = uc(substr($sex, 0, 1));
-	if ($sex !~ /^[MF]$/) {
-		if ($defaultlanguage eq "F") {
-			print "Sexe incorrect [$sex]. Entrez M ou F svp.\n";
-		} else {
-			print "Illegal gender [$sex]. Please input M or F.\n";
-		}
-		return 103;
-	}
-	if ($passwd eq "") {
-		return 108 if (($passwd = typepasswd()) eq "");
-	}
-	if (verify_password($passwd) == 0) {
-		return 104;
-	}
-	print $so pack("va24a24a1a40", 0x7930, $userid, $passwd, $sex, "");
-	$so->flush();
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x7931) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 106;
-	}
-	$buf = readso(28);
-	if (unpack("V", $buf) == -1 || unpack("V", $buf) == 4294967295) {
-		if ($defaultlanguage eq "F") {
-			print "Echec � la cr�ation du compte [$userid]. Un compte identique existe d�j�.\n";
-		} else {
-			print "Account [$userid] creation failed. Same account already exists.\n";
-		}
-		return 107;
-	} else {
-		if ($defaultlanguage eq "F") {
-			printf "Compte [$userid] cr�� avec succ�s [id: %d].\n", unpack("V",$buf);
-		} else {
-			printf "Account [$userid] is successfully created [id: %d].\n", unpack("V",$buf);
-		}
-	}
-	return 0;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: add an account with an e-mail
-sub createaccount() {
-	my($userid, $sex, $email, $passwd) = @_;
-	if ($userid eq "") {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un nom de compte svp.\n";
-			print "<exemple> create nomtest Male mon\@email.com motdepassetest\n";
-		} else {
-			print "Please input an account name.\n";
-			print "<example> create testname Male my\@mail.com testpass\n";
-		}
-		return 136;
-	}
-	if (verify_accountname($userid) == 0) {
-		return 102;
-	}
-#	if ($userid =~ /[^A-Za-z0-9\@-_]/) {
-#		if ($defaultlanguage eq "F") {
-#			print "Caract�re interdit trouv� dans le nom du compte ".$`."[${&}]${'}\n";
-#		} else {
-#			print "Illegal character found in the account name ".$`."[${&}]${'}\n";
-#		}
-#		return 101;
-#	}
-	$sex = uc(substr($sex, 0, 1));
-	if ($sex !~ /^[MF]$/) {
-		if ($defaultlanguage eq "F") {
-			print "Sexe incorrect [$sex]. Entrez M ou F svp.\n";
-		} else {
-			print "Illegal gender [$sex]. Please input M or F.\n";
-		}
-		return 103;
-	}
-	if (length($email) < 3) {
-		if ($defaultlanguage eq "F") {
-			print "Email trop courte [$email]. Entrez une e-mail valide svp.\n";
-		} else {
-			print "Email is too short [$email]. Please input a valid e-mail.\n";
-		}
-		return 109;
-	}
-	if (length($email) > 39) {
-		if ($defaultlanguage eq "F") {
-			print "Email trop longue [$email]. Entrez une e-mail de 39 caract�res maximum svp.\n";
-		} else {
-			print "Email is too long [$email]. Please input an e-mail with 39 bytes at the most.\n";
-		}
-		return 109;
-	}
-	if (verify_email($email) == 0) {
-		if ($defaultlanguage eq "F") {
-			print "Email incorrecte [$email]. Entrez une e-mail valide svp.\n";
-		} else {
-			print "Invalid email [$email]. Please input a valid e-mail.\n";
-		}
-		return 109;
-	}
-	if ($passwd eq "") {
-		return 108 if (($passwd = typepasswd()) eq "");
-	}
-	if (verify_password($passwd) == 0) {
-		return 104;
-	}
-	print $so pack("va24a24a1a40", 0x7930, $userid, $passwd, $sex, $email);
-	$so->flush();
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x7931) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 106;
-	}
-	$buf = readso(28);
-	if (unpack("V", $buf) == -1 || unpack("V", $buf) == 4294967295) {
-		if ($defaultlanguage eq "F") {
-			print "Echec � la cr�ation du compte [$userid]. Un compte identique existe d�j�.\n";
-		} else {
-			print "Account [$userid] creation failed. Same account already exists.\n";
-		}
-		return 107;
-	} else {
-		if ($defaultlanguage eq "F") {
-			printf "Compte [$userid] cr�� avec succ�s [id: %d].\n", unpack("V",$buf);
-		} else {
-			printf "Account [$userid] is successfully created [id: %d].\n", unpack("V",$buf);
-		}
-	}
-	return 0;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: deletion of an account
-sub delaccount() {
-	my($userid) = @_;
-	if ($userid eq "") {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un nom de compte svp.\n";
-			print "<exemple> del nomtestasupprimer\n";
-		} else {
-			print "Please input an account name.\n";
-			print "<example> del testnametodelete\n";
-		}
-		return 136;
-	}
-	if (verify_accountname($userid) == 0) {
-		return 102;
-	}
-	if ($defaultlanguage eq "F") {
-		print "** Etes-vous vraiment s�r de vouloir SUPPRIMER le compte [$userid]? (o/n) ";
-	} else {
-		print "** Are you really sure to DELETE account [$userid]? (y/n) ";
-	}
-	if (lc(substr(<STDIN>, 0, 1)) !~ /[oy]/) {
-		if ($defaultlanguage eq "F") {
-			print "Suppression annul�e\n.";
-		} else {
-			print "Deletion canceled\n";
-		}
-		return 121;
-	}
-	print $so pack("va24", 0x7932, $userid);
-	$so->flush();
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x7933) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 122;
-	}
-	$buf = readso(28);
-	my($id2, $name) = unpack("Va24", $buf);
-	while (length($name) > 0 && substr($name, length($name)-1, 1) eq chr(0)) {
-		chop($name);
-	};
-	if ($id2 == -1 || $id2 == 4294967295) {
-		if ($defaultlanguage eq "F") {
-			print "Echec de la suppression du compte [$userid]. Le compte n'existe pas.\n";
-		} else {
-			print "Account [$userid] deletion failed. Account doesn't exist.\n";
-		}
-		return 123;
-	} else {
-		if ($defaultlanguage eq "F") {
-			print "Compte [$name][id: $id2] SUPPRIME avec succ�s.\n";
-		} else {
-			print "Account [$name][id: $id2] is successfully DELETED.\n";
-		}
-	}
-	return 0;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: modification of a password
-sub changepasswd() {
-	my($userid, $passwd) = @_;
-	if ($userid eq "") {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un nom de compte svp.\n";
-			print "<exemple> passwd nomtest nouveaumotdepasse\n";
-		} else {
-			print "Please input an account name.\n";
-			print "<example> passwd testname newpassword\n";
-		}
-		return 136;
-	}
-	if (verify_accountname($userid) == 0) {
-		return 102;
-	}
-	if ($passwd eq "") {
-		return 134 if (($passwd = typepasswd()) eq "");
-	}
-	if (verify_password($passwd) == 0) {
-		return 131;
-	}
-	print $so pack("va24a24", 0x7934, $userid,$passwd);
-	$so->flush();
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x7935) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 132;
-	}
-	$buf = readso(28);
-	my($id2, $name) = unpack("Va24", $buf);
-	while (length($name) > 0 && substr($name, length($name)-1, 1) eq chr(0)) {
-		chop($name);
-	};
-	if ($id2 == -1 || $id2 == 4294967295) {
-		if ($defaultlanguage eq "F") {
-			print "Echec de la modification du mot de passe du compte [$userid].\n";
-			print "Le compte [$userid] n'existe pas.\n";
-		} else {
-			print "Account [$userid] password changing failed.\n";
-			print "Account [$userid] doesn't exist.\n";
-		}
-		return 133;
-	} else {
-		if ($defaultlanguage eq "F") {
-			print "Modification du mot de passe du compte [$name][id: $id2] r�ussie.\n";
-		} else {
-			print "Account [$name][id: $id2] password successfully changed.\n";
-		}
-	}
-	return 130;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: modification of an account e-mail
-sub changeemail() {
-	my($userid, $email) = @_;
-	if ($userid eq "") {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un nom de compte svp.\n";
-			print "<exemple> email testname nouveauemail\n";
-		} else {
-			print "Please input an account name.\n";
-			print "<example> email testname newemail\n";
-		}
-		return 136;
-	}
-	if (verify_accountname($userid) == 0) {
-		return 102;
-	}
-	if (length($email) < 3) {
-		if ($defaultlanguage eq "F") {
-			print "Email trop courte [$email]. Entrez une e-mail valide svp.\n";
-		} else {
-			print "Email is too short [$email]. Please input a valid e-mail.\n";
-		}
-		return 109;
-	}
-	if (length($email) > 39) {
-		if ($defaultlanguage eq "F") {
-			print "Email trop longue [$email]. Entrez une e-mail de 39 caract�res maximum svp.\n";
-		} else {
-			print "Email is too long [$email]. Please input an e-mail with 39 bytes at the most.\n";
-		}
-		return 109;
-	}
-	if (verify_email($email) == 0) {
-		if ($defaultlanguage eq "F") {
-			print "Email incorrect [$email]. Entrez une e-mail valide svp.\n";
-		} else {
-			print "Invalid email [$email]. Please input a valid e-mail.\n";
-		}
-		return 109;
-	}
-	print $so pack("va24a40", 0x7940, $userid, $email);
-	$so->flush();
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x7941) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 162;
-	}
-	$buf = readso(28);
-	my($id2, $name) = unpack("Va24", $buf);
-	while (length($name) > 0 && substr($name, length($name)-1, 1) eq chr(0)) {
-		chop($name);
-	};
-	if ($id2 == -1 || $id2 == 4294967295) {
-		if ($defaultlanguage eq "F") {
-			print "Echec de la modification de l'e-mail du compte [$userid].\n";
-			print "Le compte [$userid] n'existe pas.\n";
-		} else {
-			print "Account [$userid] e-mail changing failed.\n";
-			print "Account [$userid] doesn't exist.\n";
-		}
-		return 133;
-	} else {
-		if ($defaultlanguage eq "F") {
-			print "Modification de l'e-mail du compte [$name][id: $id2] r�ussie.\n";
-		} else {
-			print "Account [$name][id: $id2] e-mail successfully changed.\n";
-		}
-	}
-	return 160;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: search of accounts
-sub searchaccount() {
-	my($p1, $p2) = @_;
-	my($exp) = ("");
-	if ($p1 eq "-e" || $p1 eq "-r" || $p1 eq "--regex" || $p1 eq "--expr") {
-		if ($p2 eq "") {
-			if ($defaultlanguage eq "F") {
-				print "Entrez une expression r�guli�re ou utilisez 'ls' pour avoir tous les comptes.\n";
-			} else {
-				print "Input a regular expression or use 'ls' to obtain all accounts.\n";
-			}
-			return 141;
-		}
-		$exp = $p2;
-	} else {
-		if ($p1 eq "") {
-			if ($defaultlanguage eq "F") {
-				print "Entrez une cha�ne ou utilisez 'ls' pour avoir tous les comptes.\n";
-			} else {
-				print "Input a string or use 'ls' to obtain all accounts.\n";
-			}
-			return 141;
-		}
-		my($c) = 0;
-		$exp = lc($p1);
-		$exp =~ s/([\@])/\\$1/g;
-		$c += $exp =~ s/([\-\[\]])/\\$1/g;
-		$c += $exp =~ s/([\*\?])/.$1/g;
-		$c += $exp =~ s/\\\[(.)\\\-(.)\\\]/[$1-$2]/g;
-		$exp = "^$exp\$" if $c;
-	}
-	if (eval{ "" =~ /$exp/; }, $@) {
-		if ($defaultlanguage eq "F") {
-			print "Expression r�guli�re non reconnue.\n";
-		} else {
-			print "Regular-Expression compiling failed.\n";
-		}
-		return 141;
-	}
-	my($i);
-	my($n, $st) = (0, 0);
-	#      0123456789 01 01234567890123456789012301234 012345 0123456789012345678901234567
-	if ($defaultlanguage eq "F") {
-		print " id_compte GM nom_utilisateur         sexe   count statut\n";
-	} else {
-		print "account_id GM user_name               sex    count state\n";
-	}
-	print "-------------------------------------------------------------------------------\n";
-	while(1) {
-		print $so pack("vV2", 0x7920, $st, 0);
-		$so->flush();
-		$buf = readso(4);
-		if (unpack("v", $buf) != 0x7921) {
-			if ($defaultlanguage eq "F") {
-				print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-			} else {
-				print "Connection error to the server (incorrect answer).\n";
-			}
-			exit(10);
-		}
-		my($len) = unpack("x2v", $buf);
-		last if ($len <= 4);
-		for($i = 4; $i < $len; $i += 38) {
-			my(@dat) = unpack("VCa24cVV", readso(38));
-			$st = $dat[0] + 1;
-			next if (lc($dat[2]) !~ /$exp/);
-			printf "%10d %2s %-24s%-5s %6d %-27s\n", $dat[0],
-			        ($dat[1] == 0 ? "  " : $dat[1]),
-			        $dat[2],
-			        ($defaultlanguage eq "F" ? ("Femme","Male","Servr")[$dat[3]] : ("Femal","Male","Servr")[$dat[3]]),
-			        $dat[4],
-			        (($defaultlanguage eq "F" ? "Compte Ok" : "Account OK"),
-			         "Unregistered ID",
-			         "Incorrect Password",
-			         "This ID is expired",
-			         "Rejected from Server",
-			         "Blocked by the GM Team", # You have been blocked by the GM Team
-			         "Your EXE file is too old", # Your Game's EXE file is not the latest version
-			         "Banishement or\n                                                   Prohibited to login until %s", # You are Prohibited to log in until %s
-			         "Server is over populated", # Server is jammed due to over populated
-			         "No MSG",
-			         "This ID is totally erased")[$dat[5] == 100 ? 10 : $dat[5]]; # This ID has been totally erased
-			$n++;
-		}
-	}
-	if ($defaultlanguage eq "F") {
-		if ($n == 0) {
-			print "Aucun compte trouv�.\n";
-		} elsif ($n == 1) {
-			print "1 compte trouv�.\n";
-		} else {
-			print "$n comptes trouv�s.\n";
-		}
-	} else {
-		if ($n == 0) {
-			print "No account found.\n";
-		} elsif ($n == 1) {
-			print "1 account found.\n";
-		} else {
-			print "$n accounts found.\n";
-		}
-	}
-	return 0;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: modify the sex of an account
-sub changesex() {
-	my($userid, $sex) = @_;
-	if ($userid eq "" || !defined($userid)) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un nom de compte svp.\n";
-			print "<exemple> sex nomtest Male\n";
-		} else {
-			print "Please input an account name.\n";
-			print "<example> sex testname Male\n";
-		}
-		return 136;
-	}
-	if (verify_accountname($userid) == 0) {
-		return 102;
-	}
-#	if ($userid =~ /[^A-Za-z0-9\@-_]/) {
-#		if ($defaultlanguage eq "F") {
-#			print "Caract�re interdit trouv� dans le nom du compte ".$`."[${&}]${'}\n";
-#		} else {
-#			print "Illegal character found in the account name ".$`."[${&}]${'}\n";
-#		}
-#		return 101;
-#	}
-	$sex = uc(substr($sex, 0, 1));
-	if ($sex !~ /^[MF]$/) {
-		if ($defaultlanguage eq "F") {
-			print "Sexe incorrect [$sex]. Entrez M ou F svp.\n";
-		} else {
-			print "Illegal gender [$sex]. Please input M or F.\n";
-		}
-		return 103;
-	}
-	print $so pack("va24a1", 0x793c, $userid, $sex);
-	$so->flush();
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x793d) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 152;
-	}
-	$buf = readso(28);
-	my($id2, $name) = unpack("Va24", $buf);
-	while (length($name) > 0 && substr($name, length($name)-1, 1) eq chr(0)) {
-		chop($name);
-	};
-	if ($id2 == -1 || $id2 == 4294967295) {
-		if ($defaultlanguage eq "F") {
-			print "Echec du changement du sexe du compte [$userid].\n";
-			print "Le compte n'existe pas ou le sexe est d�j� celui demand�.\n";
-		} else {
-			print "Account [$userid] sex changing failed.\n";
-			print "Account doesn't exist or the sex is already the good sex.\n";
-		}
-	} else {
-		if ($defaultlanguage eq "F") {
-			print "Sexe du compte [$name][id: $id2] chang� avec succ�s.\n";
-		} else {
-			print "Account [$name][id: $id2] sex successfully changed.\n";
-		}
-	}
-	return 0;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: modify the GM level of an account
-sub changegmlevel() {
-	my($userid, $gm_level) = @_;
-	if ($userid eq "" || !defined($userid)) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un nom de compte svp.\n";
-			print "<exemple> gm nomtest 80\n";
-		} else {
-			print "Please input an account name.\n";
-			print "<example> gm testname 80\n";
-		}
-		return 136;
-	}
-	if (verify_accountname($userid) == 0) {
-		return 102;
-	}
-#	if ($userid =~ /[^A-Za-z0-9\@-_]/) {
-#		if ($defaultlanguage eq "F") {
-#			print "Caract�re interdit trouv� dans le nom du compte ".$`."[${&}]${'}\n";
-#		} else {
-#			print "Illegal character found in the account name ".$`."[${&}]${'}\n";
-#		}
-#		return 101;
-#	}
-	$gm_level = int($gm_level);
-	if ($gm_level < 0 || $gm_level > 99) {
-		if ($defaultlanguage eq "F") {
-			print "Niveau de GM incorrect [$gm_level]. Entrez une valeur de 0 � 99 svp.\n";
-		} else {
-			print "Illegal GM level [$gm_level]. Please input a value from 0 to 99.\n";
-		}
-		return 103;
-	}
-	print $so pack("va24C", 0x793e, $userid, $gm_level);
-	$so->flush();
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x793f) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 152;
-	}
-	$buf = readso(28);
-	my($id2, $name) = unpack("Va24", $buf);
-	while (length($name) > 0 && substr($name, length($name)-1, 1) eq chr(0)) {
-		chop($name);
-	};
-	if ($id2 == -1 || $id2 == 4294967295) {
-		if ($defaultlanguage eq "F") {
-			print "Echec du changement du niveau de GM du compte [$userid].\n";
-			print "Le compte n'existe pas, le niveau de GM est d�j� celui demand�,\n";
-			print "ou il est impossible de modifier le fichier des comptes GM.\n";
-		} else {
-			print "Account [$userid] GM level changing failed.\n";
-			print "Account doesn't exist, the GM level is already the good GM level,\n";
-			print "or it's impossible to modify the GM accounts file.\n";
-		}
-	} else {
-		if ($defaultlanguage eq "F") {
-			print "Niveau de GM du compte [$name][id: $id2] chang� avec succ�s.\n";
-		} else {
-			print "Account [$name][id: $id2] GM level successfully changed.\n";
-		}
-	}
-	return 0;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Modification of a state
-sub changestate {
-	my($userid, $s, $error_message) = @_;
-	# Valid values: 0: ok, or value of the 0x006a packet + 1
-	if ($s eq "" || (($s < 0 || $s > 9) && $s != 100)) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez une des valeurs suivantes svp:\n";
-			print "  0 = Compte ok             6 = Your Game's EXE file is not the latest version\n";
-		} else {
-			print "Please input one of these values:\n";
-			print "  0 = Account ok            6 = Your Game's EXE file is not the latest version\n";
-		}
-		print "  1 = Unregistered ID       7 = You are Prohibited to log in until %s\n";
-		print "  2 = Incorrect Password    8 = Server is jammed due to over populated\n";
-		print "  3 = This ID is expired    9 = No MSG\n";
-		print "  4 = Rejected from Server  100 = This ID has been totally erased\n";
-		print "  5 = You have been blocked by the GM Team\n";
-		if ($defaultlanguage eq "F") {
-			print "<exemples> state nomtest 5\n";
-			print "           state nomtest 7 fin de votre ban\n";
-			print "           block <nom du compte>\n";
-			print "           unblock <nom du compte>\n";
-		} else {
-			print "<examples> state testname 5\n";
-			print "           state testname 7 end of your ban\n";
-			print "           block <account name>\n";
-			print "           unblock <account name>\n";
-		}
-		return 151;
-	}
-	if ($userid eq "") {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un nom de compte svp.\n";
-			print "<exemples> state nomtest 5\n";
-			print "           state nomtest 7 fin de votre ban\n";
-			print "           block <nom du compte>\n";
-			print "           unblock <nom du compte>\n";
-		} else {
-			print "Please input an account name.\n";
-			print "<examples> state testname 5\n";
-			print "           state testname 7 end of your ban\n";
-			print "           block <account name>\n";
-			print "           unblock <account name>\n";
-		}
-		return 136;
-	}
-	if (verify_accountname($userid) == 0) {
-		return 102;
-	}
-	if ($s != 7) {
-		$error_message = "-";
-	} else {
-		if (length($error_message) < 1) {
-			if ($defaultlanguage eq "F") {
-				print "Message d'erreur trop court. Entrez un message de 1-19 caract�res.\n";
-			} else {
-				print "Error message is too short. Please input a message of 1-19 bytes.\n";
-			}
-			return 102;
-		}
-		if (length($error_message) > 19) {
-			if ($defaultlanguage eq "F") {
-				print "Message d'erreur trop long. Entrez un message de 1-19 caract�res.\n";
-			} else {
-				print "Error message is too long. Please input a message of 1-19 bytes.\n";
-			}
-			return 102;
-		}
-	}
-	print $so pack("va24Va20", 0x7936, $userid, $s, $error_message);
-	$so->flush();
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x7937) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 152;
-	}
-	$buf = readso(32);
-	my(@dat) = unpack("Va24V", $buf);
-	while (length($dat[1]) > 0 && substr($dat[1], length($dat[1])-1, 1) eq chr(0)) {
-		chop($dat[1]);
-	};
-	if ($dat[0] != -1 && $dat[0] != 4294967295) {
-		if ($defaultlanguage eq "F") {
-			print "Statut du compte [$dat[1]][id: $dat[0]] chang� avec succ�s en [";
-		} else {
-			print "Account [$dat[1]][id: $dat[0]] state successfully changed in [";
-		}
-		print ((($defaultlanguage eq "F" ? "Compte Ok" : "Account OK"),
-		  "Unregistered ID",
-		  "Incorrect Password",
-		  "This ID is expired",
-		  "Rejected from Server",
-		  "You have been blocked by the GM Team",
-		  "Your Game's EXE file is not the latest version",
-		  "You are Prohibited to log in until %s",
-		  "Server is jammed due to over populated",
-		  "No MSG",
-		  "This ID has been totally erased")[$dat[2] == 100 ? 10 : $dat[2]]);
-		print "].\n";
-	} else {
-		if ($defaultlanguage eq "F") {
-			print "Echec du changement du statut du compte [$userid]. Le compte n'existe pas.\n";
-		} else {
-			print "Account [$userid] state changing failed. Account doesn't exist.\n";
-		}
-	}
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Displaying of the number of online players
-sub getlogincount {
-	# Request to the login-server
-	print $so pack("v", 0x7938);
-	$so->flush();
-
-	$buf = readso(4);
-	# Connection failed
-	if (unpack("v", $buf) != 0x7939) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		exit(3);
-	}
-
-	# Get length of the received packet
-	my($len) = unpack("x2v", $buf) - 4;
-
-	# Read information of the servers
-	if ($len < 1) {
-		if ($defaultlanguage eq "F") {
-			printf "  Aucun serveur n'est connect� au login serveur.\n";
-		} else {
-			printf "  No server is connected to the login-server.\n";
-		}
-	} else {
-		my(@slist) = ();
-		for(; $len > 0; $len -= 32) {
-			my($name, $count) = unpack("x6 a20 V", readso(32));
-			$name = substr($name, 0, index($name, "\0"));
-			push @slist, [ $name, $count ];
-		}
-		# Displaying of result
-		my($i);
-		if ($defaultlanguage eq "F") {
-			printf "  Nombre de joueurs en ligne (serveur: nb):\n";
-		} else {
-			printf "  Number of online players (server: number).\n";
-		}
-		foreach $i(@slist) {
-			printf "    %-20s : %5d\n", $i->[0], $i->[1];
-		}
-	}
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Modification of a memo field
-sub changememo {
-	my($userid, $memo) = @_;
-	if ($userid eq "") {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un nom de compte svp.\n";
-			print "<exemple> memo nomtest nouveau memo\n";
-		} else {
-			print "Please input an account name.\n";
-			print "<example> memo testname new memo\n";
-		}
-		return 136;
-	}
-	if (verify_accountname($userid) == 0) {
-		return 102;
-	}
-	if (length($memo) > 254) {
-		if ($defaultlanguage eq "F") {
-			print "M�mo trop long (".length($memo)." caract�res).\n";
-			print "Entrez un m�mo de 254 caract�res maximum svp.\n";
-		} else {
-			print "Memo is too long (".length($memo)." characters).\n";
-			print "Please input a memo of 254 bytes at the maximum.\n";
-		}
-		return 102;
-	}
-	if (length($memo) == 0) {
-		print $so pack("va24v", 0x7942, $userid, 0);
-	} else {
-		print $so pack("va24va".length($memo), 0x7942, $userid, length($memo), $memo);
-	}
-	$so->flush();
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x7943) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 152;
-	}
-	$buf = readso(28);
-	my($id2, $name) = unpack("Va24", $buf);
-	while (length($name) > 0 && substr($name, length($name)-1, 1) eq chr(0)) {
-		chop($name);
-	};
-	if ($id2 == -1 || $id2 == 4294967295) {
-		if ($defaultlanguage eq "F") {
-			print "Echec du changement du m�mo du compte [$userid]. Le compte n'existe pas.\n";
-		} else {
-			print "Account [$userid] memo changing failed. Account doesn't exist.\n";
-		}
-	} else {
-		if ($defaultlanguage eq "F") {
-			print "M�mo du compte [$name][id: $id2] chang� avec succ�s.\n";
-		} else {
-			print "Account [$name][id: $id2] memo successfully changed.\n";
-		}
-	}
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Request to obtain an account id
-sub idaccount() {
-	my($userid) = @_;
-	if ($userid eq "") {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un nom de compte svp.\n";
-			print "<exemple> id nomtest\n";
-		} else {
-			print "Please input an account name.\n";
-			print "<example> id testname\n";
-		}
-		return 136;
-	}
-	if (verify_accountname($userid) == 0) {
-		return 102;
-	}
-	print $so pack("va24", 0x7944, $userid);
-	$so->flush();
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x7945) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 122;
-	}
-	$buf = readso(28);
-	my($id2, $name) = unpack("Va24", $buf);
-	while (length($name) > 0 && substr($name, length($name)-1, 1) eq chr(0)) {
-		chop($name);
-	};
-	if ($id2 == -1 || $id2 == 4294967295) {
-		if ($defaultlanguage eq "F") {
-			print "Impossible de trouver l'id du compte [$userid]. Le compte n'existe pas.\n";
-		} else {
-			print "Unabled to find the account [$userid] id. Account doesn't exist.\n";
-		}
-		return 123;
-	} else {
-		if ($defaultlanguage eq "F") {
-			print "Le compte [$name] a pour id: $id2.\n";
-		} else {
-			print "The account [$name] have the id: $id2.\n";
-		}
-	}
-	return 0;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Request to obtain an account name
-sub nameaccount() {
-	my($id) = @_;
-	if ($id < 0) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un id ayant une valeur positive svp.\n";
-		} else {
-			print "Please input a positive value for the id.\n";
-		}
-		return 136;
-	}
-	print $so pack("vV", 0x7946, $id);
-	$so->flush();
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x7947) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 122;
-	}
-	$buf = readso(28);
-	my($id2, $name) = unpack("Va24", $buf);
-	while (length($name) > 0 && substr($name, length($name)-1, 1) eq chr(0)) {
-		chop($name);
-	};
-	if (length($name) == 0 || $name eq "") {
-		if ($defaultlanguage eq "F") {
-			print "Impossible de trouver le nom du compte [id: $id2]. Le compte n'existe pas.\n";
-		} else {
-			print "Unabled to find the account [id: $id2] name. Account doesn't exist.\n";
-		}
-		return 123;
-	} else {
-		if ($defaultlanguage eq "F") {
-			print "Le compte [id: $id2] a pour nom: $name.\n";
-		} else {
-			print "The account [id: $id2] have the name: $name.\n";
-		}
-	}
-	return 0;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Set a validity limit of an account
-sub timesetaccount() {
-	my($userid, $date, $time) = @_;
-	if ($userid eq "") {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un nom de compte svp.\n";
-			print "<exemple>: timeset <nom_du_compte> aaaa/mm/jj [hh:mm:ss]\n";
-			print "           timeset <nom_du_compte> 0    (0 = illimit�)\n";
-			printf "          Heure par d�faut [hh:mm:ss]: 23:59:59\n";
-		} else {
-			print "Please input an account name.\n";
-			print "<example>: timeset <account_name> yyyy/mm/dd [hh:mm:ss]\n";
-			print "           timeset <account_name> 0   (0 = unlimited)\n";
-			printf "          Default time [hh:mm:ss]: 23:59:59\n";
-		}
-		return 136;
-	}
-	if (verify_accountname($userid) == 0) {
-		return 102;
-	}
-	my($year, $month, $day) = split(/[.\-\/]/, $date);
-	my($hour, $minute, $second) = split(/:/, $time);
-	if ($time eq "") {
-		$hour = 23;
-		$minute = 59;
-		$second = 59;
-	}
-	my($timestamp);
-	if ($year eq "" ||
-	    ($year != 0 && ($month eq "" || $day eq "" || $hour eq "" || $minute eq "" || $second eq ""))) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez 0 ou une date et une heure svp (format: 0 ou aaaa/mm/jj hh:mm:ss).\n";
-		} else {
-			print "Please input 0 or a date and a time (format: 0 or yyyy/mm/dd hh:mm:ss).\n";
-		}
-		return 102;
-	}
-	if ($year == 0) {
-		$timestamp = 0;
-	} else {
-		if ($year < 70) {
-			$year = $year + 100;
-		}
-		if ($year >= 1900) {
-			$year = $year - 1900;
-		}
-		if ($month < 1 || $month > 12) {
-			if ($defaultlanguage eq "F") {
-				print "Entrez un mois correct svp (entre 1 et 12).\n";
-			} else {
-				print "Please give a correct value for the month (from 1 to 12).\n";
-			}
-			return 102;
-		}
-		$month = $month - 1;
-		if ($day < 1 || $day > 31) {
-			if ($defaultlanguage eq "F") {
-				print "Entrez un jour correct svp (entre 1 et 31).\n";
-			} else {
-				print "Please give a correct value for the day (from 1 to 31).\n";
-			}
-			return 102;
-		}
-		if ((($month == 3 || $month == 5 || $month == 8 || $month == 10) && $day > 30) ||
-		    ($month == 1 && $day > 29)) {
-			if ($defaultlanguage eq "F") {
-				print "Entrez un jour correct en fonction du mois svp.\n";
-			} else {
-				print "Please give a correct value for a day of this month.\n";
-			}
-			return 102;
-		}
-		if ($hour < 0 || $hour > 23) {
-			if ($defaultlanguage eq "F") {
-				print "Entrez une heure correcte svp (entre 0 et 23).\n";
-			} else {
-				print "Please give a correct value for the hour (from 0 to 23).\n";
-			}
-			return 102;
-		}
-		if ($minute < 0 || $minute > 59) {
-			if ($defaultlanguage eq "F") {
-				print "Entrez des minutes correctes svp (entre 0 et 59).\n";
-			} else {
-				print "Please give a correct value for the minutes (from 0 to 59).\n";
-			}
-			return 102;
-		}
-		if ($second < 0 || $second > 59) {
-			if ($defaultlanguage eq "F") {
-				print "Entrez des secondes correctes svp (entre 0 et 59).\n";
-			} else {
-				print "Please give a correct value for the seconds (from 0 to 59).\n";
-			}
-			return 102;
-		}
-		$timestamp = POSIX::mktime($second, $minute, $hour, $day, $month, $year, 0, 0, -1); # -1: no winter/summer time modification
-		if ($timestamp == undef) {
-			if ($defaultlanguage eq "F") {
-				print "Date incorrecte.\n";
-				print "Ajoutez 0 ou une date et une heure svp (format: 0 ou aaaa/mm/jj hh:mm:ss).\n";
-			} else {
-				print "Invalid date.\n";
-				print "Please add 0 or a date and a time (format: 0 or yyyy/mm/dd hh:mm:ss).\n";
-			}
-			return 102;
-		}
-	}
-
-	print $so pack("va24V", 0x7948, $userid, $timestamp);
-	$so->flush();
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x7949) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 152;
-	}
-	$buf = readso(32);
-	my(@dat) = unpack("Va24V", $buf);
-	while (length($dat[1]) > 0 && substr($dat[1], length($dat[1])-1, 1) eq chr(0)) {
-		chop($dat[1]);
-	};
-	if ($dat[0] != -1 && $dat[0] != 4294967295) {
-		if ($defaultlanguage eq "F") {
-			print "Limite de validit� du compte [$dat[1]][id: $dat[0]] chang�e avec succ�s ".
-			($dat[2] == 0 ? "en [illimit�].\n" : "pour �tre jusqu'au ".(POSIX::ctime($dat[2])));
-		} else {
-			print "Validity Limit of the account [$dat[1]][id: $dat[0]] successfully changed ".
-			($dat[2] == 0 ? "to [unlimited].\n" : "to be until ".(POSIX::ctime($dat[2])));
-		}
-		# localtime($dat[2]) is also possible to display instead of POSIX::ctime.
-	} else {
-		if ($defaultlanguage eq "F") {
-			print "Echec du changement de la validit� du compte [$userid]. Le compte n'existe pas.\n";
-		} else {
-			print "Account [$userid] validity limit changing failed. Account doesn't exist.\n";
-		}
-	}
-
-	return 0;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Add/substract time to the validity limit of an account
-sub timeaddaccount() {
-	my($userid, $modif) = @_;
-	if ($userid eq "") {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un nom de compte svp.\n";
-			print "  <exemple> timeadd nomtest +1m-2mn1s-6y\n";
-			print "            Cette exemple ajoute 1 mois et 1 seconde, et soustrait 2 minutes\n";
-			print "            et 6 ans dans le m�me temps.\n";
-		} else {
-			print "Please input an account name.\n";
-			print "  <example> timeadd testname +1m-2mn1s-6y\n";
-			print "            this example adds 1 month and 1 second, and substracts 2 minutes\n";
-			print "            and 6 years at the same time.\n";
-		}
-		return 136;
-	}
-	if (verify_accountname($userid) == 0) {
-		return 102;
-	}
-	my($year, $month, $day) = (0, 0 ,0);
-	my($hour, $minute, $second) = (0, 0 ,0);
-
-	$modif = lc($modif);
-	while (length($modif) > 0) {
-		my($value) = int($modif);
-		if ($value == 0) {
-			$modif = substr($modif, 1);
-		} else {
-			if (substr($modif, 0, 1) =~ /[\-\+]/) {
-				$modif = substr($modif, 1);
-			}
-			while (length($modif) > 0 && substr($modif, 0, 1) =~ /[0-9]/) {
-				$modif = substr($modif, 1);
-			}
-			if (index($modif, "s") == 0) {
-				$second = $value;
-				$modif = substr($modif, 1);
-			} elsif (index($modif, "mn") == 0) {
-				$minute = $value;
-				$modif = substr($modif, 2);
-			} elsif (index($modif, "h") == 0) {
-				$hour = $value;
-				$modif = substr($modif, 1);
-			} elsif (index($modif, "d") == 0 || index($modif, "j") == 0) {
-				$day = $value;
-				$modif = substr($modif, 1);
-			} elsif (index($modif, "m") == 0) {
-				$month = $value;
-				$modif = substr($modif, 1);
-			} elsif (index($modif, "y") == 0 || index($modif, "a") == 0) {
-				$year = $value;
-				$modif = substr($modif, 1);
-			} else {
-				$modif = substr($modif, 1);
-			}
-		}
-	}
-
-	if ($defaultlanguage eq "F") {
-		print " ann�e:   $year\n";
-		print " mois:    $month\n";
-		print " jour:    $day\n";
-		print " heure:   $hour\n";
-		print " minute:  $minute\n";
-		print " seconde: $second\n";
-	} else {
-		print " year:   $year\n";
-		print " month:  $month\n";
-		print " day:    $day\n";
-		print " hour:   $hour\n";
-		print " minute: $minute\n";
-		print " second: $second\n";
-	}
-
-	if ($year == 0 && $month == 0 && $day == 0 && $hour == 0 && $minute == 0 && $second == 0) {
-		if ($defaultlanguage eq "F") {
-			print "Vous devez entrer un ajustement avec cette commande, svp:\n";
-			print "  Valeur d'ajustement (-1, 1, +1, etc...)\n";
-			print "  Element modifi�:\n";
-			print "    a ou y: ann�e\n";
-			print "    m:      mois\n";
-			print "    j ou d: jour\n";
-			print "    h:      heure\n";
-			print "    mn:     minute\n";
-			print "    s:      seconde\n";
-			print "  <exemple> timeadd nomtest +1m-2mn1s-6y\n";
-			print "            Cette exemple ajoute 1 mois et 1 seconde, et soustrait 2 minutes\n";
-			print "            et 6 ans dans le m�me temps.\n";
-		} else {
-			print "Please give an adjustment with this command:\n";
-			print "  Adjustment value (-1, 1, +1, etc...)\n";
-			print "  Modified element:\n";
-			print "    a or y: year\n";
-			print "    m:      month\n";
-			print "    j or d: day\n";
-			print "    h:       hour\n";
-			print "    mn:      minute\n";
-			print "    s:       second\n";
-			print "  <example> timeadd testname +1m-2mn1s-6y\n";
-			print "            this example adds 1 month and 1 second, and substracts 2 minutes\n";
-			print "            and 6 years at the same time.\n";
-		}
-		return 137;
-	}
-	if ($year > 127 || $year < -127) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un ajustement d'ann�es correct (de -127 � 127), svp.\n";
-		} else {
-			print "Please give a correct adjustment for the years (from -127 to 127).\n";
-		}
-		return 137;
-	}
-	if ($month > 255 || $month < -255) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un ajustement de mois correct (de -255 � 255), svp.\n";
-		} else {
-			print "Please give a correct adjustment for the months (from -255 to 255).\n";
-		}
-		return 137;
-	}
-	if ($day > 32767 || $day < -32767) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un ajustement de jours correct (de -32767 � 32767), svp.\n";
-		} else {
-			print "Please give a correct adjustment for the days (from -32767 to 32767).\n";
-		}
-		return 137;
-	}
-	if ($hour > 32767 || $hour < -32767) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un ajustement d'heures correct (de -32767 � 32767), svp.\n";
-		} else {
-			print "Please give a correct adjustment for the hours (from -32767 to 32767).\n";
-		}
-		return 137;
-	}
-	if ($minute > 32767 || $minute < -32767) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un ajustement de minutes correct (de -32767 � 32767), svp.\n";
-		} else {
-			print "Please give a correct adjustment for the minutes (from -32767 to 32767).\n";
-		}
-		return 137;
-	}
-	if ($second > 32767 || $second < -32767) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un ajustement de secondes correct (de -32767 � 32767), svp.\n";
-		} else {
-			print "Please give a correct adjustment for the seconds (from -32767 to 32767).\n";
-		}
-		return 137;
-	}
-
-	print $so pack("va24vvvvvv", 0x7950, $userid, $year, $month, $day, $hour, $minute, $second);
-	$so->flush();
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x7951) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 152;
-	}
-	$buf = readso(32);
-	my(@dat) = unpack("Va24V", $buf);
-	while (length($dat[1]) > 0 && substr($dat[1], length($dat[1])-1, 1) eq chr(0)) {
-		chop($dat[1]);
-	};
-	if ($dat[0] == -1 || $dat[0] == 4294967295) {
-		if ($defaultlanguage eq "F") {
-			print "Echec du changement de la validit� du compte [$userid]. Le compte n'existe pas.\n";
-		} else {
-			print "Account [$userid] validity limit changing failed. Account doesn't exist.\n";
-		}
-	} elsif ($dat[2] == 0) {
-		if ($defaultlanguage eq "F") {
-			print "Limite de validit� du compte [$dat[1]][id: $dat[0]] inchang�e.\n";
-			print "Le compte a une validit� illimit�e ou\n";
-			print "la modification est impossible avec les ajustements demand�s.\n";
-		} else {
-			print "Validity limit of the account [$dat[1]][id: $dat[0]] unchanged.\n";
-			print "The account have an unlimited validity limit or\n";
-			print "the changing is impossible with the proposed adjustments.\n";
-		}
-	} else {
-		if ($defaultlanguage eq "F") {
-			print "Limite de validit� du compte [$dat[1]][id: $dat[0]] chang�e avec succ�s ".
-			($dat[2] == 0 ? "en [illimit�].\n" : "pour �tre jusqu'au ".(POSIX::ctime($dat[2])));
-		} else {
-			print "Validity limit of the account [$dat[1]][id: $dat[0]] successfully changed ".
-			($dat[2] == 0 ? "to [unlimited].\n" : "to be until ".(POSIX::ctime($dat[2])));
-		}
-		# localtime($dat[2]) is also possible to display instead of POSIX::ctime.
-	}
-
-	return 0;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Set the final date of a banishment of an account
-sub bansetaccount() {
-	my($userid, $date, $time) = @_;
-	if ($userid eq "") {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un nom de compte svp.\n";
-			print "<exemple>: banset <nom_du_compte> aaaa/mm/jj [hh:mm:ss]\n";
-			print "           banset <nom_du_compte> 0    (0 = d�-bani)\n";
-			print "           ban/banish aaaa/mm/jj hh:mm:ss <nom du compte>\n";
-			print "           unban/unbanish <nom du compte>\n";
-			printf "          Heure par d�faut [hh:mm:ss]: 23:59:59\n";
-		} else {
-			print "Please input an account name.\n";
-			print "<example>: banset <account_name> yyyy/mm/dd [hh:mm:ss]\n";
-			print "           banset <account_name> 0   (0 = un-banished)\n";
-			print "           ban/banish yyyy/mm/dd hh:mm:ss <account name>\n";
-			print "           unban/unbanish <account name>\n";
-			printf "          Default time [hh:mm:ss]: 23:59:59\n";
-		}
-		return 136;
-	}
-	if (verify_accountname($userid) == 0) {
-		return 102;
-	}
-	my($year, $month, $day) = split(/[.\-\/]/, $date);
-	my($hour, $minute, $second) = split(/:/, $time);
-	if ($time eq "") {
-		$hour = 23;
-		$minute = 59;
-		$second = 59;
-	}
-	my($timestamp);
-	if ($year eq "" ||
-	    ($year != 0 && ($month eq "" || $day eq "" || $hour eq "" || $minute eq "" || $second eq ""))) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez 0 ou une date et une heure svp (format: 0 ou aaaa/mm/jj hh:mm:ss).\n";
-		} else {
-			print "Please input 0 or a date and a time (format: 0 or yyyy/mm/dd hh:mm:ss).\n";
-		}
-		return 102;
-	}
-	if ($year == 0) {
-		$timestamp = 0;
-	} else {
-		if ($year < 70) {
-			$year = $year + 100;
-		}
-		if ($year >= 1900) {
-			$year = $year - 1900;
-		}
-		if ($month < 1 || $month > 12) {
-			if ($defaultlanguage eq "F") {
-				print "Entrez un mois correct svp (entre 1 et 12).\n";
-			} else {
-				print "Please give a correct value for the month (from 1 to 12).\n";
-			}
-			return 102;
-		}
-		$month = $month - 1;
-		if ($day < 1 || $day > 31) {
-			if ($defaultlanguage eq "F") {
-				print "Entrez un jour correct svp (entre 1 et 31).\n";
-			} else {
-				print "Please give a correct value for the day (from 1 to 31).\n";
-			}
-			return 102;
-		}
-		if ((($month == 3 || $month == 5 || $month == 8 || $month == 10) && $day > 30) ||
-		    ($month == 1 && $day > 29)) {
-			if ($defaultlanguage eq "F") {
-				print "Entrez un jour correct en fonction du mois svp.\n";
-			} else {
-				print "Please give a correct value for a day of this month.\n";
-			}
-			return 102;
-		}
-		if ($hour < 0 || $hour > 23) {
-			if ($defaultlanguage eq "F") {
-				print "Entrez une heure correcte svp (entre 0 et 23).\n";
-			} else {
-				print "Please give a correct value for the hour (from 0 to 23).\n";
-			}
-			return 102;
-		}
-		if ($minute < 0 || $minute > 59) {
-			if ($defaultlanguage eq "F") {
-				print "Entrez des minutes correctes svp (entre 0 et 59).\n";
-			} else {
-				print "Please give a correct value for the minutes (from 0 to 59).\n";
-			}
-			return 102;
-		}
-		if ($second < 0 || $second > 59) {
-			if ($defaultlanguage eq "F") {
-				print "Entrez des secondes correctes svp (entre 0 et 59).\n";
-			} else {
-				print "Please give a correct value for the seconds (from 0 to 59).\n";
-			}
-			return 102;
-		}
-		$timestamp = POSIX::mktime($second, $minute, $hour, $day, $month, $year, 0, 0, -1); # -1: no winter/summer time modification
-		if ($timestamp == undef) {
-			if ($defaultlanguage eq "F") {
-				print "Date incorrecte.\n";
-				print "Ajoutez 0 ou une date et une heure svp (format: 0 ou aaaa/mm/jj hh:mm:ss).\n";
-			} else {
-				print "Invalid date.\n";
-				print "Please add 0 or a date and a time (format: 0 or yyyy/mm/dd hh:mm:ss).\n";
-			}
-			return 102;
-		}
-	}
-
-	print $so pack("va24V", 0x794a, $userid, $timestamp);
-	$so->flush();
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x794b) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 152;
-	}
-	$buf = readso(32);
-	my(@dat) = unpack("Va24V", $buf);
-	while (length($dat[1]) > 0 && substr($dat[1], length($dat[1])-1, 1) eq chr(0)) {
-		chop($dat[1]);
-	};
-	if ($dat[0] != -1 && $dat[0] != 4294967295) {
-		if ($defaultlanguage eq "F") {
-			print "Date finale de banissement du compte [$dat[1]][id: $dat[0]] chang�e avec succ�s ".
-			($dat[2] == 0 ? "en [d�-bannie].\n" : "pour �tre jusqu'au ".(POSIX::ctime($dat[2])));
-		} else {
-			print "Final date of banishment of the account [$dat[1]][id: $dat[0]] successfully changed ".
-			($dat[2] == 0 ? "to [unbanished].\n" : "to be until ".(POSIX::ctime($dat[2])));
-		}
-		# localtime($dat[2]) is also possible to display instead of POSIX::ctime.
-	} else {
-		if ($defaultlanguage eq "F") {
-			print "Echec du changement de la date finale de banissement du compte [$userid]. Le compte n'existe pas.\n";
-		} else {
-			print "Account [$userid] final date of banishment changing failed. Account doesn't exist.\n";
-		}
-	}
-
-	return 0;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Add/substract time to the final date of a banishment of an account
-sub banaddaccount() {
-	my($userid, $modif) = @_;
-	if ($userid eq "") {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un nom de compte svp.\n";
-			print "  <exemple> banadd nomtest +1m-2mn1s-6y\n";
-			print "            Cette exemple ajoute 1 mois et 1 seconde, et soustrait 2 minutes\n";
-			print "            et 6 ans dans le m�me temps.\n";
-		} else {
-			print "Please input an account name.\n";
-			print "  <example> banadd testname +1m-2mn1s-6y\n";
-			print "            this example adds 1 month and 1 second, and substracts 2 minutes\n";
-			print "            and 6 years at the same time.\n";
-		}
-		return 136;
-	}
-	if (verify_accountname($userid) == 0) {
-		return 102;
-	}
-	my($year, $month, $day) = (0, 0 ,0);
-	my($hour, $minute, $second) = (0, 0 ,0);
-
-	$modif = lc($modif);
-	while (length($modif) > 0) {
-		my($value) = int($modif);
-		if ($value == 0) {
-			$modif = substr($modif, 1);
-		} else {
-			if (substr($modif, 0, 1) =~ /[\-\+]/) {
-				$modif = substr($modif, 1);
-			}
-			while (length($modif) > 0 && substr($modif, 0, 1) =~ /[0-9]/) {
-				$modif = substr($modif, 1);
-			}
-			if (index($modif, "s") == 0) {
-				$second = $value;
-				$modif = substr($modif, 1);
-			} elsif (index($modif, "mn") == 0) {
-				$minute = $value;
-				$modif = substr($modif, 2);
-			} elsif (index($modif, "h") == 0) {
-				$hour = $value;
-				$modif = substr($modif, 1);
-			} elsif (index($modif, "d") == 0 || index($modif, "j") == 0) {
-				$day = $value;
-				$modif = substr($modif, 1);
-			} elsif (index($modif, "m") == 0) {
-				$month = $value;
-				$modif = substr($modif, 1);
-			} elsif (index($modif, "y") == 0 || index($modif, "a") == 0) {
-				$year = $value;
-				$modif = substr($modif, 1);
-			} else {
-				$modif = substr($modif, 1);
-			}
-		}
-	}
-
-	if ($defaultlanguage eq "F") {
-		print " ann�e:   $year\n";
-		print " mois:    $month\n";
-		print " jour:    $day\n";
-		print " heure:   $hour\n";
-		print " minute:  $minute\n";
-		print " seconde: $second\n";
-	} else {
-		print " year:   $year\n";
-		print " month:  $month\n";
-		print " day:    $day\n";
-		print " hour:   $hour\n";
-		print " minute: $minute\n";
-		print " second: $second\n";
-	}
-
-	if ($year == 0 && $month == 0 && $day == 0 && $hour == 0 && $minute == 0 && $second == 0) {
-		if ($defaultlanguage eq "F") {
-			print "Vous devez entrer un ajustement avec cette commande, svp:\n";
-			print "  Valeur d'ajustement (-1, 1, +1, etc...)\n";
-			print "  Element modifi�:\n";
-			print "    a ou y: ann�e\n";
-			print "    m:      mois\n";
-			print "    j ou d: jour\n";
-			print "    h:      heure\n";
-			print "    mn:     minute\n";
-			print "    s:      seconde\n";
-			print "  <exemple> banadd nomtest +1m-2mn1s-6y\n";
-			print "            Cette exemple ajoute 1 mois et 1 seconde, et soustrait 2 minutes\n";
-			print "            et 6 ans dans le m�me temps.\n";
-		} else {
-			print "Please give an adjustment with this command:\n";
-			print "  Adjustment value (-1, 1, +1, etc...)\n";
-			print "  Modified element:\n";
-			print "    a or y: year\n";
-			print "    m: month\n";
-			print "    j or d: day\n";
-			print "    h: hour\n";
-			print "    mn: minute\n";
-			print "    s: second\n";
-			print "  <example> banadd testname +1m-2mn1s-6y\n";
-			print "            this example adds 1 month and 1 second, and substracts 2 minutes\n";
-			print "            and 6 years at the same time.\n";
-		}
-		return 137;
-	}
-	if ($year > 127 || $year < -127) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un ajustement d'ann�es correct (de -127 � 127), svp.\n";
-		} else {
-			print "Please give a correct adjustment for the years (from -127 to 127).\n";
-		}
-		return 137;
-	}
-	if ($month > 255 || $month < -255) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un ajustement de mois correct (de -255 � 255), svp.\n";
-		} else {
-			print "Please give a correct adjustment for the months (from -255 to 255).\n";
-		}
-		return 137;
-	}
-	if ($day > 32767 || $day < -32767) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un ajustement de jours correct (de -32767 � 32767), svp.\n";
-		} else {
-			print "Please give a correct adjustment for the days (from -32767 to 32767).\n";
-		}
-		return 137;
-	}
-	if ($hour > 32767 || $hour < -32767) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un ajustement d'heures correct (de -32767 � 32767), svp.\n";
-		} else {
-			print "Please give a correct adjustment for the hours (from -32767 to 32767).\n";
-		}
-		return 137;
-	}
-	if ($minute > 32767 || $minute < -32767) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un ajustement de minutes correct (de -32767 � 32767), svp.\n";
-		} else {
-			print "Please give a correct adjustment for the minutes (from -32767 to 32767).\n";
-		}
-		return 137;
-	}
-	if ($second > 32767 || $second < -32767) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un ajustement de secondes correct (de -32767 � 32767), svp.\n";
-		} else {
-			print "Please give a correct adjustment for the seconds (from -32767 to 32767).\n";
-		}
-		return 137;
-	}
-
-	print $so pack("va24vvvvvv", 0x794c, $userid, $year, $month, $day, $hour, $minute, $second);
-	$so->flush();
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x794d) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 152;
-	}
-	$buf = readso(32);
-	my(@dat) = unpack("Va24V", $buf);
-	while (length($dat[1]) > 0 && substr($dat[1], length($dat[1])-1, 1) eq chr(0)) {
-		chop($dat[1]);
-	};
-	if ($dat[0] == -1 || $dat[0] == 4294967295) {
-		if ($defaultlanguage eq "F") {
-			print "Echec du changement de la date finale de banissement du compte [$userid]. Le compte n'existe pas.\n";
-		} else {
-			print "Account [$userid] final date of banishment changing failed. Account doesn't exist.\n";
-		}
-	} else {
-		if ($defaultlanguage eq "F") {
-			print "Date finale de banissement du compte [$dat[1]][id: $dat[0]] chang�e avec succ�s ".
-			($dat[2] == 0 ? "en [d�-bannie].\n" : "pour �tre jusqu'au ".(POSIX::ctime($dat[2])));
-		} else {
-			print "Final date of banishment of the account [$dat[1]][id: $dat[0]] successfully changed ".
-			($dat[2] == 0 ? "to [unbanished].\n" : "to be until ".(POSIX::ctime($dat[2])));
-		}
-		# localtime($dat[2]) is also possible to display instead of POSIX::ctime.
-	}
-
-	return 0;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Request to displaying information about an account (by its name)
-sub whoaccount() {
-	my($userid) = @_;
-	if ($userid eq "") {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un nom de compte svp.\n";
-			print "<exemple> who nomtest\n";
-		} else {
-			print "Please input an account name.\n";
-			print "<example> who testname\n";
-		}
-		return 136;
-	}
-	if (verify_accountname($userid) == 0) {
-		return 102;
-	}
-
-	print $so pack("va24", 0x7952, $userid);
-	$so->flush();
-
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x7953) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 122;
-	}
-	my($id2, $GM_level, $name, $sex, $count, $status, $error_message, $last_login, $last_ip, $email, $validite, $ban_date, $memo_size) = unpack("VCa24cVVa20a24a16a40VVv", readso(148));
-	my($memo) = "";
-	if ($memo_size > 0) {
-		$memo = unpack("a".$memo_size, readso($memo_size));
-	}
-	while (length($name) > 0 && substr($name, length($name)-1, 1) eq chr(0)) {
-		chop($name);
-	};
-	while (length($error_message) > 0 && substr($error_message, length($error_message)-1, 1) eq chr(0)) {
-		chop($error_message);
-	};
-	while (length($last_login) > 0 && substr($last_login, length($last_login)-1, 1) eq chr(0)) {
-		chop($last_login);
-	};
-	while (length($last_ip) > 0 && substr($last_ip, length($last_ip)-1, 1) eq chr(0)) {
-		chop($last_ip);
-	};
-	while (length($email) > 0 && substr($email, length($email)-1, 1) eq chr(0)) {
-		chop($email);
-	};
-	while (length($memo) > 0 && substr($memo, length($memo)-1, 1) eq chr(0)) {
-		chop($memo);
-	};
-
-	if ($id2 == -1 || $id2 == 4294967295) {
-		if ($defaultlanguage eq "F") {
-			print "Impossible de trouver le compte [$userid]. Le compte n'existe pas.\n";
-		} else {
-			print "Unabled to find the account [$userid]. Account doesn't exist.\n";
-		}
-		return 123;
-	} else {
-		if ($defaultlanguage eq "F") {
-			print "Le compte [$userid] a les caract�ristiques suivantes:\n";
-		} else {
-			print "The account [$userid] is set with:\n";
-		}
-		if ($GM_level == 0) {
-			print " Id:     $id2 (non-GM)\n";
-		} else {
-			if ($defaultlanguage eq "F") {
-				print " Id:     $id2 (GM niveau $GM_level)\n";
-			} else {
-				print " Id:     $id2 (GM level $GM_level)\n";
-			}
-		}
-		if ($defaultlanguage eq "F") {
-			print " Nom:    '$name'\n";
-			print " Sexe:   ".("Femme", "Male", "Serveur")[$sex]."\n";
-		} else {
-			print " Name:   '$name'\n";
-			print " Sex:    ".("Female", "Male", "Server")[$sex]."\n";
-		}
-		print " E-mail: $email\n";
-		if ($status == 7) {
-			print " Statut: 7 [You are Prohibited to log in until $error_message]\n";
-		} else {
-			print " Statut: $status [".(
-			      ($defaultlanguage eq "F" ? "Compte Ok" : "Account OK"),
-			      "Unregistered ID",
-			      "Incorrect Password",
-			      "This ID is expired",
-			      "Rejected from Server",
-			      "You have been blocked by the GM Team",
-			      "Your Game's EXE file is not the latest version",
-			      "You are Prohibited to log in until %s",
-			      "Server is jammed due to over populated",
-			      "No MSG",
-			      "This ID is totally erased")[$status == 100 ? 10 : $status]."]\n";
-		}
-		if ($defaultlanguage eq "F") {
-			print " Banissement: ".($ban_date == 0 ? "non banni.\n" : "jusqu'au ".(POSIX::ctime($ban_date)));
-			print " Compteur: $count connexion".("s", "")[$count > 1 ? 0 : 1]."\n";
-			print " Derni�re connexion le: $last_login (ip: $last_ip)\n";
-			print " Limite de validit�: ".($validite == 0 ? "illimit�.\n" : "jusqu'au ".(POSIX::ctime($validite)));
-		} else {
-			print " Banishment: ".($ban_date == 0 ? "not banished.\n" : "until ".(POSIX::ctime($ban_date)));
-			print " Count: $count connection".("s", "")[$count > 1 ? 0 : 1]."\n";
-			print " Last connection at: $last_login (ip: $last_ip)\n";
-			print " Validity limit: ".($validite == 0 ? "unlimited.\n" : "until ".(POSIX::ctime($validite)));
-		}
-		print " Memo:   '$memo'\n";
-	}
-	return 0;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Request to displaying information about an account (by its id)
-sub infoaccount() {
-	my($id) = @_;
-	if ($id < 0) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un id ayant une valeur positive svp.\n";
-		} else {
-			print "Please input a positive value for the id.\n";
-		}
-		return 136;
-	}
-
-	print $so pack("vV", 0x7954, $id);
-	$so->flush();
-
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x7953) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 122;
-	}
-	my($id2, $GM_level, $name, $sex, $count, $status, $error_message, $last_login, $last_ip, $email, $validite, $ban_date, $memo_size) = unpack("VCa24cVVa20a24a16a40VVv", readso(148));
-	my($memo) = "";
-	if ($memo_size > 0) {
-		$memo = unpack("a".$memo_size, readso($memo_size));
-	}
-	while (length($name) > 0 && substr($name, length($name)-1, 1) eq chr(0)) {
-		chop($name);
-	};
-	while (length($error_message) > 0 && substr($error_message, length($error_message)-1, 1) eq chr(0)) {
-		chop($error_message);
-	};
-	while (length($last_login) > 0 && substr($last_login, length($last_login)-1, 1) eq chr(0)) {
-		chop($last_login);
-	};
-	while (length($last_ip) > 0 && substr($last_ip, length($last_ip)-1, 1) eq chr(0)) {
-		chop($last_ip);
-	};
-	while (length($email) > 0 && substr($email, length($email)-1, 1) eq chr(0)) {
-		chop($email);
-	};
-	while (length($memo) > 0 && substr($memo, length($memo)-1, 1) eq chr(0)) {
-		chop($memo);
-	};
-
-	if (length($name) == 0 || $name eq "") {
-		if ($defaultlanguage eq "F") {
-			print "Impossible de trouver le nom du compte [id: $id2]. Le compte n'existe pas.\n";
-		} else {
-			print "Unabled to find the account [id: $id2] name. Account doesn't exist.\n";
-		}
-		return 123;
-	} else {
-		if ($defaultlanguage eq "F") {
-			print "Le compte [id: $id2] a les caract�ristiques suivantes:\n";
-		} else {
-			print "The account [id: $id2] is set with:\n";
-		}
-		if ($GM_level == 0) {
-			print " Id:     $id2 (non-GM)\n";
-		} else {
-			if ($defaultlanguage eq "F") {
-				print " Id:     $id2 (GM niveau $GM_level)\n";
-			} else {
-				print " Id:     $id2 (GM level $GM_level)\n";
-			}
-		}
-		if ($defaultlanguage eq "F") {
-			print " Nom:    '$name'\n";
-			print " Sexe:   ".("Femme", "Male", "Serveur")[$sex]."\n";
-		} else {
-			print " Name:   '$name'\n";
-			print " Sex:    ".("Female", "Male", "Server")[$sex]."\n";
-		}
-		print " E-mail: $email\n";
-		if ($status == 7) {
-			print " Statut: 7 [You are Prohibited to log in until $error_message]\n";
-		} else {
-			print " Statut: $status [".(
-			      ($defaultlanguage eq "F" ? "Compte Ok" : "Account OK"),
-			      "Unregistered ID",
-			      "Incorrect Password",
-			      "This ID is expired",
-			      "Rejected from Server",
-			      "You have been blocked by the GM Team",
-			      "Your Game's EXE file is not the latest version",
-			      "You are Prohibited to log in until %s",
-			      "Server is jammed due to over populated",
-			      "No MSG",
-			      "This ID is totally erased")[$status == 100 ? 10 : $status]."]\n";
-		}
-		if ($defaultlanguage eq "F") {
-			print " Banissement: ".($ban_date == 0 ? "non banni.\n" : "jusqu'au ".(POSIX::ctime($ban_date)));
-			print " Compteur: $count connexion".("s", "")[$count > 1 ? 0 : 1]."\n";
-			print " Derni�re connexion le: $last_login (ip: $last_ip)\n";
-			print " Limite de validit�: ".($validite == 0 ? "illimit�.\n" : "jusqu'au ".(POSIX::ctime($validite)));
-		} else {
-			print " Banishment: ".($ban_date == 0 ? "not banished.\n" : "until ".(POSIX::ctime($ban_date)));
-			print " Count: $count connection".("s", "")[$count > 1 ? 0 : 1]."\n";
-			print " Last connection at: $last_login (ip: $last_ip)\n";
-			print " Validity limit: ".($validite == 0 ? "unlimited.\n" : "until ".(POSIX::ctime($validite)));
-		}
-		print " Memo:   '$memo'\n";
-	}
-	return 0;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Check the validity of a password
-# (Note: never send back a password with login-server!! security of passwords)
-sub checkaccount() {
-	my($userid, $passwd) = @_;
-	if ($userid eq "") {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un nom de compte svp.\n";
-			print "<exemple> check testname motdepasse\n";
-		} else {
-			print "Please input an account name.\n";
-			print "<example> check testname password\n";
-		}
-		return 136;
-	}
-	if (verify_accountname($userid) == 0) {
-		return 102;
-	}
-	if ($passwd eq "") {
-		return 134 if (($passwd = typepasswd()) eq "");
-	}
-	if (verify_password($passwd) == 0) {
-		return 131;
-	}
-	print $so pack("va24a24", 0x793a, $userid,$passwd);
-	$so->flush();
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x793b) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 132;
-	}
-	$buf = readso(28);
-	my($id2, $name) = unpack("Va24", $buf);
-	while (length($name) > 0 && substr($name, length($name)-1, 1) eq chr(0)) {
-		chop($name);
-	};
-	if ($id2 == -1 || $id2 == 4294967295) {
-		if ($defaultlanguage eq "F") {
-			print "Le compte [$userid] n'existe pas ou le mot de passe est incorrect.\n";
-		} else {
-			print "The account [$userid] doesn't exist or the password is incorrect.\n";
-		}
-		return 133;
-	} else {
-		if ($defaultlanguage eq "F") {
-			print "Le mot de passe donn� correspond bien au compte [$name][id: $id2].\n";
-		} else {
-			print "The proposed password is correct for the account [$name][id: $id2].\n";
-		}
-	}
-	return 130;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Request to login-server to reload GM configuration file
-sub reloadGM() {
-	print $so pack("v", 0x7955);
-	$so->flush();
-	if ($defaultlanguage eq "F") {
-		print "Demande de recharger le fichier de configuration des GM envoy�e.\n";
-		print "V�rifiez les comptes GM actuels (apr�s rechargement):\n";
-	} else {
-		print "Request to reload the GM configuration file sended.\n";
-		print "Check the actual GM accounts (after reloading):\n";
-	}
-	&listaccount(0, 0, 1); # 1: to list only GM
-	return 180;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Send a broadcast message
-sub sendbroadcast() {
-	my($type, $message) = @_;
-	if ($message eq "" || length($message) == 0) {
-		if ($defaultlanguage eq "F") {
-			print "Entrez un message svp.\n";
-			if ($type == 0) {
-				print "<exemple> kami un message\n";
-			} else {
-				print "<exemple> kamib un message\n";
-			}
-		} else {
-			print "Please input a message.\n";
-			if ($type == 0) {
-				print "<example> kami a message\n";
-			} else {
-				print "<example> kamib a message\n";
-			}
-		}
-		return 136;
-	}
-
-	print $so pack("vvVa".length($message), 0x794e, $type, length($message), $message);
-	$so->flush();
-	$buf = readso(2);
-	if (unpack("v", $buf) != 0x794f) {
-		if ($defaultlanguage eq "F") {
-			print "Probl�me de connexion au serveur (r�ponse incorrecte).\n";
-		} else {
-			print "Connection error to the server (incorrect answer).\n";
-		}
-		return 152;
-	}
-	$buf = readso(2);
-	my($answer) = unpack("v", $buf);
-	if ($answer == -1 || $answer == 65535) {
-		if ($defaultlanguage eq "F") {
-			print "Echec de l'envoi du message. Aucun server de char en ligne.\n";
-		} else {
-			print "Message sending failed. No online char-server.\n";
-		}
-	} else {
-		if ($defaultlanguage eq "F") {
-			print "Message transmis au server de logins avec succ�s.\n";
-		} else {
-			print "Message successfully sended to login-server.\n";
-		}
-	}
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Change language of displaying
-sub changelanguage() {
-	my($language) = @_;
-	if ($language eq "" || length($language) == 0) {
-		if ($defaultlanguage == 'F') {
-			printf("Entrez une langue svp.\n");
-			printf("<exemple> language english\n");
-			printf("          language fran�ais\n");
-		} else {
-			printf("Please input a language.\n");
-			printf("<example> language english\n");
-			printf("          language fran�ais\n");
-		}
-		return 136;
-	}
-
-	$language = uc(substr($language, 0, 1));
-	if ($language =~ /^[EF]$/) {
-		$defaultlanguage = $language;
-		if ($defaultlanguage == 'F') {
-			printf("Changement de la langue d'affichage en Fran�ais.\n");
-		} else {
-			printf("Displaying language changed to English.\n");
-		}
-	} else {
-		if ($defaultlanguage == 'F') {
-			printf("Langue non param�tr�e (langues possibles: 'Fran�ais' ou 'English').\n");
-		} else {
-			printf("Undefined language (possible languages: Fran�ais or English).\n");
-		}
-	}
-
-	return 0;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: sending 'end of connection' packet
-sub quit() {
-	print $so pack("v", 0x7532);
-	$so->flush();
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Get datas from the socket
-sub readso() {
-	my($len) = shift;
-	my($buf);
-	if (read($so, $buf, $len) < $len) {
-		if ($defaultlanguage eq "F") {
-			print "Erreur de lecture sur la Socket.\n";
-		} else {
-			print "Socket read error.\n";
-		}
-		exit(3);
-	}
-	return $buf;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Input of a password
-sub typepasswd {
-	my($passwd1, $passwd2);
-	cbreak();
-	if ($defaultlanguage eq "F") {
-		print "Entrez le mot de passe > "; $passwd1 = <STDIN>; chomp($passwd1); print "\n";
-		print "R�-entrez le mot de passe > "; $passwd2 = <STDIN>; chomp($passwd2); print "\n";
-	} else {
-		print "Type the password > "; $passwd1 = <STDIN>; chomp($passwd1); print "\n";
-		print "Verify the password > "; $passwd2 = <STDIN>; chomp($passwd2); print "\n";
-	}
-	cooked();
-	if ($passwd1 ne $passwd2) {
-		if ($defaultlanguage eq "F") {
-			print "Erreur de v�rification du mot de passe: Saisissez le m�me mot de passe svp.\n";
-		} else {
-			print "Password verification failed. Please input same password.\n";
-		}
-		return "";
-	}
-	return $passwd1;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Return ordonal text of a number
-sub makeordinal {
-	my($c) = shift;
-	if ($defaultlanguage eq "F") {
-		if ($c < 1) {
-			return $c;
-		}
-		return $c.("er", "�me")[$c == 1 ? 0 : 1];
-	} else {
-		if ($c % 10 < 4 && $c % 10 != 0 && ($c < 10 || $c > 20)) {
-			return $c.("st","nd","rd")[$c % 10 - 1];
-		}
-		return $c."th";
-	}
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Test of the validity of an account name (return 0 if incorrect, and 1 if ok)
-sub verify_accountname {
-	my($account_name) = @_;       # Get the account_name
-	if ($account_name =~ /[\x00-\x1f]/) { # remove control char
-		my($c) = length($`) + 1;
-		if ($defaultlanguage eq "F") {
-			print "Caract�re interdit trouv� dans le nom du compte (".makeordinal($c)." caract�re).\n";
-		} else {
-			print "Illegal character found in the account name (".makeordinal($c)." character).\n";
-		}
-		return 0;
-	}
-	if (length($account_name) < 4) {
-		if ($defaultlanguage eq "F") {
-			print "Nom du compte trop court. Entrez un nom de compte de 4-23 caract�res.\n";
-		} else {
-			print "Account name is too short. Please input an account name of 4-23 bytes.\n";
-		}
-		return 0;
-	}
-	if (length($account_name) > 23) {
-		if ($defaultlanguage eq "F") {
-			print "Nom du compte trop long. Entrez un nom de compte de 4-23 caract�res.\n";
-		} else {
-			print "Account name is too long. Please input an account name of 4-23 bytes.\n";
-		}
-		return 0;
-	}
-	return 1;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Test of the validity of password (return 0 if incorrect, and 1 if ok)
-sub verify_password {
-	my($password) = @_;       # Get the password
-	if ($password =~ /[\x00-\x1f]/) {
-		my($c) = length($`) + 1;
-		if ($defaultlanguage eq "F") {
-			print "Caract�re interdit trouv� dans le mot de passe (".makeordinal($c)." caract�re).\n";
-		} else {
-			print "Illegal character found in the password (".makeordinal($c)." character).\n";
-		}
-		return 0;
-	}
-	if (length($password) < 4) {
-		if ($defaultlanguage eq "F") {
-			print "Mot de passe trop court. Entrez un mot de passe de 4-23 caract�res.\n";
-		} else {
-			print "Password is too short. Please input a password of 4-23 bytes.\n";
-		}
-		return 0;
-	}
-	if (length($password) > 23) {
-		if ($defaultlanguage eq "F") {
-			print "Mot de passe trop long. Entrez un mot de passe de 4-23 caract�res.\n";
-		} else {
-			print "Password is too long. Please input a password of 4-23 bytes.\n";
-		}
-		return 0;
-	}
-	return 1;
-}
-
-#--------------------------------------------------------------------------
-
-# Sub-function: Test of the validity of an e-mail (return 0 if incorrect, and 1 if ok)
-sub verify_email {
-	my($email) = @_;       # Get the e-mail
-	# To ignore a '.' before the @ (wanadoo, a provider, do that)
-	$email =~ s/\.\@/\@/;
-	# If the e-mail is void, it's not correct -> return 0
-	if ($email eq '') {
-		return(0);
-	}
-	# If the e-mail have no "@", it's not correct -> return 0
-	if ($email !~ /\@/) {
-		return(0);
-	}
-	# If the e-mail have a ",", a space, a tab or a ";", it's not correct -> return 0
-	if ($email =~ /[\,|\s|\;]/) {
-		return(0)
-	};
-	# IF
-	#    (the e-mail contains 2 "@", or ".." or "@." or starts or finishes by a ".")
-	# OR IF
-	#    (the e-mail doesn't contain "@localhost" AND
-	# - it doesn't contain characters followed by "@" itself followed by letters itself followed by "." and 2 or more letters
-	# - or an IP address)
-	# -> so, it's not good ! (finish !)
-	if ($email =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\.$)/ ||
-		($email !~ /^.+\@localhost$/ &&
-		$email !~ /^.+\@\[?(\w|[-.])+\.[a-zA-Z]{2,3}|[0-9]{1,3}\]?$/)) {
-		return(0); # non-valid email
-	} else {
-		# If not, the e-email address is correct
-		return(1); # valid email
-	}
-}
\ No newline at end of file
diff --git a/misc/src/tool/mapcheck.sh b/misc/src/tool/mapcheck.sh
deleted file mode 100644
index 337884c..0000000
--- a/misc/src/tool/mapcheck.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/bin/sh
-echo "============================================"
-echo "=       map server status checker...       ="
-echo "============================================"
-./map-server.exe &
-sleep 40
-
-while [ 0 ]
-do
-	pcpu=` top -n 1| grep map-server | awk '{print $9}' | awk 'BEGIN{FS="."} {print $1}' ` 
-	if [ "$pcpu" -gt 80 ];then
-		echo "============================================"
-		echo "map server is more than 80% (now $pcpu%)"
-		echo "============================================"
-		ppid=` ps -a | grep map-server | awk '{print $1}' `
-		kill $ppid
-		./map-server.exe &
-		sleep 40
-	else
-		pmapct=` ps -a| grep map-server | wc -l `
-		if [ "$pmapct" -eq 0 ];then
-			echo "============================================"
-			echo "map server is not running..."
-			echo "restart map server..."
-			echo "============================================"
-			./map-server.exe &
-			sleep 40
-			#echo "test"
-		else
-			echo "map server is ok (now $pcpu%)..."
-			sleep 5
-		fi
-	fi
-done
\ No newline at end of file
diff --git a/misc/src/tool/mapchecker.sh b/misc/src/tool/mapchecker.sh
deleted file mode 100644
index 7250c34..0000000
--- a/misc/src/tool/mapchecker.sh
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/bash
-
-athena_dir="/home/athena/658/"
-
-while [ true ] ; do
-
-if [ ` ps fauxw | grep map-server | grep -v grep | wc -l ` -eq 0 ];then
-        #echo `date` " -- map-server crashed - restarting"
-        echo `date` " -- map-server crashed - restarting" >> /var/log/athena_status.log
-        killall -9 map-server
-        cd $athena_dir
-        nohup ./map-server ./conf/map_athena.conf ./inter_athena.conf &
-        sleep 240
-        #sleep 40 #for fast pc's remove the "#" at the beginning of the line and delete the line above
-fi
-
-
-if [ ` ps fauxw | grep map-server | grep -v grep | awk '{print $3}' | awk 'BEGIN{FS="."} {print $1}' ` -gt 10 ];then
-        #echo `date` " -- mapserver cpuload over 10 - restarting"
-        echo `date` " -- mapserver cpuload over 10 - restarting" >> /var/log/athena_status.log
-        killall -9 map-server
-        cd $athena_dir
-        nohup ./map-server ./conf/map_athena.conf ./inter_athena.conf &
-        sleep 240
-        #sleep 40 #for fast pc's remove the "#" at the beginning of the line and delete the line above
-        #echo `date` " -- restarted"
-        echo `date` " -- restarted" >> /var/log/athena_status.log
-fi
-
-if [ ` ps fauxw | grep char-server | grep -v grep | wc -l ` -eq 0 ];then
-        #echo `date` " -- char server crashed - restarting"
-        echo `date` " -- char server crashed - restarting" >> /var/log/athena_status.log
-        killall -9 char-server
-        cd $athena_dir
-        nohup ./char-server ./conf/char_athena.conf ./conf/inter_athena.conf &
-        #echo `date` " -- restarted"
-        echo `date` " -- restarted" >> /var/log/athena_status.log
-
-fi
-
-if [ ` ps fauxw | grep login-server | grep -v grep | wc -l ` -eq 0 ];then
-        #echo `date` " -- login server crashed - restarting"
-        echo `date` " -- login server crashed - restarting" >> /var/log/athena_status.log
-        killall -9 login-server
-        cd $athena_dir
-        nohup ./login-server ./conf/login_athena.conf &
-        #echo `date` " -- restarted"
-        echo `date` " -- restarted" >> /var/log/athena_status.log
-
-fi
-
-
-#echo `date` " -- everything is fine"
-echo `date` " -- everything is fine" >> /var/log/athena_status.log
-sleep 30
-done
diff --git a/misc/src/txt-converter/char/GNUmakefile b/misc/src/txt-converter/char/GNUmakefile
deleted file mode 100644
index b88df26..0000000
--- a/misc/src/txt-converter/char/GNUmakefile
+++ /dev/null
@@ -1,13 +0,0 @@
-all: char-converter
-sql: char-converter
-
-COMMON_OBJ = ../../common/core.o ../../common/socket.o ../../common/timer.o ../../common/db.o ../../common/malloc.o
-
-char-converter: char-converter.o strlib.o $(COMMON_OBJ)
-	$(CC) -o ../../../$@ $^ $(LIB_S)
-
-char-converter.o: char-converter.c char.h strlib.h
-strlib.o: strlib.c strlib.h
-clean:
-	rm -f *.o ../../../char-converter
-
diff --git a/misc/src/txt-converter/char/Makefile b/misc/src/txt-converter/char/Makefile
deleted file mode 100644
index b88df26..0000000
--- a/misc/src/txt-converter/char/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-all: char-converter
-sql: char-converter
-
-COMMON_OBJ = ../../common/core.o ../../common/socket.o ../../common/timer.o ../../common/db.o ../../common/malloc.o
-
-char-converter: char-converter.o strlib.o $(COMMON_OBJ)
-	$(CC) -o ../../../$@ $^ $(LIB_S)
-
-char-converter.o: char-converter.c char.h strlib.h
-strlib.o: strlib.c strlib.h
-clean:
-	rm -f *.o ../../../char-converter
-
diff --git a/misc/src/txt-converter/char/char-converter.c b/misc/src/txt-converter/char/char-converter.c
deleted file mode 100644
index 44f6d29..0000000
--- a/misc/src/txt-converter/char/char-converter.c
+++ /dev/null
@@ -1,842 +0,0 @@
-// $Id: char-converter.c,v 1.1.1.1 2004/09/10 17:45:03 MagicalTux Exp $
-// original : char2.c 2003/03/14 11:58:35 Rev.1.5
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <netinet/in.h>
-#include <sys/time.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <string.h>
-#include <arpa/inet.h>
-
-
-#define STORAGE_MEMINC	16
-	
-#include "char.h"
-#include "strlib.h"
-
-#ifdef MEMWATCH
-#include "memwatch.h"
-#endif
-	
-char pet_txt[256]="save/pet.txt";
-char storage_txt[256]="save/storage.txt";	
-
-MYSQL mysql_handle;
-MYSQL_RES* 	sql_res ;
-MYSQL_ROW	sql_row ;
-int sql_fields, sql_cnt;
-char tmp_sql[65535];
-
-int db_server_port = 3306;
-char db_server_ip[16] = "127.0.0.1";
-char db_server_id[32] = "ragnarok";
-char db_server_pw[32] = "ragnarok";
-char db_server_logindb[32] = "ragnarok";
-
-struct storage *storage=NULL;
-
-struct mmo_map_server server[MAX_MAP_SERVERS];
-int server_fd[MAX_MAP_SERVERS];
-
-int login_fd;
-char userid[24];
-char passwd[24];
-char server_name[20];
-char login_ip_str[16];
-int login_port = 6900;
-char char_ip_str[16];
-int char_ip;
-int char_port = 6121;
-int char_maintenance;
-int char_new;
-char char_txt[256];
-
-char t_name[256];
-
-#define CHAR_STATE_WAITAUTH 0
-#define CHAR_STATE_AUTHOK 1
-struct char_session_data{
-  int state;
-  int account_id, login_id1, login_id2, sex;
-  int found_char[9];
-};
-
-#define AUTH_FIFO_SIZE 256
-struct {
-  int account_id, char_id, login_id1, char_pos, delflag, sex;
-} auth_fifo[AUTH_FIFO_SIZE];
-int auth_fifo_pos=0;
-
-int char_id_count=100000;
-struct mmo_charstatus *char_dat;
-int char_num, char_max;
-int max_connect_user=0;
-int autosave_interval=DEFAULT_AUTOSAVE_INTERVAL;
-
-// �ʱ� ��ġ(conf ���Ϸκ��� �缳�� ����)
-struct point start_point={"new_1-1.gat", 53,111};
-
-
-
-int inter_pet_fromstr(char *str, struct s_pet *p)
-{
-	int s;
-	int tmp_int[16];
-	char tmp_str[256];
-	
-	memset(p, 0, sizeof(struct s_pet));
-	
-//	printf("sscanf pet main info\n");
-	s=sscanf(str,"%d, %d,%[^\t]\t%d, %d, %d, %d, %d, %d, %d, %d, %d", &tmp_int[0], &tmp_int[1], tmp_str, &tmp_int[2],
-		&tmp_int[3], &tmp_int[4], &tmp_int[5], &tmp_int[6], &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10]);
-
-	if(s!=12)
-		return 1;
-	
-	p->pet_id = tmp_int[0];
-	p->class = tmp_int[1];
-	memcpy(p->name, tmp_str, 24);
-	p->account_id = tmp_int[2];
-	p->char_id = tmp_int[3];
-	p->level = tmp_int[4];
-	p->egg_id = tmp_int[5];
-	p->equip = tmp_int[6];
-	p->intimate = tmp_int[7];
-	p->hungry = tmp_int[8];
-	p->rename_flag = tmp_int[9];
-	p->incuvate = tmp_int[10];
-
-	if(p->hungry < 0)
-		p->hungry = 0;
-	else if(p->hungry > 100)
-		p->hungry = 100;
-	if(p->intimate < 0)
-		p->intimate = 0;
-	else if(p->intimate > 1000)
-		p->intimate = 1000;
-
-	return 0;
-}
-//---------------------------------------------------------
-int inter_pet_tosql(int pet_id, struct s_pet *p) {
-	//`pet` (`pet_id`, `class`,`name`,`account_id`,`char_id`,`level`,`egg_id`,`equip`,`intimate`,`hungry`,`rename_flag`,`incuvate`)
-	
-	char tmp_sql[65535];
-	MYSQL_RES* 	sql_res ;
-	MYSQL_ROW	sql_row ;
-	
-	jstrescapecpy (t_name, p->name);
-	if(p->hungry < 0)
-		p->hungry = 0;
-	else if(p->hungry > 100)
-		p->hungry = 100;
-	if(p->intimate < 0)
-		p->intimate = 0;
-	else if(p->intimate > 1000)
-		p->intimate = 1000;
-	sprintf(tmp_sql,"SELECT * FROM `pet` WHERE `pet_id`='%d'",pet_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-	}
-	sql_res = mysql_store_result(&mysql_handle) ;
-	sql_row = mysql_fetch_row(sql_res);	//row fetching
-	if (!sql_row) //no row -> insert
-		sprintf(tmp_sql,"INSERT INTO `pet` (`pet_id`, `class`,`name`,`account_id`,`char_id`,`level`,`egg_id`,`equip`,`intimate`,`hungry`,`rename_flag`,`incuvate`) VALUES ('%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d')",
-			p->pet_id, p->class, t_name, p->account_id, p->char_id, p->level, p->egg_id,
-			p->equip, p->intimate, p->hungry, p->rename_flag, p->incuvate);
-	else //row reside -> updating
-		sprintf(tmp_sql, "UPDATE `pet` 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',`incuvate`='%d' WHERE `pet_id`='%d'",
-			p->class, t_name, p->account_id, p->char_id, p->level, p->egg_id,
-			p->equip, p->intimate, p->hungry, p->rename_flag, p->incuvate, p->pet_id);
-	mysql_free_result(sql_res) ; //resource free
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-		printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-	}
-	
-	printf ("pet dump success! - %d:%s\n", pet_id, p->name);
-	
-	return 0;
-}
-
-int storage_tosql(int account_id,struct storage *p){
-	// id -> DB dump
-	// storage {`account_id`/`id`/`nameid`/`amount`/`equip`/`identify`/`refine`/`attribute`/`card0`/`card1`/`card2`/`card3`}
-	int i,j;
-	
-	j=0;
-	
-	//printf ("starting storage dump to DB - id: %d\n", account_id);
-	
-	//delete old data.
-	sprintf(tmp_sql,"DELETE FROM `storage` WHERE `account_id`='%d'",account_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-	}
-	
-	//printf ("all storage item was deleted ok\n");
-	
-	for(i=0;i<MAX_STORAGE;i++) {
-		//printf ("save storage num: %d (%d:%d)\n",i, p->storage[i].nameid , p->storage[i].amount);
-		
-		if( (p->storage[i].nameid) && (p->storage[i].amount) ){
-			sprintf(tmp_sql,"INSERT INTO `storage` (`account_id`,`nameid`,`amount`,`equip`,`identify`,`refine`,`attribute`,`card0`,`card1`,`card2`,`card3`,`broken`) VALUES ('%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d')",
-			  p->account_id, p->storage[i].nameid, p->storage[i].amount, p->storage[i].equip,
-			  p->storage[i].identify, p->storage[i].refine, p->storage[i].attribute,
-			  p->storage[i].card[0], p->storage[i].card[1], p->storage[i].card[2], p->storage[i].card[3], p->storage[i].broken );
-			//printf ("%s\n",tmp_sql);
-			if(mysql_query(&mysql_handle, tmp_sql) ) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-			}
-			j++;
-		}
-	}
-
-	printf ("storage dump to DB - id: %d (total: %d)\n", account_id, j);
-	return 0;
-}
-// char to storage
-int storage_fromstr(char *str, struct storage *p)
-{
-	int tmp_int[256];
-	int set, next, len, i;
-
-	set=sscanf(str,"%d, %d%n", &tmp_int[0], &tmp_int[1], &next);
-	p->storage_amount=tmp_int[1];
-
-	if(set!=2)
-		return 0;
-	if(str[next]=='\n' || str[next]=='\r')
-		return 1;	
-	next++;
-	for(i=0;str[next] && str[next]!='\t';i++){
-		if(sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-		      &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
-		      &tmp_int[4], &tmp_int[5], &tmp_int[6],
-		      &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &tmp_int[11], &len) == 12) {
-			p->storage[i].id = tmp_int[0];
-			p->storage[i].nameid = tmp_int[1];
-			p->storage[i].amount = tmp_int[2];
-			p->storage[i].equip = tmp_int[3];
-			p->storage[i].identify = tmp_int[4];
-			p->storage[i].refine = tmp_int[5];
-			p->storage[i].attribute = tmp_int[6];
-			p->storage[i].card[0] = tmp_int[7];
-			p->storage[i].card[1] = tmp_int[8];
-			p->storage[i].card[2] = tmp_int[9];
-			p->storage[i].card[3] = tmp_int[10];
-			p->storage[i].broken  = tmp_int[11];
-			next += len;
-			if (str[next] == ' ')
-				next++;	
-		}
-
-		else if(sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-		      &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
-		      &tmp_int[4], &tmp_int[5], &tmp_int[6],
-		      &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &len) == 11) {
-			p->storage[i].id = tmp_int[0];
-			p->storage[i].nameid = tmp_int[1];
-			p->storage[i].amount = tmp_int[2];
-			p->storage[i].equip = tmp_int[3];
-			p->storage[i].identify = tmp_int[4];
-			p->storage[i].refine = tmp_int[5];
-			p->storage[i].attribute = tmp_int[6];
-			p->storage[i].card[0] = tmp_int[7];
-			p->storage[i].card[1] = tmp_int[8];
-			p->storage[i].card[2] = tmp_int[9];
-			p->storage[i].card[3] = tmp_int[10];
-			p->storage[i].broken = 0;	
-			next += len;
-			if (str[next] == ' ')
-				next++;	
-		}
-		
-		else return 0;
-	}
-	return 1;
-}
-
-/////////////////////////////////
-int mmo_char_fromstr(char *str, struct mmo_charstatus *p) {
-	int tmp_int[256];
-	int set, next, len, i;
-
-	// initilialise character
-	memset(p, '\0', sizeof(struct mmo_charstatus));
-
-	// If it's not char structure of version 1008 and after
-	if ((set = sscanf(str, "%d\t%d,%d\t%[^\t]\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
-	   "\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d,%d"
-	   "\t%[^,],%d,%d\t%[^,],%d,%d,%d%n",
-	   &tmp_int[0], &tmp_int[1], &tmp_int[2], p->name, //
-	   &tmp_int[3], &tmp_int[4], &tmp_int[5],
-	   &tmp_int[6], &tmp_int[7], &tmp_int[8],
-	   &tmp_int[9], &tmp_int[10], &tmp_int[11], &tmp_int[12],
-	   &tmp_int[13], &tmp_int[14], &tmp_int[15], &tmp_int[16], &tmp_int[17], &tmp_int[18],
-	   &tmp_int[19], &tmp_int[20],
-	   &tmp_int[21], &tmp_int[22], &tmp_int[23], //
-	   &tmp_int[24], &tmp_int[25], &tmp_int[26],
-	   &tmp_int[27], &tmp_int[28], &tmp_int[29],
-	   &tmp_int[30], &tmp_int[31], &tmp_int[32], &tmp_int[33], &tmp_int[34],
-	   p->last_point.map, &tmp_int[35], &tmp_int[36], //
-	   p->save_point.map, &tmp_int[37], &tmp_int[38], &tmp_int[39], &next)) != 43) {
-		tmp_int[39] = 0; // partner id
-		// If not char structure from version 384 to 1007
-		if ((set = sscanf(str, "%d\t%d,%d\t%[^\t]\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
-		   "\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d,%d"
-		   "\t%[^,],%d,%d\t%[^,],%d,%d%n",
-		   &tmp_int[0], &tmp_int[1], &tmp_int[2], p->name, //
-		   &tmp_int[3], &tmp_int[4], &tmp_int[5],
-		   &tmp_int[6], &tmp_int[7], &tmp_int[8],
-		   &tmp_int[9], &tmp_int[10], &tmp_int[11], &tmp_int[12],
-		   &tmp_int[13], &tmp_int[14], &tmp_int[15], &tmp_int[16], &tmp_int[17], &tmp_int[18],
-		   &tmp_int[19], &tmp_int[20],
-		   &tmp_int[21], &tmp_int[22], &tmp_int[23], //
-		   &tmp_int[24], &tmp_int[25], &tmp_int[26],
-		   &tmp_int[27], &tmp_int[28], &tmp_int[29],
-		   &tmp_int[30], &tmp_int[31], &tmp_int[32], &tmp_int[33], &tmp_int[34],
-		   p->last_point.map, &tmp_int[35], &tmp_int[36], //
-		   p->save_point.map, &tmp_int[37], &tmp_int[38], &next)) != 42) {
-			// It's char structure of a version before 384
-			tmp_int[26] = 0; // pet id
-			set = sscanf(str, "%d\t%d,%d\t%[^\t]\t%d,%d,%d\t%d,%d,%d\t%d,%d,%d,%d\t%d,%d,%d,%d,%d,%d\t%d,%d"
-			      "\t%d,%d,%d\t%d,%d\t%d,%d,%d\t%d,%d,%d,%d,%d"
-			      "\t%[^,],%d,%d\t%[^,],%d,%d%n",
-			      &tmp_int[0], &tmp_int[1], &tmp_int[2], p->name, //
-			      &tmp_int[3], &tmp_int[4], &tmp_int[5],
-			      &tmp_int[6], &tmp_int[7], &tmp_int[8],
-			      &tmp_int[9], &tmp_int[10], &tmp_int[11], &tmp_int[12],
-			      &tmp_int[13], &tmp_int[14], &tmp_int[15], &tmp_int[16], &tmp_int[17], &tmp_int[18],
-			      &tmp_int[19], &tmp_int[20],
-			      &tmp_int[21], &tmp_int[22], &tmp_int[23], //
-			      &tmp_int[24], &tmp_int[25], //
-			      &tmp_int[27], &tmp_int[28], &tmp_int[29],
-			      &tmp_int[30], &tmp_int[31], &tmp_int[32], &tmp_int[33], &tmp_int[34],
-			      p->last_point.map, &tmp_int[35], &tmp_int[36], //
-			      p->save_point.map, &tmp_int[37], &tmp_int[38], &next);
-			set += 2;
-			//printf("char: old char data ver.1\n");
-		// Char structure of version 1007 or older
-		} else {
-			set++;
-			//printf("char: old char data ver.2\n");
-		}
-	// Char structure of version 1008+
-	} else {
-		//printf("char: new char data ver.3\n");
-	}
-	if (set != 43)
-		return 0;
-
-	p->char_id = tmp_int[0];
-	p->account_id = tmp_int[1];
-	p->char_num = tmp_int[2];
-	p->class = tmp_int[3];
-	p->base_level = tmp_int[4];
-	p->job_level = tmp_int[5];
-	p->base_exp = tmp_int[6];
-	p->job_exp = tmp_int[7];
-	p->zeny = tmp_int[8];
-	p->hp = tmp_int[9];
-	p->max_hp = tmp_int[10];
-	p->sp = tmp_int[11];
-	p->max_sp = tmp_int[12];
-	p->str = tmp_int[13];
-	p->agi = tmp_int[14];
-	p->vit = tmp_int[15];
-	p->int_ = tmp_int[16];
-	p->dex = tmp_int[17];
-	p->luk = tmp_int[18];
-	p->status_point = tmp_int[19];
-	p->skill_point = tmp_int[20];
-	p->option = tmp_int[21];
-	p->karma = tmp_int[22];
-	p->manner = tmp_int[23];
-	p->party_id = tmp_int[24];
-	p->guild_id = tmp_int[25];
-	p->pet_id = tmp_int[26];
-	p->hair = tmp_int[27];
-	p->hair_color = tmp_int[28];
-	p->clothes_color = tmp_int[29];
-	p->weapon = tmp_int[30];
-	p->shield = tmp_int[31];
-	p->head_top = tmp_int[32];
-	p->head_mid = tmp_int[33];
-	p->head_bottom = tmp_int[34];
-	p->last_point.x = tmp_int[35];
-	p->last_point.y = tmp_int[36];
-	p->save_point.x = tmp_int[37];
-	p->save_point.y = tmp_int[38];
-	p->partner_id = tmp_int[39];
-
-	// Some checks
-	for(i = 0; i < char_num; i++) {
-		if (char_dat[i].char_id == p->char_id) {
-			printf("\033[1;31mmmo_auth_init: ******Error: a character has an identical id to another.\n");
-			printf("               character id #%d -> new character not readed.\n", p->char_id);
-			printf("               Character saved in log file.\033[0m\n");
-			return -1;
-		} else if (strcmp(char_dat[i].name, p->name) == 0) {
-			printf("\033[1;31mmmo_auth_init: ******Error: character name already exists.\n");
-			printf("               character name '%s' -> new character not readed.\n", p->name);
-			printf("               Character saved in log file.\033[0m\n");
-			return -2;
-		}
-	}
-
-	if (str[next] == '\n' || str[next] == '\r')
-		return 1;	// �V�K�f�[�^
-
-	next++;
-
-	for(i = 0; str[next] && str[next] != '\t'; i++) {
-		set = sscanf(str+next, "%[^,],%d,%d%n", p->memo_point[i].map, &tmp_int[0], &tmp_int[1], &len);
-		if (set != 3)
-			return -3;
-		p->memo_point[i].x = tmp_int[0];
-		p->memo_point[i].y = tmp_int[1];
-		next += len;
-		if (str[next] == ' ')
-			next++;
-	}
-
-	next++;
-
-	for(i = 0; str[next] && str[next] != '\t'; i++) {
-		if (sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-		    &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
-		    &tmp_int[4], &tmp_int[5], &tmp_int[6],
-		    &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &tmp_int[11], &len) == 12) {
-			// do nothing, it's ok
-		} else if(sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-		          &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
-		          &tmp_int[4], &tmp_int[5], &tmp_int[6],
-		          &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &len) == 11) {
-			tmp_int[11] = 0; // broken doesn't exist in this version -> 0
-		} else // invalid structure
-			return -4;
-		p->inventory[i].id = tmp_int[0];
-		p->inventory[i].nameid = tmp_int[1];
-		p->inventory[i].amount = tmp_int[2];
-		p->inventory[i].equip = tmp_int[3];
-		p->inventory[i].identify = tmp_int[4];
-		p->inventory[i].refine = tmp_int[5];
-		p->inventory[i].attribute = tmp_int[6];
-		p->inventory[i].card[0] = tmp_int[7];
-		p->inventory[i].card[1] = tmp_int[8];
-		p->inventory[i].card[2] = tmp_int[9];
-		p->inventory[i].card[3] = tmp_int[10];
-		p->inventory[i].broken  = tmp_int[11];
-		next += len;
-		if (str[next] == ' ')
-			next++;
-	}
-
-	next++;
-
-	for(i = 0; str[next] && str[next] != '\t'; i++) {
-		if (sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-		    &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
-		    &tmp_int[4], &tmp_int[5], &tmp_int[6],
-		    &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &tmp_int[11], &len) == 12) {
-			// do nothing, it's ok
-		} else if (sscanf(str + next, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d%n",
-		           &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
-		           &tmp_int[4], &tmp_int[5], &tmp_int[6],
-		           &tmp_int[7], &tmp_int[8], &tmp_int[9], &tmp_int[10], &len) == 11) {
-			tmp_int[11] = 0; // broken doesn't exist in this version -> 0
-		} else // invalid structure
-			return -5;
-		p->cart[i].id = tmp_int[0];
-		p->cart[i].nameid = tmp_int[1];
-		p->cart[i].amount = tmp_int[2];
-		p->cart[i].equip = tmp_int[3];
-		p->cart[i].identify = tmp_int[4];
-		p->cart[i].refine = tmp_int[5];
-		p->cart[i].attribute = tmp_int[6];
-		p->cart[i].card[0] = tmp_int[7];
-		p->cart[i].card[1] = tmp_int[8];
-		p->cart[i].card[2] = tmp_int[9];
-		p->cart[i].card[3] = tmp_int[10];
-		p->cart[i].broken = tmp_int[11];
-		next += len;
-		if (str[next] == ' ')
-			next++;
-	}
-
-	next++;
-
-	for(i = 0; str[next] && str[next] != '\t'; i++) {
-		set = sscanf(str + next, "%d,%d%n", &tmp_int[0], &tmp_int[1], &len);
-		if (set != 2)
-			return -6;
-		p->skill[tmp_int[0]].id = tmp_int[0];
-		p->skill[tmp_int[0]].lv = tmp_int[1];
-		next += len;
-		if (str[next] == ' ')
-			next++;
-	}
-
-	next++;
-
-	for(i = 0; str[next] && str[next] != '\t' && str[next] != '\n' && str[next] != '\r'; i++) { // global_reg�����ȑO��athena.txt�݊��̂��߈ꉞ'\n'�`�F�b�N
-		set = sscanf(str + next, "%[^,],%d%n", p->global_reg[i].str, &p->global_reg[i].value, &len);
-		if (set != 2) {
-			// because some scripts are not correct, the str can be "". So, we must check that.
-			// If it's, we must not refuse the character, but just this REG value.
-			// Character line will have something like: nov_2nd_cos,9 ,9 nov_1_2_cos_c,1 (here, ,9 is not good)
-			if (str[next] == ',' && sscanf(str + next, ",%d%n", &p->global_reg[i].value, &len) == 1)
-				i--;
-			else
-				return -7;
-		}
-		next += len;
-		if (str[next] == ' ')
-			next++;
-	}
-	p->global_reg_num = i;
-
-	return 1;
-}
-
-//==========================================================================================================
-int mmo_char_tosql(int char_id, struct mmo_charstatus *p){
-	int i,save_flag;
-	
-	save_flag = char_id;
-	printf("request save char data... (%d)\n",char_id);
-	
-	//`char`( `char_id`,`account_id`,`char_num`,`name`,`class`,`base_level`,`job_level`,`base_exp`,`job_exp`,`zeny`, //9
-	//`str`,`agi`,`vit`,`int`,`dex`,`luk`, //15
-	//`max_hp`,`hp`,`max_sp`,`sp`,`status_point`,`skill_point`, //21
-	//`option`,`karma`,`manner`,`party_id`,`guild_id`,`pet_id`, //27
-	//`hair`,`hair_color`,`clothes_color`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`, //35
-	//`last_map`,`last_x`,`last_y`,`save_map`,`save_x`,`save_y`)
-	sprintf(tmp_sql ,"INSERT INTO `char` SET `char_id`='%d', `account_id`='%d', `char_num`='%d', `name`='%s', `class`='%d', `base_level`='%d', `job_level`='%d',"
-		"`base_exp`='%d', `job_exp`='%d', `zeny`='%d',"
-		"`max_hp`='%d',`hp`='%d',`max_sp`='%d',`sp`='%d',`status_point`='%d',`skill_point`='%d',"
-		"`str`='%d',`agi`='%d',`vit`='%d',`int`='%d',`dex`='%d',`luk`='%d',"
-		"`option`='%d',`karma`='%d',`manner`='%d',`party_id`='%d',`guild_id`='%d',`pet_id`='%d',"
-		"`hair`='%d',`hair_color`='%d',`clothes_color`='%d',`weapon`='%d',`shield`='%d',`head_top`='%d',`head_mid`='%d',`head_bottom`='%d',"
-		"`last_map`='%s',`last_x`='%d',`last_y`='%d',`save_map`='%s',`save_x`='%d',`save_y`='%d', `partner_id` = '%d'",
-		char_id,p->account_id,p->char_num,p->name,p->class, p->base_level, p->job_level,
-		p->base_exp, p->job_exp, p->zeny,
-		p->max_hp, p->hp, p->max_sp, p->sp, p->status_point, p->skill_point,
-		p->str, p->agi, p->vit, p->int_, p->dex, p->luk,
-		p->option, p->karma, p->manner, p->party_id, p->guild_id, p->pet_id,
-		p->hair, p->hair_color, p->clothes_color,
-		p->weapon, p->shield, p->head_top, p->head_mid, p->head_bottom,
-		p->last_point.map, p->last_point.x, p->last_point.y,
-		p->save_point.map, p->save_point.x, p->save_point.y, p->partner_id
-	);
-	
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error (update `char`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	
-	//`memo` (`memo_id`,`char_id`,`map`,`x`,`y`)
-	sprintf(tmp_sql,"DELETE FROM `memo` WHERE `char_id`='%d'",char_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error (delete `memo`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	
-	//insert here.
-	for(i=0;i<10;i++){
-		if(p->memo_point[i].map[0]){
-			sprintf(tmp_sql,"INSERT INTO `memo`(`char_id`,`map`,`x`,`y`) VALUES ('%d', '%s', '%d', '%d')",
-				char_id, p->memo_point[i].map, p->memo_point[i].x, p->memo_point[i].y);
-			if(mysql_query(&mysql_handle, tmp_sql) )
-				printf("DB server Error (insert `memo`)- %s\n", mysql_error(&mysql_handle) );
-		}
-	}
-	//`inventory` (`id`,`char_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`, `broken`)
-	sprintf(tmp_sql,"DELETE FROM `inventory` WHERE `char_id`='%d'",char_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error (delete `inventory`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	
-	//insert here.
-	for(i=0;i<MAX_INVENTORY;i++){
-		if(p->inventory[i].nameid){
-			sprintf(tmp_sql,"INSERT INTO `inventory`(`id`,`char_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`, `broken`)"
-				" VALUES ('%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d')",
-				p->inventory[i].id, char_id,p->inventory[i].nameid, p->inventory[i].amount, p->inventory[i].equip,
-				p->inventory[i].identify, p->inventory[i].refine, p->inventory[i].attribute,
-				p->inventory[i].card[0], p->inventory[i].card[1], p->inventory[i].card[2], p->inventory[i].card[3], p->inventory[i].broken);
-			if(mysql_query(&mysql_handle, tmp_sql) )
-				printf("DB server Error (insert `inventory`)- %s\n", mysql_error(&mysql_handle) );
-		}
-	}
-
-	//`cart_inventory` (`id`,`char_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`, `broken`)
-	sprintf (tmp_sql, "DELETE FROM `cart_inventory` WHERE `char_id`='%d'", char_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error (delete `cart_inventory`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	
-	//insert here.
-	for(i=0;i<MAX_CART;i++){
-		if(p->cart[i].nameid){
-			sprintf(tmp_sql,"INSERT INTO `cart_inventory`(`id`,`char_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3`, `broken`)"
-				" VALUES ('%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d' )",
-				p->cart[i].id, char_id, p->cart[i].nameid, p->cart[i].amount, p->cart[i].equip,
-				p->cart[i].identify, p->cart[i].refine, p->cart[i].attribute,
-				p->cart[i].card[0], p->cart[i].card[1], p->cart[i].card[2], p->cart[i].card[3], p->cart[i].broken );
-			if(mysql_query(&mysql_handle, tmp_sql) ) {
-				printf("DB server Error (insert `cart_inventory`)- %s\n", mysql_error(&mysql_handle) );
-			}
-		}
-	}
-	
-	
-	//`skill` (`char_id`, `id`, `lv`)
-	sprintf(tmp_sql,"DELETE FROM `skill` WHERE `char_id`='%d'",char_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error (delete `skill`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	
-	//insert here.
-	for(i=0;i<MAX_SKILL;i++){
-		if(p->skill[i].id){
-			if (p->skill[i].id && p->skill[i].flag!=1) {
-				sprintf(tmp_sql,"INSERT INTO `skill`(`char_id`,`id`, `lv`) VALUES ('%d', '%d', '%d')",
-					char_id, p->skill[i].id, (p->skill[i].flag==0)?p->skill[i].lv:p->skill[i].flag-2);
-				if(mysql_query(&mysql_handle, tmp_sql) ) {
-					printf("DB server Error (insert `skill`)- %s\n", mysql_error(&mysql_handle) );
-				}
-			}
-		}
-	}
-	//`global_reg_value` (`char_id`, `str`, `value`)
-	sprintf(tmp_sql,"DELETE FROM `global_reg_value` WHERE `char_id`='%d'",char_id);
-	if(mysql_query(&mysql_handle, tmp_sql) ) {
-			printf("DB server Error (delete `global_reg_value`)- %s\n", mysql_error(&mysql_handle) );
-	}
-	
-	//insert here.
-	for(i=0;i<p->global_reg_num;i++){
-		if(p->global_reg[i].value !=0){
-			sprintf(tmp_sql,"INSERT INTO `global_reg_value` (`char_id`, `str`, `value`) VALUES ('%d', '%s','%d')",
-				char_id, p->global_reg[i].str, p->global_reg[i].value);
-			if(mysql_query(&mysql_handle, tmp_sql) ) {
-				printf("DB server Error (insert `global_reg_value`)- %s\n", mysql_error(&mysql_handle) );
-			}
-		}
-	}
-	
-	printf("saving char is done... (%d)\n",char_id);
-	save_flag = 0;
-	
-  return 0;
-}
-//==========================================================================================================
-
-int mmo_char_init(void){
-  char line[65536];
-  struct s_pet *p;
-  int ret;
-  int i=0,set,tmp_int[2], c= 0;
-  char input;
-  FILE *fp;
-
-	
-	//DB connection initialized
-	mysql_init(&mysql_handle);
-	printf("Connect DB server.... (inter server)\n");
-	if(!mysql_real_connect(&mysql_handle, db_server_ip, db_server_id, db_server_pw,
-		db_server_logindb ,db_server_port, (char *)NULL, 0)) {
-			//pointer check
-			printf("%s\n",mysql_error(&mysql_handle));
-			exit(1);
-	}
-	else {
-		printf ("connect success! (inter server)\n");
-	}
-	
-
-
-  printf("Warning : Make sure you backup your databases before continuing!\n");
-  printf("\nDo you wish to convert your Character Database to SQL? (y/n) : ");
-  input=getchar();
-  if(input == 'y' || input == 'Y'){
-	printf("\nConverting Character Database...\n");
-	fp=fopen("save/athena.txt","r");
-	char_dat=malloc(sizeof(char_dat[0])*256);
-	char_max=256;
-	if(fp==NULL)
-		return 0;
-	  while(fgets(line, 65535, fp)){
-	  if(char_num>=char_max){
-	      char_max+=256;
-	      char_dat=realloc(char_dat, sizeof(char_dat[0]) *char_max);
-	    }
-	    memset(&char_dat[char_num], 0, sizeof(char_dat[0]));
-	    ret=mmo_char_fromstr(line, &char_dat[char_num]);
-	    if(ret){
-	      mmo_char_tosql(char_dat[char_num].char_id , &char_dat[char_num]);
-	      printf ("convert %d -> DB\n",char_dat[char_num].char_id);
-	      if(char_dat[char_num].char_id>=char_id_count)
-					char_id_count=char_dat[char_num].char_id+1;
-	      char_num++;
-	    }
-	  }
-	  printf("char data convert end\n");
-	  fclose(fp);
-  }
-  
-  while(getchar() != '\n');  
-  printf("\nDo you wish to convert your Storage Database to SQL? (y/n) : ");
-  input=getchar();
-  if(input == 'y' || input == 'Y') {
-	printf("\nConverting Storage Database...\n");
-	fp=fopen(storage_txt,"r");
-	if(fp==NULL){
-		printf("cant't read : %s\n",storage_txt);
-		return 0;
-	}
-	
-	while(fgets(line,65535,fp)){
-		set=sscanf(line,"%d,%d",&tmp_int[0],&tmp_int[1]);
-		if(set==2) {
-			if(i==0){
-				storage=malloc(sizeof(struct storage));
-			}else{
-				storage=realloc(storage,sizeof(struct storage)*(i+1));
-			}
-			memset(&storage[i],0,sizeof(struct storage));
-			storage[i].account_id=tmp_int[0];
-			storage_fromstr(line,&storage[i]);
-			storage_tosql(tmp_int[0],&storage[i]); //to sql. (dump)
-			i++;
-		}
-	}
-	fclose(fp);
-  }
-	
-  while(getchar() != '\n');
-  printf("\nDo you wish to convert your Pet Database to SQL? (y/n) : ");
-  input=getchar();
-  if(input == 'y' || input == 'Y') {
-	printf("\nConverting Pet Database...\n");
-	if( (fp=fopen(pet_txt,"r")) ==NULL )
-		return 1;
-	
-	p=malloc(sizeof(struct s_pet));
-	while(fgets(line, sizeof(line), fp)){
-		if(p==NULL){
-			printf("int_pet: out of memory!\n");
-			exit(0);
-		}
-		if(inter_pet_fromstr(line, p)==0 && p->pet_id>0){
-			//pet dump
-			inter_pet_tosql(p->pet_id,p);
-		}else{
-			printf("int_pet: broken data [%s] line %d\n", pet_txt, c);
-		}
-		c++;
-	}
-	fclose(fp);
-  }
-
-  return 0;
-}
-int inter_config_read(const char *cfgName) {
-	printf ("start reading interserver configuration: %s\n",cfgName);
-	int i;
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp;
-
-	fp=fopen(cfgName,"r");
-	if(fp==NULL){
-		printf("file not found: %s\n", cfgName);
-		return 1;
-	}
-	while(fgets(line, 1020, fp)){
-		i=sscanf(line,"%[^:]:%s", w1, w2);
-		if(i!=2)
-			continue;
-		if(strcmpi(w1,"storage_txt")==0){
-			printf ("set storage_txt : %s\n",w2);
-			strncpy(storage_txt, w2, sizeof(storage_txt));
-		} else if(strcmpi(w1,"pet_txt")==0){
-			printf ("set pet_txt : %s\n",w2);
-			strncpy(pet_txt, w2, sizeof(pet_txt));
-		}
-		//add for DB connection
-		else if(strcmpi(w1,"db_server_ip")==0){
-			strcpy(db_server_ip, w2);
-			printf ("set db_server_ip : %s\n",w2);
-		}
-		else if(strcmpi(w1,"db_server_port")==0){
-			db_server_port=atoi(w2);
-			printf ("set db_server_port : %s\n",w2);
-		}
-		else if(strcmpi(w1,"db_server_id")==0){
-			strcpy(db_server_id, w2);
-			printf ("set db_server_id : %s\n",w2);
-		}
-		else if(strcmpi(w1,"db_server_pw")==0){
-			strcpy(db_server_pw, w2);
-			printf ("set db_server_pw : %s\n",w2);
-		}
-		else if(strcmpi(w1,"db_server_logindb")==0){
-			strcpy(db_server_logindb, w2);
-			printf ("set db_server_logindb : %s\n",w2);
-		}
-	}
-	fclose(fp);
-	
-	printf ("success reading interserver configuration\n");
-
-	return 0;
-}
-
-int char_config_read(const char *cfgName) {
-	printf ("start reading interserver configuration: %s\n",cfgName);
-	int i;
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp;
-
-	fp=fopen(cfgName,"r");
-	if(fp==NULL){
-		printf("file not found: %s\n", cfgName);
-		return 1;
-	}
-
-		while(fgets(line, 1020, fp)){
-			if(line[0] == '/' && line[1] == '/')
-				continue;
-
-			i=sscanf(line,"%[^:]:%s", w1, w2);
-			if(i!=2)
-				continue;
-			if(strcmpi(w1,"char_txt")==0){
-				printf ("set char_txt : %s\n",w2);
-				strcpy(char_txt, w2);
-			}
-		}
-		fclose(fp);
-		printf("reading configure done.....\n");
-	
-	return 0;
-}
-
-int do_init(int argc, char **argv){
-
-	
-	char_config_read((argc>1)?argv[1]:CHAR_CONF_NAME);
-	inter_config_read((argc>2)?argv[2]:inter_cfgName);
-
-	mmo_char_init();
-	printf ("all conversion success!\n");
-	exit (0);
-	return 0;
-}
-
-
diff --git a/misc/src/txt-converter/char/char.h b/misc/src/txt-converter/char/char.h
deleted file mode 100644
index 4712b4d..0000000
--- a/misc/src/txt-converter/char/char.h
+++ /dev/null
@@ -1,38 +0,0 @@
-#include "../../common/core.h"
-#include "../../common/socket.h"
-#include "../../common/timer.h"
-#include "../common/mmo.h"
-#include "../../common/version.h"
-#include "../../common/db.h"
-
-#ifndef _CHAR_H_
-#define _CHAR_H_
-
-#define MAX_MAP_SERVERS 30
-
-#define CHAR_CONF_NAME	"conf/char_athena.conf"
-
-#define UNKNOWN_CHAR_NAME "Unknown"
-
-#define DEFAULT_AUTOSAVE_INTERVAL 300*1000
-
-struct mmo_map_server{
-  long ip;
-  short port;
-  int users;
-  char map[MAX_MAP_PER_SERVER][16];
-};
-
-int mapif_sendall(unsigned char *buf,unsigned int len);
-int mapif_sendallwos(int fd,unsigned char *buf,unsigned int len);
-int mapif_send(int fd,unsigned char *buf,unsigned int len);
-
-extern int autosave_interval;
-
-#endif
-
-#include "inter.h"
-#include "int_pet.h"
-#include "int_guild.h"
-#include "int_party.h"
-#include "int_storage.h"
diff --git a/misc/src/txt-converter/char/int_guild.h b/misc/src/txt-converter/char/int_guild.h
deleted file mode 100644
index 2ea8594..0000000
--- a/misc/src/txt-converter/char/int_guild.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _INT_GUILD_H_
-#define _INT_GUILD_H_
-
-int inter_guild_init();
-int inter_guild_save();
-int inter_guild_parse_frommap(int fd);
-
-extern char guild_txt[256];
-
-#endif
diff --git a/misc/src/txt-converter/char/int_party.h b/misc/src/txt-converter/char/int_party.h
deleted file mode 100644
index 036db1a..0000000
--- a/misc/src/txt-converter/char/int_party.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef _INT_PARTY_H_
-#define _INT_PARTY_H_
-
-int inter_party_init();
-int inter_party_save();
-
-int inter_party_parse_frommap(int fd);
-
-extern char party_txt[256];
-
-#endif
diff --git a/misc/src/txt-converter/char/int_pet.h b/misc/src/txt-converter/char/int_pet.h
deleted file mode 100644
index 27ba4fc..0000000
--- a/misc/src/txt-converter/char/int_pet.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef _INT_PET_H_
-#define _INT_PET_H_
-
-int inter_pet_init();
-int inter_pet_save();
-int inter_pet_delete(int pet_id);
-
-int inter_pet_parse_frommap(int fd);
-
-//extern char pet_txt[256];
-
-#endif
diff --git a/misc/src/txt-converter/char/int_storage.h b/misc/src/txt-converter/char/int_storage.h
deleted file mode 100644
index 3572ae5..0000000
--- a/misc/src/txt-converter/char/int_storage.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef _INT_STORAGE_H_
-#define _INT_STORAGE_H_
-
-int inter_storage_init();
-int inter_storage_save();
-
-int inter_storage_parse_frommap(int fd);
-
-//extern char storage_txt[256];
-
-#endif
diff --git a/misc/src/txt-converter/char/inter.h b/misc/src/txt-converter/char/inter.h
deleted file mode 100644
index ee39944..0000000
--- a/misc/src/txt-converter/char/inter.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef _INTER_H_
-#define _INTER_H_
-
-int inter_init(const char *file);
-int inter_save();
-int inter_parse_frommap(int fd);
-
-int inter_check_length(int fd,int length);
-
-#define inter_cfgName "conf/inter_athena.conf"
-
-
-//add include for DBMS(mysql)
-#include <mysql.h>
-
-extern MYSQL mysql_handle;
-extern char tmp_sql[65535];
-extern MYSQL_RES* 	sql_res ;
-extern MYSQL_ROW	sql_row ;
-extern int 	sql_cnt;
-
-extern int db_server_port;
-extern char db_server_ip[16];
-extern char db_server_id[32];
-extern char db_server_pw[32];
-extern char db_server_logindb[32];
-
-#endif
diff --git a/misc/src/txt-converter/char/strlib.c b/misc/src/txt-converter/char/strlib.c
deleted file mode 100644
index 60803c1..0000000
--- a/misc/src/txt-converter/char/strlib.c
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "strlib.h"
-
-//-----------------------------------------------
-// string lib.
-unsigned char* jstrescape (unsigned char* pt) {
-	//copy from here
-	unsigned char * ptr;
-	int i =0, j=0;
-	
-	//copy string to temporary
-	ptr = malloc(J_MAX_MALLOC_SIZE);
-	strcpy (ptr,pt);
-	
-	while (ptr[i] != '\0') {
-		switch (ptr[i]) {
-			case '\'':
-				pt[j++] = '\\';
-				pt[j++] = ptr[i++];
-				break;
-			default:
-				pt[j++] = ptr[i++];
-		}
-	}
-	pt[j++] = '\0';
-	free (ptr);
-	return (unsigned char*) &pt[0];
-}
-
-unsigned char* jstrescapecpy (unsigned char* pt,unsigned char* spt) {
-	//copy from here
-	int i =0, j=0;
-	
-	while (spt[i] != '\0') {
-		switch (spt[i]) {
-			case '\'':
-				pt[j++] = '\\';
-				pt[j++] = spt[i++];
-				break;
-			default:
-				pt[j++] = spt[i++];
-		}
-	}
-	pt[j++] = '\0';
-	return (unsigned char*) &pt[0];
-}
-int jmemescapecpy (unsigned char* pt,unsigned char* spt, int size) {
-	//copy from here
-	int i =0, j=0;
-	
-	while (i < size) {
-		switch (spt[i]) {
-			case '\'':
-				pt[j++] = '\\';
-				pt[j++] = spt[i++];
-				break;
-			default:
-				pt[j++] = spt[i++];
-		}
-	}
-	// copy size is 0 ~ (j-1)
-	return j;
-}
diff --git a/misc/src/txt-converter/char/strlib.h b/misc/src/txt-converter/char/strlib.h
deleted file mode 100644
index 442cfac..0000000
--- a/misc/src/txt-converter/char/strlib.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef _J_STR_H_
-#define _J_STR_H_
-#define J_MAX_MALLOC_SIZE 65535
-//string functions.
-//code by Jioh L. Jung
-unsigned char* jstrescape (unsigned char* pt);
-unsigned char* jstrescapecpy (unsigned char* pt,unsigned char* spt);
-int jmemescapecpy (unsigned char* pt,unsigned char* spt, int size);
-#endif
diff --git a/misc/src/txt-converter/common/mmo.h b/misc/src/txt-converter/common/mmo.h
deleted file mode 100644
index df42783..0000000
--- a/misc/src/txt-converter/common/mmo.h
+++ /dev/null
@@ -1,280 +0,0 @@
-// Original : mmo.h 2003/03/14 12:07:02 Rev.1.7
-
-#ifndef	_MMO_H_
-#define	_MMO_H_
-
-#include <time.h>
-
-#ifdef CYGWIN
-// txt��log�Ȃǂ̏����o���t�@�C���̉��s�R�[�h
-#define RETCODE	"\r\n"	// (CR/LF�FWindows�n)
-#else
-#define RETCODE "\n"	// (LF�FUnix�n�j
-#endif
-
-#define FIFOSIZE_SERVERLINK	128*1024
-
-#define MAX_MAP_PER_SERVER 512
-#define MAX_INVENTORY 100
-#define MAX_AMOUNT 30000
-#define MAX_ZENY 1000000000	// 1G zeny
-#define MAX_CART 100
-#define MAX_SKILL 450
-#define GLOBAL_REG_NUM 96
-#define ACCOUNT_REG_NUM 16
-#define ACCOUNT_REG2_NUM 16
-#define DEFAULT_WALK_SPEED 150
-#define MIN_WALK_SPEED 0
-#define MAX_WALK_SPEED 1000
-#define MAX_STORAGE 100
-#define MAX_GUILD_STORAGE 1000
-#define MAX_PARTY 12
-#define MAX_GUILD 56	// increased max guild members to accomodate for +2 increase for extension levels [Valaris]
-#define MAX_GUILDPOSITION 56	// increased max guild positions to accomodate for all members [Valaris]
-#define MAX_GUILDEXPLUSION 32
-#define MAX_GUILDALLIANCE 16
-#define MAX_GUILDSKILL	8
-#define MAX_GUILDCASTLE 24	// increased to include novice castles [Valaris]
-#define MAX_GUILDLEVEL 50
-
-#define MIN_HAIR_STYLE 0
-#define MAX_HAIR_STYLE 20
-#define MIN_HAIR_COLOR 0
-#define MAX_HAIR_COLOR 9
-#define MIN_CLOTH_COLOR 0
-#define MAX_CLOTH_COLOR 4
-
-// for produce
-#define MIN_ATTRIBUTE 0
-#define MAX_ATTRIBUTE 4
-#define ATTRIBUTE_NORMAL 0
-#define MIN_STAR 0
-#define MAX_STAR 3
-
-#define MIN_PORTAL_MEMO 0
-#define MAX_PORTAL_MEMO 2
-
-#define MAX_STATUS_TYPE 5
-
-#define WEDDING_RING_M 2634
-#define WEDDING_RING_F 2635
-
-#define CHAR_CONF_NAME  "conf/char_athena.conf"
-
-struct item {
-	int id;
-	short nameid;
-	short amount;
-	unsigned short equip;
-	char identify;
-	char refine;
-	char attribute;
-	short card[4];
-	short broken;
-};
-struct point{
-	char map[24];
-	short x,y;
-};
-struct skill {
-	unsigned short id,lv,flag;
-};
-struct global_reg {
-	char str[32];
-	int value;
-};
-struct s_pet {
-	int account_id;
-	int char_id;
-	int pet_id;
-	short class;
-	short level;
-	short egg_id;//pet egg id
-	short equip;//pet equip name_id
-	short intimate;//pet friendly
-	short hungry;//pet hungry
-	char name[24];
-	char rename_flag;
-	char incuvate;
-};
-
-struct mmo_charstatus {
-	int char_id;
-	int account_id;
-	int partner_id;
-
-	int base_exp,job_exp,zeny;
-
-	short class;
-	short status_point,skill_point;
-	int hp,max_hp,sp,max_sp;
-	short option,karma,manner;
-	short hair,hair_color,clothes_color;
-	int party_id,guild_id,pet_id;
-
-	short weapon,shield;
-	short head_top,head_mid,head_bottom;
-
-	char name[24];
-	unsigned char base_level,job_level;
-	short str,agi,vit,int_,dex,luk;
-	unsigned char char_num,sex;
-
-	struct point last_point,save_point,memo_point[10];
-	struct item inventory[MAX_INVENTORY],cart[MAX_CART];
-	struct skill skill[MAX_SKILL];
-	int global_reg_num;
-	struct global_reg global_reg[GLOBAL_REG_NUM];
-	int account_reg_num;
-	struct global_reg account_reg[ACCOUNT_REG_NUM];
-	int account_reg2_num;
-	struct global_reg account_reg2[ACCOUNT_REG2_NUM];
-};
-
-struct storage {
-	int account_id;
-	short storage_status;
-	short storage_amount;
-	struct item storage[MAX_STORAGE];
-};
-
-struct guild_storage {
-	int guild_id;
-	short storage_status;
-	short storage_amount;
-	struct item storage[MAX_GUILD_STORAGE];
-};
-
-struct map_session_data;
-
-struct gm_account {
-	int account_id;
-	int level;
-};
-
-struct party_member {
-	int account_id;
-	char name[24],map[24];
-	int leader,online,lv;
-	struct map_session_data *sd;
-};
-struct party {
-	int party_id;
-	char name[24];
-	int exp;
-	int item;
-	struct party_member member[MAX_PARTY];
-};
-
-struct guild_member {
-	int account_id, char_id;
-	short hair,hair_color,gender,class,lv;
-	int exp,exp_payper;
-	short online,position;
-	int rsv1,rsv2;
-	char name[24];
-	struct map_session_data *sd;
-};
-struct guild_position {
-	char name[24];
-	int mode;
-	int exp_mode;
-};
-struct guild_alliance {
-	int opposition;
-	int guild_id;
-	char name[24];
-};
-struct guild_explusion {
-	char name[24];
-	char mes[40];
-	char acc[40];
-	int account_id;
-	int rsv1,rsv2,rsv3;
-};
-struct guild_skill {
-	int id,lv;
-};
-struct guild {
-	int guild_id;
-	short guild_lv, connect_member, max_member, average_lv;
-	int exp,next_exp,skill_point,castle_id;
-	char name[24],master[24];
-	struct guild_member member[MAX_GUILD];
-	struct guild_position position[MAX_GUILDPOSITION];
-	char mes1[60],mes2[120];
-	int emblem_len,emblem_id;
-	char emblem_data[2048];
-	struct guild_alliance alliance[MAX_GUILDALLIANCE];
-	struct guild_explusion explusion[MAX_GUILDEXPLUSION];
-	struct guild_skill skill[MAX_GUILDSKILL];
-};
-struct guild_castle {
-	int castle_id;
-	char map_name[24];
-	char castle_name[24];
-	int guild_id;
-	int economy;
-	int defense;
-	int triggerE;
-	int triggerD;
-	int nextTime;
-	int payTime;
-	int createTime;
-	int visibleC;
-	int visibleG0;
-	int visibleG1;
-	int visibleG2;
-	int visibleG3;
-	int visibleG4;
-	int visibleG5;
-	int visibleG6;
-	int visibleG7;
-	int Ghp0;	// added Guardian HP [Valaris]
-	int Ghp1;
-	int Ghp2;
-	int Ghp3;
-	int Ghp4;
-	int Ghp5;
-	int Ghp6;
-	int Ghp7;	
-	int GID0;	
-	int GID1;
-	int GID2;
-	int GID3;
-	int GID4;
-	int GID5;
-	int GID6;
-	int GID7;	// end addition [Valaris]
-
-};
-struct square {
-	int val1[5];
-	int val2[5];
-};
-
-enum {
-	GBI_EXP			=1,		// �M���h��EXP
-	GBI_GUILDLV		=2,		// �M���h��Lv
-	GBI_SKILLPOINT	=3,		// �M���h�̃X�L���|�C���g
-	GBI_SKILLLV		=4,		// �M���h�X�L��Lv
-
-	GMI_POSITION	=0,		// �����o�[�̖�E�ύX
-	GMI_EXP			=1,		// �����o�[��EXP
-
-};
-
-#ifndef strcmpi
-#define strcmpi strcasecmp
-#endif
-#ifndef stricmp
-#define stricmp strcasecmp
-#endif
-#ifndef strncmpi
-#define strncmpi strncasecmp
-#endif
-#ifndef strnicmp
-#define strnicmp strncasecmp
-#endif
-
-#endif	// _MMO_H_
diff --git a/misc/src/txt-converter/login/GNUmakefile b/misc/src/txt-converter/login/GNUmakefile
deleted file mode 100644
index 965a0e0..0000000
--- a/misc/src/txt-converter/login/GNUmakefile
+++ /dev/null
@@ -1,11 +0,0 @@
-all: login-converter
-sql: login-converter
-
-COMMON_OBJ = ../../common/core.o ../../common/socket.o ../../common/timer.o ../../common/db.o ../../common/malloc.o
-COMMON_H = ../../common/core.h ../../common/socket.h ../../common/timer.h ../../common/mmo.h ../../common/version.h ../../common/db.h ../../common/malloc.h
-
-login-converter: login-converter.o ../../login_sql/md5calc.o ../../login_sql/strlib.o $(COMMON_OBJ)
-	$(CC) -o ../../../$@ $^ $(LIB_S)
-login-converter.o: login-converter.c ../../login_sql/login.h ../../login_sql/md5calc.h ../../login_sql/strlib.h $(COMMON_H)
-clean:
-	rm -f *.o ../../../login-converter
diff --git a/misc/src/txt-converter/login/Makefile b/misc/src/txt-converter/login/Makefile
deleted file mode 100644
index 965a0e0..0000000
--- a/misc/src/txt-converter/login/Makefile
+++ /dev/null
@@ -1,11 +0,0 @@
-all: login-converter
-sql: login-converter
-
-COMMON_OBJ = ../../common/core.o ../../common/socket.o ../../common/timer.o ../../common/db.o ../../common/malloc.o
-COMMON_H = ../../common/core.h ../../common/socket.h ../../common/timer.h ../../common/mmo.h ../../common/version.h ../../common/db.h ../../common/malloc.h
-
-login-converter: login-converter.o ../../login_sql/md5calc.o ../../login_sql/strlib.o $(COMMON_OBJ)
-	$(CC) -o ../../../$@ $^ $(LIB_S)
-login-converter.o: login-converter.c ../../login_sql/login.h ../../login_sql/md5calc.h ../../login_sql/strlib.h $(COMMON_H)
-clean:
-	rm -f *.o ../../../login-converter
diff --git a/misc/src/txt-converter/login/login-converter.c b/misc/src/txt-converter/login/login-converter.c
deleted file mode 100644
index c0055da..0000000
--- a/misc/src/txt-converter/login/login-converter.c
+++ /dev/null
@@ -1,252 +0,0 @@
-// $Id: login-converter.c,v 1.1.1.1 2004/09/10 17:45:03 MagicalTux Exp $
-// original : login2.c 2003/01/28 02:29:17 Rev.1.1.1.1
-// login data file to mysql conversion utility.
-//
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <netinet/in.h>
-#include <sys/time.h>
-#include <time.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <string.h>
-#include <arpa/inet.h>
-
-#include <mysql.h>
-
-#include "../../common/core.h"
-#include "../../common/socket.h"
-#include "../../login/login.h"
-#include "../../common/mmo.h"
-#include "../../common/version.h"
-#include "../../common/db.h"
-
-int account_id_count = START_ACCOUNT_NUM;
-int server_num;
-int new_account_flag = 0;
-int login_port = 6900;
-
-struct mmo_char_server server[MAX_SERVERS];
-int server_fd[MAX_SERVERS];
-
-#define AUTH_FIFO_SIZE 256
-struct {
-  int account_id,login_id1,login_id2;
-  int sex,delflag;
-} auth_fifo[AUTH_FIFO_SIZE];
-int auth_fifo_pos=0;
-struct {
-	int account_id, sex;
-	char userid[24], pass[24], lastlogin[24];
-	int logincount;
-	int state; // packet 0x006a value + 1 (0: compte OK)
-	char email[40]; // e-mail (by default: a@a.com)
-	char error_message[20]; // Message of error code #6 = Your are Prohibited to log in until %s (packet 0x006a)
-	time_t ban_until_time; // # of seconds 1/1/1970 (timestamp): ban time limit of the account (0 = no ban)
-	time_t connect_until_time; // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited)
-	char last_ip[16]; // save of last IP of connection
-	char memo[255]; // a memo field
-	int account_reg2_num;
-	struct global_reg account_reg2[ACCOUNT_REG2_NUM];
-} *auth_dat;
-int auth_num=0,auth_max=0;
-
-char login_account_id[256]="account_id";
-char login_userid[256]="userid";
-char login_user_pass[256]="user_pass";
-char login_db[256]="login";
-
-static struct dbt *gm_account_db;
-
-int db_server_port = 3306;
-char db_server_ip[16] = "127.0.0.1";
-char db_server_id[32] = "ragnarok";
-char db_server_pw[32] = "ragnarok";
-char db_server_logindb[32] = "ragnarok";
-
-int isGM(int account_id)
-{
-	struct gm_account *p;
-	p = numdb_search(gm_account_db,account_id);
-	if( p == NULL)
-		return 0;
-	return p->level;
-}
-
-int read_gm_account()
-{
-	char line[8192];
-	struct gm_account *p;
-	FILE *fp;
-	int c=0;
-
-	gm_account_db = numdb_init();
-	printf("gm_account: read start\n");
-
-	if( (fp=fopen("conf/GM_account.txt","r"))==NULL )
-		return 1;
-	while(fgets(line,sizeof(line),fp)){
-		if(line[0] == '/' && line[1] == '/')
-			continue;
-		p=malloc(sizeof(struct gm_account));
-		if(p==NULL){
-			printf("gm_account: out of memory!\n");
-			exit(0);
-		}
-		if(sscanf(line,"%d %d",&p->account_id,&p->level) != 2 || p->level <= 0) {
-			printf("gm_account: broken data [conf/GM_account.txt] line %d\n",c);
-		}
-		else {
-			if(p->level > 99)
-				p->level = 99;
-			numdb_insert(gm_account_db,p->account_id,p);
-		}
-		c++;
-	}
-	fclose(fp);
-	printf("gm_account: read done (%d gm account ID)\n",c);
-	return 0;
-}
-
-int mmo_auth_init(void)
-{
-	MYSQL mysql_handle;
-	char tmpsql[1024];
-	MYSQL_RES* 	sql_res ;
-	MYSQL_ROW	sql_row ;
-
-	mysql_init(&mysql_handle);
-	if(!mysql_real_connect(&mysql_handle, db_server_ip, db_server_id, db_server_pw,
-		db_server_logindb ,db_server_port, (char *)NULL, 0)) {
-			//pointer check
-			printf("%s\n",mysql_error(&mysql_handle));
-			exit(1);
-	}
-	else {
-		printf ("connect success!\n");
-	}
-	printf ("convert start...\n");
-
-	FILE *fp;
-	int account_id, logincount, user_level, state, n, i;
-	char line[2048], userid[2048], pass[2048], lastlogin[2048], sex, email[2048], error_message[2048], last_ip[2048], memo[2048];
-	time_t ban_until_time;
-	time_t connect_until_time;
-	char t_uid[256];
-
-	fp=fopen("save/account.txt","r");
-	auth_dat=malloc(sizeof(auth_dat[0])*256);
-	auth_max=256;
-	if(fp==NULL)
-		return 0;
-	while(fgets(line,1023,fp)!=NULL){
-
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-
-		i = sscanf(line, "%d\t%[^\t]\t%[^\t]\t%[^\t]\t%c\t%d\t%d\t"
-		                 "%[^\t]\t%[^\t]\t%ld\t%[^\t]\t%[^\t]\t%ld%n",
-		    &account_id, userid, pass, lastlogin, &sex, &logincount, &state,
-		    email, error_message, &connect_until_time, last_ip, memo, &ban_until_time, &n);
-
-		sprintf(tmpsql, "SELECT `%s`,`%s`,`%s`,`lastlogin`,`logincount`,`sex`,`connect_until`,`last_ip`,`ban_until`,`state`"
-                    " FROM `%s` WHERE `%s`='%s'", login_account_id, login_userid, login_user_pass, login_db, login_userid, t_uid);
-
-		if(mysql_query(&mysql_handle, tmpsql) ) {
-			printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-		}
-		user_level = isGM(account_id);
-		printf ("userlevel: %s (%d)- %d\n",userid, account_id, user_level);
-		sql_res = mysql_store_result(&mysql_handle) ;
-		sql_row = mysql_fetch_row(sql_res);	//row fetching
-		if (!sql_row) //no row -> insert
-			sprintf(tmpsql, "INSERT INTO `login` (`account_id`, `userid`, `user_pass`, `lastlogin`, `sex`, `logincount`, `email`, `level`) VALUES (%d, '%s', '%s', '%s', '%c', %d, 'user@athena', %d);",account_id , userid, pass,lastlogin,sex,logincount, user_level);
-		else //row reside -> updating
-			sprintf(tmpsql, "UPDATE `login` SET `account_id`='%d', `userid`='%s', `user_pass`='%s', `lastlogin`='%s', `sex`='%c', `logincount`='%d', `email`='user@athena', `level`='%d'\nWHERE `account_id`='%d';",account_id , userid, pass,lastlogin,sex,logincount, user_level, account_id);
-		printf ("Query: %s\n",tmpsql);
-		mysql_free_result(sql_res) ; //resource free
-		if(mysql_query(&mysql_handle, tmpsql) ) {
-			printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
-		}
-	}
-	fclose(fp);
-
-	printf ("convert end...\n");
-
-	return 0;
-}
-
-// �A�J�E���g�f??�x?�X�̏�������
-void nowork(void)
-{
-	//null
-}
-
-int login_config_read(const char *cfgName){
-	int i;
-	char line[1024], w1[1024], w2[1024];
-	FILE *fp;
-
-	fp=fopen(cfgName,"r");
-
-	if(fp==NULL){
-		printf("file not found: %s\n", cfgName);
-		return 1;
-	}
-	printf ("start reading configuration...\n");
-	while(fgets(line, 1020, fp)){
-		if(line[0] == '/' && line[1] == '/')
-			continue;
-
-		i=sscanf(line,"%[^:]:%s", w1, w2);
-		if(i!=2)
-			continue;
-
-
-		//add for DB connection
-		if(strcmpi(w1,"db_server_ip")==0){
-			strcpy(db_server_ip, w2);
-			printf ("set db_server_ip : %s\n",w2);
-		}
-		else if(strcmpi(w1,"db_server_port")==0){
-			db_server_port=atoi(w2);
-			printf ("set db_server_port : %s\n",w2);
-		}
-		else if(strcmpi(w1,"db_server_id")==0){
-			strcpy(db_server_id, w2);
-			printf ("set db_server_id : %s\n",w2);
-		}
-		else if(strcmpi(w1,"db_server_pw")==0){
-			strcpy(db_server_pw, w2);
-			printf ("set db_server_pw : %s\n",w2);
-		}
-		else if(strcmpi(w1,"db_server_logindb")==0){
-			strcpy(db_server_logindb, w2);
-			printf ("set db_server_logindb : %s\n",w2);
-		}
-	}
-	fclose(fp);
-	printf ("End reading configuration...\n");
-	return 0;
-}
-
-int do_init(int argc,char **argv)
-{
-	char input;
-	login_config_read( (argc>1)?argv[1]:LOGIN_CONF_NAME );
-	read_gm_account();
-
-        printf("\nWarning : Make sure you backup your databases before continuing!\n");
-        printf("\nDo you wish to convert your Login Database to SQL? (y/n) : ");
-        input=getchar();
-	if(input == 'y' || input == 'Y')
-		mmo_auth_init();
-
-	exit(0);
-}
-
-
diff --git a/misc/src/webserver/Makefile b/misc/src/webserver/Makefile
deleted file mode 100644
index f664a7d..0000000
--- a/misc/src/webserver/Makefile
+++ /dev/null
@@ -1,26 +0,0 @@
-cc = gcc
-
-all:
-	#Generate framework...
-	$(cc) -c parse.c
-	$(cc) -c generate.c
-	$(cc) -c htmlstyle.c
-	$(cc) -c logs.c
-	
-	#Generate "pages"...
-	cd pages && $(cc) -c about.c && cd ..
-	cd pages && $(cc) -c sample.c && cd ..
-	cd pages && $(cc) -c notdone.c && cd ..
-
-	#Building the server...
-	$(cc) -o webserver main.c parse.o generate.o htmlstyle.o \
-	logs.o pages/about.o pages/sample.o pages/notdone.o
-	
-
-
-
-clean:
-	rm -f *.o
-	rm -f pages/*.o
-	rm -f webserver
-	
diff --git a/misc/src/webserver/doc/API.txt b/misc/src/webserver/doc/API.txt
deleted file mode 100644
index c80f7bd..0000000
--- a/misc/src/webserver/doc/API.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-Here's the webserver API, so you can work on the webserver.
-
-My personal goal is to make this interface simple, so that coding it
-will be like coding in some scripting language...
-
-
-
-char *get_param(char in_string[500], char swhat[500]);
-
-This function simply returns various data from the query string.
-	*Pass get_param NOTHING longer than 500 in length!
-
-	What do I pass where in_string is?
-		The query string.
-
-	What do I pass where swhat is?
-		One of two things...
-		Either 0 for the path of the 'page'
-		or you can pass it the param you wish to lookup. 
-
-
-
-
-
-
-char *get_query(char *inquery);
-
-This function simply returns a query string from the raw server request.
-This is used once in main, I doubt you'll need it.
-
-
-
-
-
-void web_send(int sockin, char *in_data);
-
-Super easy way of sending data to a webpage!
-Simply put in the socket name and then the data.
-
-	Ex:
-		web_send(socket, "I like cheese!\n");
-
-
-
-
-char *html_header(char* title);
-Easy way to print the eAthena header for the server.
-
-	Ex:
-		web_send(sockethere, html_header("About"));
diff --git a/misc/src/webserver/doc/README b/misc/src/webserver/doc/README
deleted file mode 100644
index edcabf1..0000000
--- a/misc/src/webserver/doc/README
+++ /dev/null
@@ -1,11 +0,0 @@
-This readme is intended for the programmers of eAthena.
-
-This webserver's apis are in API.txt.
-
-To make this simple, generate.c should handle most of the work this sever does
-in terms of what people see.
-
-When a request is made the server shoots it off to generate.c.
-
-You are welcome to create more functions used by generate.c to generate pages
-though, so don't feel limited by that one file.
diff --git a/misc/src/webserver/generate.c b/misc/src/webserver/generate.c
deleted file mode 100644
index ad050db..0000000
--- a/misc/src/webserver/generate.c
+++ /dev/null
@@ -1,38 +0,0 @@
-
-void generate_page(char password[25], int sock_in, char *query, char *ip)
-{
-	char *page = get_param(query, 0);
-	char *ppass = get_param(query, "password");
-
-
-	if ( (ppass == 0) || (strcmp(password, ppass) != 0) )
-	{
-		web_send(sock_in, html_header("Enter your password"));
-		web_send(sock_in, "<H1>NOT LOGGED IN!</H1><form action=\"/\" method=\"GET\">\n");
-                web_send(sock_in, "Enter your password:<br>\n<input type=\"text\" name=\"password\">\n");
-                web_send(sock_in, "<input type=\"submit\" value=\"Login\">\n");
-	}
-	else
-	{
-
-
-		//To make this simple, we will have a bunch of if statements
-		//that then shoot out data off into functions.
-
-	
-		//The 'index'
-		if ( strcmp(page, "/") == 0 )
-			generate_notdone(sock_in, query, ip);
-
-
-		//About page:
-		if ( strcmp(page, "/about.html") == 0 )
-			generate_about(sock_in, query, ip);
-
-	
-		//Test page:
-		if ( strcmp(page, "/testing/") == 0 )
-			generate_sample(sock_in, query, ip);
-
-	}
-}
diff --git a/misc/src/webserver/htmlstyle.c b/misc/src/webserver/htmlstyle.c
deleted file mode 100644
index c3a4b92..0000000
--- a/misc/src/webserver/htmlstyle.c
+++ /dev/null
@@ -1,51 +0,0 @@
-char output[10000];
-
-char *html_header(char *title)
-{
-	memset(output, 0x0, 10000);
-	char *text = "<body text=\"#000000\" bgcolor=\"#939393\" link=\"#0033FF\">\n"
-	"<br><table width=\"92%\" cellspacing=\"1\" cellpadding=\"0\" border=\"0\"\n"
-	"align=\"center\" class=\"bordercolor\"><tbody><tr><td class=\"bordercolor\" width=\"100%\">\n"
-	"<table bgcolor=\"#ffffff\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">\n"
-	"<tbody><tr><td><table border=\"0\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#ffffff\">\n"
-	"<tbody><tr><img src=\"http://eathena.sourceforge.net/athena.jpg\" alt=\"Athena\">\n"
-	"<td bgcolor=\"#ffffff\"></td></tr></tbody></table></td></tr></tbody></table>\n"
-	"</td></tr><tr align=\"left\"><td class=\"bordercolor\"><table bgcolor=\"#c6c6c6\" width=\"100%\" cellspacing=\"0\"\n"
-	"cellpadding=\"0\" style=\"text-align: left; margin-right: auto; margin-left: 0px;\">\n";
-        "<tbody><tr><td width=\"100%\" align=\"center\"><table border=\"0\" width=\"100%\" cellpadding=\"3\"\n"
- 	"cellspacing=\"0\" bgcolor=\"#c6c6c6\" align=\"center\"><tbody><tr>"
-	"<td valign=\"middle\" bgcolor=\"#c6c6c6\" align=\"center\"><a href=\"/cgi-bin/forum/YaBB.cgi\">"
-	"<span style=\"text-decoration: underline;\"><span style=\"font-weight: bold;\">\n"
-	"To the Forum</span></span></a><br></td></tr></tbody></table></td></tr></tbody>\n"
-	"</table></td></tr><tr><td class=\"bordercolor\" align=\"center\">\n"
-	"<table bgcolor=\"#ffffff\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" align=\"center\">\n"
-        "<tbody><tr><td width=\"100%\" align=\"center\"><table border=\"0\" width=\"100%\" cellpadding=\"5\"\n"
-	"cellspacing=\"0\" bgcolor=\"#ffffff\" align=\"center\"><tbody><tr>\n"
-        "<td valign=\"middle\" bgcolor=\"#ffffff\" align=\"center\"><font size=\"2\" color=\"#6e94b7\">\n"
-	"<b>Athena</b> &laquo; Portal &raquo;</font></td></tr></tbody></table></td></tr></tbody>"
-        "</table></td></tr></tbody></table>\n";
-
-	sprintf(output, "<title>%s</title>\n%s\n", title, text);
-
-	return output;
-}
-
-
-
-char *html_start_form(char *location, char *action)
-{
-	memset(output, 0x0, 10000);
-	sprintf(output, "<form action=\"%s\" method=\"%s\">", location, action);
-	return output;
-
-
-}
-
-
-char *html_end_forum(void)
-{
-	return "</form>";
-}
-
-
-
diff --git a/misc/src/webserver/logs.c b/misc/src/webserver/logs.c
deleted file mode 100644
index 405b488..0000000
--- a/misc/src/webserver/logs.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <time.h>
-
-void log_visit(char *query, char *ip)
-{
-	time_t timer;
-	timer=time(NULL);
-	printf("%s - \"%s\" - %s", ip, query, asctime(localtime(&timer)));
-}
diff --git a/misc/src/webserver/main.c b/misc/src/webserver/main.c
deleted file mode 100644
index 5936255..0000000
--- a/misc/src/webserver/main.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/***************************************************************************
-                                description
-                             -------------------
-    author               : (C) 2004 by Michael J. Flickinger
-    email                : mjflick@cpan.org
-
- ***************************************************************************/
-
-/***************************************************************************
- *                                                                         *
- *   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 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- ***************************************************************************/
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <sys/wait.h>
-#include <signal.h>
-
-#define BLOG 10
-
-char *header = "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n";
-char recvin[500], password[25];
-int s_port;
-
-void sigchld_handler(int s)
-{
-	while(wait(NULL) > 0);
-}
-
-int main(int argc, char **argv)
-{
-	if (argc < 3)
-	{
-		printf("eAthena Web Server\n");
-		printf("usage: %s [password] [port]\n", argv[0]);
-		exit(0);
-	}
-
-	s_port = atoi(argv[2]);
-
-	if ((s_port < 1) || (s_port > 65534))
-	{
-		printf("Error: The port you choose is not valid port.\n");
-		exit(0);
-	} 
-
-	if (strlen(argv[1]) > 25)
-	{
-		printf("Error: Your password is too long.\n");
-		printf("It must be shorter than 25 characters.\n");
-		exit(0);
-	}
-
-	memset(password, 0x0, 25);
-	memcpy(password, argv[1], strlen(argv[1]));
-
-	int sockfd, new_fd;
-	struct sockaddr_in my_addr;
-	struct sockaddr_in their_addr;
-	int sin_size;
-
-	struct sigaction sa;
-
-	int yes=1;
-
-	if ((sockfd = socket(AF_INET, SOCK_STREAM,0)) == -1)
-	{
-		perror("Darn, this is broken.");
-		exit(0);
-	}
-
-	if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1)
-	{
-		perror("Error... :-(");
-	}
-
-	//Now we know we have a working socket. :-)
-
-	my_addr.sin_family = AF_INET;
-	my_addr.sin_port = htons(s_port);
-	my_addr.sin_addr.s_addr = INADDR_ANY;
-	memset(&(my_addr.sin_zero), '\0', 8);
-
-	if ( bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
-	{
-		perror("can not bind to this port");
-		exit(0);
-	}
-
-	if ( listen(sockfd, BLOG) == -1)
-	{
-		perror("can not listen on port");
-		exit(0);
-	}
-
-	sa.sa_handler = sigchld_handler;
-
-	sigemptyset(&sa.sa_mask);
-	sa.sa_flags = SA_RESTART;
-
-	if (sigaction(SIGCHLD, &sa, NULL) == -1)
-	{
-		perror("sigaction sucks");
-		exit(0);
-	}
-
-	printf("The eAthena webserver is up and listening on port %i.\n", s_port);
-
-	while(1)
-	{
-		sin_size = sizeof(struct sockaddr_in);
-		new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
-
-		if (!fork())
-		{
-			close(sockfd);
-			memset(recvin, 0x0, 500);
-			recv(new_fd, recvin, 500, 0);
-			send(new_fd, header, strlen(header), 0);
-			generate_page(password, new_fd, get_query(recvin), inet_ntoa(their_addr.sin_addr));
-			log_visit(get_query(recvin), inet_ntoa(their_addr.sin_addr));
-
-			close(new_fd);
-			exit(0);
-		}
-		close(new_fd);	
-	}
-
-	return 0;
-}
diff --git a/misc/src/webserver/pages/about.c b/misc/src/webserver/pages/about.c
deleted file mode 100644
index 2b0002a..0000000
--- a/misc/src/webserver/pages/about.c
+++ /dev/null
@@ -1,6 +0,0 @@
-void generate_about(int sock_in, char *query, char *ip)
-{
-//printf("%s", html_header("About"));
-	web_send(sock_in, html_header("About"));
-	web_send(sock_in, "<center>eAthena Web Server!</center>\n");	
-}
diff --git a/misc/src/webserver/pages/notdone.c b/misc/src/webserver/pages/notdone.c
deleted file mode 100644
index a6492e3..0000000
--- a/misc/src/webserver/pages/notdone.c
+++ /dev/null
@@ -1,5 +0,0 @@
-void generate_notdone(int sock_in, char *query, char *ip)
-{
-	web_send(sock_in, "<title>Not here!</title>\n");
-	web_send(sock_in, "<h2><center>This page/feature is not done yet.</center>\n</h2>");	
-}
diff --git a/misc/src/webserver/pages/sample.c b/misc/src/webserver/pages/sample.c
deleted file mode 100644
index be900a1..0000000
--- a/misc/src/webserver/pages/sample.c
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-void generate_sample(int sock_in, char *query, char *ip)
-{
-
-	char *name = get_param(query, "name");
-
-	web_send(sock_in, "<title>SAMPLE</title>\n");
-
-
-	//If a name was not entered...
-	if ( name == '\0' )
-	{
-		web_send(sock_in, "<form action=\"/testing/\" method=\"GET\">\n");
-		web_send(sock_in, "<input type=\"text\" name=\"name\">\n");
-		web_send(sock_in, "<input type=\"submit\">\n");
-	}
-	else
-	{
-		web_send(sock_in, "Your name is: ");
-		web_send(sock_in, get_param(query, "name"));
-	}
-printf("OK!\n");
-}
diff --git a/misc/src/webserver/parse.c b/misc/src/webserver/parse.c
deleted file mode 100644
index 8e54a81..0000000
--- a/misc/src/webserver/parse.c
+++ /dev/null
@@ -1,135 +0,0 @@
-#include <stdlib.h>
-
-char filtered_query[2000];
-char rdata[500];
-char param_n[500];
-char param_d[500];
-
-
-char *get_query(char *inquery)
-{
-	memset(filtered_query, 0x0, 2000);
-	sscanf(inquery, "GET %s %[$]", filtered_query);
-	return(filtered_query);
-}
-
-void web_send(int sockin, char *in_data)
-{
-	send(sockin, in_data, strlen(in_data), 0);
-}
-
-
-//THIS IS BAD CODE BE CAREFULL WITH IT!
-//Watch out for buffer overflow...
-//When using please make sure to check the string size.
-
-//Also note:
-//I take no pride in this code, it is a really bad way of doing this...
-char *get_param(char in_string[500], char swhat[500])
-{
-	int i = 0;
-	int marker, iswitch, pint, dint;
-	char flux[500];
-	memset(flux, 0x0, 500);
-
-	//Get the path of out "page"
-	if (swhat == 0)
-	{
-		//while i is not equal to array size
-		while (i != 500)
-		{
-			//if there is a question mark, halt!
-			if (in_string[i] == '?')
-			{
-				i = 499;
-			}
-			else 
-				rdata[i] = in_string[i];
-	
-			i++;
-		}
-		return rdata;
-	}
-	else //so, we want a param...
-	{
-		//calculate where param begins
-		while (i != 500)
-		{
-			if (in_string[i] == '?')
-			{
-				marker = i + 1;
-				i = 499;
-			}
-			i++;
-		}
-
-		i = 0;
-
-		//keep morons from trying to crash this
-		if ((marker > 500)||(marker < 1))
-			marker = 500;
-
-		while(marker != 500)
-		{
-			if ((in_string[marker] != '&') && (in_string[marker] != '\0'))
-			{
-				flux[i] = in_string[marker];
-				i++;
-			}
-			else
-			{
-
-				//we have a param, now we must dig through it
-
-				//clear temp vars
-				memset(param_n, 0x0, 500);
-				memset(param_d, 0x0, 500);
-				iswitch = 0;
-				pint = 0;
-				dint = 0;
-				i = 0;
-
-				//split result into param_n and param_d
-				while(i != 500)
-				{
-					if ( (flux[i] != '=') && (flux[i] != '\0') )
-					{
-						if (iswitch == 0)
-						{
-							param_n[pint] = flux[i];
-							pint++;
-						}
-						else
-						{
-							param_d[dint] = flux[i];
-							dint++;
-						}
-					}
-					else
-					{
-						iswitch = 1;
-					}
-					if (flux[i] == '\0')
-						i = 499;
-
-					i++;
-				}
-
-				if ( strcmp(param_n, swhat) == 0 )
-				{
-					return param_d;
-				}
-
-				i = 0;
-			}
-			
-			if (in_string[marker] == '\0')
-			{
-				marker = 499;
-			}
-			marker++;
-		}
-		return 0;
-	}
-}
-			
diff --git a/misc/src/xand1_1.patch b/misc/src/xand1_1.patch
deleted file mode 100644
index 5715664..0000000
--- a/misc/src/xand1_1.patch
+++ /dev/null
@@ -1,132 +0,0 @@
---- npc/tulimshar/monster_guide.txt	2005-08-05 23:03:44.144096000 +0200
-+++ npc/tulimshar/monster_guide.txt.new	2005-08-08 14:03:51.154608000 +0200
-@@ -1,91 +1,3 @@
--new_3-1.gat,53,185,0	script	ConquestMob0	-1,{
--OnInit:
--// all monsters ingame by 31.Jul 2005 sorted by map, monsterID
--areamonster "new_1-1.gat",15,17,105,103,"RedScorpion",1004, 1,"ConquestMob-new_1-1::OnGuardianDied1004";
--areamonster "new_1-1.gat",15,17,105,103,"GreenSlime",1005, 50,"ConquestMob-new_1-1::OnGuardianDied1005";
--areamonster "new_1-1.gat",15,17,105,103,"GiantMaggot",1006, 30,"ConquestMob-new_1-1::OnGuardianDied1006";
--areamonster "new_2-1.gat",31,31,90,97,"RedSlime",1008, 24,"ConquestMob-new_2-1::OnGuardianDied1008";
--areamonster "new_2-1.gat",53,34,96,36,"RedSlime",1008, 6,"ConquestMob-new_2-1::OnGuardianDied1008b";
--areamonster "new_2-1.gat",31,31,90,97,"BlackScorpion",1009, 15,"ConquestMob-new_2-1::OnGuardianDied1009";
--areamonster "new_2-1.gat",84,52,93,91,"BlackScorpion",1009, 5,"ConquestMob-new_2-1::OnGuardianDied1009a";
--areamonster "new_3-1.gat",22,42,142,79,"Maggot",1002, 35,"ConquestMob-new_3-1::OnGuardianDied1002";
--areamonster "new_3-1.gat",22,42,142,79,"Scorpion",1003, 10,"ConquestMob-new_3-1::OnGuardianDied1003";
--areamonster "new_5-1.gat",32,32,90,100,"YellowSlime",1007, 20,"ConquestMob-new_5-1::OnGuardianDied1007";
--areamonster "new_5-1.gat",88,33,98,42,"RedSlime",1008, 3,"ConquestMob-new_5-1::OnGuardianDied1008a";
--areamonster "new_5-1.gat",32,32,90,100,"Spider",1012, 8,"ConquestMob-new_5-1::OnGuardianDied1012";
--areamonster "new_5-1.gat",81,32,85,38,"Spider",1012, 2,"ConquestMob-new_5-1::OnGuardianDied1012a";
--areamonster "new_7-1.gat",22,27,176,174,"Snake",1010, 15,"ConquestMob-new_7-1::OnGuardianDied1010";
--break;
--}
--new_1-1.gat,53,185,0	script	ConquestMob-new_1-1	-1,{
--// event when mob dies
--OnGuardianDied1004:
--	if (MPQUEST == 1) set Mobpt,Mobpt+42;
--	areamonster "new_1-1.gat",15,17,105,103,"RedScorpion",1004, 1,"ConquestMob-new_1-1::OnGuardianDied1004";
--	break;
--OnGuardianDied1005:
--	if (MPQUEST == 1) set Mobpt,Mobpt+5;
--	areamonster "new_1-1.gat",15,17,105,103,"GreenSlime",1005, 1,"ConquestMob-new_1-1::OnGuardianDied1005";
--	break;
--OnGuardianDied1006:
--	if (MPQUEST == 1) set Mobpt,Mobpt+14;
--	areamonster "new_1-1.gat",15,17,105,103,"GiantMaggot",1006, 1,"ConquestMob-new_1-1::OnGuardianDied1006";
--	break;
--}
--new_2-1.gat,53,185,0	script	ConquestMob-new_2-1	-1,{
--OnGuardianDied1008:
--	if (MPQUEST == 1) set Mobpt,Mobpt+18;
--	areamonster "new_2-1.gat",31,31,90,97,"RedSlime",1008, 1,"ConquestMob-new_2-1::OnGuardianDied1008";
--	break;
--OnGuardianDied1008b:
--	if (MPQUEST == 1) set Mobpt,Mobpt+18;
--	areamonster "new_2-1.gat",53,34,96,36,"RedSlime",1008, 1,"ConquestMob-new_2-1::OnGuardianDied1008b";
--	break;
--OnGuardianDied1009:
--	if (MPQUEST == 1) set Mobpt,Mobpt+45;
--	areamonster "new_2-1.gat",31,31,90,97,"BlackScorpion",1009, 1,"ConquestMob-new_2-1::OnGuardianDied1009";
--	break;
--OnGuardianDied1009a:
--	if (MPQUEST == 1) set Mobpt,Mobpt+45;
--	areamonster "new_2-1.gat",84,52,93,91,"BlackScorpion",1009, 1,"ConquestMob-new_2-1::OnGuardianDied1009a";
--	break;
--}
--new_3-1.gat,53,185,0	script	ConquestMob-new_3-1	-1,{
--OnGuardianDied1002:
--	if (MPQUEST == 1) set Mobpt,Mobpt+1;
--	areamonster "new_3-1.gat",22,42,142,79,"Maggot",1002, 1,"ConquestMob-new_3-1::OnGuardianDied1002";
--	break;
--OnGuardianDied1003:
--	if (MPQUEST == 1) set Mobpt,Mobpt+2;
--	areamonster "new_3-1.gat",22,42,142,79,"Scorpion",1003, 1,"ConquestMob-new_3-1::OnGuardianDied1003";
--	break;
--}
--new_5-1.gat,53,185,0	script	ConquestMob-new_5-1	-1,{
--OnGuardianDied1007:
--	if (MPQUEST == 1) set Mobpt,Mobpt+9;
--	areamonster "new_5-1.gat",32,32,90,100,"YellowSlime",1007, 1,"ConquestMob-new_5-1::OnGuardianDied1007";
--	break;
--// 3 Red Slimes guard treasure
--OnGuardianDied1008a:
--	if (MPQUEST == 1) set Mobpt,Mobpt+18;
--	areamonster "new_5-1.gat",88,33,98,42,"RedSlime",1008, 1,"ConquestMob-new_5-1::OnGuardianDied1008a";
--	break;
--OnGuardianDied1012:
--	if (MPQUEST == 1) set Mobpt,Mobpt+56;
--	areamonster "new_5-1.gat",32,32,90,100,"Spider",1012, 1,"ConquestMob-new_5-1::OnGuardianDied1012";
--	break;
--// 2 spiders guard entrance to treasure
--OnGuardianDied1012a:
--	if (MPQUEST == 1) set Mobpt,Mobpt+56;
--	areamonster "new_5-1.gat",81,32,85,38,"Spider",1012, 1,"ConquestMob-new_5-1::OnGuardianDied1012a";
--	break;
--}
--new_7-1.gat,53,185,0	script	ConquestMob-new_7-1	-1,{
--OnGuardianDied1010:
--	if (MPQUEST == 1) set Mobpt,Mobpt+51;
--	areamonster "new_7-1.gat",22,27,176,174,"Snake",1010, 1,"ConquestMob-new_7-1::OnGuardianDied1010";
--	break;
--}
- new_3-1.gat,46,66,0	script	MonsterGuide	102,{
- if(MPQUEST == 0) goto Register;
- 	mes "[Monster Guide]";
---- conf/map_athena.conf	2005-07-18 14:57:41.000000000 +0200
-+++ conf/map_athena.conf.new	2005-08-08 14:03:04.888080000 +0200
-@@ -57,7 +57,6 @@
- 
- // NPCs
- 
--npc: npc/tulimshar/monsters.txt
- npc: npc/tulimshar/barber.txt
- npc: npc/tulimshar/monster_guide.txt
- npc: npc/tulimshar/ptsrewards.txt
-@@ -68,10 +67,15 @@
- npc: npc/tulimshar/warps.txt
- npc: npc/tulimshar/shop.txt
- 
-+npc: npc/monsters/monsters-new_1-1.txt
-+npc: npc/monsters/monsters-new_2-1.txt
-+npc: npc/monsters/monsters-new_3-1.txt
-+npc: npc/monsters/monsters-new_5-1.txt
-+npc: npc/monsters/monsters-new_7-1.txt
-+
- npc: npc/tonori/cave.txt
- npc: npc/tonori/miners.txt
- npc: npc/tonori/warps.txt
--npc: npc/tonori/monsters.txt
- 
- npc: npc/guide.txt
- npc: npc/nekkio.txt
---- db/mob_db.txt	2005-07-15 10:25:21.000000000 +0200
-+++ db/mob_db.txt.new	2005-08-08 14:23:23.680617600 +0200
-@@ -10,6 +10,7 @@
- 1007,Yellow_slime,Yellow Slime,1,400,0,20,2,1,20,25,2,7,10,8,2,1,34,1,1,1,1,0,20,131,1400,1800,672,480,534,200,519,100,501,350,502,250,522,10,909,0,909,0,0,0,0,0,0,0,,,,,,
- 1008,Red_slime,Red Slime,1,400,0,65,56,1,30,50,2,7,15,10,2,1,25,1,1,1,1,0,20,135,1300,1500,672,480,1201,300,509,110,521,200,523,40,525,80,535,750,528,250,531,150,0,0,0,0,,,,,,
- 1009,BlackScorpion,Black Scorpion,1,1100,0,200,70,1,80,90,4,6,20,20,10,10,35,10,1,1,1,0,20,133,1000,1500,672,480,523,150,509,100,518,800,909,0,909,0,909,0,909,0,0,0,0,0,0,0,,,,,,
--1010,Snake,Snake,1,2000,0,172,70,1,150,80,4,6,20,20,10,10,35,10,2,1,1,0,20,133,1000,1500,672,480,0,0,0,0,0,0,909,0,909,0,909,0,909,0,0,0,0,0,0,0,,,,,,
-+1010,Snake,Snake,1,2200,0,250,120,1,150,80,4,6,15,25,10,10,45,5,2,1,1,0,20,133,1000,1500,672,480,524,50,527,500,0,0,909,0,909,0,909,0,909,0,0,0,0,0,0,0,,,,,,
- 1011,Fire_Goblin,Fire Goblin,1,50,0,3,2,1,7,10,0,5,1,1,1,0,6,30,1,1,1,3,21,129,800,1872,672,480,505,800,501,150,518,800,502,150,521,70,522,1,909,0,0,0,0,0,0,0,,,,,,
- 1012,Spider,Spider,1,2000,0,230,90,1,150,80,4,6,20,20,10,10,35,10,2,1,1,0,25,175,1000,1500,672,480,537,500,535,100,0,0,909,0,909,0,909,0,909,0,0,0,0,0,0,0,,,,,,
-+1013,SpiderRage,Raging Spider,1,3000,0,450,170,1,230,150,5,2,35,30,10,2,40,10,2,1,1,0,25,175,700,1500,672,480,537,1000,535,5000,0,0,909,0,909,0,909,0,909,0,0,0,0,0,0,0,,,,,,
-- 
cgit v1.2.3-70-g09d2