summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2018-09-02 23:11:37 -0300
committerJesusaves <cpntb1@ymail.com>2018-09-02 23:11:37 -0300
commit48d3b32578cba10d14b56a4ab931b84e3ee3cad8 (patch)
treeba2faa25d71973fce377832ba45b8c6bfb7851a6
parent8e398042cea2ccd6ccacb1ec0acd47358b43fae5 (diff)
parentb1944fc9205c72ac94cc87271bd1d4a16318f4a7 (diff)
downloadserverdata-48d3b32578cba10d14b56a4ab931b84e3ee3cad8.tar.gz
serverdata-48d3b32578cba10d14b56a4ab931b84e3ee3cad8.tar.bz2
serverdata-48d3b32578cba10d14b56a4ab931b84e3ee3cad8.tar.xz
serverdata-48d3b32578cba10d14b56a4ab931b84e3ee3cad8.zip
Merge branch 'master' into jesusalva/MobPt
-rw-r--r--.gitlab-ci.yml209
-rwxr-xr-x.tools/scripts/init.sh14
-rw-r--r--conf/char/char-server.conf28
-rw-r--r--conf/common/inter-server.conf2
-rw-r--r--conf/common/socket.conf2
-rw-r--r--conf/global/console.conf2
-rw-r--r--conf/import-tmpl/battle.conf2
-rw-r--r--conf/import-tmpl/char-server.conf2
-rw-r--r--conf/import-tmpl/inter-server.conf2
-rw-r--r--conf/import-tmpl/login-server.conf2
-rw-r--r--conf/import-tmpl/logs.conf2
-rw-r--r--conf/import-tmpl/map-server.conf2
-rw-r--r--conf/import-tmpl/script.conf2
-rw-r--r--conf/import-tmpl/socket.conf2
-rw-r--r--conf/login/login-server.conf2
-rw-r--r--conf/map/battle.conf2
-rw-r--r--conf/map/battle/battle.conf2
-rw-r--r--conf/map/battle/battleground.conf2
-rw-r--r--conf/map/battle/client.conf13
-rw-r--r--conf/map/battle/drops.conf2
-rw-r--r--conf/map/battle/exp.conf2
-rw-r--r--conf/map/battle/feature.conf15
-rw-r--r--conf/map/battle/gm.conf2
-rw-r--r--conf/map/battle/guild.conf11
-rw-r--r--conf/map/battle/homunc.conf2
-rw-r--r--conf/map/battle/items.conf6
-rw-r--r--conf/map/battle/misc.conf2
-rw-r--r--conf/map/battle/monster.conf6
-rw-r--r--conf/map/battle/party.conf2
-rw-r--r--conf/map/battle/pet.conf2
-rw-r--r--conf/map/battle/player.conf2
-rw-r--r--conf/map/battle/skill.conf2
-rw-r--r--conf/map/battle/status.conf2
-rw-r--r--conf/map/logs.conf2
-rw-r--r--conf/map/map-server.conf2
-rw-r--r--conf/map/maps.conf18
-rw-r--r--conf/map/script.conf2
-rw-r--r--conf/messages.conf18
-rw-r--r--db/attendance_db.conf119
-rw-r--r--db/constants.conf66
-rw-r--r--db/map_index.txt54
-rw-r--r--db/mob_skill_db2.conf59
-rw-r--r--db/mob_skill_db2.txt54
-rw-r--r--db/pet_db2.conf64
-rw-r--r--db/pet_db2.txt55
-rw-r--r--db/re/exp.txt62
-rw-r--r--db/re/exp_group_db.conf64
-rw-r--r--db/re/item_db.conf894
-rw-r--r--db/re/job_db.conf16
-rw-r--r--db/re/mob_db.conf1199
-rw-r--r--db/re/mob_skill_db.conf228
-rw-r--r--db/re/mob_skill_db.txt7
-rw-r--r--db/re/pet_db.conf95
-rw-r--r--db/re/pet_db.txt54
-rw-r--r--db/stylist_db.conf266
-rw-r--r--maps/re/001-1.mcachebin3058 -> 3062 bytes
-rw-r--r--maps/re/008-1-1.mcachebin0 -> 358 bytes
-rw-r--r--maps/re/008-1.mcachebin1345 -> 6866 bytes
-rw-r--r--maps/re/008-2-0.mcachebin125 -> 124 bytes
-rw-r--r--maps/re/008-2-1.mcachebin139 -> 143 bytes
-rw-r--r--maps/re/008-2-10.mcachebin110 -> 107 bytes
-rw-r--r--maps/re/008-2-11.mcachebin115 -> 115 bytes
-rw-r--r--maps/re/008-2-13.mcachebin99 -> 99 bytes
-rw-r--r--maps/re/008-2-14.mcachebin96 -> 96 bytes
-rw-r--r--maps/re/008-2-15.mcachebin0 -> 93 bytes
-rw-r--r--maps/re/008-2-16.mcachebin0 -> 108 bytes
-rw-r--r--maps/re/008-2-17.mcachebin0 -> 131 bytes
-rw-r--r--maps/re/008-2-18.mcachebin0 -> 86 bytes
-rw-r--r--maps/re/008-2-19.mcachebin0 -> 100 bytes
-rw-r--r--maps/re/008-2-2.mcachebin118 -> 117 bytes
-rw-r--r--maps/re/008-2-20.mcachebin0 -> 88 bytes
-rw-r--r--maps/re/008-2-21.mcachebin0 -> 81 bytes
-rw-r--r--maps/re/008-2-22.mcachebin0 -> 91 bytes
-rw-r--r--maps/re/008-2-23.mcachebin0 -> 89 bytes
-rw-r--r--maps/re/008-2-24.mcachebin0 -> 117 bytes
-rw-r--r--maps/re/008-2-25.mcachebin0 -> 126 bytes
-rw-r--r--maps/re/008-2-26.mcachebin0 -> 95 bytes
-rw-r--r--maps/re/008-2-27.mcachebin0 -> 88 bytes
-rw-r--r--maps/re/008-2-28.mcachebin0 -> 75 bytes
-rw-r--r--maps/re/008-2-29.mcachebin0 -> 79 bytes
-rw-r--r--maps/re/008-2-3.mcachebin135 -> 130 bytes
-rw-r--r--maps/re/008-2-30.mcachebin0 -> 90 bytes
-rw-r--r--maps/re/008-2-4.mcachebin116 -> 114 bytes
-rw-r--r--maps/re/008-2-5.mcachebin80 -> 81 bytes
-rw-r--r--maps/re/008-2-6.mcachebin78 -> 82 bytes
-rw-r--r--maps/re/008-2-7.mcachebin85 -> 83 bytes
-rw-r--r--maps/re/008-2-8.mcachebin78 -> 105 bytes
-rw-r--r--maps/re/008-2-9.mcachebin92 -> 91 bytes
-rw-r--r--maps/re/008-3-1.mcachebin0 -> 194 bytes
-rw-r--r--npc/000-0/sailors.txt16
-rw-r--r--npc/000-1/couwan.txt4
-rw-r--r--npc/000-1/panels.txt8
-rw-r--r--npc/000-1/silvio.txt2
-rw-r--r--npc/000-2-0/billybons.txt4
-rw-r--r--npc/000-2-0/doors.txt2
-rw-r--r--npc/000-2-1/alige.txt8
-rw-r--r--npc/000-2-1/arpan.txt14
-rw-r--r--npc/000-2-1/dan.txt4
-rw-r--r--npc/000-2-1/knife.txt8
-rw-r--r--npc/000-2-2/doors.txt10
-rw-r--r--npc/000-2-3/box.txt6
-rw-r--r--npc/001-1/cookiemaster.txt6
-rw-r--r--npc/001-1/flyingpiou.txt4
-rw-r--r--npc/001-1/manhole.txt16
-rw-r--r--npc/001-1/salem.txt2
-rw-r--r--npc/001-1/xilaxa.txt28
-rw-r--r--npc/001-2-19/lloyd.txt4
-rw-r--r--npc/001-2-2/moon.txt4
-rw-r--r--npc/001-2-22/alige.txt8
-rw-r--r--npc/001-2-22/knife.txt8
-rw-r--r--npc/001-2-23/doors.txt10
-rw-r--r--npc/001-2-4/books.txt6
-rw-r--r--npc/001-2-6/books.txt339
-rw-r--r--npc/001-3-0/_mobs.txt24
-rw-r--r--npc/001-3-1/_import.txt1
-rw-r--r--npc/001-3-1/_mobs.txt8
-rw-r--r--npc/008-1-1/_import.txt2
-rw-r--r--npc/008-1/_mobs.txt112
-rw-r--r--npc/008-1/_warps.txt35
-rw-r--r--npc/008-1/confused-tree.txt74
-rw-r--r--npc/008-2-0/_savepoints.txt2
-rw-r--r--npc/008-2-0/_warps.txt4
-rw-r--r--npc/008-2-1/_warps.txt4
-rw-r--r--npc/008-2-10/_warps.txt4
-rw-r--r--npc/008-2-11/_savepoints.txt2
-rw-r--r--npc/008-2-11/_warps.txt2
-rw-r--r--npc/008-2-12/_warps.txt4
-rw-r--r--npc/008-2-13/_warps.txt2
-rw-r--r--npc/008-2-14/_warps.txt2
-rw-r--r--npc/008-2-15/_import.txt3
-rw-r--r--npc/008-2-15/_warps.txt3
-rw-r--r--npc/008-2-16/_import.txt3
-rw-r--r--npc/008-2-16/_warps.txt3
-rw-r--r--npc/008-2-17/_import.txt3
-rw-r--r--npc/008-2-17/_warps.txt5
-rw-r--r--npc/008-2-18/_import.txt3
-rw-r--r--npc/008-2-18/_warps.txt3
-rw-r--r--npc/008-2-19/_import.txt3
-rw-r--r--npc/008-2-19/_warps.txt3
-rw-r--r--npc/008-2-2/_warps.txt4
-rw-r--r--npc/008-2-20/_import.txt3
-rw-r--r--npc/008-2-20/_warps.txt4
-rw-r--r--npc/008-2-21/_import.txt3
-rw-r--r--npc/008-2-21/_warps.txt4
-rw-r--r--npc/008-2-22/_import.txt4
-rw-r--r--npc/008-2-22/_savepoints.txt11
-rw-r--r--npc/008-2-22/_warps.txt3
-rw-r--r--npc/008-2-23/_import.txt3
-rw-r--r--npc/008-2-23/_warps.txt3
-rw-r--r--npc/008-2-24/_import.txt3
-rw-r--r--npc/008-2-24/_warps.txt5
-rw-r--r--npc/008-2-25/_import.txt3
-rw-r--r--npc/008-2-25/_warps.txt4
-rw-r--r--npc/008-2-26/_import.txt3
-rw-r--r--npc/008-2-26/_warps.txt3
-rw-r--r--npc/008-2-27/_import.txt3
-rw-r--r--npc/008-2-27/_warps.txt3
-rw-r--r--npc/008-2-28/_import.txt3
-rw-r--r--npc/008-2-28/_warps.txt3
-rw-r--r--npc/008-2-29/_import.txt3
-rw-r--r--npc/008-2-29/_warps.txt3
-rw-r--r--npc/008-2-3/_import.txt1
-rw-r--r--npc/008-2-3/_savepoints.txt74
-rw-r--r--npc/008-2-3/_warps.txt2
-rw-r--r--npc/008-2-30/_import.txt3
-rw-r--r--npc/008-2-30/_warps.txt3
-rw-r--r--npc/008-2-6/_warps.txt2
-rw-r--r--npc/008-2-7/_warps.txt2
-rw-r--r--npc/008-2-8/_warps.txt3
-rw-r--r--npc/008-2-9/_warps.txt2
-rw-r--r--npc/008-3-1/_import.txt4
-rw-r--r--npc/008-3-1/_mobs.txt8
-rw-r--r--npc/008-3-1/_warps.txt3
-rw-r--r--npc/_anchors.txt37
-rw-r--r--npc/_import.txt19
-rw-r--r--npc/commands/warp.txt124
-rw-r--r--npc/functions/RNGesus.txt50
-rw-r--r--npc/functions/array.txt57
-rw-r--r--npc/functions/clientversion.txt2
-rw-r--r--npc/functions/confused-tree-dict.txt931
-rw-r--r--npc/functions/doors.txt7
-rw-r--r--npc/functions/fishing.txt36
-rw-r--r--npc/functions/game-rules.txt6
-rw-r--r--npc/functions/goodbye.txt138
-rw-r--r--npc/functions/main.txt5
-rw-r--r--npc/functions/openbook.txt18
-rw-r--r--npc/functions/shops.txt11
-rw-r--r--npc/functions/warp.txt58
-rw-r--r--npc/items/croconut.txt12
-rw-r--r--npc/items/shovel.txt57
-rw-r--r--npc/scripts.conf1
-rw-r--r--sql-files/main.sql10
-rw-r--r--sql-files/upgrades/2018-02-26--15-57.sql6
-rw-r--r--sql-files/upgrades/2018-03-10--04-06.sql24
-rw-r--r--sql-files/upgrades/2018-06-05--12-02.sql24
-rw-r--r--sql-files/upgrades/2018-07-24--03-23.sql22
-rw-r--r--sql-files/upgrades/index.txt4
197 files changed, 5091 insertions, 1341 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a4f5f6ca..77d159da 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,7 +1,6 @@
stages:
- build
- test
-- valgrind
- fail
- ok
@@ -10,6 +9,8 @@ before_script:
image: debian:stable
variables:
+ GET_SOURCES_ATTEMPTS: "5"
+ ARTIFACT_DOWNLOAD_ATTEMPTS: "5"
MYSQL_ROOT_PASSWORD: root
packetver: "20150513"
@@ -27,8 +28,12 @@ build_test:
image: debian:unstable
services:
- mysql:latest
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
-mysql_init_latest:
+.mysql_init_latest:
stage: build
script:
- ./.tools/jobs/install.sh "mysql-client"
@@ -37,6 +42,10 @@ mysql_init_latest:
image: debian:unstable
services:
- mysql:latest
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
mysql_init_5.5:
stage: build
@@ -47,6 +56,10 @@ mysql_init_5.5:
image: debian:unstable
services:
- mysql:5.5
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
mysql_init_5.6:
stage: build
@@ -57,6 +70,24 @@ mysql_init_5.6:
image: debian:unstable
services:
- mysql:5.6
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
+
+mysql_init_5.7:
+ stage: build
+ script:
+ - ./.tools/jobs/install.sh "mysql-client"
+ - ./.tools/jobs/clonedata.sh
+ - ./.tools/jobs/initdb.sh mysql
+ image: debian:unstable
+ services:
+ - mysql:5.7
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
mariadb_init_latest:
stage: build
@@ -67,6 +98,10 @@ mariadb_init_latest:
image: debian:unstable
services:
- mariadb:latest
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
mariadb_init_10.0:
stage: build
@@ -77,6 +112,10 @@ mariadb_init_10.0:
image: debian:unstable
services:
- mariadb:10.0
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
mariadb_init_5.5:
stage: build
@@ -87,8 +126,12 @@ mariadb_init_5.5:
image: debian:unstable
services:
- mariadb:5.5
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
-mysql_run_latest:
+.mysql_run_latest:
stage: test
script:
- export CC=gcc-4.9
@@ -104,8 +147,33 @@ mysql_run_latest:
image: debian:jessie
services:
- mysql:latest
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
-mariadb_run_latest:
+mysql_run_5.7_gcc4.9:
+ stage: test
+ script:
+ - export CC=gcc-4.9
+ - ./.tools/jobs/install.sh "mysql-client
+ gcc-4.9
+ git-core
+ make autoconf automake autopoint
+ libtool libmysqlclient-dev libz-dev libpcre3-dev"
+ - ./.tools/jobs/cloneall.sh
+ - ./.tools/jobs/initdb.sh mysql
+ - ./.tools/jobs/build.sh "--enable-packetver=${packetver} --enable-epoll --enable-debug --enable-sanitize=full --disable-manager --enable-Werror --enable-buildbot" "--enable-werror --enable-lto --enable-sanitize"
+ - ./.tools/jobs/runserver.sh mysql
+ image: debian:jessie
+ services:
+ - mysql:5.7
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
+
+mariadb_run_latest_gcc4.9:
stage: test
script:
- export CC=gcc-4.9
@@ -121,9 +189,100 @@ mariadb_run_latest:
image: debian:jessie
services:
- mariadb:latest
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
+
+mariadb_run_latest_gcc5:
+ stage: test
+ script:
+ - export CC=gcc-5
+ - ./.tools/jobs/install.sh "mysql-client
+ gcc-5
+ git-core
+ make autoconf automake autopoint
+ libtool libmysqlclient-dev libz-dev libpcre3-dev"
+ - ./.tools/jobs/cloneall.sh
+ - ./.tools/jobs/initdb.sh mariadb
+ - ./.tools/jobs/build.sh "--enable-packetver=${packetver} --enable-epoll --enable-debug --enable-sanitize=full --disable-manager --enable-Werror --enable-buildbot" "--enable-werror --enable-lto --enable-sanitize"
+ - ./.tools/jobs/runserver.sh mariadb
+ image: debian:unstable
+ services:
+ - mariadb:latest
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
+
+mariadb_run_latest_gcc6:
+ stage: test
+ script:
+ - export CC=gcc-6
+ - ./.tools/jobs/install.sh "mysql-client
+ gcc-6
+ git-core
+ make autoconf automake autopoint
+ libtool libmysqlclient-dev libz-dev libpcre3-dev"
+ - ./.tools/jobs/cloneall.sh
+ - ./.tools/jobs/initdb.sh mariadb
+ - ./.tools/jobs/build.sh "--enable-packetver=${packetver} --enable-epoll --enable-debug --enable-sanitize=full --disable-manager --enable-Werror --enable-buildbot" "--enable-werror --enable-lto --enable-sanitize"
+ - ./.tools/jobs/runserver.sh mariadb
+ image: debian:unstable
+ services:
+ - mariadb:latest
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
+
+mariadb_run_latest_gcc7:
+ stage: test
+ script:
+ - export CC=gcc-7
+ - export HERCCPPFLAGS=" -Wno-format-overflow"
+ - ./.tools/jobs/install.sh "mysql-client
+ gcc-7
+ git-core
+ make autoconf automake autopoint
+ libtool libmysqlclient-dev libz-dev libpcre3-dev"
+ - ./.tools/jobs/cloneall.sh
+ - ./.tools/jobs/initdb.sh mariadb
+ - ./.tools/jobs/build.sh "--enable-packetver=${packetver} --enable-epoll --enable-debug --enable-sanitize=full --disable-manager --enable-Werror --enable-buildbot" "--enable-werror --enable-lto --enable-sanitize"
+ - ./.tools/jobs/runserver.sh mariadb
+ image: debian:unstable
+ services:
+ - mariadb:latest
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
+
+# disable gcc-8 for now until server update.
+.mariadb_run_latest_gcc8:
+ stage: test
+ script:
+ - export CC=gcc-8
+ - export HERCCPPFLAGS=" -Wno-format-overflow"
+ - ./.tools/jobs/install.sh "mysql-client
+ gcc-8
+ git-core
+ make autoconf automake autopoint
+ libtool libmysqlclient-dev libz-dev libpcre3-dev"
+ - ./.tools/jobs/cloneall.sh
+ - ./.tools/jobs/initdb.sh mariadb
+ - ./.tools/jobs/build.sh "--enable-packetver=${packetver} --enable-epoll --enable-debug --enable-sanitize=full --disable-manager --enable-Werror --enable-buildbot" "--enable-werror --enable-lto --enable-sanitize"
+ - ./.tools/jobs/runserver.sh mariadb
+ image: debian:unstable
+ services:
+ - mariadb:latest
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
-mysql_run_valgrind_latest:
- stage: valgrind
+.mysql_run_valgrind_latest:
+ stage: test
script:
- export CC=gcc-6
- ./.tools/jobs/install.sh "mysql-client
@@ -136,27 +295,57 @@ mysql_run_valgrind_latest:
- ./.tools/jobs/initdb.sh mysql
- ./.tools/jobs/build.sh "--enable-packetver=${packetver} --enable-epoll --enable-debug --disable-manager --enable-Werror --enable-buildbot" "--enable-werror"
- ./.tools/jobs/runservervalgrind.sh mysql
- image: debian:unstable
+ image: debian:stretch
services:
- mysql:latest
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
+
+mysql_run_valgrind_5.7:
+ stage: test
+ script:
+ - export CC=gcc-6
+ - ./.tools/jobs/install.sh "mysql-client
+ gcc-6
+ git-core
+ make autoconf automake autopoint
+ libtool libmariadbclient-dev libz-dev libpcre3-dev
+ valgrind"
+ - ./.tools/jobs/cloneall.sh
+ - ./.tools/jobs/initdb.sh mysql
+ - ./.tools/jobs/build.sh "--enable-packetver=${packetver} --enable-epoll --enable-debug --disable-manager --enable-Werror --enable-buildbot" "--enable-werror"
+ - ./.tools/jobs/runservervalgrind.sh mysql
+ image: debian:stretch
+ services:
+ - mysql:5.7
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
mariadb_run_valgrind_latest:
- stage: valgrind
+ stage: test
script:
- export CC=gcc-6
- ./.tools/jobs/install.sh "mysql-client
gcc-6
git-core
make autoconf automake autopoint
- libtool libmysqlclient-dev libz-dev libpcre3-dev
+ libtool libmariadbclient-dev libz-dev libpcre3-dev
valgrind"
- ./.tools/jobs/cloneall.sh
- ./.tools/jobs/initdb.sh mariadb
- ./.tools/jobs/build.sh "--enable-packetver=${packetver} --enable-epoll --enable-debug --disable-manager --enable-Werror --enable-buildbot" "--enable-werror"
- ./.tools/jobs/runservervalgrind.sh mariadb
- image: debian:unstable
+ image: debian:stretch
services:
- mariadb:latest
+ artifacts:
+ untracked: true
+ when: always
+ expire_in: 3 week
ok_job:
stage: ok
diff --git a/.tools/scripts/init.sh b/.tools/scripts/init.sh
index 6effb177..9bac358e 100755
--- a/.tools/scripts/init.sh
+++ b/.tools/scripts/init.sh
@@ -82,6 +82,7 @@ function update_repos {
function aptget_update {
update_repos
+ echo apt-get update
apt-get update
if [ "$?" != 0 ]; then
sleep 1s
@@ -95,13 +96,14 @@ function aptget_update {
}
function aptget_install {
- apt-get -y -qq install $*
+ echo apt-get -y install $*
+ apt-get -y install $*
if [ "$?" != 0 ]; then
sleep 1s
- apt-get -y -qq install $*
+ apt-get -y install $*
if [ "$?" != 0 ]; then
sleep 2s
- apt-get -y -qq install $*
+ apt-get -y install $*
fi
fi
check_error $?
@@ -117,8 +119,8 @@ function make_server {
echo "autoreconf -i"
autoreconf -i
check_error $?
- echo ./configure $1 CPPFLAGS=\"${CPPFLAGS}\"
- ./configure $1 CPPFLAGS="$CPPFLAGS"
+ echo ./configure $1 CPPFLAGS=\"${CPPFLAGS}${HERCCPPFLAGS}\"
+ ./configure $1 CPPFLAGS="$CPPFLAGS$HERCCPPFLAGS"
export err="$?"
if [ "$err" != 0 ]; then
echo "Error $err"
@@ -156,7 +158,7 @@ function do_init_data {
mkdir shared
cd ..
rm -rf server-data
- cp -r serverdata server-data
+ cp -r ${CI_PROJECT_NAME:=serverdata} server-data
ls -la server-data
check_error $?
}
diff --git a/conf/char/char-server.conf b/conf/char/char-server.conf
index db433244..60b54fc8 100644
--- a/conf/char/char-server.conf
+++ b/conf/char/char-server.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
@@ -218,6 +218,32 @@ char_configuration: {
// Default: 3
// Maximum allowed by clientside: 3
max_tries: 3
+
+ // Whether or not to refuse pincodes that are blacklisted
+ // Default: true
+ check_blacklisted: true
+
+ // Blacklisted pincodes
+ blacklist: [
+ "0000",
+ "1111",
+ "2222",
+ "3333",
+ "4444",
+ "5555",
+ "6666",
+ "7777",
+ "8888",
+ "9999",
+ "0123",
+ "1234",
+ "2345",
+ "3456",
+ "4567",
+ "5678",
+ "6789",
+ "7890"
+ ]
}
}
diff --git a/conf/common/inter-server.conf b/conf/common/inter-server.conf
index 6c701fbd..c3db6fc1 100644
--- a/conf/common/inter-server.conf
+++ b/conf/common/inter-server.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/common/socket.conf b/conf/common/socket.conf
index 0dd5386c..8b8b2186 100644
--- a/conf/common/socket.conf
+++ b/conf/common/socket.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/global/console.conf b/conf/global/console.conf
index f98c56dc..030ab7c9 100644
--- a/conf/global/console.conf
+++ b/conf/global/console.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/import-tmpl/battle.conf b/conf/import-tmpl/battle.conf
index 4080eed7..7d1d0357 100644
--- a/conf/import-tmpl/battle.conf
+++ b/conf/import-tmpl/battle.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/import-tmpl/char-server.conf b/conf/import-tmpl/char-server.conf
index 6bfb308b..4c9462bc 100644
--- a/conf/import-tmpl/char-server.conf
+++ b/conf/import-tmpl/char-server.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/import-tmpl/inter-server.conf b/conf/import-tmpl/inter-server.conf
index 243dda4e..c23143b3 100644
--- a/conf/import-tmpl/inter-server.conf
+++ b/conf/import-tmpl/inter-server.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/import-tmpl/login-server.conf b/conf/import-tmpl/login-server.conf
index feadef97..1c45f94f 100644
--- a/conf/import-tmpl/login-server.conf
+++ b/conf/import-tmpl/login-server.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/import-tmpl/logs.conf b/conf/import-tmpl/logs.conf
index 99e666d9..8f8c2ea6 100644
--- a/conf/import-tmpl/logs.conf
+++ b/conf/import-tmpl/logs.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/import-tmpl/map-server.conf b/conf/import-tmpl/map-server.conf
index 2c9b1653..4d907025 100644
--- a/conf/import-tmpl/map-server.conf
+++ b/conf/import-tmpl/map-server.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/import-tmpl/script.conf b/conf/import-tmpl/script.conf
index b354b2bf..04024528 100644
--- a/conf/import-tmpl/script.conf
+++ b/conf/import-tmpl/script.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/import-tmpl/socket.conf b/conf/import-tmpl/socket.conf
index 04d0a40c..7ce17814 100644
--- a/conf/import-tmpl/socket.conf
+++ b/conf/import-tmpl/socket.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/login/login-server.conf b/conf/login/login-server.conf
index ba490576..d3ae5a03 100644
--- a/conf/login/login-server.conf
+++ b/conf/login/login-server.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/map/battle.conf b/conf/map/battle.conf
index 927b82b0..cc968723 100644
--- a/conf/map/battle.conf
+++ b/conf/map/battle.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/map/battle/battle.conf b/conf/map/battle/battle.conf
index 2e73a0aa..4b1632e3 100644
--- a/conf/map/battle/battle.conf
+++ b/conf/map/battle/battle.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/map/battle/battleground.conf b/conf/map/battle/battleground.conf
index 629a664f..b2a482f3 100644
--- a/conf/map/battle/battleground.conf
+++ b/conf/map/battle/battleground.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/map/battle/client.conf b/conf/map/battle/client.conf
index e4a646f9..8df6ea54 100644
--- a/conf/map/battle/client.conf
+++ b/conf/map/battle/client.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
@@ -72,6 +72,13 @@ area_size: 14
// Chat area size (how many squares away from a player can they chat)
chat_area_size: 14
+// Area which monster death packets should be sent to.
+// This should be set to the farthest distance a player can reach in 250ms
+// after a monster dies.
+// Setting it to (area_size + 18) (18 being the range of Monk's Snap skill)
+// should be a great value
+dead_area_size: 32
+
// Maximum walk path (how many cells a player can walk going to cursor)
// default: 17(official)
max_walk_path: 17
@@ -104,9 +111,7 @@ wedding_modifydisplay: false
save_clothcolor: true
// Save body styles? (Note 1)
-// Note: Don't turn this on unless you know what your doing.
-// Sprites are not released officially.
-save_body_style: false
+save_body_style: true
// Do not display cloth colors for the wedding costume?
// Note: Both save_clothcolor and wedding_modifydisplay have to be enabled
diff --git a/conf/map/battle/drops.conf b/conf/map/battle/drops.conf
index 4dbbf8fd..eb7d94f1 100644
--- a/conf/map/battle/drops.conf
+++ b/conf/map/battle/drops.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/map/battle/exp.conf b/conf/map/battle/exp.conf
index 3a38c1c6..8ca3de93 100644
--- a/conf/map/battle/exp.conf
+++ b/conf/map/battle/exp.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/map/battle/feature.conf b/conf/map/battle/feature.conf
index e01c7f93..1ed94b2a 100644
--- a/conf/map/battle/feature.conf
+++ b/conf/map/battle/feature.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
@@ -70,4 +70,17 @@ features: {
// true: enable (Default)
// false: disable
enable_homun_autofeed: true
+
+ // Allow Pet autofeeding
+ // true: enable (Default)
+ // false: disable
+ enable_pet_autofeed: true
+
+ // Enable Attendance System for clients >= 2018-03-07bRagexeRE or 2018-04-04bRagexe or 2018-04-11aRagexe_zero
+ // true: enable (Default)
+ // false: disable
+ enable_attendance_system: true
+
+ // Attendance End time in the format YearMonthDay
+ feature_attendance_endtime: 20180331
}
diff --git a/conf/map/battle/gm.conf b/conf/map/battle/gm.conf
index ffc4946a..bfa20821 100644
--- a/conf/map/battle/gm.conf
+++ b/conf/map/battle/gm.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/map/battle/guild.conf b/conf/map/battle/guild.conf
index c8f8db8c..e9276079 100644
--- a/conf/map/battle/guild.conf
+++ b/conf/map/battle/guild.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
@@ -39,10 +39,11 @@ guild_exp_limit: 50
// Maximum castles one guild can own (0 = unlimited)
guild_max_castles: 0
-// Restart guild skills cooldown by relog? (Note 1)
-// When false, you relog with the same cooldown remaining as from when you
-// logged out, true restarts the cooldown upon login to its full duration.
-guild_skill_relog_delay: false
+// How guild skills cooldown works?
+// 0 - you relog with the same cooldown remaining as from when you logged out
+// 1 - restarts the cooldown upon login to its full duration.
+// 2 - like 1, but your logged off time is also decreased from the remaining cooldown (Aegis)
+guild_skill_relog_delay: 2
// Damage adjustments for WOE battles against defending Guild monsters (Note 2)
castle_defense_rate: 100
diff --git a/conf/map/battle/homunc.conf b/conf/map/battle/homunc.conf
index 0bf2a4b9..0042df01 100644
--- a/conf/map/battle/homunc.conf
+++ b/conf/map/battle/homunc.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/map/battle/items.conf b/conf/map/battle/items.conf
index f7ffd3f3..144e04ea 100644
--- a/conf/map/battle/items.conf
+++ b/conf/map/battle/items.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
@@ -119,3 +119,7 @@ bow_unequip_arrow: true
// How much should rental mounts increase a player's movement speed? (Note 2)
// Official: 25 (Default)
boarding_halter_speed: 25
+
+// Allow to use items when the storage is open?
+// Official: false (Default)
+storage_use_item: false
diff --git a/conf/map/battle/misc.conf b/conf/map/battle/misc.conf
index 2f88dbe0..7575cdbb 100644
--- a/conf/map/battle/misc.conf
+++ b/conf/map/battle/misc.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/map/battle/monster.conf b/conf/map/battle/monster.conf
index beffda98..3ea3fb93 100644
--- a/conf/map/battle/monster.conf
+++ b/conf/map/battle/monster.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
@@ -234,6 +234,10 @@ mob_slave_keep_target: true
// See http://irowiki.org/wiki/MVP#Gravestone
mvp_tomb_enabled: true
+// Delay before a tomb is spawned, in milliseconds.
+// Default: 10000 (10 seconds)
+mvp_tomb_spawn_delay: 10000
+
// Show hp bar on monsters? (Default: yes)
// NOTE: only works on client 2012-04-04aRagexeRE onwards
show_monster_hp_bar: true
diff --git a/conf/map/battle/party.conf b/conf/map/battle/party.conf
index f1d4ab4e..da720182 100644
--- a/conf/map/battle/party.conf
+++ b/conf/map/battle/party.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/map/battle/pet.conf b/conf/map/battle/pet.conf
index a07963b9..148effc8 100644
--- a/conf/map/battle/pet.conf
+++ b/conf/map/battle/pet.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/map/battle/player.conf b/conf/map/battle/player.conf
index b8fe28a3..7295824f 100644
--- a/conf/map/battle/player.conf
+++ b/conf/map/battle/player.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/map/battle/skill.conf b/conf/map/battle/skill.conf
index b88c5d14..d258567a 100644
--- a/conf/map/battle/skill.conf
+++ b/conf/map/battle/skill.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/map/battle/status.conf b/conf/map/battle/status.conf
index 37b2e013..94459e11 100644
--- a/conf/map/battle/status.conf
+++ b/conf/map/battle/status.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/map/logs.conf b/conf/map/logs.conf
index e2dc7fbd..f56db9ee 100644
--- a/conf/map/logs.conf
+++ b/conf/map/logs.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/map/map-server.conf b/conf/map/map-server.conf
index a651c357..ffcc2a38 100644
--- a/conf/map/map-server.conf
+++ b/conf/map/map-server.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/map/maps.conf b/conf/map/maps.conf
index 2aea18cd..58cf9446 100644
--- a/conf/map/maps.conf
+++ b/conf/map/maps.conf
@@ -56,6 +56,7 @@ map_list: (
"001-2-9",
"001-3-0",
"001-3-1",
+ "008-1-1",
"008-1",
"008-2-0",
"008-2-1",
@@ -64,14 +65,31 @@ map_list: (
"008-2-12",
"008-2-13",
"008-2-14",
+ "008-2-15",
+ "008-2-16",
+ "008-2-17",
+ "008-2-18",
+ "008-2-19",
"008-2-2",
+ "008-2-20",
+ "008-2-21",
+ "008-2-22",
+ "008-2-23",
+ "008-2-24",
+ "008-2-25",
+ "008-2-26",
+ "008-2-27",
+ "008-2-28",
+ "008-2-29",
"008-2-3",
+ "008-2-30",
"008-2-4",
"008-2-5",
"008-2-6",
"008-2-7",
"008-2-8",
"008-2-9",
+ "008-3-1",
"test",
"testbg",
)
diff --git a/conf/map/script.conf b/conf/map/script.conf
index 78514e63..f18e9d6e 100644
--- a/conf/map/script.conf
+++ b/conf/map/script.conf
@@ -9,7 +9,7 @@
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
-//= Copyright (C) 2014-2016 Hercules Dev Team
+//= Copyright (C) 2014-2018 Hercules Dev Team
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
diff --git a/conf/messages.conf b/conf/messages.conf
index e5b2528e..54e8c077 100644
--- a/conf/messages.conf
+++ b/conf/messages.conf
@@ -74,7 +74,10 @@
46: %s recalled!
47: Base level can't go any higher.
48: Any work in progress (NPC dialog, manufacturing ...) quit and try again.
-//49-52 FREE
+49: Unable to Teleport in this area
+50: This skill cannot be used within this area.
+51: This item cannot be used within this area.
+//52 FREE
53: '%s' stats:
54: No player found in map '%s'.
55: 1 player found in map '%s'.
@@ -374,7 +377,11 @@
363: Duel| The duel invitation has been rejected.
364: Duel| You can't invite %s because he/she isn't in the same map.
365: Duel| Can't use %s in duel.
-//366-369 FREE
+// Stylist Shop
+366: Styling Shop
+367: <MSG>2949</MSG>
+368: <MSG>2950</MSG>
+//369 FREE
370: -- Duels: %d/%d, Members: %d/%d, Max players: %d --
371: -- Duels: %d/%d, Members: %d/%d --
372: -- Duel has been created (Use @invite/@leave) --
@@ -474,7 +481,9 @@
538: Hack on trade: character '%s' (account: %d) try to trade more items that he has.
539: This player has %d of a kind of item (id: %d), and tried to trade %d of them.
540: This player has been definitively blocked.
-//541-545 FREE
+//541-543 FREE
+544: <MSG>3455</MSG>
+545: <MSG>3456,%d</MSG>
// @showmobs
546: Please enter a mob name/id (usage: @showmobs <mob name/id>)
547: Invalid mob name %s!
@@ -1245,7 +1254,8 @@
// @mobinfo ...
1291: ATK:%d~%d MATK:%d~%d Range:%d~%d~%d Size:%s Race: %s Element: %s (Lv:%d)
-//1292-1293 FREE
+1292: PrivateAirshipStartable |
+1293: PrivateAirshipEndable |
//1294 used by hercules chat feature
// @version
diff --git a/db/attendance_db.conf b/db/attendance_db.conf
new file mode 100644
index 00000000..e5a1b259
--- /dev/null
+++ b/db/attendance_db.conf
@@ -0,0 +1,119 @@
+//================= Hercules Database =====================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2018 Hercules Dev Team
+//= Copyright (C) 2018 Asheraf
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//=========================================================================
+
+attendance_db:(
+/**************************************************************************
+ ************* Entry structure ********************************************
+ **************************************************************************
+{
+ // ================ Mandatory fields ==============================
+ ItemID: Item Constant (string)
+ Amount: Item Amount (int)
+},
+**************************************************************************/
+{
+ ItemID: "Acorn"
+ Amount: 1
+},
+{
+ ItemID: "Acorn"
+ Amount: 2
+},
+{
+ ItemID: "Acorn"
+ Amount: 3
+},
+{
+ ItemID: "Acorn"
+ Amount: 4
+},
+{
+ ItemID: "Acorn"
+ Amount: 5
+},
+{
+ ItemID: "Acorn"
+ Amount: 6
+},
+{
+ ItemID: "Acorn"
+ Amount: 7
+},
+{
+ ItemID: "Acorn"
+ Amount: 8
+},
+{
+ ItemID: "Acorn"
+ Amount: 9
+},
+{
+ ItemID: "Acorn"
+ Amount: 10
+},
+{
+ ItemID: "Acorn"
+ Amount: 11
+},
+{
+ ItemID: "Acorn"
+ Amount: 12
+},
+{
+ ItemID: "Acorn"
+ Amount: 13
+},
+{
+ ItemID: "Acorn"
+ Amount: 14
+},
+{
+ ItemID: "Acorn"
+ Amount: 15
+},
+{
+ ItemID: "Acorn"
+ Amount: 16
+},
+{
+ ItemID: "Acorn"
+ Amount: 17
+},
+{
+ ItemID: "Acorn"
+ Amount: 18
+},
+{
+ ItemID: "Acorn"
+ Amount: 19
+},
+{
+ ItemID: "Acorn"
+ Amount: 20
+}
+)
diff --git a/db/constants.conf b/db/constants.conf
index 962a9496..29d308c1 100644
--- a/db/constants.conf
+++ b/db/constants.conf
@@ -33,15 +33,9 @@ constants_db: {
************* Entry structure (full) *************************************
Identifier: {
Value: value // (int)
- Parameter: true // (boolean) Defaults to false.
Deprecated: true // (boolean) Defaults to false.
}
**************************************************************************/
-// NOTE:
-// Parameters are special in that they retrieve certain runtime values
-// depending on the specified ID in field Value. Depending on the
-// implementation values assigned by scripts to parameters will affect
-// runtime values, such as Zeny, as well (see pc_readparam/pc_setparam).
comment__: "Weekdays"
SUNDAY: 0
@@ -428,6 +422,8 @@ constants_db: {
mf_nocashshop: 54
mf_noautoloot: 55
mf_noviewid: 56
+ mf_pairship_startable: 57
+ mf_pairship_endable: 58
comment__: "Cell Properties"
cell_walkable: 0
@@ -3795,6 +3791,64 @@ constants_db: {
UDT_ROBE: 55
UDT_BODY2: 56
+ comment__: "HatEffect Constants"
+ HAT_EF_BLOSSOM_FLUTTERING: 1
+ HAT_EF_MERMAID_LONGING: 2
+ HAT_EF_RL_BANISHING_BUSTER: 3
+ HAT_EF_LJOSALFAR: 4
+ HAT_EF_CLOCKING: 5
+ HAT_EF_SNOW: 6
+ HAT_EF_MAKEBLUR: 7
+ HAT_EF_SLEEPATTACK: 8
+ HAT_EF_GUMGANG: 9
+ HAT_EF_TALK_FROSTJOKE: 10
+ HAT_EF_DEMONSTRATION: 11
+ HAT_EF_FLUTTER_BUTTERFLY: 12
+ HAT_EF_ANGEL_FLUTTERING: 13
+ HAT_EF_BLESSING_OF_ANGELS: 14
+ HAT_EF_ELECTRIC: 15
+ HAT_EF_GREEN_FLOOR: 16
+ HAT_EF_SHRINK: 17
+ HAT_EF_VALHALLA_IDOL: 18
+ HAT_EF_ANGEL_STAIRS: 19
+ HAT_EF_GLOW_OF_NEW_YEAR: 20
+ HAT_EF_BOTTOM_FORTUNEKISS: 21
+ HAT_EF_PINKBODY: 22
+ HAT_EF_DOUBLEGUMGANG: 23
+ HAT_EF_GIANTBODY: 24
+ HAT_EF_GREEN99_6: 25
+ HAT_EF_CIRCLEPOWER: 26
+ HAT_EF_BOTTOM_BLOODYLUST: 27
+ HAT_EF_WATER_BELOW: 28
+ HAT_EF_LEVEL99_150: 29
+ HAT_EF_YELLOWFLY3: 30
+ HAT_EF_KAGEMUSYA: 31
+ HAT_EF_CHERRYBLOSSOM: 32
+ HAT_EF_STRANGELIGHTS: 33
+ HAT_EF_WL_TELEKINESIS_INTENSE: 34
+ HAT_EF_AB_OFFERTORIUM_RING: 35
+ HAT_EF_WHITEBODY2: 36
+ HAT_EF_SAKURA: 37
+ HAT_EF_CLOUD2: 38
+ HAT_EF_FEATHER_FLUTTERING: 39
+ HAT_EF_CAMELLIA_HAIR_PIN: 40
+ HAT_EF_JP_EV_EFFECT01: 41
+ HAT_EF_JP_EV_EFFECT02: 42
+ HAT_EF_JP_EV_EFFECT03: 43
+ HAT_EF_FLORAL_WALTZ: 44
+ HAT_EF_MAGICAL_FEATHER: 45
+ HAT_EF_HAT_EFFECT: 46
+ HAT_EF_BAKURETSU_HADOU: 47
+ HAT_EF_GOLD_SHOWER: 48
+ HAT_EF_WHITEBODY: 49
+ HAT_EF_WATER_BELOW2: 50
+ HAT_EF_FIREWORK: 51
+ HAT_EF_RETURN_TW_1ST_HAT: 52
+ HAT_EF_C_FLUTTERBUTTERFLY_BL: 53
+ HAT_EF_QSCARABA: 54
+ HAT_EF_FSTONE: 55
+ HAT_EF_MAGICCIRCLE: 56
+
// for disable warning
ITMCHAIN_ORE: 1
diff --git a/db/map_index.txt b/db/map_index.txt
index 31ea7eef..547afb0b 100644
--- a/db/map_index.txt
+++ b/db/map_index.txt
@@ -53,21 +53,39 @@
001-2-9 53
001-3-0 54
001-3-1 55
-008-1 56
-008-2-0 57
-008-2-1 58
-008-2-10 59
-008-2-11 60
-008-2-12 61
-008-2-13 62
-008-2-14 63
-008-2-2 64
-008-2-3 65
-008-2-4 66
-008-2-5 67
-008-2-6 68
-008-2-7 69
-008-2-8 70
-008-2-9 71
-test 72
-testbg 73
+008-1-1 56
+008-1 57
+008-2-0 58
+008-2-1 59
+008-2-10 60
+008-2-11 61
+008-2-12 62
+008-2-13 63
+008-2-14 64
+008-2-15 65
+008-2-16 66
+008-2-17 67
+008-2-18 68
+008-2-19 69
+008-2-2 70
+008-2-20 71
+008-2-21 72
+008-2-22 73
+008-2-23 74
+008-2-24 75
+008-2-25 76
+008-2-26 77
+008-2-27 78
+008-2-28 79
+008-2-29 80
+008-2-3 81
+008-2-30 82
+008-2-4 83
+008-2-5 84
+008-2-6 85
+008-2-7 86
+008-2-8 87
+008-2-9 88
+008-3-1 89
+test 90
+testbg 91
diff --git a/db/mob_skill_db2.conf b/db/mob_skill_db2.conf
new file mode 100644
index 00000000..77d35361
--- /dev/null
+++ b/db/mob_skill_db2.conf
@@ -0,0 +1,59 @@
+//================= Hercules Database =====================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2018 Hercules Dev Team
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//=========================================================================
+//= Monster Skill Database
+//=========================================================================
+
+mob_skill_db:(
+{
+/**************************************************************************
+ ************* Entry structure ********************************************
+ **************************************************************************
+ <Monster_Constant>: {
+ <Skill_Constant>: {
+ ClearSkills: (boolean, defaults to false) allows cleaning all previous defined skills for the mob.
+ SkillLevel: (int, defaults to 1)
+ SkillState: (int, defaults to 0)
+ SkillTarget: (int, defaults to 0)
+ Rate: (int, defaults to 1)
+ CastTime: (int, defaults to 0)
+ Delay: (int, defaults to 0)
+ Cancelable: (boolean, defaults to false)
+ CastCondition: (int, defaults to 0)
+ ConditionData: (int, defaults to 0)
+ val0: (int, defaults to 0)
+ val1: (int, defaults to 0)
+ val2: (int, defaults to 0)
+ val3: (int, defaults to 0)
+ val4: (int, defaults to 0)
+ Emotion: (int, defaults to 0)
+ ChatMsgID: (int, defaults to 0)
+ }
+ }
+**************************************************************************/
+ // entries in this file will override the ones in /(pre-)re/mob_skill_db.conf
+}
+)
diff --git a/db/mob_skill_db2.txt b/db/mob_skill_db2.txt
deleted file mode 100644
index a670fecb..00000000
--- a/db/mob_skill_db2.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-// Custom Mob Skill Database
-//
-// Structure of Database:
-// MobID,Dummy value (info only),State,SkillID,SkillLv,Rate,CastTime,Delay,Cancelable,Target,Condition type,Condition value,val1,val2,val3,val4,val5,Emotion,Chat
-//
-// RATE: the chance of the skill being casted when the condition is fulfilled (10000 = 100%).
-// DELAY: the time (in milliseconds) before attempting to recast the same skill.
-//
-// STATE:
-// any (except dead) / idle (in standby) / walk (in movement) / dead (on killed) /
-// loot /attack / angry (like attack, except player has not attacked mob yet) /
-// chase (following target, after being attacked) / follow (following target,
-// without being attacked) / anytarget (attack+angry+chase+follow)
-//
-// TARGET:
-// target (current target) / self / friend / master / randomtarget (any enemy within skill's range)
-//
-// The following are for ground-skills, a random target tile is selected from the specified area:
-// around1 (3x3 area around self) / around2 (5x5 area around self) /
-// around3 (7x7 area around self) / around4 (9x9 area around self) /
-// around5 (3x3 area around target) / around6 (5x5 area around target) /
-// around7 (7x7 area around target) / around8 (9x9 area around target) /
-// around = around4
-//
-// CONDITION:
-// always Unconditional (no condition value).
-// onspawn When mob spawns/respawns (no condition value).
-// myhpltmaxrate When mob's HP drops to the specified %.
-// myhpinrate When mob's HP is in a certain % range (condition value = lower bound, val1 = upper bound).
-// mystatuson If mob has the specified abnormality in status.
-// mystatusoff If mob has ended the specified abnormality in status.
-// friendhpltmaxrate When mob's friend's HP drops to the specified %.
-// friendhpinrate When mob's friend's HP is in a certain % range (condition value = lower bound, val1 = upper bound).
-// friendstatuson If friend has the specified abnormality in status.
-// friendstatusoff If friend has ended the specified abnormality in status.
-// attackpcgt When attack PCs become greater than specified number.
-// attackpcge When attack PCs become greater than or equal to the specified number.
-// slavelt When number of slaves is less than the original specified number.
-// slavele When number of slaves is less than or equal to the original specified number.
-// closedattacked When close range melee attacked (no condition value).
-// longrangeattacked When long range attacked, ex. bows, guns, ranged skills (no condition value).
-// skillused When the specified skill is used on the mob.
-// afterskill After mob casts the specified skill.
-// casttargeted When a target is in cast range (no condition value).
-// rudeattacked When mob is rude attacked (no condition value).
-//
-// Status abnormalities specified through the statuson/statusoff system:
-// anybad (any type of state change) / stone / freeze / stun / sleep /
-// poison / curse / silence / confusion / blind / hiding / sight (unhidden)
-//
-// Note: if a negative MobID is provided, the skill will be treated as 'global':
-// -1: added for all boss types.
-// -2: added for all normal types.
-// -4: added for all mobs.
diff --git a/db/pet_db2.conf b/db/pet_db2.conf
new file mode 100644
index 00000000..34a6130e
--- /dev/null
+++ b/db/pet_db2.conf
@@ -0,0 +1,64 @@
+//================= Hercules Database =====================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2018 Hercules Dev Team
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//=========================================================================
+//= Pets Database
+//=========================================================================
+
+pet_db:(
+/**************************************************************************
+ ************* Entry structure ********************************************
+ **************************************************************************
+{
+ // ================ Mandatory fields ==============================
+ Id: ID (int)
+ SpriteName: "Sprite_Name" (string)
+ Name: "Pet Name" (string)
+ // ================ Optional fields ===============================
+ TamingItem: Taming Item (string, defaults to 0)
+ EggItem: Egg Id (string, defaults to 0)
+ AccessoryItem: Equipment Id (string, defaults to 0)
+ FoodItem: Food Id (string, defaults to 0)
+ FoodEffectiveness: hunger points (int, defaults to 0)
+ HungerDelay: hunger time (int, defaults to 0)
+ Intimacy: {
+ Initial: start intimacy (int, defaults to 0)
+ FeedIncrement: feeding intimacy (int, defaults to 0)
+ OverFeedDecrement: overfeeding intimacy (int, defaults to 0)
+ OwnerDeathDecrement: owner die intimacy (int, defaults to 0)
+ }
+ CaptureRate: capture rate (int, defaults to 0)
+ Speed: speed (int, defaults to 0)
+ SpecialPerformance: true/false (boolean, defaults to false)
+ TalkWithEmotes: convert talk (boolean, defaults to false)
+ AttackRate: attack rate (int, defaults to 0)
+ DefendRate: Defence attack (int, defaults to 0)
+ ChangeTargetRate: change target (int, defaults to 0)
+ PetScript: <" Pet Script (can also be multi-line) ">
+ EquipScript: <" Equip Script (can also be multi-line) ">
+},
+**************************************************************************/
+ // entries in this file will override the ones in /(pre-)re/pet_db.conf
+)
diff --git a/db/pet_db2.txt b/db/pet_db2.txt
deleted file mode 100644
index ca5e4e14..00000000
--- a/db/pet_db2.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-// Pet Additional Database
-//
-// Structure of Database:
-// MobID,Name,JName,LureID,EggID,EquipID,FoodID,Fullness,HungryDelay,R_Hungry,R_Full,Intimate,Die,Capture,Speed,S_Performance,talk_convert_class,attack_rate,defence_attack_rate,change_target_rate,pet_script,loyal_script
-//
-// 01. MobID Monster ID of the pet.
-// 02. Name Name of the monster as defined in the database.
-// 03. JName The display name of the monster when hatched.
-// 04. LureID Pet Tame Item ID.
-// 05. EggID Pet Egg ID.
-// 06. EquipID Pet Accessory ID.
-// 07. FoodID Pet Food ID.
-// 08. Fullness The amount Hunger is decreased every [HungryDelay] seconds.
-// 09. HungryDelay The amount of time it takes for hunger to decrease after feeding. (Default: 60 seconds)
-// 10. R_Hungry Amount of Intimacy that is increased when fed.
-// 11. R_Full Amount of Intimacy that is decreased when over-fed.
-// 12. Intimate Amount of Intimacy the pet starts with.
-// 13. Die Amount of Intimacy that is decreased when the pet owner dies.
-// 14. Capture Capture succes rate (10000 = 100%)
-// 15. Speed Pet's walk speed. (Defaul: 150)
-// 16. S_Performance Special Performance. (Yes = 1, No = 0)
-// 17. talk_convert_class Disables pet talk (instead of talking they emote with /!.)
-// 18. attack_rate Rate of which the pet will attack (requires at least pet_support_min_friendly intimacy).
-// 19. defence_attack_rate Rate of which the pet will retaliate when master is being attacked (requires at least pet_support_min_friendly intimacy).
-// 20. change_target_rate Rate of which the pet will change its attack target.
-// 21. pet_script Script to execute when the pet is hatched.
-// 22. loyal_script Script to execute when the pet is hatched (requires at least pet_equip_min_friendly intimacy, independent of pet_script).
-//NOTE: The max value (100%) of attack_rate, defense_rate & change_target_rate is 10000.
-
-//In theory you can use any valid script, but it is run only once upon pet
-//loading, so it is recommended you use the specific pet scripts:
-
-//petskillattack skillid, skilllv, rate, bonusrate
-//Skill attack that triggers while the pet is attacking. Rate is the base
-//chance of execution per attack. Bonusrate is an additional success rate when
-//intimacy reaches max.
-
-//petskillattack2 skillid, damage, hits, rate, bonusrate
-//Same as petskillattack, but the damage and number of hits is fixed
-//the damage specified is total, not per hit.
-
-//petskillsupport skillid, skilllv, delay, hp%, sp%
-//Casts a support skill when the health levels are below the specified hp% and
-//sp%. Delay is the minimum time in seconds before the skill can be cast again
-
-//petrecovery type, delay: Cures the "type" status effect after "delay" seconds
-
-//petskillbonus type, value, duration, delay
-//Gives bonus stats. Type is the stat to increase (bStr, bLuk), value is the
-//amount by which it is increased, duration signals how long the bonus lasts
-//delay is the time elapsed after the bonus ends and before it starts again.
-
-//A single pet can have petloot, petskillbonus, petskillattack (or
-//petskillattack2) and petskillsupport at the same time, but only one of each.
-
diff --git a/db/re/exp.txt b/db/re/exp.txt
deleted file mode 100644
index 5a69b058..00000000
--- a/db/re/exp.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-//Experience tables format:
-//Max Level,Class list,Type (0 - Base Exp; 1 - Job Exp),Exp for Lv 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98
-// Supports baselevel up to 1000 and joblevel up to 255 (except Novice/High Novice)
-
-//================================
-// Renewal Experience Database
-//================================
-
-//Evol classes
-99,0:1:2:3:4:5:6,1,30,43,58,76,116,180,220,272,336,520,604,699,802,948,1125,1668,1937,2226,3040,3988,5564,6272,7021,9114,11473,15290,16891,18570,23229,28359,36478,39716,43088,52417,62495,78160,84175,90404,107611,125915,153941,191781,204351,248352,286212,386371,409795,482092,509596,982092,992092,1002092,1012092,1022092,1032092,1042092,1052092,1062092,1072092,1082092,1092092,1102092,1112092,1122092,1132092,1142092,1152092,1162092,1172092,1182092,1192092,1202092,1212092,1222092,1232092,1242092,1252092,1262092,1272092,1282092,1292092,1302092,1312092,1322092,1332092,1342092,1352092,1362092,1372092,1382092,1392092,1402092,1412092,1422092,1432092,1442092,1452092,1462092,1491333,1521159,1551582,1582613,1614265,1646550,1679480,1713069,1747330,1782276,1817921,1854279,1891364,1929191,1967774,2007129,2047271,2088216,2129980,2172579,2216030,2260350,2305556,2351667,2398700,2446673,2495606,2545518,2596428,2648356,2701323,2755349,2810455,2866664,2923997,2982476,3042125,3102967,3165026,3228326,3292892,3358749,3425923,3494441,3564329,3635615,3708327,3782493,3858142,3935304,4014010,4094290,4176175,4259698,4344891,4431788,4520423,4610831,4703047,4797107,4893049,4990909,5090727,5192541,5296391,5402318,5510364,5620571,5732982,5847641,5964593,6083884,6205561,6329672,6456265,6585390,6717097,6851438,6988466,7128235,7270799,7416214,7564538,7715828,7870144,8027546,8188096,8351857,8518893,8689270,8863055,9040315,9221121,9405543,9593653,9785525,9981235,10180859,10384475,10592164,10804007,11020086,11240487,11465296,11694601,11928492,12167061,12410401,12658608,12911779,13170014,13433414,13702082,13976123,14255645,14540757,14831571,15128202,15430765,15739380,16054167,16375250,16702754,17036808,17377543,17725094,18079595,18441187,18810011,19186211,19569935,19961334,20360560,20767770,21183125,21606786,22038921,22479697,22929289,23387873,23855628,24332740,24819394,25315781,25822095,26338537,26865306,27402611,27950663,28509676,29079868,29661464,30254692,30859785,31476979,32106518
-99,0:1:2:3:4:5:6,0,9,16,25,36,77,112,153,200,253,320,385,490,585,700,830,970,1120,1260,1420,1620,1860,1990,2240,2504,2950,3426,3934,4474,6889,7995,9174,10425,11748,13967,15775,17678,19677,21773,30543,34212,38065,42102,46323,53026,58419,64041,69892,75973,102468,115254,128692,142784,157528,178184,196300,215198,234879,255341,330188,365914,403224,442116,482590,536948,585191,635278,687211,740988,925400,1473746,1594058,1718928,1848355,1982340,2230113,2386162,2547417,2713878,3206160,3681024,4022472,4377024,4744680,5125440,5767272,6204000,6655464,7121664,7602600,9738720,11649960,13643520,18339300,23836800,35658000,48687000,58135000,99999998,100300002,100600902,100902708,101205414,101509034,101813561,102119002,102425359,102732638,103040840,103349964,103660020,103970998,104282915,104595762,104909549,105224282,105539955,105856574,106174147,106492668,106812152,107132590,107453992,107776356,108099683,108423981,108749258,109075506,109402732,109730946,110060139,110390318,110721493,111053662,111386827,111720986,112056149,112392322,112729499,113067686,113406893,113747119,114088363,114430627,114773918,115118244,115463597,115809993,116157424,116505898,116855416,117205984,117557604,117910275,118264005,118618802,118974658,119331582,119689581,120048655,120408804,120770028,121132344,121495743,121860233,122225815,122592496,122960276,123329155,123699142,124070244,124442453,124815785,125190233,125565805,125942508,126320342,126699307,127079404,127460648,127843032,128226563,128611242,128997076,129384065,129772218,130161535,130552023,130943682,131336513,131730524,132125722,132522099,132919665,133318425,133718382,134119541,134521905,134925472,135330251,135736249,136143467,136551905,136961562,137372455,137784568,138197932,138612532,139028368,139445456,139863795,140283386,140704245,141126355,141549734,141974380,142400310,142827507,143255989,143685754,144116820,144549169,144982818,145417767,145854016,146291581,146730461,147170658,147612171,148055015,148499176,148944668,149391509,149839681,150289202,150740070,151192287,151645868,152100812,152557121,153014794,153473847,153934264,154396078,154859271,155323845,155789814,156257180,156725958,157196133,157667719,158140718,158615145,159091000,159568284,160046996,160527136,161008720,161491749,161976222,162462156,162949549,163438404,163928718,164420509,164913776,165408520,165904741,166402453,166901658,167402372,167904578,168408293,168913516,169420264,169928520,170438301,170949622,171462468,171976854,172492782,173010265,173529306,174049903,174572057,175095783,175621067,176147938,176676383,177206416,177738038,178271249,178806065,179342485,179880511,180420157,180961424,181504312,182048836,182594982,183142764,183692200,184243272,184795997,185350391,185906439,186464155,187023556,187584626,188147381,188711822,189277963,189845805,190415349,190986594,191559555,192134234,192710646,193288775,193868638,194450249,195033610,195618720,196205580,196794204,197384594,197976749,198570686,199166404,199763903,200363199,200964293,201567185,202171889,202778407,203386739,203996900,204608890,205222726,205838392,206455919,207075292,207696526,208319621,208944579,209571414,210200126,210830732,211463232,212097626,212733929,213372142,214012264,214654297,215298271,215944171,216592013,217241796,217893521,218547205,219202846,219860461,220520050,221181612,221845165,222510708,223178240,223847779,224519324,225192890,225868479,226546090,227225739,227907425,228591151,229276930,229964763,230654667,231346640,232040684,232736814,233435031,234135333,234837738,235542262,236248887,236957631,237668509,238381522,239096669,239813967,240533414,241255013,241978778,242704725,243432839,244163135,244895630,245630324,246367216,247106322,247847644,248591196,249336978,250084992,250835252,251587759,252342528,253099560,253858855,254620429,255384298,256150462,256918920,257689674,258462754,259238145,260015863,260795909,261578297,262363044,263150134,263939583,264731408,265525607,266322182,267121148,267922521,268726301,269532488,270341083,271152116,271965590,272781502,273599854,274420645,275243907,276069641,276897846,277728555,278561735,279397419,280235606,281076328,281919554,282765316,283613613,284464446,285317847,286173815,287032351,287893455,288757126,289623397,290492268,291363738,292237841,293114575,293993909,294875907,295760537,296647831,297537789,298430411,299325697,300223679,301124357,302027731,302933833,303842631,304754158,305668412,306585427,307505202,308427738,309353033,310281089,311211937,312145578,313082011,314021268,314963350,315908256,316855987,317806574,318759986,319716286,320675443,321637489,322602423,323570246,324540957,325514589,326491142,327470616,328453042,329438422,330426754,331418039,332412309,333409563,334409803,335413028,336419270,337428528,338440836,339456161,340474535,341495958,342520463,343548016,344578683,345612431,346649260,347689203,348732290,349778492,350827838,351880330,352935968,353994783,355056775,356121945,357190325,358261914,359336713,360414721,361495971,362580463,363668196,364759204,365853485,366951040,368051900,369156067,370263539,371374350,372488466,373605953,374726777,375850972,376978536,378109471,379243808,380381547,381522688,382667264,383815273,384966717,386121628,387280004,388441848,389607189,390776029,391948368,393124205,394303572,395486503,396672963,397862987,399056573,400253754,401454529,402658900,403866897,405078521,406293772,407512649,408735186,409961414,411191300,412424878,413662147,414903139,416147854,417396292,418648485,419904434,421164170,422427661,423694939,424966037,426240955,427519691,428802248,430088655,431378914,432673057,433971084,435272994,436578820,437888561,439202250,440519855,441841408,443166941,444496454,445829946,447167451,448508967,449854496,451204068,452557685,453915378,455277147,456642993,458012946,459387008,460765178,462147489,463533940,464924563,466319359,467718327,469121500,470528878,471940460,473356279,474776366,476200691,477629316,479062209,480499404,481940900,483386728,484836890,486291416,487750308,489213565,490681218,492153269,493629750,495110659,496595998,498085798,499580059,501078814,502582062,504089804,505602071,507118896,508640279,510166219,511696717,513231804,514771514,516315845,517864798,519418405,520976666,522539612,524107245,525679564,527256601,528838388,530424926,532016213,533612283,535213136,536818770,538429251,540044547,541664688,543289709,544919608,546554386,548194042,549838641,551488183,553142668,554802095,556466529,558135971,559810419,561489875,563174337,564863870,566558475,568258151,569962962,571672844,573387862,575108015,576833368,578563856,580299543,582040430,583786581,585537931,587294546,589056423,590823629,592596099,594373896,596157022,597945475,599739320,601538558,603343188,605153210,606968688,608789622,610616013,612447860,614285228,616128116,617976525,619830454,621689968,623555066,625425750,627302018,629183935,631071501,632964715,634863643,636768220,638678509,640594576,642516357,644443914,646377249,648316425,650261378,652212173,654168810,656131352,658099735,660074024,662054283,664040448,666032583,668030687,670034761,672044870,674061012,676083189,678111463,680145836,682186307,684232877,686285609,688344503,690409559,692480779,694558224,696641897,698731860,700828050,702930530,705039366,707154492,709275974,711403810,713538066,715678677,717825706,719979220,722139152,724305568,726478467,728657914,730843909,733036451,735235604,737441306,739653619,741872608,744098273,746330614,748569631,750815324,753067757,755326995,757592972,759865754,762145341,764431796,766725119,769025311,771332371,773646365,775967291,778295214,780630134,782972050,785320964,787676939,790039975,792410136,794787358,797171706,799563243,801961970,804367886,806780992,809201351,811628965,814063896,816506080,818955647,821412532,823876798,826348447,828827478,831313955,833807943,836309377,838818321,841334776,843858806,846390410,848929588,851476406,854030863,856592958,859162756,861740258,864325526,866918498,869519301,872127872,874744273,877368507,880000635,882640660,885288580,887944460,890608299,893280163,895960051,898647962,901343898,904047922,906760098,909480427,912208908,914945541,917690391,920443458,923204805,925974433,928752406,931538660,934333323,937136331,939947748,942767639,945595938,948432775,951278086,954131934,956994319,959865306,962744895,965633150,968530071,971435658,974349975,977273022,980204863,983145499,986094929,989053217,992020428,994996498,997981490,1000975469,1003978435,1006990388,1010011392,1013041447,1016080617,1019128903,1022186304,1025252884,1028328644,1031413647,1034507894,1037611449,1040724312,1043846482,1046978025,1050119004,1053269354,1056429206,1059598493,1062777281,1065965634,1069163551,1072371032,1075588143,1078814882,1082051315,1085297504,1088553451,1091819155,1095094616,1098379962,1101675066,1104980056,1108295059,1111619948,1114954851,1118299768,1121654698,1125019643,1128394730,1131779959,1135175331,1138580845,1141996630,1145422685,1148859012,1152305609,1155762605,1159229871,1162707537,1166195731,1169694323,1173203443,1176723090,1180253265,1183794096,1187345454,1190907469,1194480267,1198063721,1201657960,1205262983,1208878790,1212505509,1216143013,1219791430,1223450888,1227121258,1230802669,1234495121,1238198615,1241913277,1245638981,1249375983,1253124154,1256883494,1260654132,1264436068,1268229430,1272034090,1275850176,1279677817,1283516884,1287367505,1291229681,1295103412,1298988697,1302885665,1306794316,1310714778,1314646923,1318590880,1322546648,1326514355,1330493874,1334485333,1338488860,1342504326,1346531861,1350571463,1354623262,1358687130,1362763193,1366851453,1370952039,1375064948,1379190183,1383327743,1387477756,1391640222,1395815141,1400002642,1404202725,1408415389,1412640635,1416878591,1421129257,1425392633,1429668847,1433957900,1438259791,1442574649,1446902346,1451243137,1455596895,1459963749,1464343697,1468736741,1473143009,1477562500,1481995214,1486441280
-//Base - Normal and Baby Jobs
-// 99,0:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:23:24:25:4023:4024:4025:4026:4027:4028:4029:4030:4031:4032:4033:4034:4035:4036:4037:4038:4039:4040:4041:4042:4043:4044:4045:4046:4047:4048:4049:4050:4051:4052,0,350,550,900,1500,2200,3200,3800,4200,4550,5000,5500,6000,6100,6350,6700,7350,8000,8400,8800,9200,9700,10300,11000,11800,13000,14000,15000,16000,17000,18000,19000,20000,21000,22000,23200,24000,26000,27500,29000,30000,31500,33000,34000,36000,37500,38000,40000,42000,44500,47000,49000,51000,53000,55000,57000,59000,61500,63000,65000,67000,69000,70000,73000,77000,80000,84000,88000,91000,95000,110000,128000,140000,155000,163000,170000,180000,188000,195000,200000,230000,260000,300000,350000,400000,480000,550000,600000,680000,750000,900000,1000000,1200000,1500000,1800000,2100000,2400000,2800000,3300000,4000000,4015999,4032062,4048190,4064382,4080639,4096961,4113348,4129801,4146319,4162904,4179555,4196273,4213057,4229909,4246828,4263815,4280870,4297993,4315184,4332444,4349773,4367171,4384639,4402177,4419785,4437463,4455212,4473032,4490923,4508886,4526921,4545028,4563207,4581459,4599784,4618182,4636654,4655200,4673820,4692515,4711284,4730128,4749048,4768043,4787114,4806262,4825486,4844787,4864165,4883621,4903155,4922767,4942457,4962226,4982074,5002002,5022009,5042096,5062264,5082512,5102841,5123252,5143744,5164318,5184975,5205714,5226536,5247441,5268430,5289503,5310660,5331902,5353229,5374641,5396139,5417723,5439393,5461150,5482994,5504925,5526944,5549051,5571246,5593530,5615903,5638366,5660919,5683562,5706295,5729119,5752035,5775042,5798141,5821333,5844618,5867996,5891467,5915032,5938691,5962445,5986294,6010238,6034278,6058414,6082647,6106977,6131404,6155929,6180552,6205273,6230093,6255013,6280032,6305151,6330371,6355692,6381114,6406638,6432264,6457992,6483823,6509757,6535795,6561937,6588184,6614536,6640993,6667556,6694225,6721001,6747884,6774875,6801974,6829181,6856497,6883922,6911457,6939102,6966858,6994725,7022703,7050793,7078995,7107310,7135738,7164280,7192936,7221707,7250593,7279594,7308712,7337946,7367297,7396765,7426351,7456056,7485879,7515822,7545884,7576067,7606370,7636795,7667341,7698009,7728800,7759714,7790752,7821914,7853201,7884613,7916151,7947815,7979605,8011523,8043568,8075741,8108043,8140474,8173035,8205726,8238548,8271501,8304586,8337803,8371153,8404637,8438255,8472007,8505894,8539917,8574076,8608371,8642804,8677374,8712083,8746930,8781917,8817044,8852311,8887719,8923269,8958961,8994796,9030774,9066896,9103163,9139575,9176132,9212836,9249686,9286684,9323830,9361124,9398568,9436161,9473905,9511800,9549846,9588044,9626395,9664900,9703559,9742372,9781340,9820464,9859745,9899183,9938779,9978533,10018446,10058519,10098752,10139146,10179702,10220420,10261301,10302345,10343553,10384926,10426465,10468170,10510042,10552081,10594288,10636664,10679210,10721926,10764813,10807871,10851101,10894504,10938081,10981832,11025758,11069860,11114138,11158593,11203226,11248038,11293029,11338200,11383552,11429085,11474800,11520698,11566780,11613046,11659497,11706134,11752957,11799968,11847167,11894555,11942132,11989899,12037857,12086007,12134350,12182886,12231616,12280541,12329662,12378980,12428495,12478208,12528120,12578231,12628543,12679056,12729771,12780689,12831811,12883137,12934668,12986406,13038350,13090502,13142863,13195433,13248214,13301206,13354410,13407826,13461456,13515301,13569361,13623637,13678130,13732841,13787771,13842921,13898291,13953883,14009697,14065735,14121997,14178484,14235197,14292137,14349304,14406700,14464326,14522182,14580269,14638589,14697142,14755929,14814951,14874210,14933706,14993440,15053412,15113624,15174077,15234772,15295710,15356892,15418318,15479990,15541909,15604075,15666490,15729155,15792070,15855237,15918657,15982330,16046258,16110442,16174882,16239580,16304537,16369754,16435232,16500972,16566975,16633242,16699774,16766572,16833637,16900969,16968571,17036445,17104588,17173005,17241695,17310661,17379901,17449418,17519214,17589289,17659644,17730281,17801200,17872403,17943892,18015666,18087727,18160077,18232715,18305645,18378865,18452378,18526186,18600289,18674688,18749385,18824380,18899676,18975273,19051172,19127375,19203884,19280698,19357819,19435250,19512989,19591038,19669401,19748076,19827067,19906375,19986000,20065942,20146204,20226787,20307694,20388923,20470478,20552358,20634566,20717103,20799971,20883170,20966701,21050565,21134765,21219301,21304176,21389391,21474948,21560846,21647088,21733675,21820609,21907889,21995518,22083498,22171830,22260516,22349556,22438953,22528706,22618819,22709294,22800130,22891329,22982892,23074822,23167120,23259787,23352825,23446234,23540017,23634174,23728709,23823621,23918913,24014586,24110643,24207085,24303911,24401126,24498729,24596721,24695105,24793883,24893058,24992628,25092597,25192965,25293734,25394907,25496486,25598470,25700862,25803664,25906877,26010502,26114542,26218998,26323872,26429166,26534881,26641018,26747580,26854568,26961984,27069830,27178107,27286819,27395965,27505546,27615566,27726026,27836928,27948274,28060065,28172302,28284989,28398126,28511717,28625761,28740261,28855219,28970639,29086521,29202864,29319673,29436949,29554694,29672911,29791602,29910766,30030407,30150528,30271128,30392210,30513777,30635829,30758369,30881399,31004924,31128942,31253456,31378468,31503980,31629994,31756512,31883536,32011068,32139110,32267664,32396732,32526317,32656419,32787043,32918190,33049861,33182057,33314782,33448039,33581830,33716157,33851018,33986418,34122359,34258847,34395881,34533461,34671592,34810276,34949515,35089312,35229667,35370584,35512064,35654110,35796726,35939913,36083669,36228000,36372910,36518401,36664471,36811127,36958370,37106199,37254622,37403640,37553252,37703463,37854275,38005691,38157712,38310340,38463579,38617432,38771899,38926985,39082689,39239016,39395970,39553549,39711760,39870604,40030084,40190202,40350958,40512361,40674407,40837103,41000450,41164447,41329103,41494418,41660391,41827031,41994337,42162311,42330959,42500281,42670278,42840958,43012321,43184367,43357103,43530530,43704647,43879464,44054979,44231197,44408118,44585750,44764092,44943146,45122914,45303401,45484611,45666548,45849211,46032606,46216736,46401600,46587204,46773550,46960643,47148484,47337075,47526421,47716523,47907387,48099015,48291409,48484571,48678507,48873219,49068710,49264984,49462041,49659885,49858520,50057951,50258181,50459210,50661042,50863681,51067132,51271397,51476478,51682383,51889110,52096665,52305047,52514265,52724318,52935214,53146954,53359537,53572971,53787261,54002406,54218414,54435286,54653026,54871633,55091115,55311477,55532719,55754848,55977864,56201772,56426576,56652279,56878886,57106400,57334822,57564160,57794413,58025586,58257683,58490711,58724671,58959567,59195403,59432182,59669909,59908584,60148215,60388805,60630356,60872874,61116360,61360822,61606264,61852685,62100091,62348489,62597878,62848268,63099657,63352051,63605456,63859874,64115308,64371765,64629247,64887761,65147307,65407893,65669520,65932194,66195917,66460696,66726535,66993438,67261410,67530450,67800566,68071766,68344051,68617420,68891890,69167452,69444122,69721892,70000771,70280767,70561887,70844131,71127500,71412010,71697652,71984434,72272366,72561453,72851698,73143099,73435664,73729402,74024313,74320405,74617685,74916154,75215812,75516667,75818726,76121999,76426484,76732181,77039108,77347256,77656641,77967262,78279129,78592240,78906604,79222230,79539116,79857272,80176696,80497398,80819385,81142657,81467222,81793088,82120256,82448732,82778526,83109637,83442074,83775835,84110931,84447367,84785153,85124288,85464780,85806638,86149862,86494459,86840429,87187789,87536538,87886677,88238222,88591172,88945528,89301305,89658504,90017133,90377199,90738704,91101654,91466057,91831915,92199234,92568024,92938291,93310036,93683267,94057992,94434219,94811948,95191194,95571951,95954234,96338043,96723387,97110272,97498708,97888693,98280245,98673363,99068048,99464315,99862164,100261603,100662641,101065285,101469543,101875416,102282912,102692038,103102802,103515205,103929263,104344975,104762350,105181396,105602112,106024515,106448604,106874396,107301892,107731090,108162006,108594650,109029020,109465134,109902990,110342598,110783964,111227098,111671998,112118682,112567148,113017414,113469479,113923352,114379039,114836550,115295892,115757065,116220086,116684962,117151693,117620296,118090771,118563124,119037366,119513511,119991559,120471520,120953399,121437207,121922950,122410637,122900276,123391866,123885425,124380959,124878477,125377987,125879489,126382999,126888525,127396075,127905649,128417264,128930926,129446645,129964427,130484275,131006202,131530218,132056330,132584546,133114875,133647324,134181910,134718632,135257491,135798510,136341699,136887055,137434597,137984323,138536250,139090393,139646754,140205331,140766142,141329201,141894509,142462082,143031920,143604040,144178440,144755138,145334149,145915473
-
-//Base - Adv Jobs
-99,4001:4002:4003:4004:4005:4006:4007:4008:4009:4010:4011:4012:4013:4014:4015:4016:4017:4018:4019:4020:4021:4022,0,420,660,1080,1800,2640,3840,4560,5040,5460,6000,6600,7200,7320,7620,8040,8820,9600,10080,10560,11040,12610,13390,14300,15340,16900,18460,19500,20800,22100,23400,24700,26000,27300,28600,30160,31200,33800,35750,37700,39000,44100,46200,47600,50400,52500,53200,56000,58800,62300,65800,68600,71400,74200,77000,79800,82600,86100,88200,91000,93800,103500,105000,109500,115500,120000,126000,132000,136500,142500,165000,192000,210000,232500,244500,255000,270000,282000,292500,300000,345000,416000,480000,560000,640000,768000,880000,960000,1088000,1200000,1440000,1700000,2040000,2550000,3060000,3570000,4080000,4760000,5610000,6800000,6827199,6854507,6881924,6909451,6937088,6964835,6992693,7020663,7048745,7076939,7105246,7133666,7162200,7190848,7219611,7248489,7277482,7306591,7335816,7365158,7394618,7424196,7453892,7483707,7513641,7543695,7573869,7604164,7634580,7665117,7695777,7726559,7757464,7788493,7819646,7850924,7882327,7913855,7945510,7977291,8009199,8041235,8073399,8105692,8138114,8170666,8203348,8236160,8269104,8302179,8335387,8368728,8402202,8435810,8469552,8503429,8537442,8571591,8605876,8640299,8674859,8709557,8744394,8779371,8814488,8849745,8885143,8920683,8956365,8992189,9028157,9064269,9100525,9136926,9173473,9210166,9247006,9283993,9321128,9358412,9395845,9433427,9471160,9509044,9547079,9585266,9623606,9662099,9700746,9739548,9778505,9817618,9856887,9896314,9935898,9975641,10015543,10055604,10095825,10136207,10176751,10217457,10258326,10299358,10340554,10381915,10423442,10465135,10506995,10549022,10591217,10633581,10676114,10718817,10761691,10804737,10847955,10891346,10934910,10978649,11022563,11066652,11110918,11155361,11199981,11244780,11289758,11334916,11380255,11425775,11471477,11517362,11563430,11609683,11656121,11702744,11749554,11796551,11843736,11891110,11938673,11986427,12034372,12082508,12130837,12179359,12228075,12276986,12326093,12375396,12424896,12474594,12524491,12574588,12624885,12675383,12726083,12776986,12828093,12879404,12930920,12982643,13034572,13086709,13139055,13191610,13244375,13297351,13350539,13403940,13457555,13511384,13565428,13619689,13674167,13728862,13783776,13838910,13894264,13949840,14005638,14061659,14117904,14174374,14231070,14287993,14345144,14402523,14460132,14517971,14576042,14634345,14692881,14751651,14810656,14869897,14929375,14989091,15049046,15109241,15169677,15230354,15291274,15352438,15413846,15475500,15537401,15599549,15661946,15724592,15787489,15850638,15914039,15977694,16041603,16105768,16170190,16234869,16299807,16365005,16430464,16496185,16562168,16628415,16694927,16761705,16828750,16896064,16963647,17031501,17099625,17168021,17236691,17305637,17374857,17444354,17514130,17584185,17654519,17725137,17796035,17867219,17938687,18010441,18082480,18154808,18227426,18300334,18373534,18447027,18520815,18594898,18669276,18743952,18818926,18894200,18969775,19045654,19121835,19198322,19275114,19352213,19429619,19507337,19585364,19663704,19742357,19821324,19900608,19980209,20060127,20140367,20220928,20301810,20383016,20464547,20546405,20628588,20711101,20793943,20877118,20960625,21044465,21128640,21213153,21298003,21383194,21468725,21554597,21640813,21727374,21814282,21901538,21989143,22077099,22165407,22254068,22343083,22432455,22522184,22612271,22702719,22793529,22884700,22976237,23068139,23160411,23253052,23346063,23439447,23533204,23627335,23721844,23816730,23911995,24007642,24103671,24200085,24296883,24394070,24491645,24589609,24687965,24786714,24885859,24985402,25085342,25185682,25286423,25387568,25489116,25591071,25693434,25796206,25899389,26002984,26106994,26211420,26316264,26421527,26527212,26633319,26739851,26846810,26954195,27062011,27170258,27278937,27388050,27497600,27607588,27718016,27828886,27940200,28051959,28164166,28276821,28389925,28503482,28617494,28731962,28846888,28962274,29078121,29194430,29311206,29428449,29546160,29664343,29782999,29902130,30021736,30141821,30262385,30383431,30504964,30626982,30749488,30872484,30995972,31119954,31244432,31369408,31494884,31620861,31747341,31874327,32001823,32129829,32258345,32387375,32516923,32646990,32777576,32908684,33040317,33172475,33305164,33438382,33572133,33706418,33841239,33976603,34112508,34248956,34385950,34523494,34661588,34800232,34939431,35079187,35219502,35360380,35501819,35643825,35786397,35929539,36073256,36217547,36362416,36507863,36653893,36800505,36947704,37095492,37243872,37392845,37542413,37692579,37843348,37994719,38146696,38299280,38452475,38606283,38760707,38915748,39071408,39227691,39384600,39542136,39700302,39859103,40018538,40178608,40339320,40500675,40662676,40825324,40988623,41152576,41317184,41482450,41648375,41814967,41982225,42150150,42318750,42488024,42657973,42828601,42999912,43171909,43344593,43517968,43692037,43866801,44042264,44218430,44395303,44572882,44751169,44930170,45109886,45290325,45471482,45653363,45835975,46019317,46203390,46388203,46573754,46760044,46947081,47134865,47323401,47512691,47702740,47893548,48085119,48277458,48470563,48664443,48859099,49054533,49250747,49447748,49645536,49844115,50043489,50243659,50444632,50646407,50848991,51052385,51256590,51461615,51667459,51874127,52081621,52289943,52499101,52709093,52919925,53131600,53344123,53557497,53771723,53986808,54202752,54419560,54637235,54855782,55075204,55295501,55516679,55738743,55961696,56185539,56410279,56635918,56862460,57089906,57318260,57547530,57777715,58008823,58240856,58473816,58707708,58942535,59178303,59415014,59652673,59891279,60130842,60371360,60612842,60855288,61098706,61343095,61588465,61834814,62082152,62330477,62579794,62830107,63081425,63333746,63587075,63841421,64096782,64353167,64610577,64869014,65128488,65388998,65650552,65913150,66176801,66441503,66707266,66974089,67241980,67510948,67780984,68052104,68324308,68597597,68871986,69147468,69424058,69701748,69980547,70260462,70541502,70823666,71106955,71391376,71676937,71963640,72251490,72540490,72830646,73121966,73414452,73708102,74002932,74298935,74596127,74894508,75194086,75494860,75796839,76100023,76404420,76710029,77016868,77324927,77634223,77944756,78256526,78569550,78883826,79199355,79516145,79834204,80153540,80474146,80796036,81119211,81443680,81769450,82096521,82424901,82754599,83085614,83417954,83751619,84086618,84422958,84760647,85099686,85440082,85781835,86124954,86469447,86815321,87162576,87511221,87861264,88212704,88565550,88919809,89275482,89632577,89991101,90351063,90712463,91075309,91439608,91805361,92172576,92541261,92911424,93283064,93656191,94030811,94406926,94784550,95163685,95544337,95926508,96310213,96695451,97082224,97470547,97860421,98251860,98644858,99039430,99435584,99833321,100232648,100633573,101036105,101440243,101845995,102253370,102662376,103073020,103485310,103899247,104314839,104732093,105151018,105571614,105993897,106417866,106843529,107270896,107699974,108130770,108563285,108997535,109433520,109871248,110310727,110751965,111194970,111639742,112086297,112534635,112984764,113436701,113890444,114346003,114803378,115262583,115723628,116186520,116651260,117117863,117586329,118056667,118528884,119002989,119478997,119956909,120436733,120918476,121402147,121887746,122375288,122864782,123356236,123849658,124345048,124842421,125341787,125843144,126346510,126851891,127359289,127868718,128380188,128893706,129409272,129926902,130446604,130968387,131492250,132018210,132546274,133076450,133608746,134143172,134679733,135218439,135759298,136302326,136847522,137394903,137944468,138496234,139050217,139606417,140164834,140725484,141288382,141853530,142420942,142990620,143562579,144136818,144713355,145292205,145873369,146456861,147042683,147630851,148221363,148814237,149409489,150007118,150607140,151209556,151814382,152421633,153031310,153643429,154257989,154875007,155494500,156116465,156740921,157367883,157997351,158629325,159263837,159900887,160540475,161182633,161827362,162474661,163124546,163777033,164432139,165089864,165750206,166413200,167078844,167747154,168418131,169091791,169768150,170447207,171128980,171813483,172500733,173190730,173883490,174579012,175277315,175978412,176682320,177389040,178098587,178810977,179526210,180244303,180965271,181689115,182415867,183145526,183878092,184613598,185352044,186093446,186837804,187585149,188335482,189088820,189845161,190604538,191366952,192132401,192900919,193672505,194447192,195224978,196005865,196789885,197577037,198367337,199160803,199957432,200757259,201560282,202366518,203175967,203988661,204804600,205623815,206446292,207272062,208101141,208933529,209769259,210608330,211450758,212296544,213145719,213998283,214854270,215713678,216576523,217442822,218312576,219185815,220062539,220942782,221826543,222713838,223604683,224499095,225397072,226298648,227203838,228112643,229025078,229941160,230860904,231784327,232711445,233642273,234576829,235515127,236457168,237402984,238352575,239305974,240263179,241224224,242189108,243157847,244130458,245106973,246087391,247071728,248060002
-
-//Base - 3rd Jobs, Baby 3rds
-//Note: (First 98 values [Level 1 - 98] are dummy values (used Adv Jobs values), because 3rd classes start at level 99.)
-175,4054:4055:4056:4057:4058:4059:4060:4061:4062:4063:4064:4065:4066:4067:4068:4069:4070:4071:4072:4073:4074:4075:4076:4077:4078:4079:4080:4081:4082:4083:4084:4085:4086:4087:4096:4097:4098:4099:4100:4101:4102:4103:4104:4105:4106:4107:4108:4109:4110:4111:4112,0,420,660,1080,1800,2640,3840,4560,5040,5460,6000,6600,7200,7320,7620,8040,8820,9600,10080,10560,11040,12610,13390,14300,15340,16900,18460,19500,20800,22100,23400,24700,26000,27300,28600,30160,31200,33800,35750,37700,39000,44100,46200,47600,50400,52500,53200,56000,58800,62300,65800,68600,71400,74200,77000,79800,82600,86100,88200,91000,93800,103500,105000,109500,115500,120000,126000,132000,136500,142500,165000,192000,210000,232500,244500,255000,270000,282000,292500,300000,345000,416000,480000,560000,640000,768000,880000,960000,1088000,1200000,1440000,1700000,2040000,2550000,3060000,3570000,4080000,4760000,5610000,6800000,7070000,7400000,7770000,8150000,8550000,9100000,9610000,10150000,10570000,11180000,12000000,12200000,12930000,13150000,14030000,14420000,15420000,15670000,16870000,17140000,18720000,19020000,20590000,20930000,22690000,23310000,25290000,26020000,27860000,28535000,30990000,31680000,33560000,34942000,36372000,38350000,39890000,41545000,43330000,45400000,48100000,50410000,53370000,56250000,59230000,62590000,66120000,70200000,75330000,81100000,95000000,98000000,103000000,107000000,112000000,116000000,121000000,125000000,130000000,134000000,139000000,145000000,152200000,160840000,171200000,191930000,202290000,214720000,229640000,247550000,283370000,301280000,322770000,348560000,379500000,441390000,102694708,103002790,103311802,103621737,103932603,104244399,104557135,104870809,105185422,105500982,105817489,106134942,106453351,106772714,107093032,107414313,107736557,108059771,108383949,108709106,109035233,109362339,109690425,110019497,110349556,110680602,111012644,111345680,111679719,112014761,112350806,112687862,113025929,113365008,113705105,114046221,114388365,114731535,115075733,115420965,115767233,116114536,116462882,116812271,117162711,117514202,117866745,118220346,118575007,118930735,119287530,119645393,120004330,120364343,120725439,121087618,121450881,121815235,122180680,122547224,122914868,123283611,123653461,124024426,124396499,124769688,125143999,125519434,125895992,126273682,126652503,127032464,127413564,127795811,128179198,128563740,128949437,129336291,129724299,130113471,130503815,130895330,131288016,131681882,132076928,132473161,132870582,133269198,133669010,134070017,134472228,134875643,135280277,135686115,136093173,136501450,136910963,137321695,137733663,138146867,138561307,138976998,139393925,139812104,140231535,140652233,141074199,141497417,141921919,142347688,142774726,143203047,143632652,144063556,144495745,144929234,145364022,145800111,146237515,146676235,147116271,147557623,148000291,148444291,148889623,149336287,149784299,150233660,150684368,151136424,151589828,152044596,152500728,152958241,153417117,153877374,154339011,154802028,155266441,155732250,156199456,156668057,157138071,157609481,158082319,158556570,159032249,159509356,159987891,160467855,160949262,161432115,161916411,162402168,162889385,163378063,163868201,164359816,164852890,165347458,165843501,166341037,166840066,167340587,167842617,168346155,168851202,169357757,169865836,170375441,170886569,171399239,171913433,172429183,172946475,173465323,173985727,174507688,175031206,175556297,176082976,176611228,177141069,177672498,178205517,178740140,179276368,179814200,180353654,180894712,181437407,181981724,182527677,183075266,183624493,184175373,184727905,185282091,185837946,186395469,186954662,187515523,188078070,188642302,189208234,189775868,190345203,190916239,191488992,192063462,192639650,193217570,193797224,194378611,194961747,195546633,196133284,196721683,197311849,197903795,198497507,199093000,199690275,200289347,200890216,201492882,202097362,202703656,203311763,203921699,204533465,205147076,205762517,206379803,206998951,207619945,208242816,208867548,209494159,210122646,210753012,211385271,212019424,212655486,213293458,213933340,214575148,215218881,215864541,216512142,217161684,217813169,218466612,219122012,219779386,220438734,221100056,221763368,222428654,223095946,223765244,224436548,225109858,225785190,226462544,227141936,227823366,228506834,229192357,229879933,230569580,231261297,231955084,232650958,233348917,234048963,234751111,235455362,236161731,236870218,237580839,238293579,239008469,239725494,240444669,241166011,241889519,242615193,243343050,244073090,244805312,245539733,246276352,247015186,247756234,248499513,249245023,249992764,250742751,251494985,252249482,253006241,253765264,254526565,255290145,256056019,256824189,257594669,258367461,259142563,259919993,260699765,261481864,262266307,263053108,263842268,264633804,265427714,266224000,267022677,267823745,268627220,269433119,270241425,271052169,271865322,272680913,273498976,274319478,275142452,275967897,276795813,277626201,278459092,279294487,280132385,280972787,281815724,282661165,283509141,284359685,285212765,286068412,286926627,287787409,288650792,289516742,290385292,291256441,292130223,293006604,293885617,294767295,295651604,296538577,297428213,298320514,299215479,300113140,301013497,301916550,302822299,303730777,304641982,305555916,306472578,307392000,308314182,309239124,310166859,311097355,312030642,312966754,313905658,314847387,315791940,316739318,317689552,318642611,319598558,320557362,321519054,322483603,323451073,324421432,325394711,326370910,327350031,328332072,329317067,330305014,331295946,332289830,333286700,334286555,335289426,336295315,337304221,338316143,339331083,340349072,341370110,342394229,343421429,344451711,345485074,346521550,347561107,348603810,349649626,350698588,351750695,352805947,353864377,354925984,355990769,357058763,358129935,359204317,360281940,361362805,362446912,363534260,364624882,365718778,366815948,367916391,369020140,370127196,371237589,372351320,373468389,374588796,375712574,376839721,377970239,379104158,380241480,381382204,382526362,383673955,384824981,385979475,387137434,388298860,389463752,390632143,391804032,392979452,394158402,395340883,396526926,397716501,398909669,400106401,401306727,402510648,403718196,404929371,406144172,407362601,408584688,409810466,411039903,412273032,413509851,414750394,415994659,417242648,418494392,419749891,421009146,422272188,423539017,424809633,426084069,427362325,428644431,429930358,431220168,432513829,433811374,435112803,436418147,437727407,439040583,440357706,441678778,443003829,444332860,445665871,447002862,448343865,449688913,451038004,452391139,453748318,455109574,456474906,457844346,459217894,460595551,461977348,463363285,464753395,466147677,467546132,468948792,470355656,471766724,473182030,474601571,476025382,477453462,478885842,480322523,481763505,483208820,484658468,486112449,487570795,489033506,490500614,491972120,493448054,494928418,496413211,497902466,499396181,500894391,502397093,503904289,505416011,506932258,508453063,509978425,511508377,513042919,514582051,516125804,517674180,519227209,520784892,522347261,523914316,525486057,527062517,528643726,530229654,531820364,533415824,535016066,536621123,538230994,539845680,541465244,543089623,544718880,546353015,547992094,549636051,551284951,552938794,554597644,556261436,557930235,559604042,561282855,562966740,564655631,566349594,568048628,569752797,571462038,573176414,574895925,576620635,578350481,580085527,581825772,583571281,585321990,587077962,588839198,590605697,592377525,594154681,595937164,597724975,599518179,601316775,603120763,604930142,606744915,608565143,610390828,612222033,614058694,615900876,617748579,619601866,621460674,623325067,625195044,627070670,628951881,630838740,632731249,634629471,636533341,638442925,640358286,642279360,644206211,646138840,648077246,650021493,651971582,653927512,655889284,657856961,659830544,661810033,663795492,665786920,667784318,669787686,671797089,673812525,675833995,677861500,679895102,681934803,683980602,686032564,688090688,690154974,692225423,694302098,696385000,698474193,700569613,702671323,704779324,706893680,709014391,711141458,713274879,715414719,717560979,719713657,721872820,724038465,726210594,728389271,730574431,732766138,734964457,737169388,739380931,741599086,743823916,746055423,748293605,750538528,752790127,755048530,757313673,759585620,761864372,764149993,766442482,768741839,771048065,773361224,775681315,778008404,780342425,782683443,785031522,787386663,789748864,792118127,794494515,796878028,799268666,801666494,804071512,806483719,808903180,811329894,813763926,816205212,818653816,821109802,823573170,826043920,828522053,831007631,833500656,836001191,838509237,841024793,843547859,846078501,848616781,851162636,853716129,856277326,858846161,861422700,864007006,866599015,869198855,871806462,874421901,877045172,879676337,882315399,884962356,887617273,890280150,892950987,895629847,898316732,901011705,903714766,906425915,909145216,911872670,914608277,917352099,920104203,922864523,925633124,928410070,931195297,933988933,936790914,939601304,942420103,945247376,948083121,950927405,953780226,956641584,959511544,962390106,965277270,968173099,971077659,973990885,976912905,979843655,982783199,985731538,988688735,991654790,994629769,997613670,1000606558,1003608368,1006619230,1009639078,1012668042,1015706057,1018753187,1021809497,1024874921,1027949590,1031033438,1034126529,1037228929,1040340636,1043461651,1046592038,1049731862,1052881057,1056039753,1059207885,1062385517,1065572714,1068769476,1071975802,1075191757,1078417405,1081652682,1084897716,1088152379,1091416799,1094691105,1097975168,1101269116,1104572950,1107886669,1111210403,1114544022,1117887655,1121241302,1124605091,1127978894,1131362840,1134756928,1138161158,1141575659,1145000430,1148435473,1151880786,1155336498,1158802481,1162278863,1165765773,1169263081,1172770917,1176289281,1179818172,1183357591,1186907665,1190468395,1194039782,1197621952,1201214907,1204818517,1208433040,1212058348
-
-//Base - Expanded Super Novice , Kagerou/Oboro , Rebellion
-160,4190:4191:4211:4212:4215,0,420,660,1080,1800,2640,3840,4560,5040,5460,6000,6600,7200,7320,7620,8040,8820,9600,10080,10560,11040,12610,13390,14300,15340,16900,18460,19500,20800,22100,23400,24700,26000,27300,28600,30160,31200,33800,35750,37700,39000,44100,46200,47600,50400,52500,53200,56000,58800,62300,65800,68600,71400,74200,77000,79800,82600,86100,88200,91000,93800,103500,105000,109500,115500,120000,126000,132000,136500,142500,165000,192000,210000,232500,244500,255000,270000,282000,292500,300000,345000,416000,480000,560000,640000,768000,880000,960000,1088000,1200000,1440000,1700000,2040000,2550000,3060000,3570000,4080000,4760000,5610000,6800000,7070000,7400000,7770000,8150000,8550000,9100000,9610000,10150000,10570000,11180000,12000000,12200000,12930000,13150000,14030000,14420000,15420000,15670000,16870000,17140000,18720000,19020000,20590000,20930000,22690000,23310000,25290000,26020000,27860000,28535000,30990000,31680000,33560000,34942000,36372000,38350000,39890000,41545000,43330000,45400000,48100000,50410000,53370000,56250000,59230000,62590000,66120000,70200000,75330000,81100000,95000000,98000000,103000000,107000000,112000000,116000000,121000000,125000000,130000000,134000000,139000000,145000000,152200000,160840000,171200000,191930000,202290000,214720000,229640000,247550000,283370000,301280000,322770000,348560000,379500000,441390000,102694708,103002790,103311802,103621737,103932603,104244399,104557135,104870809,105185422,105500982,105817489,106134942,106453351,106772714,107093032,107414313,107736557,108059771,108383949,108709106,109035233,109362339,109690425,110019497,110349556,110680602,111012644,111345680,111679719,112014761,112350806,112687862,113025929,113365008,113705105,114046221,114388365,114731535,115075733,115420965,115767233,116114536,116462882,116812271,117162711,117514202,117866745,118220346,118575007,118930735,119287530,119645393,120004330,120364343,120725439,121087618,121450881,121815235,122180680,122547224,122914868,123283611,123653461,124024426,124396499,124769688,125143999,125519434,125895992,126273682,126652503,127032464,127413564,127795811,128179198,128563740,128949437,129336291,129724299,130113471,130503815,130895330,131288016,131681882,132076928,132473161,132870582,133269198,133669010,134070017,134472228,134875643,135280277,135686115,136093173,136501450,136910963,137321695,137733663,138146867,138561307,138976998,139393925,139812104,140231535,140652233,141074199,141497417,141921919,142347688,142774726,143203047,143632652,144063556,144495745,144929234,145364022,145800111,146237515,146676235,147116271,147557623,148000291,148444291,148889623,149336287,149784299,150233660,150684368,151136424,151589828,152044596,152500728,152958241,153417117,153877374,154339011,154802028,155266441,155732250,156199456,156668057,157138071,157609481,158082319,158556570,159032249,159509356,159987891,160467855,160949262,161432115,161916411,162402168,162889385,163378063,163868201,164359816,164852890,165347458,165843501,166341037,166840066,167340587,167842617,168346155,168851202,169357757,169865836,170375441,170886569,171399239,171913433,172429183,172946475,173465323,173985727,174507688,175031206,175556297,176082976,176611228,177141069,177672498,178205517,178740140,179276368,179814200,180353654,180894712,181437407,181981724,182527677,183075266,183624493,184175373,184727905,185282091,185837946,186395469,186954662,187515523,188078070,188642302,189208234,189775868,190345203,190916239,191488992,192063462,192639650,193217570,193797224,194378611,194961747,195546633,196133284,196721683,197311849,197903795,198497507,199093000,199690275,200289347,200890216,201492882,202097362,202703656,203311763,203921699,204533465,205147076,205762517,206379803,206998951,207619945,208242816,208867548,209494159,210122646,210753012,211385271,212019424,212655486,213293458,213933340,214575148,215218881,215864541,216512142,217161684,217813169,218466612,219122012,219779386,220438734,221100056,221763368,222428654,223095946,223765244,224436548,225109858,225785190,226462544,227141936,227823366,228506834,229192357,229879933,230569580,231261297,231955084,232650958,233348917,234048963,234751111,235455362,236161731,236870218,237580839,238293579,239008469,239725494,240444669,241166011,241889519,242615193,243343050,244073090,244805312,245539733,246276352,247015186,247756234,248499513,249245023,249992764,250742751,251494985,252249482,253006241,253765264,254526565,255290145,256056019,256824189,257594669,258367461,259142563,259919993,260699765,261481864,262266307,263053108,263842268,264633804,265427714,266224000,267022677,267823745,268627220,269433119,270241425,271052169,271865322,272680913,273498976,274319478,275142452,275967897,276795813,277626201,278459092,279294487,280132385,280972787,281815724,282661165,283509141,284359685,285212765,286068412,286926627,287787409,288650792,289516742,290385292,291256441,292130223,293006604,293885617,294767295,295651604,296538577,297428213,298320514,299215479,300113140,301013497,301916550,302822299,303730777,304641982,305555916,306472578,307392000,308314182,309239124,310166859,311097355,312030642,312966754,313905658,314847387,315791940,316739318,317689552,318642611,319598558,320557362,321519054,322483603,323451073,324421432,325394711,326370910,327350031,328332072,329317067,330305014,331295946,332289830,333286700,334286555,335289426,336295315,337304221,338316143,339331083,340349072,341370110,342394229,343421429,344451711,345485074,346521550,347561107,348603810,349649626,350698588,351750695,352805947,353864377,354925984,355990769,357058763,358129935,359204317,360281940,361362805,362446912,363534260,364624882,365718778,366815948,367916391,369020140,370127196,371237589,372351320,373468389,374588796,375712574,376839721,377970239,379104158,380241480,381382204,382526362,383673955,384824981,385979475,387137434,388298860,389463752,390632143,391804032,392979452,394158402,395340883,396526926,397716501,398909669,400106401,401306727,402510648,403718196,404929371,406144172,407362601,408584688,409810466,411039903,412273032,413509851,414750394,415994659,417242648,418494392,419749891,421009146,422272188,423539017,424809633,426084069,427362325,428644431,429930358,431220168,432513829,433811374,435112803,436418147,437727407,439040583,440357706,441678778,443003829,444332860,445665871,447002862,448343865,449688913,451038004,452391139,453748318,455109574,456474906,457844346,459217894,460595551,461977348,463363285,464753395,466147677,467546132,468948792,470355656,471766724,473182030,474601571,476025382,477453462,478885842,480322523,481763505,483208820,484658468,486112449,487570795,489033506,490500614,491972120,493448054,494928418,496413211,497902466,499396181,500894391,502397093,503904289,505416011,506932258,508453063,509978425,511508377,513042919,514582051,516125804,517674180,519227209,520784892,522347261,523914316,525486057,527062517,528643726,530229654,531820364,533415824,535016066,536621123,538230994,539845680,541465244,543089623,544718880,546353015,547992094,549636051,551284951,552938794,554597644,556261436,557930235,559604042,561282855,562966740,564655631,566349594,568048628,569752797,571462038,573176414,574895925,576620635,578350481,580085527,581825772,583571281,585321990,587077962,588839198,590605697,592377525,594154681,595937164,597724975,599518179,601316775,603120763,604930142,606744915,608565143,610390828,612222033,614058694,615900876,617748579,619601866,621460674,623325067,625195044,627070670,628951881,630838740,632731249,634629471,636533341,638442925,640358286,642279360,644206211,646138840,648077246,650021493,651971582,653927512,655889284,657856961,659830544,661810033,663795492,665786920,667784318,669787686,671797089,673812525,675833995,677861500,679895102,681934803,683980602,686032564,688090688,690154974,692225423,694302098,696385000,698474193,700569613,702671323,704779324,706893680,709014391,711141458,713274879,715414719,717560979,719713657,721872820,724038465,726210594,728389271,730574431,732766138,734964457,737169388,739380931,741599086,743823916,746055423,748293605,750538528,752790127,755048530,757313673,759585620,761864372,764149993,766442482,768741839,771048065,773361224,775681315,778008404,780342425,782683443,785031522,787386663,789748864,792118127,794494515,796878028,799268666,801666494,804071512,806483719,808903180,811329894,813763926,816205212,818653816,821109802,823573170,826043920,828522053,831007631,833500656,836001191,838509237,841024793,843547859,846078501,848616781,851162636,853716129,856277326,858846161,861422700,864007006,866599015,869198855,871806462,874421901,877045172,879676337,882315399,884962356,887617273,890280150,892950987,895629847,898316732,901011705,903714766,906425915,909145216,911872670,914608277,917352099,920104203,922864523,925633124,928410070,931195297,933988933,936790914,939601304,942420103,945247376,948083121,950927405,953780226,956641584,959511544,962390106,965277270,968173099,971077659,973990885,976912905,979843655,982783199,985731538,988688735,991654790,994629769,997613670,1000606558,1003608368,1006619230,1009639078,1012668042,1015706057,1018753187,1021809497,1024874921,1027949590,1031033438,1034126529,1037228929,1040340636,1043461651,1046592038,1049731862,1052881057,1056039753,1059207885,1062385517,1065572714,1068769476,1071975802,1075191757,1078417405,1081652682,1084897716,1088152379,1091416799,1094691105,1097975168,1101269116,1104572950,1107886669,1111210403,1114544022,1117887655,1121241302,1124605091,1127978894,1131362840,1134756928,1138161158,1141575659,1145000430,1148435473,1151880786,1155336498,1158802481,1162278863,1165765773,1169263081,1172770917,1176289281,1179818172,1183357591,1186907665,1190468395,1194039782,1197621952,1201214907,1204818517,1208433040,1212058348
-
-//Job - Novice & Baby Novice
-10,0:4023,1,4,10,18,28,40,91,151,205,268,340
-
-//Job - 1st Classes & Baby 1st Classes
-// 50,1:2:3:4:5:6:4024:4025:4026:4027:4028:4029:4046:4050,1,30,60,130,260,460,780,1060,1300,1560,1910,2290,2680,2990,3340,3740,4360,4970,5530,6120,6700,8090,8920,9970,11080,12690,14440,15850,17400,19220,21060,22870,24910,26840,29080,31320,33300,37110,40500,43570,46180,53510,57200,60310,65690,70090,72130,77540,83320,90120,97180,99123,101105,103127,105189,107292,109437,111625,113857,116134,118456,120825,123241,125705,128219,130783,133398,136065,138786,141561,144392,147279,150224,153228,156292,159417,162605,165857,169174,172557,176008,179528,183118,186780,190515,194325,198211,202175,206218,210342,214548,218838,223214,227678,232231,236875,241612,246444,251372,256399,261526,266756,272091,277532,283082,288743,294517,300407,306415,312543,318793,325168,331671,338304,345070,351971,359010,366190,373513,380983,388602,396374,404301,412387,420634,429046,437626,446378,455305,464411,473699,483172,492835,502691,512744,522998,533457,544126,555008,566108,577430,588978,600757,612772,625027,637527,650277,663282,676547,690077,703878,717955,732314,746960,761899,777136,792678,808531,824701,841195,858018,875178,892681,910534,928744,947318,966264,985589,1005300,1025405,1045913,1066831,1088167,1109930,1132128,1154770,1177865,1201422,1225450,1249958,1274957,1300456,1326465,1352994,1380053,1407654,1435807,1464523,1493813,1523689,1554162,1585245,1616949,1649287,1682272,1715917,1750235,1785239,1820943,1857361,1894508,1932398,1971045,2010465,2050674,2091687,2133520,2176190,2219713,2264107,2309389,2355576,2402687,2450740,2499754,2549749,2600743,2652757,2705812,2759928,2815126,2871428,2928856,2987433,3047181,3108124,3170286,3233691,3298364,3364331,3431617,3500249,3570253,3641657,3714490,3788779,3864554,3941845,4020681,4101094,4183115,4266777,4352112,4439154,4527936,4618494,4710863,4805080,4901181,4999204,5099187,5201170,5305193,5411296,5519521,5629911
-
-//Job - 2nd Classes & Baby 2nd Classes
-50,7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:4030:4031:4032:4033:4034:4035:4036:4037:4038:4039:4040:4041:4042:4043:4044:4051:4052,1,1600,2500,4200,7000,10300,15900,18900,20900,22600,24900,28800,31500,32000,33300,35100,40500,44100,46300,48500,50700,56000,59400,63500,68100,75000,85700,90500,96600,102600,108600,119700,126000,132300,138600,146100,157500,170600,180400,190300,196800,214900,225200,232000,245700,255900,279300,294000,308700,327000,345400,355761,366433,377425,388747,400409,412421,424793,437536,450662,464181,478106,492449,507222,522438,538111,554254,570881,588007,605647,623816,642530,661805,681659,702108,723171,744866,767211,790227,813933,838350,863500,889404,916086,943568,971875,1001031,1031061,1061992,1093851,1126666,1160465,1195278,1231136,1268070,1306112,1345295,1385653,1427222,1470038,1514139,1559563,1606349,1654539,1704175,1755300,1807958,1862196,1918061,1975602,2034870,2095916,2158793,2223556,2290262,2358969,2429738,2502630,2577708,2655039,2734690,2816730,2901231,2988267,3077914,3170251,3265358,3363318,3464217,3568143,3675187,3785442,3899005,4015975,4136454,4260547,4388363,4520013,4655613,4795281,4939139,5087313,5239932,5397129,5559042,5725813,5897587,6074514,6256749,6444451,6637784,6836917,7042024,7253284,7470882,7695008,7925858,8163633,8408541,8660796,8920619,9188237,9463883,9747799,10040232,10341438,10651680,10758196,10865777,10974434,11084178,11195019,11306969,11420038,11534238,11649580,11766075,11883735,12002572,12122597,12243822,12366260,12489922,12614821,12740969,12868378,12997061,13127031,13258301,13390883,13524791,13660038,13796638,13934604,14073949,14214688,14356834,14500402,14645405,14791858,14939776,15089173,15240064,15392464,15546388,15701851,15858869,16017457,16177631,16339407,16502800,16667827,16834505,17002848,17172876,17344604,17518049,17693228,17870160,18048861,18229348,18411641,18595756,18781713,18969528,19159223,19350816,19544323,19739767,19937165,20136535,20337901,20541278,20746690,20954156,21163697,21375332,21589085,21804974,22023023,22243254,22465686,22690342,22917245,23146416,23377879,23611658,23847774,24086251,24327114,24570384,24816087,25064248,25314890,25568038,25823718
-
-//Job - Novice High
-10,4001,1,4,11,20,31,44,100,166,226,295,374
-
-//Job - Adv First Classes
-50,4002:4003:4004:4005:4006:4007,1,150,340,550,760,990,1250,1600,1980,2340,2740,3140,3950,4510,5210,5950,7000,8150,9130,10220,11480,12780,14090,15560,16980,18620,20280,21780,24510,27000,29000,31000,36000,39000,41000,45000,49000,51900,55000,59450,64630,70030,74940,79800,84630,89610,95170,100420,107250,112070,118120,120482,122891,125348,127854,130411,133019,135679,138392,141159,143982,146861,149798,152793,155848,158964,162143,165385,168692,172065,175506,179016,182596,186247,189971,193770,197645,201597,205628,209740,213934,218212,222576,227027,231567,236198,240921,245739,250653,255666,260779,265994,271313,276739,282273,287918,293676,299549,305539,311649,317881,324238,330722,337336,344082,350963,357982,365141,372443,379891,387488,395237,403141,411203,419427,427815,436371,445098,453999,463078,472339,481785,491420,501248,511272,521497,531926,542564,553415,564483,575772,587287,599032,611012,623232,635696,648409,661377,674604,688096,701857,715894,730211,744815,759711,774905,790403,806211,822335,838781,855556,872667,890120,907922,926080,944601,963493,982762,1002417,1022465,1042914,1063772,1085047,1106747,1128881,1151458,1174487,1197976,1221935,1246373,1271300,1296725,1322659,1349112,1376094,1403615,1431687,1460320,1489526,1519316,1549702,1580696,1612309,1644555,1677446,1710994,1745213,1780117,1815719,1852033,1889073,1926854,1965391,2004698,2044791,2085686,2127399,2169946,2213344,2257610,2302762,2348817,2395793,2443708,2492582,2542433,2593281,2645146,2698048,2752008,2807048,2863188,2920451,2978859,3038436,3099204,3161188,3224411,3288899,3354676,3421769,3490204,3560008,3631208,3703832,3777908,3853466,3930535,4009145,4089327,4171113,4254535,4339625,4426417,4514945,4605243,4697347,4791293,4887118,4984860,5084557,5186248,5289972,5395771,5503686,5613759,5726034,5840554,5957364,6076511,6198041,6322001,6448440,6577408,6708956,6843134
-
-//Job - Adv Second Classes
-70,4008:4009:4010:4011:4012:4013:4014:4015:4016:4017:4018:4019:4020:4021:4022,1,2400,3800,6200,10400,15200,22900,27100,30000,32500,35700,41300,45000,45800,47600,50300,58700,63900,67100,70300,73500,90600,96200,102700,110200,121400,144700,152900,163100,173300,183500,213500,224700,236000,247200,260700,299800,324800,343600,362300,374800,474400,497000,512100,542200,564800,644300,678200,712100,754500,796900,949300,988100,1026800,1065600,1104300,1334800,1391400,1425300,1470600,1515800,2003800,2032800,2119900,2236100,2323200,3025300,3433300,3776600,4436900,6758400,6893567,7031438,7172066,7315507,7461817,7611053,7763273,7918538,8076908,8238446,8403214,8571278,8742703,8917556,9095906,9277823,9463379,9652646,9845698,10042611,10243463,10448332,10657298,10870443,11087851,11309607,11535798,11766513,12001843,12241879,12486716,12736450,12991178,13251001,13516020,13786340,14062066,14343307,14630172,14922775,15221230,15525654,15836166,16152889,16475946,16805464,17141572,17484403,17834091,18190773,18554587,18925679,19304193,19690275,20084081,20485761,20895474,21313383,21739651,22174444,22617932,23070290,23531695,24002329,24482374,24972021,25471459,25980888,26500505,27030513,27571121,28122541,28684990,29258689,29843861,30440736,31049550,31670540,32303950,32950028,33609027,34281207,34966831,35666167,36379490,37107077,37849216,38606199,39378323,40165889,40969204,41788587,42624358,43476846,44346384,45233310,46137977,47060734,48001949,48961986,49941222,50940047,51958847,52998023,54057983,55139142,56241925,57366761,58514094,59684376,60878062,62095624,63337535,64604285,65896368,67214294,68558580,69929746,71328337,72754901,74210000,75694198,77208082,78752240,80327283,81933824,83572498,85243944,86948821,88687798,90461554,92270781,94116197,95998522,97918488,99876855,101874391,103911877,105990115,108109912,110272108,112477552,114727100,117021643,119362070,121749311,124184295,126667979,129201333,131785360,134421064,137109474,139851658,142648694,145501659,148411694,151379927,154407515,157495667,160645574,163858476,167135646,170478357,173887915,177365675,180912990,184531248,188221869,191986305,195826026,199742548,203737391,207812135,211968366,216207731,220531878,224942505,229441357,234030182,238710775,243484978,248354670,253321760,258388190,263555950
-
-//Job - 3rd Jobs, Baby 3rds, Expanded Super Novice
-60,4054:4055:4056:4057:4058:4059:4060:4061:4062:4063:4064:4065:4066:4067:4068:4069:4070:4071:4072:4073:4074:4075:4076:4077:4078:4079:4080:4081:4082:4083:4084:4085:4086:4087:4096:4097:4098:4099:4100:4101:4102:4103:4104:4105:4106:4107:4108:4109:4110:4111:4112,1,106000,112000,355000,615000,917000,1253000,1595000,2007000,2430000,2868000,3420000,3863000,4504000,4998000,5769000,6321000,7254000,7870000,9015000,9530000,11072000,11848000,13467000,14337000,16243000,17216000,19446000,20781000,23070000,24453000,27568000,29118000,31820000,34125000,37048000,40204000,42972000,45937000,49110000,52696000,57158000,61305000,67167000,72285000,77647000,83624000,91113000,98548000,107630000,119077000,131668000,145518000,160753000,177511000,195944000,216220000,238523000,263056000,290042000,319726000,,134178935,135520724,136875925,138244677,139627117,141023389,142433624,143857966,145296546,146749508,148216997,149699160,151196158,152708120,154235207,155777550,157335326,158908679,160497757,162102736,163723761,165360996,167014600,168684736,170371581,172075298,173796047,175534006,177289338,179062235,180852860,182661390,184488004,186332878,188196207,190078168,191978955,193898747,195837737,197796119,199774071,201771802,203789524,205827413,207885680,209964534,212064171,214184815,216326662,218489920,220674817,222881562,225110381,227361485,229635100,231931452,234250768,236593273,238959210,241348805,243762285,246199908,248661900,251148520,253659994,256196597,258758555,261346143,263959602,266599193,269265189,271957833,274677399,277424179,280198431,283000413,285830417,288688733,291575620,294491369,297436270,300410615,303414727,306448864,309513349,312608474,315734561,318891902,322080819,325301637,328554645,331840199,335158590,338510174,341895274,345314213,348767346,352255030,355777587,359335372,362928710,366557987,370223560,373925783,377665046,381441702,385256109,389108653,392999722,396929705,400898989,404907961,408957043,413046622,417177086,421348854,425562348,429817955,434116127,438457285,442841848,447270270,451742970,456260401,460823015,465431233,470085539,474786386,479534259,484329610,489172891,494064620,499005249,503995295,509035244,514125579,519266818,524459479,529704077,535001099,540351093,545754609,551212165,556724276,562291525,567914429,573593570,579329530,585122825,590974038,596883750,602852608,608881128,614969957,621119677,627330870,633604182,639940195,646339620,652803038,659331031,665924311,672583524,679309381,686102463,692963482,699893083,706891979,713960880,721100498,728311477,735594595,742950563,750380090,757883889,765462735,773117339,780848477,788656925,796543457,804508915,812554009,820679516,828886275,837175126,845546847,854002276,862542318,871167751,879879413,888678209,897564981,906540633,915606005
-
-//Job - Expanded Super Novice , Kagerou/Oboro , Rebellion
-50,4190:4191:4211:4212:4215,1,106000,112000,355000,615000,917000,1253000,1595000,2007000,2430000,2868000,3420000,3863000,4504000,4998000,5769000,6321000,7254000,7870000,9015000,9530000,11072000,11848000,13467000,14337000,16243000,17216000,19446000,20781000,23070000,24453000,27568000,29118000,31820000,34125000,37048000,40204000,42972000,45937000,49110000,52696000,57158000,61305000,67167000,72285000,77647000,83624000,91113000,98548000,107630000,119077000,131668000,145518000,160753000,177511000,195944000,216220000,238523000,263056000,290042000,319726000,,134178935,135520724,136875925,138244677,139627117,141023389,142433624,143857966,145296546,146749508,148216997,149699160,151196158,152708120,154235207,155777550,157335326,158908679,160497757,162102736,163723761,165360996,167014600,168684736,170371581,172075298,173796047,175534006,177289338,179062235,180852860,182661390,184488004,186332878,188196207,190078168,191978955,193898747,195837737,197796119,199774071,201771802,203789524,205827413,207885680,209964534,212064171,214184815,216326662,218489920,220674817,222881562,225110381,227361485,229635100,231931452,234250768,236593273,238959210,241348805,243762285,246199908,248661900,251148520,253659994,256196597,258758555,261346143,263959602,266599193,269265189,271957833,274677399,277424179,280198431,283000413,285830417,288688733,291575620,294491369,297436270,300410615,303414727,306448864,309513349,312608474,315734561,318891902,322080819,325301637,328554645,331840199,335158590,338510174,341895274,345314213,348767346,352255030,355777587,359335372,362928710,366557987,370223560,373925783,377665046,381441702,385256109,389108653,392999722,396929705,400898989,404907961,408957043,413046622,417177086,421348854,425562348,429817955,434116127,438457285,442841848,447270270,451742970,456260401,460823015,465431233,470085539,474786386,479534259,484329610,489172891,494064620,499005249,503995295,509035244,514125579,519266818,524459479,529704077,535001099,540351093,545754609,551212165,556724276,562291525,567914429,573593570,579329530,585122825,590974038,596883750,602852608,608881128,614969957,621119677,627330870,633604182,639940195,646339620,652803038,659331031,665924311,672583524,679309381,686102463,692963482,699893083,706891979,713960880,721100498,728311477,735594595,742950563,750380090,757883889,765462735,773117339,780848477,788656925,796543457,804508915,812554009,820679516,828886275,837175126,845546847,854002276,862542318,871167751,879879413,888678209,897564981,906540633,915606005
-
-//Job - Ninja/Gunslinger
-70,24:25,1,100,200,300,400,600,700,1000,1200,1400,1700,1900,2400,2700,3200,3600,4200,4900,5500,6100,6900,7700,8400,9300,10100,11100,12100,13000,14600,16100,17500,18600,21500,23300,24700,27000,29000,30000,32400,35000,38100,41100,44000,46700,49600,52500,55600,58900,62700,65500,69200,72300,81200,84100,89300,95500,100900,107800,114900,120700,128600,150500,176900,196100,219600,234200,247900,266400,281300,296600,308000,311079,314189,317330,320503,323708,326945,330214,333516,336851,340219,343621,347057,350527,354032,357572,361147,364758,368405,372089,375809,379567,383362,387195,391066,394976,398925,402914,406943,411012,415122,419273,423465,427699,431975,436294,440656,445062,449512,454007,458547,463132,467763,472440,477164,481935,486754,491621,496537,501502,506517,511582,516697,521863,527081,532351,537674,543050,548480,553964,559503,565098,570748,576455,582219,588041,593921,599860,605858,611916,618035,624215,630457,636761,643128,649559,656054,662614,669240,675932,682691,689517,696412,703376,710409,717513,724688,731934,739253,746645,754111,761652,769268,776960,784729,792576,800501,808506,816591,824756,833003,841333,849746,858243,866825,875493,884247,893089,902019,911039,920149,929350,938643,948029,957509,967084,976754,996289,1016214,1036538,1057268,1078413,1099981,1121980,1144419,1167307,1190653,1214466,1238755,1263530,1288800,1314575,1340866,1367683,1395036,1422936,1451394,1480421,1510029,1540229,1571033,1602453,1634502,1667192,1700535,1734545,1769235,1804619,1840711,1877525,1915075,1953376,1992443,2032291,2072936,2114394,2156681,2199814,2243810,2288686,2334459,2381148,2428770,2477345,2526891,2577428,2628976,2681555,2735186,2789889,2845686,2902599,2960650,3019862,3080259,3141864,3204701,3268794,3334169,3400852,3468868,3538245,3609009,3681189,3754812,3829908
-
-//Job - Taekwon (Same EXP table as 1st Classes & Baby 1st Classes)
-50,4046,1,60,130,260,460,780,1060,1300,1560,1910,2290,2680,2990,3340,3740,4360,4970,5530,6120,6700,8090,8920,9970,11080,12690,14440,15850,17400,19220,21060,22870,24910,26840,29080,31320,33300,37110,40500,43570,46180,53510,57200,60310,65690,70090,72130,77540,83320,90120,97180,99123,101105,103127,105189,107292,109437,111625,113857,116134,118456,120825,123241,125705,128219,130783,133398,136065,138786,141561,144392,147279,150224,153228,156292,159417,162605,165857,169174,172557,176008,179528,183118,186780,190515,194325,198211,202175,206218,210342,214548,218838,223214,227678,232231,236875,241612,246444,251372,256399,261526,266756,272091,277532,283082,288743,294517,300407,306415,312543,318793,325168,331671,338304,345070,351971,359010,366190,373513,380983,388602,396374,404301,412387,420634,429046,437626,446378,455305,464411,473699,483172,492835,502691,512744,522998,533457,544126,555008,566108,577430,588978,600757,612772,625027,637527,650277,663282,676547,690077,703878,717955,732314,746960,761899,777136,792678,808531,824701,841195,858018,875178,892681,910534,928744,947318,966264,985589,1005300,1025405,1045913,1066831,1088167,1109930,1132128,1154770,1177865,1201422,1225450,1249958,1274957,1300456,1326465,1352994,1380053,1407654,1435807,1464523,1493813,1523689,1554162,1585245,1616949,1649287,1682272,1715917,1750235,1785239,1820943,1857361,1894508,1932398,1971045,2010465,2050674,2091687,2133520,2176190,2219713,2264107,2309389,2355576,2402687,2450740,2499754,2549749,2600743,2652757,2705812,2759928,2815126,2871428,2928856,2987433,3047181,3108124,3170286,3233691,3298364,3364331,3431617,3500249,3570253,3641657,3714490,3788779,3864554,3941845,4020681,4101094,4183115,4266777,4352112,4439154,4527936,4618494,4710863,4805080,4901181,4999204,5099187,5201170,5305193,5411296,5519521,5629911
-
-//Job - Star Gladiator
-50,4047:4048,1,50700,50700,50700,50700,50700,50700,50700,50700,50700,50700,50700,50700,50700,50700,50700,50700,50700,50700,50700,101400,112000,118800,127000,136200,150000,171400,181000,193200,205200,217200,239400,252000,264600,277200,292200,315000,341200,360800,380600,393600,429800,450400,464000,491400,511800,558600,588000,617400,654000,690800,5270623,5323329,5376562,5430327,5484630,5539476,5594870,5650818,5707326,5764399,5822042,5880262,5939064,5998454,6058438,6119022,6180212,6242014,6304434,6367478,6431152,6495463,6560417,6626021,6692281,6759203,6826794,6895061,6964011,7033651,7103987,7175026,7246776,7319243,7392435,7466359,7541022,7616432,7692596,7769521,7847216,7925688,8004944,8084993,8165842,8247500,8329974,8413273,8497405,8582378,8668201,8754882,8842430,8930854,9020162,9110363,9201466,9293480,9386414,9480278,9575080,9670830,9767538,9865213,9963865,10063503,10164137,10265778,10368435,10472119,10576840,10682608,10789433,10897327,11006300,11116362,11227525,11339800,11453197,11567728,11683405,11800238,11918240,12037422,12157796,12279373,12402166,12526187,12651448,12777962,12905741,13034798,13165145,13296796,13429763,13564060,13699700,13836696,13975062,14114812,14255959,14398518,14542503,14687927,14834806,14983153,15132984,15284313,15437155,15591526,15747441,15904915,16063963,16224602,16386847,16550715,16716221,16883383,17052217,17222737,17394963,17568913,17744600,17922045,18101264,18282276,18465098,18649748,18836245,19024606,19214851,19407000,19601069,19797078,19995048,20194998,20396947,20600917,20806924,21014993,21225141,21437391,21651765,21868281,22086962,22307831,22530910,22756218,22983779,23213617,23445751,23680209,23917009,24156177,24397737,24641713,24888128,25137009,25388377,25642259,25898682,26157668,26419244,26683436,26950270,27219772,27491969,27766887,28044556,28325001,28608249,28894330,29183273,29475104,29769854,30067552,30368227,30671909,30978626,31288411,31601295,31917308,32236480,32558844,32884432,33213276,33545408,33880861,34219668,34561864,34907482,35256554,35609117,35965206,36324859,36688108,37054988,37425537,37799791,38177789,38559565,38945159,39334611,39727957
-
-//Job - Soul Linker (Same EXP table as 2nd Classes & Baby 2nd Classes)
-50,4049,1,2500,4200,7000,10300,15900,18900,20900,22600,24900,28800,31500,32000,33300,35100,40500,44100,46300,48500,50700,56000,59400,63500,68100,75000,85700,90500,96600,102600,108600,119700,126000,132300,138600,146100,157500,170600,180400,190300,196800,214900,225200,232000,245700,255900,279300,294000,308700,327000,345400,355761,366433,377425,388747,400409,412421,424793,437536,450662,464181,478106,492449,507222,522438,538111,554254,570881,588007,605647,623816,642530,661805,681659,702108,723171,744866,767211,790227,813933,838350,863500,889404,916086,943568,971875,1001031,1031061,1061992,1093851,1126666,1160465,1195278,1231136,1268070,1306112,1345295,1385653,1427222,1470038,1514139,1559563,1606349,1654539,1704175,1755300,1807958,1862196,1918061,1975602,2034870,2095916,2158793,2223556,2290262,2358969,2429738,2502630,2577708,2655039,2734690,2816730,2901231,2988267,3077914,3170251,3265358,3363318,3464217,3568143,3675187,3785442,3899005,4015975,4136454,4260547,4388363,4520013,4655613,4795281,4939139,5087313,5239932,5397129,5559042,5725813,5897587,6074514,6256749,6444451,6637784,6836917,7042024,7253284,7470882,7695008,7925858,8163633,8408541,8660796,8920619,9188237,9463883,9747799,10040232,10341438,10651680,10758196,10865777,10974434,11084178,11195019,11306969,11420038,11534238,11649580,11766075,11883735,12002572,12122597,12243822,12366260,12489922,12614821,12740969,12868378,12997061,13127031,13258301,13390883,13524791,13660038,13796638,13934604,14073949,14214688,14356834,14500402,14645405,14791858,14939776,15089173,15240064,15392464,15546388,15701851,15858869,16017457,16177631,16339407,16502800,16667827,16834505,17002848,17172876,17344604,17518049,17693228,17870160,18048861,18229348,18411641,18595756,18781713,18969528,19159223,19350816,19544323,19739767,19937165,20136535,20337901,20541278,20746690,20954156,21163697,21375332,21589085,21804974,22023023,22243254,22465686,22690342,22917245,23146416,23377879,23611658,23847774,24086251,24327114,24570384,24816087,25064248,25314890,25568038,25823718
-
-//Job - Super Novice & Baby Super Novice (Still pre-renewal values -> Needs info)
-99,23:4045,1,30,43,58,76,116,180,220,272,336,520,604,699,802,948,1125,1668,1937,2226,3040,3988,5564,6272,7021,9114,11473,15290,16891,18570,23229,28359,36478,39716,43088,52417,62495,78160,84175,90404,107611,125915,153941,191781,204351,248352,286212,386371,409795,482092,509596,982092,992092,1002092,1012092,1022092,1032092,1042092,1052092,1062092,1072092,1082092,1092092,1102092,1112092,1122092,1132092,1142092,1152092,1162092,1172092,1182092,1192092,1202092,1212092,1222092,1232092,1242092,1252092,1262092,1272092,1282092,1292092,1302092,1312092,1322092,1332092,1342092,1352092,1362092,1372092,1382092,1392092,1402092,1412092,1422092,1432092,1442092,1452092,1462092,1491333,1521159,1551582,1582613,1614265,1646550,1679480,1713069,1747330,1782276,1817921,1854279,1891364,1929191,1967774,2007129,2047271,2088216,2129980,2172579,2216030,2260350,2305556,2351667,2398700,2446673,2495606,2545518,2596428,2648356,2701323,2755349,2810455,2866664,2923997,2982476,3042125,3102967,3165026,3228326,3292892,3358749,3425923,3494441,3564329,3635615,3708327,3782493,3858142,3935304,4014010,4094290,4176175,4259698,4344891,4431788,4520423,4610831,4703047,4797107,4893049,4990909,5090727,5192541,5296391,5402318,5510364,5620571,5732982,5847641,5964593,6083884,6205561,6329672,6456265,6585390,6717097,6851438,6988466,7128235,7270799,7416214,7564538,7715828,7870144,8027546,8188096,8351857,8518893,8689270,8863055,9040315,9221121,9405543,9593653,9785525,9981235,10180859,10384475,10592164,10804007,11020086,11240487,11465296,11694601,11928492,12167061,12410401,12658608,12911779,13170014,13433414,13702082,13976123,14255645,14540757,14831571,15128202,15430765,15739380,16054167,16375250,16702754,17036808,17377543,17725094,18079595,18441187,18810011,19186211,19569935,19961334,20360560,20767770,21183125,21606786,22038921,22479697,22929289,23387873,23855628,24332740,24819394,25315781,25822095,26338537,26865306,27402611,27950663,28509676,29079868,29661464,30254692,30859785,31476979,32106518
diff --git a/db/re/exp_group_db.conf b/db/re/exp_group_db.conf
new file mode 100644
index 00000000..56ce4ea8
--- /dev/null
+++ b/db/re/exp_group_db.conf
@@ -0,0 +1,64 @@
+//================= Hercules Database =====================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2018 Hercules Dev Team
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//=========================================================================
+//= Exp Groups Database File.
+//=========================================================================
+
+base_exp_group_db: {
+ EvolClasses: {
+ MaxLevel: 99
+ Exp: [
+ 9,16,25,36,77,112,153,200,253,320,
+ 385,490,585,700,830,970,1120,1260,1420,1620,
+ 1860,1990,2240,2504,2950,3426,3934,4474,6889,7995,
+ 9174,10425,11748,13967,15775,17678,19677,21773,30543,34212,
+ 38065,42102,46323,53026,58419,64041,69892,75973,102468,115254,
+ 128692,142784,157528,178184,196300,215198,234879,255341,330188,365914,
+ 403224,442116,482590,536948,585191,635278,687211,740988,925400,1473746,
+ 1594058,1718928,1848355,1982340,2230113,2386162,2547417,2713878,3206160,3681024,
+ 4022472,4377024,4744680,5125440,5767272,6204000,6655464,7121664,7602600,9738720,
+ 11649960,13643520,18339300,23836800,35658000,48687000,58135000,99999998,
+ ]
+ }
+}
+
+job_exp_group_db: {
+ EvolClasses: {
+ MaxLevel: 99
+ Exp: [
+ 30, 43, 58, 76, 116, 180, 220, 272, 336, 520,
+ 604, 699, 802, 948, 1125, 1668, 1937, 2226, 3040, 3988,
+ 5564, 6272, 7021, 9114, 11473, 15290, 16891, 18570, 23229, 28359,
+ 36478, 39716, 43088, 52417, 62495, 78160, 84175, 90404, 107611, 125915,
+ 153941, 191781, 204351, 248352, 286212, 386371, 409795, 482092, 509596, 982092,
+ 992092, 1002092, 1012092, 1022092, 1032092, 1042092, 1052092, 1062092, 1072092, 1082092,
+ 1092092, 1102092, 1112092, 1122092, 1132092, 1142092, 1152092, 1162092, 1172092, 1182092,
+ 1192092, 1202092, 1212092, 1222092, 1232092, 1242092, 1252092, 1262092, 1272092, 1282092,
+ 1292092, 1302092, 1312092, 1322092, 1332092, 1342092, 1352092, 1362092, 1372092, 1382092,
+ 1392092, 1402092, 1412092, 1422092, 1432092, 1442092, 1452092, 1462092,
+ ]
+ }
+}
diff --git a/db/re/item_db.conf b/db/re/item_db.conf
index cbd1c509..de337b46 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -999,8 +999,8 @@ item_db: (
},
{
Id: 527
- AegisName: "PumpkishJuice"
- Name: "Pumpkish Juice"
+ AegisName: "PumpkinJuice"
+ Name: "Pumpkin Juice"
Type: "IT_USABLE"
Buy: 200
Sell: 5
@@ -1035,7 +1035,7 @@ item_db: (
Id: 528
AegisName: "Manana"
Name: "Manana"
- Type: "IT_DELAYCONSUME"
+ Type: "IT_HEALING"
Buy: 100
Sell: 35
Weight: 10
@@ -2084,6 +2084,579 @@ item_db: (
Sell: 100
},
{
+ Id: 731
+ AegisName: "EmptyBottle"
+ Name: "Empty Bottle"
+ Type: "IT_ETC"
+ Buy: 500
+ Sell: 100
+ Weight: 100
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ WeaponLv: 0
+ EquipLv: 0
+ Refine: false
+ ViewSprite: 731
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 732
+ AegisName: "RawLog"
+ Name: "Raw Log"
+ Type: "IT_ETC"
+ Buy: 200
+ Sell: 5
+ Weight: 200
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ WeaponLv: 0
+ EquipLv: 0
+ Refine: false
+ ViewSprite: 732
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 733
+ AegisName: "PinkAntennae"
+ Name: "Pink Antennae"
+ Type: "IT_ETC"
+ Buy: 500
+ Sell: 15
+ Weight: 25
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ WeaponLv: 0
+ EquipLv: 0
+ Refine: false
+ ViewSprite: 733
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 734
+ AegisName: "EmptyMug"
+ Name: "Empty Mug"
+ Type: "IT_ETC"
+ Buy: 1500
+ Sell: 50
+ Weight: 100
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ WeaponLv: 0
+ EquipLv: 0
+ Refine: false
+ ViewSprite: 734
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 735
+ AegisName: "PinkPetal"
+ Name: "Pink Petal"
+ Type: "IT_ETC"
+ Buy: 75
+ Sell: 8
+ Weight: 5
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ WeaponLv: 0
+ EquipLv: 0
+ Refine: false
+ ViewSprite: 735
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 736
+ AegisName: "PileOfAsh"
+ Name: "Pile Of Ash"
+ Type: "IT_ETC"
+ Buy: 500
+ Sell: 20
+ Weight: 5
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ WeaponLv: 0
+ EquipLv: 0
+ Refine: false
+ ViewSprite: 736
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 737
+ AegisName: "AlizarinHerb"
+ Name: "Alizarin Herb"
+ Type: "IT_ETC"
+ Buy: 20
+ Sell: 1
+ Weight: 1
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ WeaponLv: 0
+ EquipLv: 0
+ Refine: false
+ ViewSprite: 737
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 738
+ AegisName: "CobaltHerb"
+ Name: "Cobalt Herb"
+ Type: "IT_ETC"
+ Buy: 20
+ Sell: 1
+ Weight: 1
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ WeaponLv: 0
+ EquipLv: 0
+ Refine: false
+ ViewSprite: 738
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 739
+ AegisName: "GambogeHerb"
+ Name: "Gamboge Herb"
+ Type: "IT_ETC"
+ Buy: 20
+ Sell: 1
+ Weight: 1
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ WeaponLv: 0
+ EquipLv: 0
+ Refine: false
+ ViewSprite: 739
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 740
+ AegisName: "MauveHerb"
+ Name: "Mauve Herb"
+ Type: "IT_ETC"
+ Buy: 20
+ Sell: 1
+ Weight: 1
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ WeaponLv: 0
+ EquipLv: 0
+ Refine: false
+ ViewSprite: 740
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 741
+ AegisName: "GoldNuggets"
+ Name: "Gold Nuggets"
+ Type: "IT_ETC"
+ Buy: 10000
+ Sell: 1500
+ Weight: 100
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ WeaponLv: 0
+ EquipLv: 0
+ Refine: false
+ ViewSprite: 741
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 742
+ AegisName: "Coal"
+ Name: "Coal"
+ Type: "IT_ETC"
+ Buy: 1800
+ Sell: 100
+ Weight: 50
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ WeaponLv: 0
+ EquipLv: 0
+ Refine: false
+ ViewSprite: 742
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 743
+ AegisName: "IronOre"
+ Name: "Iron Ore"
+ Type: "IT_ETC"
+ Buy: 6500
+ Sell: 350
+ Weight: 150
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ WeaponLv: 0
+ EquipLv: 0
+ Refine: false
+ ViewSprite: 743
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 744
+ AegisName: "MaggotSlime"
+ Name: "Maggot Slime"
+ Type: "IT_ETC"
+ Buy: 100
+ Sell: 3
+ Weight: 1
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ WeaponLv: 0
+ EquipLv: 0
+ Refine: false
+ ViewSprite: 744
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 745
+ AegisName: "BugLeg"
+ Name: "Bug Leg"
+ Type: "IT_ETC"
+ Buy: 100
+ Sell: 4
+ Weight: 1
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ WeaponLv: 0
+ EquipLv: 0
+ Refine: false
+ ViewSprite: 745
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 746
+ AegisName: "HardSpike"
+ Name: "Hard Spike"
+ Type: "IT_ETC"
+ Buy: 750
+ Sell: 60
+ Weight: 1
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ WeaponLv: 0
+ EquipLv: 0
+ Refine: false
+ ViewSprite: 746
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 747
+ AegisName: "SilkCocoon"
+ Name: "Silk Cocoon"
+ Type: "IT_ETC"
+ Buy: 500
+ Sell: 25
+ Weight: 1
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ WeaponLv: 0
+ EquipLv: 0
+ Refine: false
+ ViewSprite: 746
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 800
+ AegisName: "DiamondShard"
+ Name: "Diamond Shard"
+ Type: "IT_ETC"
+ Buy: 5000
+ Sell: 700
+ Weight: 10
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Refine: false
+ BindOnEquip: false
+ BuyingStore: true
+},
+{
+ Id: 801
+ AegisName: "RubyShard"
+ Name: "Ruby Shard"
+ Type: "IT_ETC"
+ Buy: 5000
+ Sell: 700
+ Weight: 10
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Refine: false
+ BindOnEquip: false
+ BuyingStore: true
+},
+{
+ Id: 802
+ AegisName: "EmeraldShard"
+ Name: "Emerald Shard"
+ Type: "IT_ETC"
+ Buy: 5000
+ Sell: 700
+ Weight: 10
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Refine: false
+ BindOnEquip: false
+ BuyingStore: true
+},
+{
+ Id: 803
+ AegisName: "SapphireShard"
+ Name: "Sapphire Shard"
+ Type: "IT_ETC"
+ Buy: 5000
+ Sell: 700
+ Weight: 10
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Refine: false
+ BindOnEquip: false
+ BuyingStore: true
+},
+{
+ Id: 804
+ AegisName: "TopazShard"
+ Name: "Topaz Shard"
+ Type: "IT_ETC"
+ Buy: 5000
+ Sell: 700
+ Weight: 10
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Refine: false
+ BindOnEquip: false
+ BuyingStore: true
+},
+{
+ Id: 805
+ AegisName: "AmethystShard"
+ Name: "Amethyst Shard"
+ Type: "IT_ETC"
+ Buy: 5000
+ Sell: 700
+ Weight: 10
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Refine: false
+ BindOnEquip: false
+ BuyingStore: true
+},
+{
+ Id: 1000
+ AegisName: "CopperNecklace"
+ Name: "Copper Necklace"
+ Type: "IT_ARMOR"
+ Buy: 10000
+ Sell: 400
+ Weight: 50
+ Atk: 0
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 1
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ Loc: "EQP_ACC_L"
+ WeaponLv: 0
+ EquipLv: 1
+ Refine: false
+ ViewSprite: 1000
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+ AllowCards: {
+ id5028: 1
+ id5029: 1
+ id5030: 1
+ id5031: 1
+ id5032: 1
+ id5033: 1
+ }
+},
+{
Id: 1300
AegisName: "CreasedShirt"
Name: "Creased Shirt"
@@ -2272,6 +2845,67 @@ item_db: (
Sprite: 0
},
{
+ Id: 1306
+ AegisName: "ForestArmor"
+ Name: "Forest Armor"
+ Type: "IT_ARMOR"
+ Buy: 25000
+ Sell: 7300
+ Weight: 170
+ Atk: 0
+ Matk: 0
+ Def: 350
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ Loc: "EQP_HEAD_MID"
+ WeaponLv: 0
+ EquipLv: 17
+ Refine: false
+ ViewSprite: 1306
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+ Script: <"
+ bonus bDex, 5;
+ ">
+},
+{
+ Id: 1307
+ AegisName: "SilkRobe"
+ Name: "Silk Robe"
+ Type: "IT_ARMOR"
+ Buy: 35000
+ Sell: 2900
+ Weight: 70
+ Atk: 0
+ Matk: 0
+ Def: 100
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ Loc: "EQP_HEAD_MID"
+ WeaponLv: 0
+ EquipLv: 17
+ Refine: false
+ ViewSprite: 1307
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+ Script: <"
+ bonus bInt, 3;
+ bonus bAgi, 1;
+ ">
+},
+{
Id: 1800
AegisName: "LousyMoccasins"
Name: "Lousy Moccasins"
@@ -2807,6 +3441,122 @@ item_db: (
Sprite: 0
},
{
+ Id: 3505
+ AegisName: "TrainingWand"
+ Name: "Training Wand"
+ Type: "IT_WEAPON"
+ Buy: 20000
+ Sell: 1500
+ Weight: 67
+ Atk: 150
+ Matk: 250
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ Loc: ["EQP_HAND_R", "EQP_HAND_L"]
+ WeaponLv: 1
+ EquipLv: 10
+ Refine: false
+ Subtype: "W_STAFF"
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+ Script: <"
+ skill AL_HEAL, 1;
+ bonus bMagicAtkDef, 10;
+ ">
+},
+{
+ Id: 3506
+ AegisName: "ManaTorch"
+ Name: "Mana Torch"
+ Type: "IT_WEAPON"
+ Buy: 12500
+ Sell: 1000
+ Weight: 150
+ Atk: 200
+ Matk: 150
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ Loc: ["EQP_HAND_R", "EQP_HAND_L"]
+ WeaponLv: 1
+ EquipLv: 10
+ Refine: false
+ Subtype: "W_STAFF"
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+ Script: <"
+ skill MG_FIREBALL, 1;
+ bonus bMatkRate, 10;
+ ">
+},
+{
+ Id: 3507
+ AegisName: "Scythe"
+ Name: "Scythe"
+ Type: "IT_WEAPON"
+ Buy: 104800
+ Sell: 1750
+ Weight: 1200
+ Atk: 2000
+ Matk: 0
+ Def: 200
+ Range: 2
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ Loc: ["EQP_HAND_R","EQP_HAND_L"]
+ WeaponLv: 1
+ EquipLv: 15
+ Refine: false
+ Subtype: "W_2HSPEAR"
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
+ Id: 3510
+ AegisName: "Pickaxe"
+ Name: "Pickaxe"
+ Type: "IT_WEAPON"
+ Buy: 17500
+ Sell: 3700
+ Weight: 250
+ Atk: 50
+ Matk: 0
+ Def: 0
+ Range: 0
+ Slots: 0
+ Job: {
+ All: true
+ }
+ Gender: "SEX_ANY"
+ Loc: ["EQP_HAND_R", "EQP_HAND_L"]
+ WeaponLv: 1
+ EquipLv: 15
+ Refine: false
+ Subtype: "W_2HMACE"
+ BindOnEquip: false
+ BuyingStore: true
+ Delay: 0
+ Sprite: 0
+},
+{
Id: 4000
AegisName: "PiouEgg"
Name: "Piou egg"
@@ -3017,6 +3767,144 @@ item_db: (
Loc: "EQP_HEAD_MID"
},
{
+ Id: 5022
+ AegisName: "Diamond"
+ Name: "Diamond"
+ Type: "IT_CARD"
+ Weight: 50
+ Buy: 50000
+ Sell: 6500
+},
+{
+ Id: 5023
+ AegisName: "Ruby"
+ Name: "Ruby"
+ Type: "IT_CARD"
+ Weight: 50
+ Buy: 50000
+ Sell: 6500
+},
+{
+ Id: 5024
+ AegisName: "Emerald"
+ Name: "Emerald"
+ Type: "IT_CARD"
+ Weight: 50
+ Buy: 50000
+ Sell: 6500
+},
+{
+ Id: 5025
+ AegisName: "Sapphire"
+ Name: "Sapphire"
+ Type: "IT_CARD"
+ Weight: 50
+ Buy: 50000
+ Sell: 6500
+},
+{
+ Id: 5026
+ AegisName: "Topaz"
+ Name: "Topaz"
+ Type: "IT_CARD"
+ Weight: 50
+ Buy: 50000
+ Sell: 6500
+},
+{
+ Id: 5027
+ AegisName: "Amethyst"
+ Name: "Amethyst"
+ Type: "IT_CARD"
+ Weight: 50
+ Buy: 50000
+ Sell: 6500
+},
+{
+ Id: 5028
+ AegisName: "CrudeDiamond"
+ Name: "Crude Diamond"
+ Type: "IT_CARD"
+ Weight: 80
+ Buy: 35000
+ Sell: 4000
+ Script: <"
+ bonus bLuk, 2;
+ bonus bDex, -1;
+ ">
+ Loc: "EQP_ACC"
+},
+{
+ Id: 5029
+ AegisName: "CrudeRuby"
+ Name: "Crude Ruby"
+ Type: "IT_CARD"
+ Weight: 80
+ Buy: 35000
+ Sell: 4000
+ Script: <"
+ bonus bStr, 2;
+ bonus bAgi, -1;
+ ">
+ Loc: "EQP_ACC"
+},
+{
+ Id: 5030
+ AegisName: "CrudeEmerald"
+ Name: "Crude Emerald"
+ Type: "IT_CARD"
+ Weight: 80
+ Buy: 35000
+ Sell: 4000
+ Script: <"
+ bonus bDex, 2;
+ bonus bVit, -1;
+ ">
+ Loc: "EQP_ACC"
+},
+{
+ Id: 5031
+ AegisName: "CrudeSapphire"
+ Name: "Crude Sapphire"
+ Type: "IT_CARD"
+ Weight: 80
+ Buy: 35000
+ Sell: 4000
+ Script: <"
+ bonus bInt, 2;
+ bonus bVit, -1;
+ ">
+ Loc: "EQP_ACC"
+},
+{
+ Id: 5032
+ AegisName: "CrudeTopaz"
+ Name: "Crude Topaz"
+ Type: "IT_CARD"
+ Weight: 80
+ Buy: 35000
+ Sell: 4000
+ Script: <"
+ bonus bVit, 2;
+ bonus bLuk, -1;
+ ">
+ Loc: "EQP_ACC"
+},
+{
+ Id: 5033
+ AegisName: "CrudeAmethyst"
+ Name: "Crude Amethyst"
+ Type: "IT_CARD"
+ Weight: 80
+ Buy: 35000
+ Sell: 4000
+ Script: <"
+ bonus bAgi, 2;
+ bonus bStr, -1;
+ ">
+ Loc: "EQP_ACC"
+},
+{
Id: 6000
AegisName: "WoodenBow"
Name: "Wooden Bow"
diff --git a/db/re/job_db.conf b/db/re/job_db.conf
index 14158655..e461e991 100644
--- a/db/re/job_db.conf
+++ b/db/re/job_db.conf
@@ -12,6 +12,8 @@
//============== RE Structure Example ================
/*
Job_Name: { // Job names as in src/map/pc.c (they are hardcoded at the moment so if you want to add a new job you should add it there)
+ BaseExpGroup: "Exp Group Name" (string) // Name of base exp group defined in exp_group_db.conf
+ JobExpGroup: "Exp Group Name" (string) // Name of job exp group defined in exp_group_db.conf
Inherit: ( "Other_Job_Name" ); // Base job from which this job will inherit its max weight, base ASPD set and HP/SP table.
InheritHP: ( "Other_Job_Name" );// Base job from which this job will inherit its HP table.
InheritSP: ( "Other_Job_Name" );// Base job from which this job will inherit its SP table.
@@ -50,6 +52,8 @@ Job_Name: { // Job names as in src/map/pc.c (they are hardcoded at the moment so
*/
//====================================================
Human: {
+ BaseExpGroup: "EvolClasses"
+ JobExpGroup: "EvolClasses"
MoveSpeed: 170
Weight: 20000
BaseASPD: {
@@ -98,6 +102,8 @@ Human: {
}
Ukar: {
+ BaseExpGroup: "EvolClasses"
+ JobExpGroup: "EvolClasses"
MoveSpeed: 170
Weight: 20000
BaseASPD: {
@@ -146,6 +152,8 @@ Ukar: {
}
Demon: {
+ BaseExpGroup: "EvolClasses"
+ JobExpGroup: "EvolClasses"
MoveSpeed: 170
Weight: 20000
BaseASPD: {
@@ -194,6 +202,8 @@ Demon: {
}
Elven: {
+ BaseExpGroup: "EvolClasses"
+ JobExpGroup: "EvolClasses"
MoveSpeed: 170
Weight: 20000
BaseASPD: {
@@ -242,6 +252,8 @@ Elven: {
}
Orc: {
+ BaseExpGroup: "EvolClasses"
+ JobExpGroup: "EvolClasses"
MoveSpeed: 170
Weight: 20000
BaseASPD: {
@@ -290,6 +302,8 @@ Orc: {
}
Raijin: {
+ BaseExpGroup: "EvolClasses"
+ JobExpGroup: "EvolClasses"
MoveSpeed: 170
Weight: 20000
BaseASPD: {
@@ -338,6 +352,8 @@ Raijin: {
}
Tritan: {
+ BaseExpGroup: "EvolClasses"
+ JobExpGroup: "EvolClasses"
MoveSpeed: 170
Weight: 20000
BaseASPD: {
diff --git a/db/re/mob_db.conf b/db/re/mob_db.conf
index 7b54e3ed..c172b76e 100644
--- a/db/re/mob_db.conf
+++ b/db/re/mob_db.conf
@@ -276,7 +276,7 @@ mob_db: (
CastSensorChase: true
ChangeChase: true
}
- MoveSpeed: 100
+ MoveSpeed: 150
AttackDelay: 1872
AttackMotion: 672
DamageMotion: 480
@@ -844,8 +844,8 @@ mob_db: (
},
{
Id: 1019
- SpriteName: "Pumpkish"
- Name: "Pumpkish"
+ SpriteName: "PumpkinMob"
+ Name: "PumpkinMob"
Lv: 1
Hp: 1900
Sp: 0
@@ -874,7 +874,7 @@ mob_db: (
DamageMotion: 480
MvpExp: 0
Drops: {
- PumpkishJuice: 5000
+ PumpkinJuice: 5000
}
},
{
@@ -997,4 +997,1195 @@ mob_db: (
Moss: 800
}
},
+{
+ Id: 1023
+ SpriteName: "mouboo"
+ Name: "Mouboo"
+ Lv: 16
+ Hp: 2600
+ Sp: 0
+ Exp: 50
+ JExp: 0
+ AttackRange: 2
+ Attack: [600, 850]
+ Def: 30
+ Mdef: 5
+ Stats: {
+ Str: 25
+ Agi: 5
+ Vit: 30
+ Int: 1
+ Dex: 5
+ Luk: 35
+ }
+ ViewRange: 1
+ ChaseRange: 20
+ Size: 0
+ Race: 2
+ Element: (1, 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ }
+ MoveSpeed: 300
+ AttackDelay: 3200
+ AttackMotion: 1400
+ DamageMotion: 1200
+ MvpExp: 0
+ Drops: {
+ Pearl: 10
+ }
+},
+{
+ Id: 1024
+ SpriteName: "slime"
+ Name: "Green Slime"
+ Lv: 10
+ Hp: 1200
+ Sp: 0
+ Exp: 30
+ JExp: 0
+ AttackRange: 1
+ Attack: [200, 400]
+ Def: 15
+ Mdef: 0
+ Stats: {
+ Str: 5
+ Agi: 15
+ Vit: 20
+ Int: 1
+ Dex: 35
+ Luk: 10
+ }
+ ViewRange: 2
+ ChaseRange: 8
+ Size: 0
+ Race: 2
+ Element: (1, 1)
+ Mode: {
+ Aggressive: true
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ }
+ MoveSpeed: 1100
+ AttackDelay: 2462
+ AttackMotion: 864
+ DamageMotion: 1026
+ MvpExp: 0
+ Drops: {
+ MaggotSlime: 800
+ HalfEggshell: 200
+ Moss: 400
+ }
+},
+{
+ Id: 1025
+ SpriteName: "slime-littleslime"
+ Name: "Little Green Slime"
+ Lv: 8
+ Hp: 500
+ Sp: 0
+ Exp: 20
+ JExp: 0
+ AttackRange: 1
+ Attack: [150, 250]
+ Def: 5
+ Mdef: 0
+ Stats: {
+ Str: 5
+ Agi: 10
+ Vit: 15
+ Int: 1
+ Dex: 30
+ Luk: 5
+ }
+ ViewRange: 2
+ ChaseRange: 8
+ Size: 0
+ Race: 2
+ Element: (1, 1)
+ Mode: {
+ Aggressive: true
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ }
+ MoveSpeed: 1100
+ AttackDelay: 2462
+ AttackMotion: 864
+ DamageMotion: 1026
+ MvpExp: 0
+ Drops: {
+ MaggotSlime: 550
+ }
+},
+{
+ Id: 1026
+ SpriteName: "Maggot"
+ Name: "Maggot"
+ Lv: 10
+ Hp: 500
+ Sp: 0
+ Exp: 40
+ JExp: 0
+ AttackRange: 1
+ Attack: [200, 300]
+ Def: 15
+ Mdef: 0
+ Stats: {
+ Str: 10
+ Agi: 15
+ Vit: 25
+ Int: 1
+ Dex: 15
+ Luk: 20
+ }
+ ViewRange: 5
+ ChaseRange: 10
+ Size: 0
+ Race: 2
+ Element: (5, 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ }
+ MoveSpeed: 400
+ AttackDelay: 1976
+ AttackMotion: 672
+ DamageMotion: 480
+ MvpExp: 0
+ Drops: {
+ MaggotSlime: 500
+ BugLeg: 600
+ }
+},
+{
+ Id: 1027
+ SpriteName: "CaveMaggot"
+ Name: "Cave Maggot"
+ Lv: 12
+ Hp: 1250
+ Sp: 0
+ Exp: 65
+ JExp: 0
+ AttackRange: 1
+ Attack: [250, 450]
+ Def: 20
+ Mdef: 0
+ Stats: {
+ Str: 10
+ Agi: 18
+ Vit: 20
+ Int: 1
+ Dex: 15
+ Luk: 15
+ }
+ ViewRange: 3
+ ChaseRange: 15
+ Size: 0
+ Race: 2
+ Element: (5, 1)
+ Mode: {
+ Aggressive: true
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ Angry: true
+ }
+ MoveSpeed: 500
+ AttackDelay: 1576
+ AttackMotion: 672
+ DamageMotion: 480
+ MvpExp: 0
+ Drops: {
+ MaggotSlime: 500
+ }
+},
+{
+ Id: 1028
+ SpriteName: "ForestMaggot"
+ Name: "Forest Maggot"
+ Lv: 15
+ Hp: 1500
+ Sp: 0
+ Exp: 75
+ JExp: 0
+ AttackRange: 1
+ Attack: [300, 500]
+ Def: 25
+ Mdef: 0
+ Stats: {
+ Str: 20
+ Agi: 25
+ Vit: 25
+ Int: 1
+ Dex: 20
+ Luk: 20
+ }
+ ViewRange: 5
+ ChaseRange: 12
+ Size: 0
+ Race: 2
+ Element: (5, 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ Angry: true
+ }
+ MoveSpeed: 600
+ AttackDelay: 1676
+ AttackMotion: 672
+ DamageMotion: 480
+ MvpExp: 0
+ Drops: {
+ MaggotSlime: 500
+ }
+},
+{
+ Id: 1029
+ SpriteName: "Bee"
+ Name: "Bee"
+ Lv: 20
+ Hp: 600
+ Sp: 0
+ Exp: 25
+ JExp: 0
+ AttackRange: 1
+ Attack: [250, 450]
+ Def: 30
+ Mdef: 0
+ WalkMask: "WALK_AIR"
+ Stats: {
+ Str: 20
+ Agi: 20
+ Vit: 15
+ Int: 3
+ Dex: 40
+ Luk: 30
+ }
+ ViewRange: 10
+ ChaseRange: 20
+ Size: 0
+ Race: 2
+ Element: (4, 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ ChangeChase: true
+ Assist: true
+ Angry: true
+ SurviveWithoutMaster: false
+ }
+ MoveSpeed: 90
+ AttackDelay: 1600
+ AttackMotion: 1000
+ DamageMotion: 800
+ MvpExp: 0
+ Drops: {
+ }
+},
+{
+ Id: 1030
+ SpriteName: "Pinkie"
+ Name: "Pinkie"
+ Lv: 12
+ Hp: 900
+ Sp: 0
+ Exp: 40
+ JExp: 1
+ AttackRange: 1
+ Attack: [350, 500]
+ Def: 35
+ Mdef: 0
+ Stats: {
+ Str: 5
+ Agi: 10
+ Vit: 15
+ Int: 5
+ Dex: 15
+ Luk: 20
+ }
+ ViewRange: 3
+ ChaseRange: 10
+ Size: 0
+ Race: 2
+ Element: (5, 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ Angry: true
+ }
+ MoveSpeed: 700
+ AttackDelay: 2500
+ AttackMotion: 600
+ DamageMotion: 200
+ MvpExp: 0
+ Drops: {
+ PinkAntennae: 5000
+ }
+},
+{
+ Id: 1031
+ SpriteName: "LogHead"
+ Name: "Log Head"
+ Lv: 15
+ Hp: 1200
+ Sp: 0
+ Exp: 40
+ JExp: 0
+ AttackRange: 1
+ Attack: [200, 300]
+ Def: 40
+ Mdef: 0
+ Stats: {
+ Str: 30
+ Agi: 5
+ Vit: 10
+ Int: 5
+ Dex: 10
+ Luk: 15
+ }
+ ViewRange: 4
+ ChaseRange: 8
+ Size: 0
+ Race: 2
+ Element: (5, 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ Angry: true
+ }
+ MoveSpeed: 1500
+ AttackDelay: 2500
+ AttackMotion: 800
+ DamageMotion: 600
+ MvpExp: 0
+ Drops: {
+ RawLog: 5000
+ }
+},
+{
+ Id: 1032
+ SpriteName: "Butterfly"
+ Name: "Butterfly"
+ Lv: 22
+ Hp: 700
+ Sp: 0
+ Exp: 30
+ JExp: 0
+ AttackRange: 1
+ Attack: [200, 350]
+ Def: 35
+ Mdef: 0
+ WalkMask: "WALK_AIR"
+ Stats: {
+ Str: 5
+ Agi: 30
+ Vit: 15
+ Int: 3
+ Dex: 25
+ Luk: 30
+ }
+ ViewRange: 4
+ ChaseRange: 15
+ Size: 0
+ Race: 2
+ Element: (5, 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ }
+ MoveSpeed: 200
+ AttackDelay: 1600
+ AttackMotion: 700
+ DamageMotion: 850
+ MvpExp: 0
+ Drops: {
+ BugLeg: 5000
+ AlizarinHerb: 1000
+ CobaltHerb: 500
+ MauveHerb: 100
+ }
+},
+{
+ Id: 1033
+ SpriteName: "CloverPatch"
+ Name: "Clover Patch"
+ Lv: 1
+ Hp: 1
+ Sp: 0
+ Exp: 1
+ JExp: 0
+ AttackRange: 1
+ Attack: [0, 0]
+ Def: 1
+ Mdef: 1
+ Stats: {
+ Str: 1
+ Agi: 1
+ Vit: 1
+ Int: 1
+ Dex: 1
+ Luk: 1
+ }
+ ViewRange: 1
+ ChaseRange: 1
+ Size: 1
+ Race: 3
+ Element: (2, 1)
+ Mode: {
+ Plant: true
+ }
+ MoveSpeed: 1
+ AttackDelay: 1
+ AttackMotion: 1
+ DamageMotion: 1
+ Drops: {
+ }
+},
+{
+ Id: 1034
+ SpriteName: "PinkFlower"
+ Name: "Pink Flower"
+ Lv: 15
+ Hp: 500
+ Sp: 0
+ Exp: 45
+ JExp: 0
+ AttackRange: 2
+ Attack: [200, 500]
+ Def: 10
+ Mdef: 10
+ Stats: {
+ Str: 5
+ Agi: 1
+ Vit: 10
+ Int: 10
+ Dex: 20
+ Luk: 40
+ }
+ ViewRange: 8
+ ChaseRange: 12
+ Size: 1
+ Race: 2
+ Element: (2, 1)
+ Mode: {
+ CanAttack: true
+ }
+ MoveSpeed: 100
+ AttackDelay: 250
+ AttackMotion: 750
+ DamageMotion: 550
+ Drops: {
+ }
+},
+{
+ Id: 1035
+ SpriteName: "ManaBug"
+ Name: "Mana Bug"
+ Lv: 15
+ Hp: 450
+ Sp: 0
+ Exp: 15
+ JExp: 0
+ AttackRange: 1
+ Attack: [320, 480]
+ Def: 15
+ Mdef: 0
+ WalkMask: "WALK_AIR"
+ Stats: {
+ Str: 5
+ Agi: 25
+ Vit: 20
+ Int: 1
+ Dex: 20
+ Luk: 20
+ }
+ ViewRange: 3
+ ChaseRange: 15
+ Size: 0
+ Race: 2
+ Element: (5, 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ Assist: true
+ }
+ MoveSpeed: 300
+ AttackDelay: 1800
+ AttackMotion: 500
+ DamageMotion: 700
+ MvpExp: 0
+ Drops: {
+ BugLeg: 10000
+ }
+},
+{
+ Id: 1036
+ SpriteName: "MauvePlant"
+ Name: "Mauve Plant"
+ Lv: 1
+ Hp: 1
+ Sp: 0
+ Exp: 1
+ JExp: 0
+ AttackRange: 1
+ Attack: [0, 0]
+ Def: 1
+ Mdef: 1
+ Stats: {
+ Str: 1
+ Agi: 1
+ Vit: 1
+ Int: 1
+ Dex: 1
+ Luk: 1
+ }
+ ViewRange: 1
+ ChaseRange: 1
+ Size: 1
+ Race: 3
+ Element: (2, 1)
+ Mode: {
+ Plant: true
+ }
+ MoveSpeed: 1
+ AttackDelay: 1
+ AttackMotion: 1
+ DamageMotion: 1
+ Drops: {
+ MauveHerb: 3300
+ MauveHerb: 3300
+ MauveHerb: 2500
+ }
+},
+{
+ Id: 1037
+ SpriteName: "AlizarinPlant"
+ Name: "Alizarin Plant"
+ Lv: 1
+ Hp: 1
+ Sp: 0
+ Exp: 1
+ JExp: 0
+ AttackRange: 1
+ Attack: [0, 0]
+ Def: 1
+ Mdef: 1
+ Stats: {
+ Str: 1
+ Agi: 1
+ Vit: 1
+ Int: 1
+ Dex: 1
+ Luk: 1
+ }
+ ViewRange: 1
+ ChaseRange: 1
+ Size: 1
+ Race: 3
+ Element: (2, 1)
+ Mode: {
+ Plant: true
+ }
+ MoveSpeed: 1
+ AttackDelay: 1
+ AttackMotion: 1
+ DamageMotion: 1
+ Drops: {
+ AlizarinHerb: 3300
+ AlizarinHerb: 3000
+ AlizarinHerb: 2000
+ }
+},
+{
+ Id: 1038
+ SpriteName: "GambogePlant"
+ Name: "Gamboge Plant"
+ Lv: 1
+ Hp: 1
+ Sp: 0
+ Exp: 1
+ JExp: 0
+ AttackRange: 1
+ Attack: [0, 0]
+ Def: 1
+ Mdef: 1
+ Stats: {
+ Str: 1
+ Agi: 1
+ Vit: 1
+ Int: 1
+ Dex: 1
+ Luk: 1
+ }
+ ViewRange: 1
+ ChaseRange: 1
+ Size: 1
+ Race: 3
+ Element: (2, 1)
+ Mode: {
+ Plant: true
+ }
+ MoveSpeed: 1
+ AttackDelay: 1
+ AttackMotion: 1
+ DamageMotion: 1
+ Drops: {
+ GambogeHerb: 3300
+ GambogeHerb: 2500
+ GambogeHerb: 1800
+ }
+},
+{
+ Id: 1039
+ SpriteName: "CobaltPlant"
+ Name: "Cobalt Plant"
+ Lv: 1
+ Hp: 1
+ Sp: 0
+ Exp: 1
+ JExp: 0
+ AttackRange: 1
+ Attack: [0, 0]
+ Def: 1
+ Mdef: 1
+ Stats: {
+ Str: 1
+ Agi: 1
+ Vit: 1
+ Int: 1
+ Dex: 1
+ Luk: 1
+ }
+ ViewRange: 1
+ ChaseRange: 1
+ Size: 1
+ Race: 3
+ Element: (2, 1)
+ Mode: {
+ Plant: true
+ }
+ MoveSpeed: 1
+ AttackDelay: 1
+ AttackMotion: 1
+ DamageMotion: 1
+ Drops: {
+ CobaltHerb: 2500
+ CobaltHerb: 1800
+ CobaltHerb: 1500
+ }
+},
+{
+ Id: 1040
+ SpriteName: "Silkworm"
+ Name: "Silkworm"
+ Lv: 10
+ Hp: 10
+ Sp: 0
+ Exp: 1
+ JExp: 0
+ AttackRange: 1
+ Attack: [1, 10]
+ Def: 5
+ Mdef: 0
+ Stats: {
+ Str: 1
+ Agi: 10
+ Vit: 1
+ Int: 1
+ Dex: 1
+ Luk: 10
+ }
+ ViewRange: 3
+ ChaseRange: 5
+ Size: 0
+ Race: 2
+ Element: (5, 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ }
+ MoveSpeed: 1200
+ AttackDelay: 2500
+ AttackMotion: 1200
+ DamageMotion: 600
+ MvpExp: 0
+ Drops: {
+ SilkCocoon: 4000
+ SilkCocoon: 500
+ }
+},
+{
+ Id: 1041
+ SpriteName: "Squirrel"
+ Name: "Squirrel"
+ Lv: 20
+ Hp: 1300
+ Sp: 0
+ Exp: 30
+ JExp: 0
+ AttackRange: 1
+ Attack: [100, 200]
+ Def: 10
+ Mdef: 0
+ Stats: {
+ Str: 15
+ Agi: 25
+ Vit: 10
+ Int: 5
+ Dex: 25
+ Luk: 25
+ }
+ ViewRange: 1
+ ChaseRange: 12
+ Size: 0
+ Race: 2
+ Element: (5, 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ }
+ MoveSpeed: 350
+ AttackDelay: 895
+ AttackMotion: 750
+ DamageMotion: 600
+ MvpExp: 0
+ Drops: {
+ Acorn: 2500
+ CobaltHerb: 1000
+ MauveHerb: 1000
+ }
+},
+{
+ Id: 1042
+ SpriteName: "GrassSnake"
+ Name: "Grass Snake"
+ Lv: 20
+ Hp: 2000
+ Sp: 0
+ Exp: 85
+ JExp: 3
+ AttackRange: 1
+ Attack: [400, 550]
+ Def: 25
+ Mdef: 0
+ Stats: {
+ Str: 20
+ Agi: 30
+ Vit: 20
+ Int: 1
+ Dex: 50
+ Luk: 20
+ }
+ ViewRange: 1
+ ChaseRange: 15
+ Size: 0
+ Race: 2
+ Element: (1, 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ }
+ MoveSpeed: 400
+ AttackDelay: 800
+ AttackMotion: 400
+ DamageMotion: 380
+ MvpExp: 0
+ Drops: {
+ }
+},
+{
+ Id: 1043
+ SpriteName: "Scorpion"
+ Name: "Scorpion"
+ Lv: 18
+ Hp: 3000
+ Sp: 0
+ Exp: 70
+ JExp: 2
+ AttackRange: 1
+ Attack: [600, 700]
+ Def: 30
+ Mdef: 5
+ Stats: {
+ Str: 25
+ Agi: 15
+ Vit: 40
+ Int: 1
+ Dex: 20
+ Luk: 10
+ }
+ ViewRange: 1
+ ChaseRange: 12
+ Size: 0
+ Race: 2
+ Element: (1, 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ }
+ MoveSpeed: 500
+ AttackDelay: 1250
+ AttackMotion: 800
+ DamageMotion: 500
+ MvpExp: 0
+ Drops: {
+ }
+},
+{
+ Id: 1044
+ SpriteName: "Spider"
+ Name: "Spider"
+ Lv: 22
+ Hp: 1800
+ Sp: 0
+ Exp: 11
+ JExp: 1
+ AttackRange: 1
+ Attack: [350, 650]
+ Def: 25
+ Mdef: 0
+ Stats: {
+ Str: 18
+ Agi: 32
+ Vit: 16
+ Int: 1
+ Dex: 25
+ Luk: 20
+ }
+ ViewRange: 1
+ ChaseRange: 12
+ Size: 0
+ Race: 2
+ Element: (1, 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ }
+ MoveSpeed: 700
+ AttackDelay: 1400
+ AttackMotion: 500
+ DamageMotion: 300
+ MvpExp: 0
+ Drops: {
+ }
+},
+{
+ Id: 1045
+ SpriteName: "DiamondVein"
+ Name: "Diamond Vein"
+ Lv: 1
+ Hp: 1
+ Sp: 0
+ Exp: 1
+ JExp: 0
+ AttackRange: 0
+ Attack: [0, 0]
+ Def: 1
+ Mdef: 1
+ Stats: {
+ Str: 1
+ Agi: 1
+ Vit: 1
+ Int: 1
+ Dex: 1
+ Luk: 1
+ }
+ ViewRange: 1
+ ChaseRange: 1
+ Size: 1
+ Race: 3
+ Element: (2, 1)
+ Mode: {
+ Plant: true
+ }
+ MoveSpeed: 1
+ AttackDelay: 1
+ AttackMotion: 1
+ DamageMotion: 1
+ Drops: {
+ DiamondShard: 500
+ CrudeDiamond: 100
+ }
+ WeaponAttacks: {
+ All: 0
+ 2HMaces: 10000
+ }
+},
+{
+ Id: 1046
+ SpriteName: "GoldVein"
+ Name: "Gold Vein"
+ Lv: 1
+ Hp: 15
+ Sp: 0
+ Exp: 1
+ JExp: 0
+ AttackRange: 0
+ Attack: [0, 0]
+ Def: 1
+ Mdef: 1
+ Stats: {
+ Str: 1
+ Agi: 1
+ Vit: 1
+ Int: 1
+ Dex: 1
+ Luk: 1
+ }
+ ViewRange: 1
+ ChaseRange: 1
+ Size: 1
+ Race: 3
+ Element: (2, 1)
+ Mode: {
+ Plant: true
+ }
+ MoveSpeed: 1
+ AttackDelay: 1
+ AttackMotion: 1
+ DamageMotion: 1
+ Drops: {
+ GoldNuggets: 500
+ }
+ WeaponAttacks: {
+ All: 0
+ 2HMaces: 10000
+ }
+},
+{
+ Id: 1047
+ SpriteName: "IronVein"
+ Name: "Iron Vein"
+ Lv: 1
+ Hp: 15
+ Sp: 0
+ Exp: 1
+ JExp: 0
+ AttackRange: 0
+ Attack: [0, 0]
+ Def: 1
+ Mdef: 1
+ Stats: {
+ Str: 1
+ Agi: 1
+ Vit: 1
+ Int: 1
+ Dex: 1
+ Luk: 1
+ }
+ ViewRange: 1
+ ChaseRange: 1
+ Size: 1
+ Race: 3
+ Element: (2, 1)
+ Mode: {
+ Plant: true
+ }
+ MoveSpeed: 1
+ AttackDelay: 1
+ AttackMotion: 1
+ DamageMotion: 1
+ Drops: {
+ IronOre: 1500
+ }
+ WeaponAttacks: {
+ All: 0
+ 2HMaces: 10000
+ }
+},
+{
+ Id: 1048
+ SpriteName: "CoalVein"
+ Name: "Coal Vein"
+ Lv: 1
+ Hp: 15
+ Sp: 0
+ Exp: 1
+ JExp: 0
+ AttackRange: 0
+ Attack: [0, 0]
+ Def: 1
+ Mdef: 1
+ Stats: {
+ Str: 1
+ Agi: 1
+ Vit: 1
+ Int: 1
+ Dex: 1
+ Luk: 1
+ }
+ ViewRange: 1
+ ChaseRange: 1
+ Size: 1
+ Race: 3
+ Element: (2, 1)
+ Mode: {
+ Plant: true
+ }
+ MoveSpeed: 1
+ AttackDelay: 1
+ AttackMotion: 1
+ DamageMotion: 1
+ Drops: {
+ Coal: 2000
+ }
+ WeaponAttacks: {
+ All: 0
+ 2HMaces: 10000
+ }
+},
+{
+ Id: 1049
+ SpriteName: "SpikyMushroom"
+ Name: "Spiky Mushroom"
+ Lv: 19
+ Hp: 2200
+ Sp: 0
+ Exp: 11
+ JExp: 0
+ AttackRange: 1
+ Attack: [350, 450]
+ Def: 25
+ Mdef: 0
+ Stats: {
+ Str: 10
+ Agi: 5
+ Vit: 35
+ Int: 10
+ Dex: 25
+ Luk: 25
+ }
+ ViewRange: 1
+ ChaseRange: 12
+ Size: 0
+ Race: 2
+ Element: (1, 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ Assist: true
+ }
+ MoveSpeed: 800
+ AttackDelay: 600
+ AttackMotion: 700
+ DamageMotion: 600
+ MvpExp: 0
+ Drops: {
+ HardSpike: 1000
+ }
+},
+{
+ Id: 1050
+ SpriteName: "WickedMushroom"
+ Name: "Wicked Mushroom"
+ Lv: 26
+ Hp: 2700
+ Sp: 0
+ Exp: 11
+ JExp: 0
+ AttackRange: 1
+ Attack: [450, 550]
+ Def: 30
+ Mdef: 15
+ Stats: {
+ Str: 10
+ Agi: 5
+ Vit: 40
+ Int: 10
+ Dex: 25
+ Luk: 25
+ }
+ ViewRange: 1
+ ChaseRange: 12
+ Size: 0
+ Race: 2
+ Element: (1, 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ }
+ MoveSpeed: 800
+ AttackDelay: 600
+ AttackMotion: 700
+ DamageMotion: 600
+ MvpExp: 0
+ Drops: {
+ HardSpike: 2000
+ }
+},
+{
+ Id: 1100
+ SpriteName: "PoisonSkull"
+ Name: "Poison Skull"
+ Lv: 50
+ Hp: 7500
+ Sp: 0
+ Exp: 250
+ JExp: 45
+ AttackRange: 2
+ Attack: [750, 1000]
+ Def: 35
+ Mdef: 0
+ Stats: {
+ Str: 30
+ Agi: 40
+ Vit: 35
+ Int: 35
+ Dex: 45
+ Luk: 15
+ }
+ ViewRange: 8
+ ChaseRange: 15
+ Size: 0
+ Race: 2
+ Element: (5, 1)
+ Mode: {
+ Aggressive: true
+ CanMove: true
+ CanAttack: true
+ CastSensorChase: true
+ ChangeChase: true
+ }
+ MoveSpeed: 800
+ AttackDelay: 1025
+ AttackMotion: 452
+ DamageMotion: 652
+ MvpExp: 0
+ Drops: {
+ }
+},
)
diff --git a/db/re/mob_skill_db.conf b/db/re/mob_skill_db.conf
new file mode 100644
index 00000000..8eaf5ea8
--- /dev/null
+++ b/db/re/mob_skill_db.conf
@@ -0,0 +1,228 @@
+//================= Hercules Database =====================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2018 Hercules Dev Team
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//=========================================================================
+//= Monster Skill Database
+//=========================================================================
+
+mob_skill_db:(
+{
+/**************************************************************************
+ ************* Entry structure ********************************************
+ **************************************************************************
+ <Monster_Constant>: {
+ <Skill_Constant>: {
+ ClearSkills: (boolean, defaults to false) allows cleaning all previous defined skills for the mob.
+ SkillLevel: (int, defaults to 1)
+ SkillState: (int, defaults to 0)
+ SkillTarget: (int, defaults to 0)
+ Rate: (int, defaults to 1)
+ CastTime: (int, defaults to 0)
+ Delay: (int, defaults to 0)
+ Cancelable: (boolean, defaults to false)
+ CastCondition: (int, defaults to 0)
+ ConditionData: (int, defaults to 0)
+ val0: (int, defaults to 0)
+ val1: (int, defaults to 0)
+ val2: (int, defaults to 0)
+ val3: (int, defaults to 0)
+ val4: (int, defaults to 0)
+ Emotion: (int, defaults to 0)
+ ChatMsgID: (int, defaults to 0)
+ }
+ }
+**************************************************************************/
+ Ratto: {
+ NPC_POISON: {
+ SkillState: "MSS_BERSERK"
+ SkillLevel: 20
+ Rate: 500
+ Delay: 500
+ Cancelable: true
+ SkillTarget: "MST_TARGET"
+ CastCondition: "MSC_ALWAYS"
+ }
+ }
+ Blub: {
+ NPC_SUMMONSLAVE: {
+ SkillState: "MSS_ANY"
+ SkillLevel: 4
+ Rate: 10000
+ CastTime: 700
+ Delay: 60000
+ SkillTarget: "MST_SELF"
+ CastCondition: "MSC_SPAWN"
+ val0: 1007
+ }
+ }
+ Crocotree: {
+ NPC_REBIRTH: {
+ SkillState: "MSS_DEAD"
+ SkillLevel: 2
+ Rate: 10000
+ Cancelable: true
+ SkillTarget: "MST_SELF"
+ CastCondition: "MSC_ALWAYS"
+ }
+ NPC_TRANSFORMATION: {
+ SkillState: "MSS_ANY"
+ SkillLevel: 1
+ Rate: 10000
+ CastTime: 700
+ Delay: 60000
+ SkillTarget: "MST_SELF"
+ CastCondition: "MSC_AFTERSKILL"
+ ConditionData: 208
+ val0: 1014
+ }
+ }
+ Frostiana: {
+ NPC_POISON: {
+ SkillState: "MSS_BERSERK"
+ SkillLevel: 5
+ Rate: 1000
+ Delay: 2000
+ Cancelable: true
+ SkillTarget: "MST_TARGET"
+ CastCondition: "MSC_ALWAYS"
+ }
+ }
+ Pikpik: {
+ NPC_SELFDESTRUCTION: {
+ SkillState: "MSS_BERSERK"
+ SkillLevel: 1
+ Rate: 10000
+ CastTime: 1000
+ SkillTarget: "MST_SELF"
+ CastCondition: "MSC_ALWAYS"
+ }
+ NPC_SELFDESTRUCTION: {
+ SkillState: "MSS_RUSH"
+ SkillLevel: 1
+ Rate: 2000
+ CastTime: 1000
+ SkillTarget: "MST_SELF"
+ CastCondition: "MSC_ALWAYS"
+ }
+ }
+ CroconutMob: {
+ NPC_SUICIDE: {
+ SkillState: "MSS_ANY"
+ SkillLevel: 1
+ Rate: 10000
+ CastTime: 1000
+ SkillTarget: "MST_SELF"
+ CastCondition: "MSC_ALWAYS"
+ }
+ }
+ Tipiu: {
+ NPC_SUMMONSLAVE: {
+ SkillState: "MSS_IDLE"
+ SkillLevel: 6
+ Rate: 10000
+ SkillTarget: "MST_SELF"
+ CastCondition: "MSC_SPAWN"
+ val0: 1003
+ }
+ NPC_SUMMONSLAVE: {
+ SkillState: "MSS_BERSERK"
+ SkillLevel: 2
+ Rate: 2000
+ CastTime: 700
+ Delay: 10000
+ SkillTarget: "MST_SELF"
+ CastCondition: "MSC_SLAVELE"
+ ConditionData: 5
+ val0: 1003
+ }
+ NPC_SUMMONSLAVE: {
+ SkillState: "MSS_IDLE"
+ SkillLevel: 2
+ Rate: 7000
+ CastTime: 700
+ Delay: 10000
+ SkillTarget: "MST_SELF"
+ CastCondition: "MSC_SLAVELE"
+ ConditionData: 5
+ val0: 1003
+ }
+ }
+ Tipiou: {
+ NPC_SUMMONSLAVE: {
+ SkillState: "MSS_IDLE"
+ SkillLevel: 5
+ Rate: 10000
+ SkillTarget: "MST_SELF"
+ CastCondition: "MSC_SPAWN"
+ val0: 1002
+ }
+ NPC_SUMMONSLAVE: {
+ SkillState: "MSS_BERSERK"
+ SkillLevel: 2
+ Rate: 2000
+ CastTime: 700
+ Delay: 10000
+ SkillTarget: "MST_SELF"
+ CastCondition: "MSC_SLAVELE"
+ ConditionData: 4
+ val0: 1002
+ }
+ NPC_SUMMONSLAVE: {
+ SkillState: "MSS_IDLE"
+ SkillLevel: 2
+ Rate: 7000
+ CastTime: 700
+ Delay: 10000
+ SkillTarget: "MST_SELF"
+ CastCondition: "MSC_SLAVELE"
+ ConditionData: 4
+ val0: 1002
+ }
+ }
+ slime: {
+ NPC_SUMMONMONSTER: {
+ SkillState: "MSS_DEAD"
+ SkillLevel: 2
+ Rate: 10000
+ SkillTarget: "MST_SELF"
+ CastCondition: "MSC_ALWAYS"
+ ConditionData: 2
+ val0: 1025
+ }
+ }
+ PoisonSkull: {
+ NPC_POISON: {
+ SkillState: "MSS_BERSERK"
+ SkillLevel: 20
+ Rate: 2500
+ Delay: 100
+ Cancelable: true
+ SkillTarget: "MST_TARGET"
+ CastCondition: "MSC_ALWAYS"
+ }
+ }
+}
+)
+
diff --git a/db/re/mob_skill_db.txt b/db/re/mob_skill_db.txt
index 8a325296..1af2555e 100644
--- a/db/re/mob_skill_db.txt
+++ b/db/re/mob_skill_db.txt
@@ -1,4 +1,4 @@
-// Mob Skill Database
+// Mob Skill Database
// Based on Aegis Episode 14.2
//
// Structure of Database:
@@ -53,7 +53,6 @@
// -1: added for all boss types.
// -2: added for all normal types.
// -4: added for all mobs.
-
//id,name@skill,state,skillid,skilllevel,rate,casttime,delay,cancel,target,cond1,cond2,val0,val1,val2,val3,val4,emotion,chat
1005,Ratto@NPC_POISON,attack,176,20,500,0,500,yes,target,always,0,,,,,,,
1008,Blub@NPC_SUMMONSLAVE,any,196,4,10000,700,60000,no,self,onspawn,0,1007,,,,,,
@@ -69,3 +68,7 @@
1016,Tipiou@NPC_SUMMONSLAVE,idle,196,5,10000,0,0,no,self,onspawn,0,1002,,,,,,
1016,Tipiou@NPC_SUMMONSLAVE,attack,196,2,2000,700,10000,no,self,slavele,4,1002,,,,,,
1016,Tipiou@NPC_SUMMONSLAVE,idle,196,2,7000,700,10000,no,self,slavele,4,1002,,,,,,
+1024,Green Slime@NPC_SUMMONMONSTER,dead,209,2,10000,0,0,no,self,always,2,1025,,,,,,
+1029,Bee@NPC_POISON,attack,176,20,1000,0,500,yes,anytarget,always,0,0,10,,,,,
+1034,PinkFlower@NPC_SUMMONSLAVE,any,196,1,2000,1000,10000,no,self,slavelt,4,1029,,,,,,
+1100,PoisonSkull@NPC_POISON,attack,176,20,2500,0,100,yes,target,always,0,,,,,,,
diff --git a/db/re/pet_db.conf b/db/re/pet_db.conf
new file mode 100644
index 00000000..25535bf1
--- /dev/null
+++ b/db/re/pet_db.conf
@@ -0,0 +1,95 @@
+//================= Hercules Database =====================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2018 Hercules Dev Team
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//=========================================================================
+//= Pets Database
+//=========================================================================
+
+pet_db:(
+/**************************************************************************
+ ************* Entry structure ********************************************
+ **************************************************************************
+{
+ // ================ Mandatory fields ==============================
+ Id: ID (int)
+ SpriteName: "Sprite_Name" (string)
+ Name: "Pet Name" (string)
+ // ================ Optional fields ===============================
+ TamingItem: Taming Item (string, defaults to 0)
+ EggItem: Egg Id (string, defaults to 0)
+ AccessoryItem: Equipment Id (string, defaults to 0)
+ FoodItem: Food Id (string, defaults to 0)
+ FoodEffectiveness: hunger points (int, defaults to 0)
+ HungerDelay: hunger time (int, defaults to 0)
+ Intimacy: {
+ Initial: start intimacy (int, defaults to 0)
+ FeedIncrement: feeding intimacy (int, defaults to 0)
+ OverFeedDecrement: overfeeding intimacy (int, defaults to 0)
+ OwnerDeathDecrement: owner die intimacy (int, defaults to 0)
+ }
+ CaptureRate: capture rate (int, defaults to 0)
+ Speed: speed (int, defaults to 0)
+ SpecialPerformance: true/false (boolean, defaults to false)
+ TalkWithEmotes: convert talk (boolean, defaults to false)
+ AttackRate: attack rate (int, defaults to 0)
+ DefendRate: Defence attack (int, defaults to 0)
+ ChangeTargetRate: change target (int, defaults to 0)
+ Evolve: {
+ EggID: { (string, Evolved Pet EggID)
+ Name: Amount (items required to perform evolution)
+ ...
+ }
+ }
+ AutoFeed: true/false (boolean, defaults to false)
+ PetScript: <" Pet Script (can also be multi-line) ">
+ EquipScript: <" Equip Script (can also be multi-line) ">
+},
+**************************************************************************/
+
+{
+ Id: 1002
+ SpriteName: "Piou"
+ Name: "Piou"
+ TamingItem: "PiouFeathers"
+ EggItem: "PiouEgg"
+ FoodItem: "Piberries"
+ FoodEffectiveness: 80
+ HungerDelay: 60
+ Intimacy: {
+ Initial: 250
+ FeedIncrement: 50
+ OverFeedDecrement: 100
+ OwnerDeathDecrement: 20
+ }
+ CaptureRate: 1000
+ Speed: 150
+ SpecialPerformance: true
+ AttackRate: 350
+ DefendRate: 400
+ ChangeTargetRate: 800
+ PetScript: <" petloot 10; ">
+ EquipScript: <" bonus bLuk,2; bonus bCritical,1; ">
+},
+)
diff --git a/db/re/pet_db.txt b/db/re/pet_db.txt
deleted file mode 100644
index 7446b4cd..00000000
--- a/db/re/pet_db.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-// Pet Database
-//
-// Structure of Database:
-// MobID,Name,JName,LureID,EggID,EquipID,FoodID,Fullness,HungryDelay,R_Hungry,R_Full,Intimate,Die,Capture,Speed,S_Performance,talk_convert_class,attack_rate,defence_attack_rate,change_target_rate,pet_script,loyal_script
-//
-// 01. MobID Monster ID of the pet.
-// 02. Name Name of the monster as defined in the database.
-// 03. JName The display name of the monster when hatched.
-// 04. LureID Pet Tame Item ID.
-// 05. EggID Pet Egg ID.
-// 06. EquipID Pet Accessory ID.
-// 07. FoodID Pet Food ID.
-// 08. Fullness The amount Hunger is decreased every [HungryDelay] seconds.
-// 09. HungryDelay The amount of time it takes for hunger to decrease after feeding. (Default: 60 seconds)
-// 10. R_Hungry Amount of Intimacy that is increased when fed.
-// 11. R_Full Amount of Intimacy that is decreased when over-fed.
-// 12. Intimate Amount of Intimacy the pet starts with.
-// 13. Die Amount of Intimacy that is decreased when the pet owner dies.
-// 14. Capture Capture succes rate (10000 = 100%)
-// 15. Speed Pet's walk speed. (Defaul: 150)
-// 16. S_Performance Special Performance. (Yes = 1, No = 0)
-// 17. talk_convert_class Disables pet talk (instead of talking they emote with /!.)
-// 18. attack_rate Rate of which the pet will attack (requires at least pet_support_min_friendly intimacy).
-// 19. defence_attack_rate Rate of which the pet will retaliate when master is being attacked (requires at least pet_support_min_friendly intimacy).
-// 20. change_target_rate Rate of which the pet will change its attack target.
-// 21. pet_script Script to execute when the pet is hatched.
-// 22. loyal_script Script to execute when the pet is hatched (requires at least pet_equip_min_friendly intimacy, independent of pet_script).
-//NOTE: The max value (100%) of attack_rate, defense_rate & change_target_rate is 10000.
-
-//In theory you can use any valid script, but it is run only once upon pet
-//loading, so it is recommended you use the specific pet scripts:
-
-//petskillattack skillid, skilllv, hits, rate, bonusrate
-//Skill attack that triggers while the pet is attacking. Rate is the base
-//chance of execution per attack. Bonusrate is an additional success rate when
-//intimacy reaches max. If hits is specified and different than 0, it will make
-//the pet cast the skill with a fixed amount of damage inflicted and the
-//specified number of hits. A value of zero uses the skill's defaults.
-
-//petskillsupport skillid, skilllv, delay, hp%, sp%
-//Casts a support skill when the health levels are below the specified hp% and
-//sp%. Delay is the minimum time in seconds before the skill can be cast again
-
-//petrecovery type, delay: Cures the "type" status effect after "delay" seconds
-
-//petskillbonus type, value, duration, delay
-//Gives bonus stats. Type is the stat to increase (bStr, bLuk), value is the
-//amount by which it is increased, duration signals how long the bonus lasts
-//delay is the time elapsed after the bonus ends and before it starts again.
-
-//A single pet can have petloot, petskillbonus, petskillattack and
-//petskillsupport at the same time, but only one of each.
-
-1002,Piou,Piou,701,4000,0,507,80,60,50,100,250,20,1000,150,1,0,350,400,800,{ petloot 10; },{ bonus bLuk,2; bonus bCritical,1; }
diff --git a/db/stylist_db.conf b/db/stylist_db.conf
new file mode 100644
index 00000000..e857df97
--- /dev/null
+++ b/db/stylist_db.conf
@@ -0,0 +1,266 @@
+//================= Hercules Database =====================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2018 Hercules Dev Team
+//= Copyright (C) 2018 Asheraf
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//=========================================================================
+//= Stylist Database
+//=========================================================================
+
+stylist_db: (
+ /**************************************************************************
+ ************* Entry structure ********************************************
+ **************************************************************************
+{
+ // ================ Mandatory fields ==============================
+ Type: TYPE (int)
+ Id: ID (int)
+ // ================ Optional fields ===============================
+ Zeny: zeny (int, defaults to 0)
+ ItemID: ItemID (int, defaults to 0)
+ BoxItemID: BoxItemID (int, defaults to 0)
+},
+**************************************************************************/
+{
+ Type: "LOOK_HAIR_COLOR"
+ Id: 1
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR_COLOR"
+ Id: 2
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR_COLOR"
+ Id: 3
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR_COLOR"
+ Id: 4
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR_COLOR"
+ Id: 5
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR_COLOR"
+ Id: 6
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR_COLOR"
+ Id: 7
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR_COLOR"
+ Id: 8
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 1
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 2
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 3
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 4
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 5
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 6
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 7
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 8
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 9
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 10
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 11
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 12
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 13
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 14
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 15
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 16
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 17
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 18
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 19
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 20
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 21
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 22
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 23
+ Zeny: 100000
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 24
+// ItemID: "New_Style_Coupon"
+// BoxItemID: "Beauty_Gift_Box"
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 25
+// ItemID: "New_Style_Coupon"
+// BoxItemID: "Beauty_Gift_Box"
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 26
+// ItemID: "New_Style_Coupon"
+// BoxItemID: "Beauty_Gift_Box"
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 27
+// ItemID: "New_Style_Coupon"
+// BoxItemID: "Beauty_Gift_Box"
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 28
+// ItemID: "Cash_Hair_Coupon"
+// BoxItemID: "Jeremy_Beauty_Coupon_Box"
+},
+{
+ Type: "LOOK_HAIR"
+ Id: 29
+// ItemID: "Cash_Hair_Coupon"
+// BoxItemID: "Jeremy_Beauty_Coupon_Box"
+},
+{
+ Type: "LOOK_CLOTHES_COLOR"
+ Id: 1
+// ItemID: "Clothing_Dye_Coupon2"
+// BoxItemID: "Clothing_Dye_Orig_Box"
+},
+{
+ Type: "LOOK_CLOTHES_COLOR"
+ Id: 2
+// ItemID: "Clothing_Dye_Coupon"
+// BoxItemID: "Clothing_Dye_Box"
+},
+{
+ Type: "LOOK_CLOTHES_COLOR"
+ Id: 3
+// ItemID: "Clothing_Dye_Coupon"
+// BoxItemID: "Clothing_Dye_Box"
+},
+{
+ Type: "LOOK_BODY2"
+ Id: 0
+// ItemID: "Costume_Change_Ticket"
+// BoxItemID: "Costume_Change_Ticket"
+},
+{
+ Type: "LOOK_BODY2"
+ Id: 1
+// ItemID: "Costume_Change_Ticket"
+// BoxItemID: "Costume_Change_Ticket"
+},
+)
diff --git a/maps/re/001-1.mcache b/maps/re/001-1.mcache
index 94958052..81abdd29 100644
--- a/maps/re/001-1.mcache
+++ b/maps/re/001-1.mcache
Binary files differ
diff --git a/maps/re/008-1-1.mcache b/maps/re/008-1-1.mcache
new file mode 100644
index 00000000..6365fa18
--- /dev/null
+++ b/maps/re/008-1-1.mcache
Binary files differ
diff --git a/maps/re/008-1.mcache b/maps/re/008-1.mcache
index 6e2bd3ec..e8534b08 100644
--- a/maps/re/008-1.mcache
+++ b/maps/re/008-1.mcache
Binary files differ
diff --git a/maps/re/008-2-0.mcache b/maps/re/008-2-0.mcache
index 51e8a084..bdb96896 100644
--- a/maps/re/008-2-0.mcache
+++ b/maps/re/008-2-0.mcache
Binary files differ
diff --git a/maps/re/008-2-1.mcache b/maps/re/008-2-1.mcache
index 5543a3d4..6654e8c1 100644
--- a/maps/re/008-2-1.mcache
+++ b/maps/re/008-2-1.mcache
Binary files differ
diff --git a/maps/re/008-2-10.mcache b/maps/re/008-2-10.mcache
index 363ae803..cd535de5 100644
--- a/maps/re/008-2-10.mcache
+++ b/maps/re/008-2-10.mcache
Binary files differ
diff --git a/maps/re/008-2-11.mcache b/maps/re/008-2-11.mcache
index 8072bc4b..d3e21e0d 100644
--- a/maps/re/008-2-11.mcache
+++ b/maps/re/008-2-11.mcache
Binary files differ
diff --git a/maps/re/008-2-13.mcache b/maps/re/008-2-13.mcache
index b07044b2..0902d3d9 100644
--- a/maps/re/008-2-13.mcache
+++ b/maps/re/008-2-13.mcache
Binary files differ
diff --git a/maps/re/008-2-14.mcache b/maps/re/008-2-14.mcache
index 15d75da6..6b37a0b8 100644
--- a/maps/re/008-2-14.mcache
+++ b/maps/re/008-2-14.mcache
Binary files differ
diff --git a/maps/re/008-2-15.mcache b/maps/re/008-2-15.mcache
new file mode 100644
index 00000000..8325f8a4
--- /dev/null
+++ b/maps/re/008-2-15.mcache
Binary files differ
diff --git a/maps/re/008-2-16.mcache b/maps/re/008-2-16.mcache
new file mode 100644
index 00000000..d8595f6d
--- /dev/null
+++ b/maps/re/008-2-16.mcache
Binary files differ
diff --git a/maps/re/008-2-17.mcache b/maps/re/008-2-17.mcache
new file mode 100644
index 00000000..24999eff
--- /dev/null
+++ b/maps/re/008-2-17.mcache
Binary files differ
diff --git a/maps/re/008-2-18.mcache b/maps/re/008-2-18.mcache
new file mode 100644
index 00000000..e00a0398
--- /dev/null
+++ b/maps/re/008-2-18.mcache
Binary files differ
diff --git a/maps/re/008-2-19.mcache b/maps/re/008-2-19.mcache
new file mode 100644
index 00000000..b58aa4b7
--- /dev/null
+++ b/maps/re/008-2-19.mcache
Binary files differ
diff --git a/maps/re/008-2-2.mcache b/maps/re/008-2-2.mcache
index 9bdc0fcb..b98e0800 100644
--- a/maps/re/008-2-2.mcache
+++ b/maps/re/008-2-2.mcache
Binary files differ
diff --git a/maps/re/008-2-20.mcache b/maps/re/008-2-20.mcache
new file mode 100644
index 00000000..b7492f56
--- /dev/null
+++ b/maps/re/008-2-20.mcache
Binary files differ
diff --git a/maps/re/008-2-21.mcache b/maps/re/008-2-21.mcache
new file mode 100644
index 00000000..7630549e
--- /dev/null
+++ b/maps/re/008-2-21.mcache
Binary files differ
diff --git a/maps/re/008-2-22.mcache b/maps/re/008-2-22.mcache
new file mode 100644
index 00000000..7cfae81f
--- /dev/null
+++ b/maps/re/008-2-22.mcache
Binary files differ
diff --git a/maps/re/008-2-23.mcache b/maps/re/008-2-23.mcache
new file mode 100644
index 00000000..2dcc5c43
--- /dev/null
+++ b/maps/re/008-2-23.mcache
Binary files differ
diff --git a/maps/re/008-2-24.mcache b/maps/re/008-2-24.mcache
new file mode 100644
index 00000000..1933cbb8
--- /dev/null
+++ b/maps/re/008-2-24.mcache
Binary files differ
diff --git a/maps/re/008-2-25.mcache b/maps/re/008-2-25.mcache
new file mode 100644
index 00000000..1c116049
--- /dev/null
+++ b/maps/re/008-2-25.mcache
Binary files differ
diff --git a/maps/re/008-2-26.mcache b/maps/re/008-2-26.mcache
new file mode 100644
index 00000000..3ca6be75
--- /dev/null
+++ b/maps/re/008-2-26.mcache
Binary files differ
diff --git a/maps/re/008-2-27.mcache b/maps/re/008-2-27.mcache
new file mode 100644
index 00000000..a54398f8
--- /dev/null
+++ b/maps/re/008-2-27.mcache
Binary files differ
diff --git a/maps/re/008-2-28.mcache b/maps/re/008-2-28.mcache
new file mode 100644
index 00000000..453e9876
--- /dev/null
+++ b/maps/re/008-2-28.mcache
Binary files differ
diff --git a/maps/re/008-2-29.mcache b/maps/re/008-2-29.mcache
new file mode 100644
index 00000000..8bbde76d
--- /dev/null
+++ b/maps/re/008-2-29.mcache
Binary files differ
diff --git a/maps/re/008-2-3.mcache b/maps/re/008-2-3.mcache
index 12b2e69d..a98d06bb 100644
--- a/maps/re/008-2-3.mcache
+++ b/maps/re/008-2-3.mcache
Binary files differ
diff --git a/maps/re/008-2-30.mcache b/maps/re/008-2-30.mcache
new file mode 100644
index 00000000..ff3ca8a6
--- /dev/null
+++ b/maps/re/008-2-30.mcache
Binary files differ
diff --git a/maps/re/008-2-4.mcache b/maps/re/008-2-4.mcache
index 47c7ea73..570f946b 100644
--- a/maps/re/008-2-4.mcache
+++ b/maps/re/008-2-4.mcache
Binary files differ
diff --git a/maps/re/008-2-5.mcache b/maps/re/008-2-5.mcache
index b304a417..1ac9bbcf 100644
--- a/maps/re/008-2-5.mcache
+++ b/maps/re/008-2-5.mcache
Binary files differ
diff --git a/maps/re/008-2-6.mcache b/maps/re/008-2-6.mcache
index ca05dd43..043f96de 100644
--- a/maps/re/008-2-6.mcache
+++ b/maps/re/008-2-6.mcache
Binary files differ
diff --git a/maps/re/008-2-7.mcache b/maps/re/008-2-7.mcache
index 64611ee9..0b7077d0 100644
--- a/maps/re/008-2-7.mcache
+++ b/maps/re/008-2-7.mcache
Binary files differ
diff --git a/maps/re/008-2-8.mcache b/maps/re/008-2-8.mcache
index 14dabe85..5e377c0f 100644
--- a/maps/re/008-2-8.mcache
+++ b/maps/re/008-2-8.mcache
Binary files differ
diff --git a/maps/re/008-2-9.mcache b/maps/re/008-2-9.mcache
index e92ecc66..7cfae81f 100644
--- a/maps/re/008-2-9.mcache
+++ b/maps/re/008-2-9.mcache
Binary files differ
diff --git a/maps/re/008-3-1.mcache b/maps/re/008-3-1.mcache
new file mode 100644
index 00000000..6dbdd57c
--- /dev/null
+++ b/maps/re/008-3-1.mcache
Binary files differ
diff --git a/npc/000-0/sailors.txt b/npc/000-0/sailors.txt
index 160b4327..1adcb678 100644
--- a/npc/000-0/sailors.txt
+++ b/npc/000-0/sailors.txt
@@ -15,17 +15,17 @@ OnTouch:
if (.@lang >= 0 && .@lang <= 9) Lang = .@lang;
mesn "Narrator";
- mes col(l("You are on a raft, adrift in the sea."), 9);
+ mesc(l("You are on a raft, adrift in the sea."), 9);
next;
- mes col(l("With hunger, thirst, and sleep as your only companions, you have the disturbing realization that you can't remember anything of your former life or identity."), 9);
+ mesc(l("With hunger, thirst, and sleep as your only companions, you have the disturbing realization that you can't remember anything of your former life or identity."), 9);
next;
- mes col(l("All of a sudden, you hear voices from above."), 9);
+ mesc(l("All of a sudden, you hear voices from above."), 9);
next;
- mes col(l("Your body aches, even your hair hurts, and the bright daylight is painful."), 9);
+ mesc(l("Your body aches, even your hair hurts, and the bright daylight is painful."), 9);
next;
- mes col(l("But still, you open your eyes and see a large ship before you!"), 9);
+ mesc(l("But still, you open your eyes and see a large ship before you!"), 9);
next;
- mes col(l("Aboard stand sailors trying to communicate with you."), 9);
+ mesc(l("Aboard stand sailors trying to communicate with you."), 9);
next;
setcamnpc "Sailors", -64, -32;
@@ -64,9 +64,9 @@ OnTouch:
restorecam;
mesn "Narrator";
- mes col(l("The sailors take you aboard their ship."), 9);
+ mesc(l("The sailors take you aboard their ship."), 9);
next;
- mes col(l("Click on the NPCs (Non-Player Characters) around you to continue the introduction."), 9);
+ mesc(l("Click on the NPCs (Non-Player Characters) around you to continue the introduction."), 9);
next;
warp "000-0-0", 26, 28;
diff --git a/npc/000-1/couwan.txt b/npc/000-1/couwan.txt
index 0d231706..092b7aaa 100644
--- a/npc/000-1/couwan.txt
+++ b/npc/000-1/couwan.txt
@@ -78,10 +78,10 @@
inventoryplace FishBox, 1;
mesn "Narrator";
- mes col(l("Couwan hands you a box full of fish."), 9);
+ mesc(l("Couwan hands you a box full of fish."), 9);
getitem FishBox, 1;
next;
- mes col(l("The sailor turns his back to you."), 9);
+ mesc(l("The sailor turns his back to you."), 9);
setq ShipQuests_Couwan, 1;
break;
diff --git a/npc/000-1/panels.txt b/npc/000-1/panels.txt
index 71097fa3..93f25beb 100644
--- a/npc/000-1/panels.txt
+++ b/npc/000-1/panels.txt
@@ -7,9 +7,9 @@
000-1,65,93,0 script #panel1 NPC_NO_SPRITE,{
mesn "Narrator";
- mes col(l("Your heart quickens as your gaze focuses upon a small wooden panel, partly obscured under a layer of wind-blown sand."), 9);
+ mesc(l("Your heart quickens as your gaze focuses upon a small wooden panel, partly obscured under a layer of wind-blown sand."), 9);
next;
- mes col(l("You wipe off enough of the sand to manage to read the message written on this crude piece of wood."), 9);
+ mesc(l("You wipe off enough of the sand to manage to read the message written on this crude piece of wood."), 9);
next;
mesq l("It's a dangerous place out here. Beware of the mischievous creatures living here!");
next;
@@ -27,9 +27,9 @@ OnInit:
000-1,89,51,0 script #panel2 NPC_NO_SPRITE,{
mesn "Narrator";
- mes col(l("This panel looks in rather good shape, as though some people take care of it regularly. Maybe it has important information."), 9);
+ mesc(l("This panel looks in rather good shape, as though some people take care of it regularly. Maybe it has important information."), 9);
next;
- mes col(l("You can read some lines that are nicely carved into the soft wooden planks."), 9);
+ mesc(l("You can read some lines that are nicely carved into the soft wooden planks."), 9);
next;
mesq l("The further you go, the more experience you will get, so here's a small description of all the stats you can upgrade with time. But note that these will probably change in the future and have more complex effects.");
next;
diff --git a/npc/000-1/silvio.txt b/npc/000-1/silvio.txt
index fd3c8c8b..7c19bc5a 100644
--- a/npc/000-1/silvio.txt
+++ b/npc/000-1/silvio.txt
@@ -131,7 +131,7 @@ L_Artis:
L_ForeverAlone:
mes "";
mesn "Narrator";
- mes col(l("Silvio starts to speak to his bottle, you leave, letting him have a private conversation."), 9);
+ mesc(l("Silvio starts to speak to his bottle, you leave, letting him have a private conversation."), 9);
close;
diff --git a/npc/000-2-0/billybons.txt b/npc/000-2-0/billybons.txt
index 23e056a8..1ca803dc 100644
--- a/npc/000-2-0/billybons.txt
+++ b/npc/000-2-0/billybons.txt
@@ -13,7 +13,7 @@
next;
mesn "Narrator";
- mes col(l("The sailor chugs his beer."), 9);
+ mesc(l("The sailor chugs his beer."), 9);
next;
select
@@ -85,7 +85,7 @@ L_Quit:
next;
mesn "Narrator";
- mes col(l("The sailor turns his back to you."), 9);
+ mesc(l("The sailor turns his back to you."), 9);
close;
diff --git a/npc/000-2-0/doors.txt b/npc/000-2-0/doors.txt
index dd65645c..a60b0c80 100644
--- a/npc/000-2-0/doors.txt
+++ b/npc/000-2-0/doors.txt
@@ -40,7 +40,7 @@ OnTouch:
next;
mesn "Narrator";
- mes col(l("Captain Nard is in the room to your right."), 9);
+ mesc(l("Captain Nard is in the room to your right."), 9);
next;
restorecam;
diff --git a/npc/000-2-1/alige.txt b/npc/000-2-1/alige.txt
index 48a05e76..27f9b6d5 100644
--- a/npc/000-2-1/alige.txt
+++ b/npc/000-2-1/alige.txt
@@ -71,7 +71,7 @@ OnFirstEncounter:
mes "";
mesn "Narrator";
- mes col(l("The stowaway doesn't answer."), 9);
+ mesc(l("The stowaway doesn't answer."), 9);
close;
@@ -184,7 +184,7 @@ L_GiveFood:
rif(countitem(PumpkinSeeds), l(getitemname(PumpkinSeeds))), 1,
rif(countitem(UrchinMeat), l(getitemname(UrchinMeat))), 1,
rif(countitem(EasterEgg), l(getitemname(EasterEgg))), 1,
- rif(countitem(PumpkishJuice), l(getitemname(PumpkishJuice))), 527,
+ rif(countitem(PumpkinJuice), l(getitemname(PumpkinJuice))), 527,
rif(countitem(Manana), l(getitemname(Manana))), 528,
rif(countitem(Curshroom), l(getitemname(Curshroom))), 529,
rif(countitem(Carrot), l(getitemname(Carrot))), 530,
@@ -299,9 +299,9 @@ L_FindFood:
next;
restorecam;
mesn "Narrator";
- mes col(l("You can attack a monster by clicking on it, or from your keyboard you can press the 'A' key to select the monster followed by 'Ctrl' to attack it."), 9);
+ mesc(l("You can attack a monster by clicking on it, or from your keyboard you can press the 'A' key to select the monster followed by 'Ctrl' to attack it."), 9);
next;
- mes col(l("Once the monster is dead, click on the dropped items to add them to your inventory. You can also use the 'Z' key to claim the drops."), 9);
+ mesc(l("Once the monster is dead, click on the dropped items to add them to your inventory. You can also use the 'Z' key to claim the drops."), 9);
close;
diff --git a/npc/000-2-1/arpan.txt b/npc/000-2-1/arpan.txt
index 35d1edfa..4af849c4 100644
--- a/npc/000-2-1/arpan.txt
+++ b/npc/000-2-1/arpan.txt
@@ -111,11 +111,11 @@ OnClothNotTaken:
OnEquip:
mesn "Narrator";
- mes col(l("To open your inventory, use the F3 key or use your mouse to select it in the above menu in your client."), 9);
+ mesc(l("To open your inventory, use the F3 key or use your mouse to select it in the above menu in your client."), 9);
next;
- mes col(l("When your inventory is open, you can equip an item by selecting it and clicking 'Equip'. You can do the same to remove an item by clicking on 'Unequip'."), 9);
+ mesc(l("When your inventory is open, you can equip an item by selecting it and clicking 'Equip'. You can do the same to remove an item by clicking on 'Unequip'."), 9);
next;
- mes col(l("Items have different effects. Some will heal you, some can be used as weapons or armor, and some can be sold for gold."), 9);
+ mesc(l("Items have different effects. Some will heal you, some can be used as weapons or armor, and some can be sold for gold."), 9);
close;
@@ -177,7 +177,7 @@ L_Julia:
next;
mesn "Narrator";
- mes col(l("Julia is on the upper level of the ship, use the arrow keys to walk to the stairs or click on the stairs at the top right of your screen."), 9);
+ mesc(l("Julia is on the upper level of the ship, use the arrow keys to walk to the stairs or click on the stairs at the top right of your screen."), 9);
next;
goto L_Menu;
@@ -225,11 +225,11 @@ L_WhatCloth:
next;
mesn "Narrator";
- mes col(l("To open your inventory, use the F3 key or use your mouse to select it in the above menu in your client."), 9);
+ mesc(l("To open your inventory, use the F3 key or use your mouse to select it in the above menu in your client."), 9);
next;
- mes col(l("When your inventory is open, you can equip an item by selecting it and clicking 'Equip'. You can do the same to unequip an item by clicking on 'Unequip'."), 9);
+ mesc(l("When your inventory is open, you can equip an item by selecting it and clicking 'Equip'. You can do the same to unequip an item by clicking on 'Unequip'."), 9);
next;
- mes col(l("Items have different effects. Some will heal you, some can be used as weapons or armor, and some can be sold for gold."), 9);
+ mesc(l("Items have different effects. Some will heal you, some can be used as weapons or armor, and some can be sold for gold."), 9);
next;
L_BeforeMenu:
diff --git a/npc/000-2-1/dan.txt b/npc/000-2-1/dan.txt
index 77e26cd2..a60c88f1 100644
--- a/npc/000-2-1/dan.txt
+++ b/npc/000-2-1/dan.txt
@@ -77,13 +77,13 @@ L_Quest:
L_Quit:
mes "";
mesn "Narrator";
- mes col(l("Dan keeps silent since your last question."), 9);
+ mesc(l("Dan keeps silent since your last question."), 9);
close;
L_Quit2:
mesn "Narrator";
- mes col(l("Dan ends the conversation and resumes to write his letter."), 9);
+ mesc(l("Dan ends the conversation and resumes to write his letter."), 9);
close;
diff --git a/npc/000-2-1/knife.txt b/npc/000-2-1/knife.txt
index 906476a3..b3e44eef 100644
--- a/npc/000-2-1/knife.txt
+++ b/npc/000-2-1/knife.txt
@@ -15,7 +15,7 @@
if (.@q) close;
mesn "Narrator";
- mes col(l("There are some knives on the table. Would you like to take one?"), 9);
+ mesc(l("There are some knives on the table. Would you like to take one?"), 9);
next;
menu
@@ -33,11 +33,11 @@ L_Give:
getitem Knife, 1;
mesn "Narrator";
- mes col(l("To open your inventory, use the F3 key or use your mouse to select it in the above menu in your client."), 9);
+ mesc(l("To open your inventory, use the F3 key or use your mouse to select it in the above menu in your client."), 9);
next;
- mes col(l("When your inventory is open, you can equip an item by selecting it and clicking 'Equip'. You can do the same to unequip an item by clicking on 'Unequip'."), 9);
+ mesc(l("When your inventory is open, you can equip an item by selecting it and clicking 'Equip'. You can do the same to unequip an item by clicking on 'Unequip'."), 9);
next;
- mes col(l("Items have different effects. Some will heal you, some can be used as weapons or armor, and some can be sold for gold."), 9);
+ mesc(l("Items have different effects. Some will heal you, some can be used as weapons or armor, and some can be sold for gold."), 9);
close;
diff --git a/npc/000-2-2/doors.txt b/npc/000-2-2/doors.txt
index 8492b010..414545ef 100644
--- a/npc/000-2-2/doors.txt
+++ b/npc/000-2-2/doors.txt
@@ -18,7 +18,7 @@ L_Warn:
if (.@q == 5) goto L_Warp;
mesn "Narrator";
- mes col(l("There are still some rattos left! Do you want to abort the quest?"), 9);
+ mesc(l("There are still some rattos left! Do you want to abort the quest?"), 9);
next;
menu
@@ -39,9 +39,9 @@ L_Warp:
OnTouch:
mesn "Narrator";
- mes col(l("It seems that you need a key to open this door."), 9);
+ mesc(l("It seems that you need a key to open this door."), 9);
next;
- mes col(l("What do you want to do?"), 9);
+ mesc(l("What do you want to do?"), 9);
next;
menu
@@ -56,14 +56,14 @@ L_Break:
mes "";
mesn "Narrator";
- mes col(l("You hear a loud scream. It must be the creaking of the wooden door..."), 9);
+ mesc(l("You hear a loud scream. It must be the creaking of the wooden door..."), 9);
close;
L_Warp:
mes "";
mesn "Narrator";
- mes col(l("Wait, it seems someone is blocking the door from the other side!"), 9);
+ mesc(l("Wait, it seems someone is blocking the door from the other side!"), 9);
close;
}
diff --git a/npc/000-2-3/box.txt b/npc/000-2-3/box.txt
index 15ac23ce..30ea0a72 100644
--- a/npc/000-2-3/box.txt
+++ b/npc/000-2-3/box.txt
@@ -22,9 +22,9 @@
.@q = getq(ShipQuests_Nard);
mesn "Narrator";
- mes col(l("Some Bandanas and Sailor Hats are inside this box."), 9);
+ mesc(l("Some Bandanas and Sailor Hats are inside this box."), 9);
next;
- mes col(l("What do you wish to do?"), 9);
+ mesc(l("What do you wish to do?"), 9);
next;
menu
@@ -45,7 +45,7 @@
L_NoQuest:
mes "";
mesn "Narrator";
- mes col(l("Nard looks surprised and stops you."), 9);
+ mesc(l("Nard looks surprised and stops you."), 9);
next;
setcamnpc "Nard";
diff --git a/npc/001-1/cookiemaster.txt b/npc/001-1/cookiemaster.txt
index f04a4797..b62014fa 100644
--- a/npc/001-1/cookiemaster.txt
+++ b/npc/001-1/cookiemaster.txt
@@ -133,13 +133,13 @@ L_Friends:
next;
mesn "Narrator";
- mes col(l("This Cookie Master rewards people who contribute and develop this world."), 9);
+ mesc(l("This Cookie Master rewards people who contribute and develop this world."), 9);
next;
mes col(lg("If you want to be rewarded, help us in making this world a better place."), 9);
next;
- mes col(l("When you see something that looks more like a bug than a feature, report it on http://bugs.evolonline.org or try to contact a game contributor."), 9);
+ mesc(l("When you see something that looks more like a bug than a feature, report it on http://bugs.evolonline.org or try to contact a game contributor."), 9);
next;
- mes col(l("Any contribution to the game (translations, graphics creation/edition, concepts, coding/scripting, etc...) is rewarded!"), 9);
+ mesc(l("Any contribution to the game (translations, graphics creation/edition, concepts, coding/scripting, etc...) is rewarded!"), 9);
mes "";
mesn;
diff --git a/npc/001-1/flyingpiou.txt b/npc/001-1/flyingpiou.txt
index f6132f6b..bb8440b3 100644
--- a/npc/001-1/flyingpiou.txt
+++ b/npc/001-1/flyingpiou.txt
@@ -50,7 +50,7 @@ function script ArtisFlyingPiouLogic {
if (.@q != 1)
{
mesn "Narrator";
- mes col(l("You scare the piou, but let it go."), 9);
+ mesc(l("You scare the piou, but let it go."), 9);
close;
}
@@ -75,7 +75,7 @@ function script ArtisFlyingPiouLogic {
npcwalkto .@x, .@y;
.@trader$ = "Salem#001-1";
mesn "Narrator";
- mes col(l("You caught the piou, but it's trying to escape from you. You'd better hurry back to Salem."), 9);
+ mesc(l("You caught the piou, but it's trying to escape from you. You'd better hurry back to Salem."), 9);
set getvariableofnpc(.LastPiouHunter$, .@trader$), strcharinfo(0);
set getvariableofnpc(.PiouEscapedMessage$, .@trader$), l("Oh no, the piou escaped!");
set getvariableofnpc(.LastPiouHunterID, .@trader$), .@charid;
diff --git a/npc/001-1/manhole.txt b/npc/001-1/manhole.txt
index f2bae5f0..77616cf1 100644
--- a/npc/001-1/manhole.txt
+++ b/npc/001-1/manhole.txt
@@ -20,11 +20,9 @@
l("..."),
l("Do you want to enter in sewer?"));
- if (askyesno() == 1) {
- cwarp("001-3-0", 152, 56);
- }
-
- bye;
+ closeclientdialog();
+ if (askyesno() == 1) slide_or_warp("001-3-0", 152, 56);
+ close;
OnInit:
.sex = G_OTHER;
@@ -43,11 +41,9 @@ OnInit:
l("..."),
l("Do you want to enter in sewer?"));
- if (askyesno() == 1) {
- cwarp("001-3-0", 196, 36);
- }
-
- bye;
+ closeclientdialog();
+ if (askyesno() == 1) slide_or_warp("001-3-0", 196, 36);
+ close;
OnInit:
.sex = G_OTHER;
diff --git a/npc/001-1/salem.txt b/npc/001-1/salem.txt
index cb6dfb69..c8ea3ab8 100644
--- a/npc/001-1/salem.txt
+++ b/npc/001-1/salem.txt
@@ -146,7 +146,7 @@ L_SalemMenuShop:
L_AboutPious:
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
- l("Ah, the locals like keeping them as pets.");
+ l("Ah, the locals like keeping them as pets."),
l("With proper training, a piou can become a good friend and faithful companion in your adventures.");
if (getq(ArtisQuests_CatchPiou) >= 2)
diff --git a/npc/001-1/xilaxa.txt b/npc/001-1/xilaxa.txt
index 5b7ec398..f6f1189c 100644
--- a/npc/001-1/xilaxa.txt
+++ b/npc/001-1/xilaxa.txt
@@ -6,28 +6,12 @@
001-1,52,44,0 script Xilaxa#001-1 NPC_UKAR_MALE_LEGION_ARTIS,{
- function face_to_PC {
- getmapxy(.@map$, .@cx, .@cy, 0);
- @Devis_old_dir = .dir;
- npc_turntoxy(.@cx, .@cy);
-
- return;
- }
-
- function local_close {
- if (@Devis_old_dir != .dir)
- {
- .dir = @Devis_old_dir;
- }
- npc_resumemove;
-
- close;
- }
-
- npc_pausemove;
- face_to_PC;
- npctalkonce goodbye_msg();
- local_close;
+ npc_pausemove();
+ getmapxy(.@map$, .@cx, .@cy, 0);
+ npc_turntoxy(.@cx, .@cy);
+ npctalkonce("Hello.");
+ npc_resumemove();
+ close;
OnTimer1000:
dographmovestep;
diff --git a/npc/001-2-19/lloyd.txt b/npc/001-2-19/lloyd.txt
index 20381d92..9dfd97de 100644
--- a/npc/001-2-19/lloyd.txt
+++ b/npc/001-2-19/lloyd.txt
@@ -194,8 +194,8 @@
enora_quest;
break;
case 2:
- openstorage;
- closeclientdialog;
+ closeclientdialog();
+ openstorage();
close;
break;
case 3:
diff --git a/npc/001-2-2/moon.txt b/npc/001-2-2/moon.txt
index ea76d3b7..1bc682c1 100644
--- a/npc/001-2-2/moon.txt
+++ b/npc/001-2-2/moon.txt
@@ -86,7 +86,7 @@
if (.@q < 2)
{
mesn "Narrator";
- mes col(l("You see a young elven girl, with a strong sense of pain in her face."), 9);
+ mesc(l("You see a young elven girl, with a strong sense of pain in her face."), 9);
next;
}
else
@@ -132,7 +132,7 @@ L_Story:
case 2:
mes "";
mesn "Narrator";
- mes col(l("The girl looks desperate."),9);
+ mesc(l("The girl looks desperate."),9);
}
goto L_Close;
diff --git a/npc/001-2-22/alige.txt b/npc/001-2-22/alige.txt
index b273fcdd..12ec0d9a 100644
--- a/npc/001-2-22/alige.txt
+++ b/npc/001-2-22/alige.txt
@@ -71,7 +71,7 @@ OnFirstEncounter:
mes "";
mesn "Narrator";
- mes col(l("The stowaway doesn't answer."), 9);
+ mesc(l("The stowaway doesn't answer."), 9);
close;
@@ -188,7 +188,7 @@ L_GiveFood:
rif(countitem(PumpkinSeeds), l(getitemname(PumpkinSeeds))), 1,
rif(countitem(UrchinMeat), l(getitemname(UrchinMeat))), 1,
rif(countitem(EasterEgg), l(getitemname(EasterEgg))), 1,
- rif(countitem(PumpkishJuice), l(getitemname(PumpkishJuice))), 527,
+ rif(countitem(PumpkinJuice), l(getitemname(PumpkinJuice))), 527,
rif(countitem(Manana), l(getitemname(Manana))), 528,
rif(countitem(Curshroom), l(getitemname(Curshroom))), 529,
rif(countitem(Carrot), l(getitemname(Carrot))), 530,
@@ -303,9 +303,9 @@ L_FindFood:
next;
restorecam;
mesn "Narrator";
- mes col(l("You can attack a monster by clicking on it, or from your keyboard you can press the 'A' key to select the monster followed by 'Ctrl' to attack it."), 9);
+ mesc(l("You can attack a monster by clicking on it, or from your keyboard you can press the 'A' key to select the monster followed by 'Ctrl' to attack it."), 9);
next;
- mes col(l("Once the monster is dead, click on the dropped items to add them to your inventory. You can also use the 'Z' key to claim the drops."), 9);
+ mesc(l("Once the monster is dead, click on the dropped items to add them to your inventory. You can also use the 'Z' key to claim the drops."), 9);
close;
diff --git a/npc/001-2-22/knife.txt b/npc/001-2-22/knife.txt
index be3bde60..25d03b88 100644
--- a/npc/001-2-22/knife.txt
+++ b/npc/001-2-22/knife.txt
@@ -15,7 +15,7 @@
if (.@q) close;
mesn "Narrator";
- mes col(l("There are some knives on the table. Would you like to take one?"), 9);
+ mesc(l("There are some knives on the table. Would you like to take one?"), 9);
next;
menu
@@ -33,11 +33,11 @@ L_Give:
getitem Knife, 1;
mesn "Narrator";
- mes col(l("To open your inventory, use the F3 key or use your mouse to select it in the above menu in your client."), 9);
+ mesc(l("To open your inventory, use the F3 key or use your mouse to select it in the above menu in your client."), 9);
next;
- mes col(l("When your inventory is open, you can equip an item by selecting it and clicking 'Equip'. You can do the same to unequip an item by clicking on 'Unequip'."), 9);
+ mesc(l("When your inventory is open, you can equip an item by selecting it and clicking 'Equip'. You can do the same to unequip an item by clicking on 'Unequip'."), 9);
next;
- mes col(l("Items have different effects. Some will heal you, some can be used as weapons or armor, and some can be sold for gold."), 9);
+ mesc(l("Items have different effects. Some will heal you, some can be used as weapons or armor, and some can be sold for gold."), 9);
close;
diff --git a/npc/001-2-23/doors.txt b/npc/001-2-23/doors.txt
index f4495ef7..cba40446 100644
--- a/npc/001-2-23/doors.txt
+++ b/npc/001-2-23/doors.txt
@@ -18,7 +18,7 @@ L_Warn:
if (.@q == 5) goto L_Warp;
mesn "Narrator";
- mes col(l("There are still some rattos left! Do you want to abort the quest?"), 9);
+ mesc(l("There are still some rattos left! Do you want to abort the quest?"), 9);
next;
menu
@@ -39,9 +39,9 @@ L_Warp:
OnTouch:
mesn "Narrator";
- mes col(l("It seems that you need a key to open this door."), 9);
+ mesc(l("It seems that you need a key to open this door."), 9);
next;
- mes col(l("What do you want to do?"), 9);
+ mesc(l("What do you want to do?"), 9);
next;
menu
@@ -56,14 +56,14 @@ L_Break:
mes "";
mesn "Narrator";
- mes col(l("You hear a loud scream. It must be the creaking of the wooden door..."), 9);
+ mesc(l("You hear a loud scream. It must be the creaking of the wooden door..."), 9);
close;
L_Warp:
mes "";
mesn "Narrator";
- mes col(l("Wait, it seems someone is blocking the door from the other side!"), 9);
+ mesc(l("Wait, it seems someone is blocking the door from the other side!"), 9);
close;
}
diff --git a/npc/001-2-4/books.txt b/npc/001-2-4/books.txt
index e0932405..f4282f67 100644
--- a/npc/001-2-4/books.txt
+++ b/npc/001-2-4/books.txt
@@ -87,12 +87,14 @@ OnInit:
OnShelfUse:
if (openbookshelf())
read_book;
- bye;
+ closeclientdialog();
+ close;
OnUse:
if (openbook())
read_book;
- bye;
+ closeclientdialog();
+ close;
OnInit:
.book_name$ = getitemname(FishingGuideVolI);
diff --git a/npc/001-2-6/books.txt b/npc/001-2-6/books.txt
index 53091bdf..975a1809 100644
--- a/npc/001-2-6/books.txt
+++ b/npc/001-2-6/books.txt
@@ -1,49 +1,53 @@
// Evol scripts.
// Authors:
+// gumi
+// Jesusalva
// Reid
// WildX
// Description:
-// Aemil
+// Aemil books
001-2-6,39,41,0 script #001-2-6-Book1 NPC_NO_SPRITE,{
function read_book {
- mes "";
- mes col("Master Piou sat on a tree,", 9);
- mes col("Holding a cheese in his beak.", 9);
- mes col("Master Fluffy was attracted by the odour,", 9);
- mes col("And tried to attract him thus.", 9);
- next;
- mes col("\"Mister Piou, good day to you.", 9);
- mes col("You are a handsome and good looking bird!", 9);
- mes col("In truth, if your song is as beautiful as your plumage,", 9);
- mes col("You are the Phoenix of this forest.\"", 9);
- next;
- mes col("Hearing these words the Piou felt great joy,", 9);
- mes col("And to demonstrate his beautiful voice,", 9);
- mes col("He opened his mouth wide and let drop his prey.", 9);
- mes col("The Fluffy seized it and said:", 9);
- next;
- mes col("\"My good Sir,", 9);
- mes col("Know that every flatterer,", 9);
- mes col("Lives at the expense of those who take him seriously:", 9);
- mes col("This is a lesson that is worth a cheese no doubt.\"", 9);
- next;
- mes col("The Piou, embarrassed and confused,", 9);
- mes col("Swore, though somewhat later, that he would never be ", 9);
- mes col("tricked thus again.", 9);
- next;
- mes col("-- " + l("Aesop"), 9);
+ setnpcdialogtitle(l(.book_name$));
+
+ narrator(S_FIRST_BLANK_LINE | S_NO_NPC_NAME,
+ l("Master Piou sat on a tree,"),
+ l("Holding a cheese in his beak."),
+ l("Master Fluffy was attracted by the odour,"),
+ l("And tried to attract him thus."),
+
+ l("\"Mister Piou, good day to you."),
+ l("You are a handsome and good looking bird!"),
+ l("In truth, if your song is as beautiful as your plumage,"),
+ l("You are the Phoenix of this forest.\""),
+
+ l("Hearing these words the Piou felt great joy,"),
+ l("And to demonstrate his beautiful voice,"),
+ l("He opened his mouth wide and let drop his prey."),
+ l("The Fluffy seized it and said:"),
+
+ l("\"My good Sir,"),
+ l("Know that every flatterer,"),
+ l("Lives at the expense of those who take him seriously:"),
+ l("This is a lesson that is worth a cheese no doubt.\""),
+
+ l("The Piou, embarrassed and confused,"),
+ l("Swore, though somewhat later, that he would never be "),
+ l("tricked thus again."),
+
+ "-- " + l("Aesop"));
}
OnShelfUse:
if (openbookshelf())
- read_book;
+ read_book();
close;
OnUse:
if (openbook())
- read_book;
+ read_book();
close;
OnInit:
@@ -56,47 +60,49 @@ OnInit:
001-2-6,48,41,0 script #001-2-6-Book2 NPC_NO_SPRITE,{
function read_book {
- mes "";
- mes col("Poem is making the words dance", 9);
- mes col("Words become music and glance", 9);
- mes col("Over lovers under a starry night", 9);
- mes col("Whose eyes listen under Moonlight", 9);
- next;
- mes col("No matter the grammar", 9);
- mes col("If words beat in rhythm", 9);
- mes col("Find an order with them", 9);
- mes col("As on anvil strikes the hammer", 9);
- next;
- mes col("No matter the spelling", 9);
- mes col("Just say something sparkling", 9);
- mes col("If not, how could CrazyKatiektch", 9);
- mes col("Say her love to glamourous Gliktch?", 9);
- next;
- mes col("True be or not true be", 9);
- mes col("That's not the question", 9);
- mes col("And rhyming is not too", 9);
- mes col("If you don't like to", 9);
- mes col("Share your mind is your mission", 9);
- mes col("Whatever inside can be", 9);
- next;
- mes col("Don't be shy, you are nice", 9);
- mes col("From your mind, break the ice", 9);
- mes col("Whatever your idea", 9);
- mes col("It's the good one and, ahem!", 9);
- mes col("That makes everybody", 9);
- mes col("Able to write a poem", 9);
- next;
- mes col("-- " + l("Nard"), 9);
+ setnpcdialogtitle(l(.book_name$));
+
+ narrator(S_FIRST_BLANK_LINE | S_NO_NPC_NAME,
+ l("Poem is making the words dance"),
+ l("Words become music and glance"),
+ l("Over lovers under a starry night"),
+ l("Whose eyes listen under Moonlight"),
+
+ l("No matter the grammar"),
+ l("If words beat in rhythm"),
+ l("Find an order with them"),
+ l("As on anvil strikes the hammer"),
+
+ l("No matter the spelling"),
+ l("Just say something sparkling"),
+ l("If not, how could CrazyKatiektch"),
+ l("Say her love to glamourous Gliktch?"),
+
+ l("True be or not true be"),
+ l("That's not the question"),
+ l("And rhyming is not too"),
+ l("If you don't like to"),
+ l("Share your mind is your mission"),
+ l("Whatever inside can be"),
+
+ l("Don't be shy, you are nice"),
+ l("From your mind, break the ice"),
+ l("Whatever your idea"),
+ l("It's the good one and, ahem!"),
+ l("That makes everybody"),
+ l("Able to write a poem"),
+
+ "-- " + l("Nard"));
}
OnShelfUse:
if (openbookshelf())
- read_book;
+ read_book();
close;
OnUse:
if (openbook())
- read_book;
+ read_book();
close;
OnInit:
@@ -109,25 +115,27 @@ OnInit:
001-2-6,43,39,0 script #001-2-6-Book3 NPC_NO_SPRITE,{
function read_book {
- mes "";
- mes col("Hush now and hear the chorus of the woods", 9);
- mes col("Bent trees whistling with the beat of the drum", 9);
- mes col("With no choir master nor voice to be sung", 9);
- mes col("The music of the trees floats through the breeze", 9);
- mes col("Sleep well my angel but don't follow along", 9);
- mes col("Because the voices of death sing a sweet song", 9);
- next;
- mes col("-- " + l("Princess Slayer"), 9);
+ setnpcdialogtitle(l(.book_name$));
+
+ narrator(S_FIRST_BLANK_LINE | S_NO_NPC_NAME,
+ l("Hush now and hear the chorus of the woods"),
+ l("Bent trees whistling with the beat of the drum"),
+ l("With no choir master nor voice to be sung"),
+ l("The music of the trees floats through the breeze"),
+ l("Sleep well my angel but don't follow along"),
+ l("Because the voices of death sing a sweet song"),
+
+ "-- " + l("Princess Slayer"));
}
OnShelfUse:
if (openbookshelf())
- read_book;
+ read_book();
close;
OnUse:
if (openbook())
- read_book;
+ read_book();
close;
OnInit:
@@ -140,7 +148,7 @@ OnInit:
001-2-6,54,28,0 script #001-2-6-Book4 NPC_NO_SPRITE,{
function read_book {
- narrator S_FIRST_BLANK_LINE,
+ narrator(S_FIRST_BLANK_LINE,
l("Aemil was once a magnificent land unknown to us all."),
l("Before the end of the Mana War, a band of adventurers formed in the Ancean region of Argaes from those who had lost their homes and families."),
l("They sailed from Hurnscald to Tulimshar and then Nivalis, the last permanent settlements of humans."),
@@ -152,16 +160,195 @@ OnInit:
l("They eventually found a new land after much hardship and named it Aurora, after its beautiful sunrise."),
l("A great city, eventually to become larger than the cities of Ancea, rose on the coast of Aemil. This city was named Esperia."),
l("However..."),
- l("The end of the story got erased, probably because of the sea water. Some pages are still missing. Thus much is lost to time, including the author's name.");
+ l("The end of the story got erased, probably because of the sea water. Some pages are still missing. Thus much is lost to time, including the author's name."));
}
OnUse:
if (openoldbook())
- read_book;
+ read_book();
+ close;
+
+OnInit:
+ .sex = G_OTHER;
+ .distance = 1;
+ end;
+}
+
+001-2-6,57,41,0 script #001-2-6-Book5 NPC_NO_SPRITE,{
+
+ function read_book {
+ setnpcdialogtitle(l(.book_name$));
+
+ narrator(S_FIRST_BLANK_LINE | S_NO_NPC_NAME,
+ l("So you have now a pet, who is loyal to you. It'll follow you everywhere, but there are two things you must know."),
+ l("Do not let intimacy and hunger get to zero. If any of those get to zero, it'll leave you forever."),
+ l("Pious must keep a strict diet composed of Piberries."),
+ l("However, you should only give food when it's hungry, otherwise it'll believe you're a bad owner and intimacy will decrease."),
+ l("To perform most actions, like feeding and renaming, just right-click it. You can even put it back on the egg if its following gets too annoying."),
+ l("Give your pet a nice name, and keep it healthy, and you'll be a successful pet owner!"),
+ l("When you intimacy is high, it'll increase your stats and who knows, might even help you in combat!"),
+ l("...And if you're still trying to check your pet stats, just hover it with your mouse. Thanks."),
+
+ "-- " + l("Animals Protection Agency of Aemil"));
+ }
+
+OnShelfUse:
+ if (openbookshelf())
+ read_book();
+ close;
+
+OnUse:
+ if (openbook())
+ read_book();
close;
OnInit:
+ .book_name$ = "Fluffy Animals who Love Their Owners";
.sex = G_OTHER;
.distance = 1;
end;
}
+
+001-2-6,44,44,0 script #001-2-6-Book6 NPC_NO_SPRITE,{
+
+ function read_book {
+ setnpcdialogtitle(l(.book_name$));
+
+ narrator(S_FIRST_BLANK_LINE | S_NO_NPC_NAME,
+ l("World Story For Dummies, Vol I - Ancean Era: From Keshlam to an Empire"),
+ l("The collection of four books entitled “World Story For Dummies” is based on the uncessable work from the Ukar scholars, thanks to whom this wouldn't be possible."),
+ l("The “Ancean Era” is a term used to defined the time period between the beginning of recorded history and the events at the Mana Tree, and thanks to Ukar scholars, this is widely accepted as year 1 on all Gasaron."),
+ l("The first human settlement to develop an advanced political structure and to become a city-state was Keshlam."),
+ l("Keshlam expanded rapidly under the rule of King Janeb the Founder, and soon annexed the whole Ancea continent - excluding solely the Land Of Fire - to its domains, creating the Platinum Kingdom."),
+ l("Three cities developed on the eastern side of Ancea: Tulimshar, Hurnscald and Nivalis."),
+ l("The Platinum Kingdom grew and prospered, and drew most of the human population to the safety of the walls of Keshlam, Tulimshar, Hurnscald and Nivalis."),
+
+ l("-- Continues on Volume II --"));
+ }
+
+OnShelfUse:
+ if (openbookshelf())
+ read_book();
+ close;
+
+OnUse:
+ if (openbook())
+ read_book();
+ close;
+
+OnInit:
+ .book_name$ = "World Story For Dummies, Vol I";
+ .sex = G_OTHER;
+ .distance = 1;
+ end;
+}
+
+001-2-6,53,44,0 script #001-2-6-Book7 NPC_NO_SPRITE,{
+
+ function read_book {
+ setnpcdialogtitle(l(.book_name$));
+
+ narrator(S_FIRST_BLANK_LINE | S_NO_NPC_NAME,
+ l("World Story For Dummies, Vol II - Ancean Era: Revolutions and Independence"),
+ l("On the year 206CCE, after a long crisis of succession, a minor noble only known as Queen Platyna the Red came to inherit the Platinum Crown."),
+ l("Due to neglect with day-to-day administration, which she delegated to her council, and uncontrolled expenses, the kingdom faced its first economic crisis."),
+ l("With the growth of the Kingdom halted, slow maintenance, and two great famines which killed over half the human population, the council decided to seize power and depose Platyna the Red."),
+ l("On March 213CCE, Chancellor Benjamin Frost, with support of the council, proclaimed the Republic of Ancea. This event would become known as the Blue Revolution."),
+ l("Frost held the title of Lord Prince of the Republic for eighteen months, when the council deposed him and declared itself head of the state."),
+ l("The Republic of Ancea ceased to exist officially in August 216CCE, when the cities of Tulimshar, Hurnscald and Nivalis installed their own independent governments."),
+ l("The council, however, neglected day-to-day administration duties, and focused their efforts in regaining control of the rest of Ancea."),
+ l("This led Keshlam into rapid decline and its citizen began to emigrate to the other Cities. By the end of the Ancean Era, Keshlam City was a quarter of the original size."),
+
+ l("-- Continues on Volume III --"));
+ }
+
+OnShelfUse:
+ if (openbookshelf())
+ read_book();
+ close;
+
+OnUse:
+ if (openbook())
+ read_book();
+ close;
+
+OnInit:
+ .book_name$ = "World Story For Dummies, Vol II";
+ .sex = G_OTHER;
+ .distance = 1;
+ end;
+}
+
+001-2-6,44,47,0 script #001-2-6-Book8 NPC_NO_SPRITE,{
+
+ function read_book {
+ setnpcdialogtitle(l(.book_name$));
+
+ narrator(S_FIRST_BLANK_LINE | S_NO_NPC_NAME,
+ l("World Story For Dummies, Vol III - Aemilean Era: The Mana Tree and The Mana War"),
+ l("Aemilean Era. Tulimshar, Hurnscald and Nivalis held power of their surrounding lands, except for the Land Of Fire and Keshlam City."),
+ l("All races were in peace until the Humans set forth to discover the Source of Magic, based on Ukar scholars studies."),
+ l("Free Mana travels in many directions, and this search took several years before the expedition finally found the right direction to follow."),
+ l("A large tree was found in a deep cave underneath the island of Candor. Despise the darkness of the cave and absence of leaves, the tree grew strong. It gave light off itself and its energy empowered the wizards."),
+ l("The tree was entitled The Mana Tree, and the Wizard Order took control over Candor Island. They learnt to control the mana flow, and limited its use, claiming Magic to be too dangerous for public use."),
+ l("This action was met with widespread opposition from all races, and a war broke. The tritans led the offensive, in attempts to keep the tree untouched and mana available for all."),
+ l("Unable to win, the tritans attacked Hurnscald. While human troops moved in attempts to avoid its fall, the Kralog and Ukar joined the tritans and they took the city."),
+ l("The next and final battle happened at Candor. Wizards attacks from both sides near the Mana Tree provoked a Mana Storm. A Great Quake shook the earth of Ancea and the land began to split. Geography changed, and Keshlan vanished from the map."),
+ l("The Mana Tree was lost, the caves entrances destroyed, and the Wizard Order was split in two: One part was on Candor, and other at the Magic Tower."),
+ l("After this war, the Raijin race was born. A race born of Magic. Humans encapsulated in a Mana storm and altered forever."),
+
+ l("-- Continues on Volume IV --"));
+ }
+
+OnShelfUse:
+ if (openbookshelf())
+ read_book();
+ close;
+
+OnUse:
+ if (openbook())
+ read_book();
+ close;
+
+OnInit:
+ .book_name$ = "World Story For Dummies, Vol III";
+ .sex = G_OTHER;
+ .distance = 1;
+ end;
+}
+
+001-2-6,53,47,0 script #001-2-6-Book9 NPC_NO_SPRITE,{
+
+ function read_book {
+ setnpcdialogtitle(l(.book_name$));
+
+ narrator(S_FIRST_BLANK_LINE | S_NO_NPC_NAME,
+ l("World Story For Dummies, Vol IV - Aemilean Era: The Fleet of Ancea"),
+ l("After the Mana War, the Ancea continent was mostly destroyed. It would take years to nature start repairing the damage of the event."),
+ l("A band of adventurers formed in Argaes from those who had lost their homes and families. They visited the three permanent human settlements: Tulimshar, Hurnscald and Nivalis."),
+ l("They gathered merchants and warriors to join them in a journey to find new lands to live in. Tulimshar's merchant lords gave them ships to sail east."),
+ l("The newly created Fleet of Ancea travelled so far that they were never heard from again. They found a continent, present on legends of explorers who never came back."),
+ l("They named this continent as Aemil, in honour of one of such explorers. The area they docked in was called Aurora, after its beautiful sunrise."),
+ l("The first village build was named Esperia. Aurora region was very fertile, and for this reason they moved towards countryside and built farms."),
+ l("In hopes of one day reconnect with the people of Ancea and establish a trade between the two continents, The City of Artis was founded. The Aemil Continent has then grown without contact with the people of Ancea."),
+
+ "-- " + l("The Ukar Historical Association on Aemil"));
+ }
+
+OnShelfUse:
+ if (openbookshelf())
+ read_book();
+ close;
+
+OnUse:
+ if (openbook())
+ read_book();
+ close;
+
+OnInit:
+ .book_name$ = "World Story For Dummies, Vol IV";
+ .sex = G_OTHER;
+ .distance = 1;
+ end;
+}
+
diff --git a/npc/001-3-0/_mobs.txt b/npc/001-3-0/_mobs.txt
index 31c8266f..18967b07 100644
--- a/npc/001-3-0/_mobs.txt
+++ b/npc/001-3-0/_mobs.txt
@@ -3,15 +3,27 @@
001-3-0,175,32,2,2 monster Ratto 1005,2,60000,30000
001-3-0,201,54,2,2 monster Ratto 1005,3,25000,10000
001-3-0,151,97,18,1 monster Ratto 1005,3,40000,15000
-001-3-0,146,121,3,2 monster Ratto 1005,2,50000,25000
001-3-0,101,111,8,3 monster Ratto 1005,4,30000,15000
001-3-0,145,68,2,2 monster Ratto 1005,2,60000,30000
001-3-0,146,28,2,1 monster Ratto 1005,2,60000,30000
001-3-0,90,65,3,3 monster Ratto 1005,3,35000,15000
001-3-0,56,50,8,4 monster Ratto 1005,4,35000,15000
001-3-0,42,102,3,3 monster Ratto 1005,3,40000,20000
-001-3-0,145,64,1,5 monster Blub 1008,2,35000,80000
-001-3-0,162,45,1,3 monster Little Blub 1007,4,10000,20000
-001-3-0,129,88,2,2 monster Blub 1008,2,35000,80000
-001-3-0,100,38,2,2 monster Little Blub 1007,4,10000,20000
-001-3-0,171,45,0,2 monster Little Blub 1007,4,10000,20000
+001-3-0,157,80,2,2 monster Green Slime 1024,3,15000,80000
+001-3-0,190,58,3,19 monster Cave Maggot 1027,7,5000,15000
+001-3-0,172,46,1,2 monster Cave Maggot 1027,3,5000,15000
+001-3-0,175,50,0,4 monster Ratto 1005,2,60000,30000
+001-3-0,175,64,3,2 monster Cave Maggot 1027,4,5000,15000
+001-3-0,104,75,48,43 monster Cave Maggot 1027,25,500,2000
+001-3-0,91,67,3,5 monster Cave Maggot 1027,3,500,2000
+001-3-0,128,86,3,5 monster Green Slime 1024,3,500,2000
+001-3-0,42,103,3,5 monster Green Slime 1024,3,500,2000
+001-3-0,120,85,7,2 monster Little Green Slime 1025,2,500,2000
+001-3-0,147,122,3,5 monster Green Slime 1024,2,500,2000
+001-3-0,147,122,3,5 monster Green Slime 1024,2,500,2000
+001-3-0,99,106,3,5 monster Green Slime 1024,3,500,2000
+001-3-0,139,32,10,4 monster Little Green Slime 1025,2,500,2000
+001-3-0,86,131,4,2 monster Little Green Slime 1025,3,500,2000
+001-3-0,175,31,4,2 monster Little Green Slime 1025,2,500,2000
+001-3-0,147,67,4,2 monster Little Green Slime 1025,2,500,2000
+001-3-0,54,53,5,3 monster Poison Skull 1100,1,35000,60000
diff --git a/npc/001-3-1/_import.txt b/npc/001-3-1/_import.txt
index 6511aab3..1d0a0c00 100644
--- a/npc/001-3-1/_import.txt
+++ b/npc/001-3-1/_import.txt
@@ -1,3 +1,4 @@
// Map 001-3-1: Rivercave
// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/001-3-1/_mobs.txt",
"npc/001-3-1/_warps.txt",
diff --git a/npc/001-3-1/_mobs.txt b/npc/001-3-1/_mobs.txt
new file mode 100644
index 00000000..3bc6a97a
--- /dev/null
+++ b/npc/001-3-1/_mobs.txt
@@ -0,0 +1,8 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 001-3-1: Rivercave mobs
+001-3-1,32,21,3,0 monster Green Slime 1024,3,15000,80000
+001-3-1,27,33,0,1 monster Little Green Slime 1025,3,10000,50000
+001-3-1,23,24,0,1 monster Little Green Slime 1025,3,10000,50000
+001-3-1,26,21,0,1 monster Poison Skull 1100,1,10000,30000
+001-3-1,28,44,3,1 monster Cave Maggot 1027,4,5000,15000
+001-3-1,29,27,6,4 monster Cave Maggot 1027,5,2000,10000
diff --git a/npc/008-1-1/_import.txt b/npc/008-1-1/_import.txt
new file mode 100644
index 00000000..7063c99e
--- /dev/null
+++ b/npc/008-1-1/_import.txt
@@ -0,0 +1,2 @@
+// Map 008-1-1: Woodland
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
diff --git a/npc/008-1/_mobs.txt b/npc/008-1/_mobs.txt
index e8835c09..4a08a718 100644
--- a/npc/008-1/_mobs.txt
+++ b/npc/008-1/_mobs.txt
@@ -1,15 +1,101 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 008-1: Hurnscald mobs
-008-1,99,39,0,0 monster Manana Tree 1017,1,420000,240000
-008-1,100,42,0,0 monster Manana Tree 1017,1,420000,240000
-008-1,102,40,0,0 monster Manana Tree 1017,1,420000,240000
-008-1,105,41,0,0 monster Manana Tree 1017,1,420000,240000
-008-1,101,44,0,0 monster Manana Tree 1017,1,420000,240000
-008-1,104,43,0,0 monster Manana Tree 1017,1,420000,240000
-008-1,109,40,0,0 monster Manana Tree 1017,1,420000,240000
-008-1,108,42,0,0 monster Manana Tree 1017,1,420000,240000
-008-1,106,44,0,0 monster Manana Tree 1017,1,420000,240000
-008-1,109,44,0,0 monster Manana Tree 1017,1,420000,240000
-008-1,111,42,0,0 monster Manana Tree 1017,1,420000,240000
-008-1,112,44,0,0 monster Manana Tree 1017,1,420000,240000
-008-1,112,39,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,270,86,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,271,89,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,273,87,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,276,88,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,275,90,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,280,87,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,279,89,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,282,89,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,283,86,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,203,70,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,198,70,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,193,70,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,188,70,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,183,70,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,185,72,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,203,74,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,198,74,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,193,74,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,188,74,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,180,76,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,185,76,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,190,76,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,195,76,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,198,78,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,193,78,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,188,78,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,183,78,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,180,80,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,200,80,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,160,97,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,154,95,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,148,97,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,160,101,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,156,105,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,154,99,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,152,101,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,152,105,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,146,99,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,146,103,0,0 monster Manana Tree 1017,1,420000,240000
+008-1,200,120,2,6 monster Mauve Plant 1036,3,1000,20000
+008-1,184,53,2,2 monster Cobalt Plant 1039,2,1000,30000
+008-1,183,143,6,2 monster Alizarin Plant 1037,3,1000,25000
+008-1,169,142,2,2 monster Pink Flower 1034,1,100,10000
+008-1,159,145,2,2 monster Pink Flower 1034,1,100,20000
+008-1,148,150,2,2 monster Pink Flower 1034,1,100,50000
+008-1,85,120,7,9 monster Mouboo 1023,5,30000,60000
+008-1,79,63,11,2 monster Spider 1044,2,4000,8000
+008-1,290,101,5,3 monster Butterfly 1032,3,10000,10000
+008-1,267,127,2,2 monster Butterfly 1032,2,10000,10000
+008-1,235,118,9,9 monster Butterfly 1032,3,10000,10000
+008-1,241,58,5,3 monster Butterfly 1032,3,10000,10000
+008-1,292,165,5,3 monster Butterfly 1032,3,10000,10000
+008-1,203,142,5,3 monster Butterfly 1032,3,10000,10000
+008-1,165,147,5,3 monster Butterfly 1032,3,10000,10000
+008-1,181,213,14,10 monster Log Head 1031,2,5000,30000
+008-1,244,160,31,11 monster Mana Bug 1035,7,10000,10000
+008-1,232,60,17,26 monster Mana Bug 1035,7,10000,10000
+008-1,275,103,1,0 monster Clover Patch 1033,1,10000,30000
+008-1,278,153,1,0 monster Clover Patch 1033,1,10000,30000
+008-1,203,130,1,0 monster Clover Patch 1033,1,10000,30000
+008-1,156,149,1,0 monster Clover Patch 1033,1,10000,30000
+008-1,193,113,1,0 monster Clover Patch 1033,1,10000,30000
+008-1,289,140,6,2 monster Maggot 1026,3,500,10000
+008-1,285,65,6,2 monster Maggot 1026,3,500,10000
+008-1,170,70,6,2 monster Maggot 1026,3,500,10000
+008-1,65,136,6,2 monster Maggot 1026,3,500,10000
+008-1,47,132,11,15 monster Forest Maggot 1028,7,500,2500
+008-1,120,113,16,11 monster Butterfly 1032,3,10000,10000
+008-1,104,183,11,7 monster Log Head 1031,3,5000,30000
+008-1,203,167,9,10 monster Log Head 1031,2,5000,30000
+008-1,66,185,7,11 monster Log Head 1031,2,5000,30000
+008-1,258,68,5,3 monster Pinkie 1030,2,3000,12000
+008-1,257,88,5,3 monster Pinkie 1030,2,3000,12000
+008-1,295,80,4,5 monster Pinkie 1030,3,2000,8000
+008-1,295,62,5,3 monster Pinkie 1030,2,3000,12000
+008-1,279,46,17,7 monster Silkworm 1040,4,3000,6000
+008-1,220,168,17,7 monster Silkworm 1040,2,3000,6000
+008-1,144,160,21,9 monster Silkworm 1040,4,3000,6000
+008-1,68,167,14,9 monster Silkworm 1040,3,3000,6000
+008-1,46,193,16,28 monster Grass Snake 1042,7,3000,12000
+008-1,166,114,14,5 monster Spiky Mushroom 1049,2,3000,6000
+008-1,118,97,14,5 monster Spiky Mushroom 1049,2,3000,6000
+008-1,186,33,6,7 monster Spiky Mushroom 1049,4,3000,6000
+008-1,84,77,4,2 monster Scorpion 1043,1,6000,12000
+008-1,106,62,7,4 monster Mouboo 1023,1,30000,120000
+008-1,211,65,2,2 monster Pink Flower 1034,1,100,10000
+008-1,213,123,2,2 monster Pink Flower 1034,1,100,10000
+008-1,37,210,3,12 monster Wicked Mushroom 1050,7,3000,12000
+008-1,54,94,14,13 monster Spiky Mushroom 1049,2,3000,6000
+008-1,146,183,36,25 monster Forest Maggot 1028,12,500,2500
+008-1,77,96,7,5 monster Forest Maggot 1028,3,500,2500
+008-1,185,187,21,11 monster Butterfly 1032,3,10000,10000
+008-1,272,67,30,35 monster Squirrel 1041,7,10000,30000
+008-1,178,180,36,30 monster Squirrel 1041,12,10000,30000
+008-1,161,34,6,7 monster Scorpion 1043,2,6000,12000
+008-1,47,98,23,49 monster Butterfly 1032,5,10000,10000
+008-1,140,144,2,6 monster Mauve Plant 1036,3,1000,2000
+008-1,192,147,3,2 monster Gamboge Plant 1038,2,1000,10000
+008-1,197,136,2,5 monster Cobalt Plant 1039,2,1000,30000
diff --git a/npc/008-1/_warps.txt b/npc/008-1/_warps.txt
index 44b0db66..ab1728ed 100644
--- a/npc/008-1/_warps.txt
+++ b/npc/008-1/_warps.txt
@@ -1,13 +1,26 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 008-1: Hurnscald warps
-008-1,105,76,0 warp #008-1_105_76 0,0,008-2-0,26,23
-008-1,102,79,0 warp #008-1_102_79 0,0,008-2-0,23,34
-008-1,88,71,0 warp #008-1_88_71 0,0,008-2-1,33,42
-008-1,90,66,0 warp #008-1_90_66 0,0,008-2-1,38,27
-008-1,65,55,0 warp #008-1_65_55 0,0,008-2-2,28,33
-008-1,89,58,0 warp #008-1_89_58 0,0,008-2-6,27,32
-008-1,101,55,0 warp #008-1_101_55 0,0,008-2-7,36,28
-008-1,121,71,0 warp #008-1_121_71 1,0,008-2-8,36,38
-008-1,72,68,0 warp #008-1_72_68 0,0,008-2-9,30,34
-008-1,102,69,0 warp #008-1_102_69 0,0,008-2-10,37,33
-008-1,110,56,0 warp #008-1_110_56 0,0,008-2-12,30,31
+008-1,276,122,0 warp #008-1_276_122 0,0,008-2-0,26,23
+008-1,274,125,0 warp #008-1_274_125 0,0,008-2-0,23,34
+008-1,259,118,0 warp #008-1_259_118 0,0,008-2-1,33,42
+008-1,261,111,0 warp #008-1_261_111 0,0,008-2-1,38,27
+008-1,236,102,0 warp #008-1_236_102 0,0,008-2-2,28,33
+008-1,260,105,0 warp #008-1_260_105 0,0,008-2-6,27,32
+008-1,272,102,0 warp #008-1_272_102 0,0,008-2-7,36,28
+008-1,292,118,0 warp #008-1_292_118 0,0,008-2-8,36,38
+008-1,243,115,0 warp #008-1_243_115 0,0,008-2-9,30,34
+008-1,273,116,0 warp #008-1_273_116 0,0,008-2-10,37,33
+008-1,275,74,0 warp #008-1_275_74 0,0,008-2-16,25,33
+008-1,281,103,0 warp #008-1_281_103 0,0,008-2-12,30,31
+008-1,122,114,0 warp #008-1_122_114 0,0,008-2-22,30,34
+008-1,71,128,0 warp #008-1_71_128 0,0,008-2-23,52,39
+008-1,106,221,0 warp #008-1_106_221 0,0,008-2-24,32,45
+008-1,236,39,0 warp #008-1_236_39 0,0,008-2-17,52,39
+008-1,151,80,0 warp #008-1_151_80 0,0,008-2-15,35,33
+008-1,256,203,0 warp #008-1_256_203 0,0,008-2-20,25,31
+008-1,128,138,0 warp #008-1_128_138 0,0,008-3-1,35,34
+008-1,287,113,0 warp #008-1_287_113 0,0,008-2-8,26,28
+008-1,252,211,0 warp #008-1_252_211 0,0,008-2-21,22,42
+008-1,257,130,0 warp #008-1_257_130 0,0,008-2-28,25,31
+008-1,233,131,0 warp #008-1_233_131 0,0,008-2-29,36,24
+008-1,287,133,0 warp #008-1_287_133 0,0,008-2-30,52,39
diff --git a/npc/008-1/confused-tree.txt b/npc/008-1/confused-tree.txt
index 202fb53c..32b5b9a5 100644
--- a/npc/008-1/confused-tree.txt
+++ b/npc/008-1/confused-tree.txt
@@ -11,7 +11,7 @@
// ~t lowercase hot word regex
-008-1,84,63,0 script Confused Tree NPC_CONFUSED_TREE,14,14,{
+008-1,255,109,0 script Confused Tree NPC_CONFUSED_TREE,14,14,{
function tree_panel {
if (is_trusted() == false && #Tree_Trusted == false)
@@ -206,10 +206,24 @@
.@sub$ = substr(.@sub$, 1, getstrlen(.@sub$) - 1); // strip first char
}
- explode(.@sub2$, .@sub$, ",");
- .@sub$ = .@sub2$[rand(getarraysize(.@sub2$))]; // allow to have multiple variables
+ if (compare(.@sub$, ",")) {
+ .@var$ = sprintf(".H%s$", substr(md5(.@sub$), 0, 25));
- .@rep$ = getd(sprintf(".D_%s$[%i]", .@sub$, rand(getd(".D_" + .@sub$)))); // get he value
+ if (getelementofarray(getd(.@var$), 1) == "") {
+ explode(.@sub2$, .@sub$, ",");
+ .@size = 1;
+
+ for (.@i = 0; .@i < getarraysize(.@sub2$); ++.@i) {
+ .@subsize = getd(sprintf(".D_%s", .@sub2$));
+ copyarray(getelementofarray(getd(.@var$), .@size), getd(sprintf(".D_%s$[1]", .@sub2$)), .@subsize);
+ .@size += .@subsize;
+ }
+ }
+ } else {
+ .@var$ = sprintf(".D_%s$", .@sub$);
+ }
+
+ .@rep$ = relative_array_random(getd(.@var$));
if (.@capitalize) .@rep$ = capitalize(.@rep$);
else if (.@titlecase) .@rep$ = titlecase(.@rep$);
@@ -335,7 +349,7 @@
}
function special_drops {
- .@drop$ = .drops$[rand(.drops)];
+ .@drop$ = relative_array_random(.drops$);
.@name$ = strcharinfo(PC_NAME);
.@low$ = strtolower(.@name$);
@@ -579,66 +593,67 @@
if (.@m$ ~= "(?:^| )tell(?: (?:me|him|her|us|them))? a(?:n ?other| lame| bad| boring)? joke")
- reply(.jokes$[rand(.jokes)]);
+ reply(relative_array_random(.jokes$));
else if (.@m$ ~= "(?:^| )heal me(?:$|[^a-z])")
- reply(.healing$[rand(.healing)]);
+ reply(relative_array_random(.healing$));
// XXX: maybe actually heal the player once in a while
else if (.@m$ ~= "(?:^| )(?:what|who) are you")
- reply(.whoami$[rand(.whoami)]);
+ reply(relative_array_random(.whoami$));
else if (.@m$ ~= rp("(?:^| )(?:hi+|hello|heya?|hiya|good (?:morning|afternoon))[^a-z]* .*~t|~t.* (?:hi+|hello|heya?|hiya)"))
{
.blocked = 0;
- reply(.greetings$[rand(.greetings)]);
+ .@rpl$ = relative_array_random(.greetings$);
+ reply(.@rpl$);
}
else if (.@o$ ~= rp("(?:^[*]| )(?:kicks?|shakes?) .*~t"))
reply(special_drops());
else if (.@o$ ~= rp("(?:^[*]| )(?:cuts?|nukes?|kills?|chops? down|saws?|hews?|murders?) .*~t"))
- reply(.kill$[rand(.kill)]);
+ reply(relative_array_random(.kill$));
else if (.@o$ ~= rp("(?:^[*]| )pokes? .*~t"))
- reply(.poke$[rand(.poke)]);
+ reply(relative_array_random(.poke$));
else if (.@o$ ~= rp("(?:^[*]| )(?:waters?|pees?|licks?) .*~t"))
- reply(.disgusting$[rand(.disgusting)]);
+ reply(relative_array_random(.disgusting$));
else if (compare(.@m$, " answer ") && .@m$ ~= "(?:life|universe|everything)(?:$|[^a-z])")
- reply(.answer$[rand(.answer)]);
+ reply(relative_array_random(.answer$));
else if (.@o$ ~= rp("(?:^[*]| )(?:burns?|incinerates?|ignites?) .*~t"))
- reply(.burning$[rand(.burning)]);
+ reply(relative_array_random(.burning$));
// XXX: maybe here send a fire particle effect
else if (.@m$ ~= rp("(?:^| )die ~t"))
- reply(.die$[rand(.die)]);
+ reply(relative_array_random(.die$));
else if (.@o$ ~= rp("(?:^[*]| )bites? .*~t|(?:^[*]| )drops? .* on ~t"))
- reply(.silly$[rand(.silly)]);
+ reply(relative_array_random(.silly$));
else if (.@m$ ~= rp("(?:^| )(?:loves?|hugs?|kiss(es)?) .*~t|~t.* love(?:$|[^a-z])"))
- reply(.love$[rand(.love)]);
+ reply(relative_array_random(.love$));
else if (.@m$ ~= rp("(?:^| )dance .*~t|~t.* dance(?:$|[^a-z])"))
- reply(.dance$[rand(.dance)]);
+ reply(relative_array_random(.dance$));
else if (.@m$ ~= rp("(?:^| )hates? .*~t"))
- reply(.hate$[rand(.hate)]);
+ reply(relative_array_random(.hate$));
else if (.@o$ ~= rp("(?:^[*]| )(?:eats?|shoots?|plucks?|tortures?|slaps?|slaps?|poisons?|breaks?|stabs?|throws?|punch(?:es)?) .*~t"))
- reply(.pain$[rand(.pain)]);
+ reply(relative_array_random(.pain$));
else if (.@o$ ~= rp("(?:^[*]| )(?:climbs?|rides?|mounts?) .*~t"))
- reply(.climb$[rand(.climb)]);
+ reply(relative_array_random(.climb$));
else if (.@m$ ~= "(?:^| )(?:see y(?:a|ou)|good night|(?:bye)?bye+)(?:$|[^a-z])")
- reply(.bye$[rand(.bye)]);
+ reply(relative_array_random(.bye$));
else if (.@m$ ~= rp("(?:^| )bad ~t"))
- reply(.bad$[rand(.bad)]);
+ reply(relative_array_random(.bad$));
else if (.@m$ ~= "(?:^| )(?:how old are you|uptime)(?:$|[^a-z])")
reply("%%B Server uptime: " + FuzzyTime(.uptime, 1) + ".");
@@ -650,7 +665,7 @@
reply("%%B ~n, version " + .version + "."); // XXX: maybe return Hercules version and serverdata commit instead
else if (.@m$ ~= "(?:^| )(?:(?:8|eight)[ -]?ball|(?:should|would|will|do|does) (?:i|you|he|she|it|we|they))(?:$|[^a-z])")
- reply(.eightball$[rand(.eightball)]);
+ reply(relative_array_random(.eightball$));
else if (.@m$ ~= "(?:^| )roll(?: a| the)? dice(?:$|[^a-z])")
reply(roll_dice(1, 6));
@@ -678,12 +693,12 @@
else if (.@m$ ~= "(?:^| )shut up(?:$|[^a-z])")
{
- reply(.shut_up$[rand(.shut_up)]);
+ reply(relative_array_random(.shut_up$));
.blocked = gettimetick(2);
}
else if (rand(.dunno_rate) == 0)
- reply(.no_idea$[rand(.no_idea)]);
+ reply(relative_array_random(.no_idea$));
else
++.ignored_times;
@@ -693,7 +708,7 @@
function trigger_hiall {
if (rand(.hiall_rate) == 0)
- reply(.greetings$[rand(.greetings)]);
+ reply(relative_array_random(.greetings$));
else
++.ignored_times;
@@ -703,7 +718,7 @@
OnClick:
tree_panel();
- bye;
+ end;
OnTalkNearby:
@@ -938,7 +953,8 @@ OnInit:
face();
// boring stuff below
- .version = 21; // increase this when you make a change
+ .version[0] = 21; // increase this when you make a change
+ .version[1] = 1;
.uptime = gettimetick(2);
.alwaysVisible = true; // the NPC doesn't de-spawn when moving away
.pid = 1; // regex pattern id
diff --git a/npc/008-2-0/_savepoints.txt b/npc/008-2-0/_savepoints.txt
index d9055b64..6da9c7b3 100644
--- a/npc/008-2-0/_savepoints.txt
+++ b/npc/008-2-0/_savepoints.txt
@@ -1,6 +1,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 008-2-0: Chez Celestia saves
-008-2-0,37,27,0 script #save_008-2-0_37_27 NPC_SAVE_POINT,{
+008-2-0,38,27,0 script #save_008-2-0_38_27 NPC_SAVE_POINT,{
savepointparticle .map$, .x, .y, CURRENT_INN;
close;
diff --git a/npc/008-2-0/_warps.txt b/npc/008-2-0/_warps.txt
index 72a8ab12..d24b4b27 100644
--- a/npc/008-2-0/_warps.txt
+++ b/npc/008-2-0/_warps.txt
@@ -1,4 +1,4 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 008-2-0: Chez Celestia warps
-008-2-0,26,22,0 warp #008-2-0_26_22 0,0,008-1,105,75
-008-2-0,22,34,0 warp #008-2-0_22_34 0,0,008-1,101,79
+008-2-0,26,22,0 warp #008-2-0_26_22 0,0,008-1,276,121
+008-2-0,22,34,0 warp #008-2-0_22_34 0,0,008-1,273,125
diff --git a/npc/008-2-1/_warps.txt b/npc/008-2-1/_warps.txt
index e47cbf73..978c5767 100644
--- a/npc/008-2-1/_warps.txt
+++ b/npc/008-2-1/_warps.txt
@@ -1,4 +1,4 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 008-2-1: Merchant Guild warps
-008-2-1,37,27,0 warp #008-2-1_37_27 0,0,008-1,89,66
-008-2-1,33,43,0 warp #008-2-1_33_43 0,0,008-1,88,72
+008-2-1,37,27,0 warp #008-2-1_37_27 0,0,008-1,260,111
+008-2-1,33,45,0 warp #008-2-1_33_45 0,0,008-1,259,119
diff --git a/npc/008-2-10/_warps.txt b/npc/008-2-10/_warps.txt
index 25390f95..26362dee 100644
--- a/npc/008-2-10/_warps.txt
+++ b/npc/008-2-10/_warps.txt
@@ -1,4 +1,4 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 008-2-10: Hurnscald City Hall warps
-008-2-10,37,34,0 warp #008-2-10_37_34 0,0,008-1,102,70
-008-2-10,37,25,0 warp #008-2-10_37_25 1,0,008-2-11,36,27
+008-2-10,37,34,0 warp #008-2-10_37_34 0,0,008-1,273,117
+008-2-10,36,25,0 warp #008-2-10_36_25 2,0,008-2-11,36,27
diff --git a/npc/008-2-11/_savepoints.txt b/npc/008-2-11/_savepoints.txt
index c3cf65fc..cccf4138 100644
--- a/npc/008-2-11/_savepoints.txt
+++ b/npc/008-2-11/_savepoints.txt
@@ -1,6 +1,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 008-2-11: Hurnscald City Hall saves
-008-2-11,25,27,0 script #save_008-2-11_25_27 NPC_SAVE_POINT,{
+008-2-11,26,27,0 script #save_008-2-11_26_27 NPC_SAVE_POINT,{
savepointparticle .map$, .x, .y, CURRENT_INN;
close;
diff --git a/npc/008-2-11/_warps.txt b/npc/008-2-11/_warps.txt
index 6c8c4732..11b8b45f 100644
--- a/npc/008-2-11/_warps.txt
+++ b/npc/008-2-11/_warps.txt
@@ -1,3 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 008-2-11: Hurnscald City Hall warps
-008-2-11,37,28,0 warp #008-2-11_37_28 1,0,008-2-10,36,26
+008-2-11,36,31,0 warp #008-2-11_36_31 2,0,008-2-10,36,26
diff --git a/npc/008-2-12/_warps.txt b/npc/008-2-12/_warps.txt
index e44e7154..efe934a0 100644
--- a/npc/008-2-12/_warps.txt
+++ b/npc/008-2-12/_warps.txt
@@ -1,4 +1,4 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 008-2-12: Hurnscald Clinic warps
-008-2-12,30,32,0 warp #008-2-12_30_32 0,0,008-1,110,57
-008-2-12,36,27,0 warp #008-2-12_36_27 1,0,008-2-13,35,31
+008-2-12,30,32,0 warp #008-2-12_30_32 0,0,008-1,281,104
+008-2-12,36,27,0 warp #008-2-12_36_27 1,0,008-2-13,35,30
diff --git a/npc/008-2-13/_warps.txt b/npc/008-2-13/_warps.txt
index f9681284..cba843a7 100644
--- a/npc/008-2-13/_warps.txt
+++ b/npc/008-2-13/_warps.txt
@@ -1,4 +1,4 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 008-2-13: Hurnscald Clinic warps
-008-2-13,36,32,0 warp #008-2-13_36_32 1,0,008-2-12,35,28
+008-2-13,36,32,0 warp #008-2-13_36_32 1,0,008-2-12,35,29
008-2-13,25,26,0 warp #008-2-13_25_26 1,0,008-2-14,24,30
diff --git a/npc/008-2-14/_warps.txt b/npc/008-2-14/_warps.txt
index 241626bb..eba5adca 100644
--- a/npc/008-2-14/_warps.txt
+++ b/npc/008-2-14/_warps.txt
@@ -1,3 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 008-2-14: Hurnscald Clinic warps
-008-2-14,25,31,0 warp #008-2-14_25_31 1,0,008-2-13,24,27
+008-2-14,25,31,0 warp #008-2-14_25_31 1,0,008-2-13,24,29
diff --git a/npc/008-2-15/_import.txt b/npc/008-2-15/_import.txt
new file mode 100644
index 00000000..c504df36
--- /dev/null
+++ b/npc/008-2-15/_import.txt
@@ -0,0 +1,3 @@
+// Map 008-2-15: Hurnscald Farm
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-2-15/_warps.txt",
diff --git a/npc/008-2-15/_warps.txt b/npc/008-2-15/_warps.txt
new file mode 100644
index 00000000..3f3fb766
--- /dev/null
+++ b/npc/008-2-15/_warps.txt
@@ -0,0 +1,3 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-15: Hurnscald Farm warps
+008-2-15,35,34,0 warp #008-2-15_35_34 0,0,008-1,151,81
diff --git a/npc/008-2-16/_import.txt b/npc/008-2-16/_import.txt
new file mode 100644
index 00000000..90da3caf
--- /dev/null
+++ b/npc/008-2-16/_import.txt
@@ -0,0 +1,3 @@
+// Map 008-2-16: Hurnscald Cottage
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-2-16/_warps.txt",
diff --git a/npc/008-2-16/_warps.txt b/npc/008-2-16/_warps.txt
new file mode 100644
index 00000000..bb2293f4
--- /dev/null
+++ b/npc/008-2-16/_warps.txt
@@ -0,0 +1,3 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-16: Hurnscald Cottage warps
+008-2-16,25,34,0 warp #008-2-16_25_34 0,0,008-1,275,75
diff --git a/npc/008-2-17/_import.txt b/npc/008-2-17/_import.txt
new file mode 100644
index 00000000..d90289e3
--- /dev/null
+++ b/npc/008-2-17/_import.txt
@@ -0,0 +1,3 @@
+// Map 008-2-17: Mining Camp
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-2-17/_warps.txt",
diff --git a/npc/008-2-17/_warps.txt b/npc/008-2-17/_warps.txt
new file mode 100644
index 00000000..9857c005
--- /dev/null
+++ b/npc/008-2-17/_warps.txt
@@ -0,0 +1,5 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-17: Mining Camp warps
+008-2-17,52,40,0 warp #008-2-17_52_40 0,0,008-1,236,40
+008-2-17,25,42,0 warp #008-2-17_25_39 1,0,008-2-18,22,24
+008-2-17,24,34,0 warp #008-2-17_24_34 0,0,008-2-19,20,29
diff --git a/npc/008-2-18/_import.txt b/npc/008-2-18/_import.txt
new file mode 100644
index 00000000..4f791e6f
--- /dev/null
+++ b/npc/008-2-18/_import.txt
@@ -0,0 +1,3 @@
+// Map 008-2-18: Mining Camp First Floor
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-2-18/_warps.txt",
diff --git a/npc/008-2-18/_warps.txt b/npc/008-2-18/_warps.txt
new file mode 100644
index 00000000..a80310cd
--- /dev/null
+++ b/npc/008-2-18/_warps.txt
@@ -0,0 +1,3 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-18: Mining Camp First Floor warps
+008-2-18,22,26,0 warp #008-2-18_22_26 1,0,008-2-17,25,40
diff --git a/npc/008-2-19/_import.txt b/npc/008-2-19/_import.txt
new file mode 100644
index 00000000..c080bfb8
--- /dev/null
+++ b/npc/008-2-19/_import.txt
@@ -0,0 +1,3 @@
+// Map 008-2-19: Mining Camp Basement
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-2-19/_warps.txt",
diff --git a/npc/008-2-19/_warps.txt b/npc/008-2-19/_warps.txt
new file mode 100644
index 00000000..ec68b70c
--- /dev/null
+++ b/npc/008-2-19/_warps.txt
@@ -0,0 +1,3 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-19: Mining Camp Basement warps
+008-2-19,20,26,0 warp #008-2-19_20_26 0,0,008-2-17,24,32
diff --git a/npc/008-2-2/_warps.txt b/npc/008-2-2/_warps.txt
index 8410ef2b..d7cce7fc 100644
--- a/npc/008-2-2/_warps.txt
+++ b/npc/008-2-2/_warps.txt
@@ -1,6 +1,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 008-2-2: The Rusty Pick warps
-008-2-2,28,34,0 warp #008-2-2_28_34 0,0,008-1,65,56
-008-2-2,52,25,0 warp #008-2-2_52_25 1,0,008-2-3,66,28
+008-2-2,28,34,0 warp #008-2-2_28_34 0,0,008-1,236,103
+008-2-2,52,26,0 warp #008-2-2_52_26 1,0,008-2-3,66,28
008-2-2,24,29,0 warp #008-2-2_24_29 0,0,008-2-4,43,28
008-2-2,52,32,0 warp #008-2-2_52_32 0,0,008-2-5,24,25
diff --git a/npc/008-2-20/_import.txt b/npc/008-2-20/_import.txt
new file mode 100644
index 00000000..bb22ec30
--- /dev/null
+++ b/npc/008-2-20/_import.txt
@@ -0,0 +1,3 @@
+// Map 008-2-20: Forsaken Inn
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-2-20/_warps.txt",
diff --git a/npc/008-2-20/_warps.txt b/npc/008-2-20/_warps.txt
new file mode 100644
index 00000000..ce2f572a
--- /dev/null
+++ b/npc/008-2-20/_warps.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-20: Forsaken Inn warps
+008-2-20,25,32,0 warp #008-2-20_25_32 0,0,008-1,256,204
+008-2-20,36,38,0 warp #008-2-20_36_38 1,0,008-2-21,34,28
diff --git a/npc/008-2-21/_import.txt b/npc/008-2-21/_import.txt
new file mode 100644
index 00000000..efdf5df8
--- /dev/null
+++ b/npc/008-2-21/_import.txt
@@ -0,0 +1,3 @@
+// Map 008-2-21: Forsaken Inn Basement
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-2-21/_warps.txt",
diff --git a/npc/008-2-21/_warps.txt b/npc/008-2-21/_warps.txt
new file mode 100644
index 00000000..90e3be7f
--- /dev/null
+++ b/npc/008-2-21/_warps.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-21: Forsaken Inn Basement warps
+008-2-21,34,27,0 warp #008-2-21_34_26 1,0,008-2-20,35,36
+008-2-21,22,43,0 warp #008-2-21_22_43 0,0,008-1,252,212
diff --git a/npc/008-2-22/_import.txt b/npc/008-2-22/_import.txt
new file mode 100644
index 00000000..3be6edbd
--- /dev/null
+++ b/npc/008-2-22/_import.txt
@@ -0,0 +1,4 @@
+// Map 008-2-22: Mages Hut
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-2-22/_savepoints.txt",
+"npc/008-2-22/_warps.txt",
diff --git a/npc/008-2-22/_savepoints.txt b/npc/008-2-22/_savepoints.txt
new file mode 100644
index 00000000..999032f6
--- /dev/null
+++ b/npc/008-2-22/_savepoints.txt
@@ -0,0 +1,11 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-22: Mages Hut saves
+008-2-22,26,31,0 script #save_008-2-22_26_31 NPC_SAVE_POINT,{
+ savepointparticle .map$, .x, .y, CURRENT_INN;
+ close;
+
+OnInit:
+ .distance = 2;
+ .sex = G_OTHER;
+ end;
+}
diff --git a/npc/008-2-22/_warps.txt b/npc/008-2-22/_warps.txt
new file mode 100644
index 00000000..c45099dc
--- /dev/null
+++ b/npc/008-2-22/_warps.txt
@@ -0,0 +1,3 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-22: Mages Hut warps
+008-2-22,30,35,0 warp #008-2-22_30_35 0,0,008-1,122,115
diff --git a/npc/008-2-23/_import.txt b/npc/008-2-23/_import.txt
new file mode 100644
index 00000000..feb70f60
--- /dev/null
+++ b/npc/008-2-23/_import.txt
@@ -0,0 +1,3 @@
+// Map 008-2-23: Mouboo Farm
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-2-23/_warps.txt",
diff --git a/npc/008-2-23/_warps.txt b/npc/008-2-23/_warps.txt
new file mode 100644
index 00000000..4bd4b6ee
--- /dev/null
+++ b/npc/008-2-23/_warps.txt
@@ -0,0 +1,3 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-23: Mouboo Farm warps
+008-2-23,52,40,0 warp #008-2-23_52_40 0,0,008-1,71,129
diff --git a/npc/008-2-24/_import.txt b/npc/008-2-24/_import.txt
new file mode 100644
index 00000000..e8f862f4
--- /dev/null
+++ b/npc/008-2-24/_import.txt
@@ -0,0 +1,3 @@
+// Map 008-2-24: Dimond's Cove Ground Floor
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-2-24/_warps.txt",
diff --git a/npc/008-2-24/_warps.txt b/npc/008-2-24/_warps.txt
new file mode 100644
index 00000000..c72b102d
--- /dev/null
+++ b/npc/008-2-24/_warps.txt
@@ -0,0 +1,5 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-24: Dimond's Cove Ground Floor warps
+008-2-24,27,24,0 warp #008-2-24_27_24 0,0,008-2-27,44,28
+008-2-24,40,27,0 warp #008-2-24_40_27 2,0,008-2-25,41,27
+008-2-24,32,46,0 warp #008-2-24_32_46 0,0,008-1,106,222
diff --git a/npc/008-2-25/_import.txt b/npc/008-2-25/_import.txt
new file mode 100644
index 00000000..02e36d2e
--- /dev/null
+++ b/npc/008-2-25/_import.txt
@@ -0,0 +1,3 @@
+// Map 008-2-25: Dimond's Cove Second Floor
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-2-25/_warps.txt",
diff --git a/npc/008-2-25/_warps.txt b/npc/008-2-25/_warps.txt
new file mode 100644
index 00000000..d7199084
--- /dev/null
+++ b/npc/008-2-25/_warps.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-25: Dimond's Cove Second Floor warps
+008-2-25,25,27,0 warp #008-2-25_25_27 2,0,008-2-26,23,25
+008-2-25,41,29,0 warp #008-2-25_41_29 2,0,008-2-24,40,30
diff --git a/npc/008-2-26/_import.txt b/npc/008-2-26/_import.txt
new file mode 100644
index 00000000..9b4f3a94
--- /dev/null
+++ b/npc/008-2-26/_import.txt
@@ -0,0 +1,3 @@
+// Map 008-2-26: Dimond's Cove Third Floor
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-2-26/_warps.txt",
diff --git a/npc/008-2-26/_warps.txt b/npc/008-2-26/_warps.txt
new file mode 100644
index 00000000..e370bcef
--- /dev/null
+++ b/npc/008-2-26/_warps.txt
@@ -0,0 +1,3 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-26: Dimond's Cove Third Floor warps
+008-2-26,24,27,0 warp #008-2-26_24_27 1,0,008-2-25,25,29
diff --git a/npc/008-2-27/_import.txt b/npc/008-2-27/_import.txt
new file mode 100644
index 00000000..98ec740f
--- /dev/null
+++ b/npc/008-2-27/_import.txt
@@ -0,0 +1,3 @@
+// Map 008-2-27: Dimond's Cove Cellar
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-2-27/_warps.txt",
diff --git a/npc/008-2-27/_warps.txt b/npc/008-2-27/_warps.txt
new file mode 100644
index 00000000..350010dc
--- /dev/null
+++ b/npc/008-2-27/_warps.txt
@@ -0,0 +1,3 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-27: Dimond's Cove Cellar warps
+008-2-27,45,28,0 warp #008-2-27_45_28 0,1,008-2-24,28,24
diff --git a/npc/008-2-28/_import.txt b/npc/008-2-28/_import.txt
new file mode 100644
index 00000000..0510c48c
--- /dev/null
+++ b/npc/008-2-28/_import.txt
@@ -0,0 +1,3 @@
+// Map 008-2-28: Big House
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-2-28/_warps.txt",
diff --git a/npc/008-2-28/_warps.txt b/npc/008-2-28/_warps.txt
new file mode 100644
index 00000000..c83ed168
--- /dev/null
+++ b/npc/008-2-28/_warps.txt
@@ -0,0 +1,3 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-28: Big House warps
+008-2-28,25,32,0 warp #008-2-28_25_32 0,0,008-1,257,131
diff --git a/npc/008-2-29/_import.txt b/npc/008-2-29/_import.txt
new file mode 100644
index 00000000..d708d657
--- /dev/null
+++ b/npc/008-2-29/_import.txt
@@ -0,0 +1,3 @@
+// Map 008-2-29: Pool House
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-2-29/_warps.txt",
diff --git a/npc/008-2-29/_warps.txt b/npc/008-2-29/_warps.txt
new file mode 100644
index 00000000..40d34697
--- /dev/null
+++ b/npc/008-2-29/_warps.txt
@@ -0,0 +1,3 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-29: Pool House warps
+008-2-29,37,24,0 warp #008-2-29_37_24 0,0,008-1,234,131
diff --git a/npc/008-2-3/_import.txt b/npc/008-2-3/_import.txt
index ed172cc7..69f68a67 100644
--- a/npc/008-2-3/_import.txt
+++ b/npc/008-2-3/_import.txt
@@ -1,4 +1,5 @@
// Map 008-2-3: The Rusty Pick
// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-2-3/_savepoints.txt",
"npc/008-2-3/_warps.txt",
"npc/008-2-3/mapflags.txt",
diff --git a/npc/008-2-3/_savepoints.txt b/npc/008-2-3/_savepoints.txt
new file mode 100644
index 00000000..ab7e555d
--- /dev/null
+++ b/npc/008-2-3/_savepoints.txt
@@ -0,0 +1,74 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-3: The Rusty Pick saves
+008-2-3,61,31,0 script #save_008-2-3_61_31 NPC_SAVE_POINT,{
+ savepointparticle .map$, .x, .y, CURRENT_INN;
+ close;
+
+OnInit:
+ .distance = 2;
+ .sex = G_OTHER;
+ end;
+}
+008-2-3,60,35,0 script #save_008-2-3_60_35 NPC_SAVE_POINT,{
+ savepointparticle .map$, .x, .y, CURRENT_INN;
+ close;
+
+OnInit:
+ .distance = 2;
+ .sex = G_OTHER;
+ end;
+}
+008-2-3,57,31,0 script #save_008-2-3_57_31 NPC_SAVE_POINT,{
+ savepointparticle .map$, .x, .y, CURRENT_INN;
+ close;
+
+OnInit:
+ .distance = 2;
+ .sex = G_OTHER;
+ end;
+}
+008-2-3,57,35,0 script #save_008-2-3_57_35 NPC_SAVE_POINT,{
+ savepointparticle .map$, .x, .y, CURRENT_INN;
+ close;
+
+OnInit:
+ .distance = 2;
+ .sex = G_OTHER;
+ end;
+}
+008-2-3,53,35,0 script #save_008-2-3_53_35 NPC_SAVE_POINT,{
+ savepointparticle .map$, .x, .y, CURRENT_INN;
+ close;
+
+OnInit:
+ .distance = 2;
+ .sex = G_OTHER;
+ end;
+}
+008-2-3,53,31,0 script #save_008-2-3_53_31 NPC_SAVE_POINT,{
+ savepointparticle .map$, .x, .y, CURRENT_INN;
+ close;
+
+OnInit:
+ .distance = 2;
+ .sex = G_OTHER;
+ end;
+}
+008-2-3,49,31,0 script #save_008-2-3_49_31 NPC_SAVE_POINT,{
+ savepointparticle .map$, .x, .y, CURRENT_INN;
+ close;
+
+OnInit:
+ .distance = 2;
+ .sex = G_OTHER;
+ end;
+}
+008-2-3,49,35,0 script #save_008-2-3_49_35 NPC_SAVE_POINT,{
+ savepointparticle .map$, .x, .y, CURRENT_INN;
+ close;
+
+OnInit:
+ .distance = 2;
+ .sex = G_OTHER;
+ end;
+}
diff --git a/npc/008-2-3/_warps.txt b/npc/008-2-3/_warps.txt
index 957ed686..3233aa46 100644
--- a/npc/008-2-3/_warps.txt
+++ b/npc/008-2-3/_warps.txt
@@ -1,3 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 008-2-3: The Rusty Pick warps
-008-2-3,67,29,0 warp #008-2-3_67_29 1,0,008-2-2,51,26
+008-2-3,67,29,0 warp #008-2-3_67_29 1,0,008-2-2,51,29
diff --git a/npc/008-2-30/_import.txt b/npc/008-2-30/_import.txt
new file mode 100644
index 00000000..df7088b9
--- /dev/null
+++ b/npc/008-2-30/_import.txt
@@ -0,0 +1,3 @@
+// Map 008-2-30: Hurns Farmhouse
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-2-30/_warps.txt",
diff --git a/npc/008-2-30/_warps.txt b/npc/008-2-30/_warps.txt
new file mode 100644
index 00000000..8afbf1e8
--- /dev/null
+++ b/npc/008-2-30/_warps.txt
@@ -0,0 +1,3 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-2-30: Hurns Farmhouse warps
+008-2-30,52,40,0 warp #008-2-30_52_40 0,0,008-1,287,134
diff --git a/npc/008-2-6/_warps.txt b/npc/008-2-6/_warps.txt
index 98944d50..ed2e74a0 100644
--- a/npc/008-2-6/_warps.txt
+++ b/npc/008-2-6/_warps.txt
@@ -1,3 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 008-2-6: Two Guys One Bed warps
-008-2-6,27,33,0 warp #008-2-6_27_33 0,0,008-1,89,59
+008-2-6,27,34,0 warp #008-2-6_27_34 0,0,008-1,260,106
diff --git a/npc/008-2-7/_warps.txt b/npc/008-2-7/_warps.txt
index 3eb8538a..ffd0f758 100644
--- a/npc/008-2-7/_warps.txt
+++ b/npc/008-2-7/_warps.txt
@@ -1,3 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 008-2-7: Hurnscald Apothecary warps
-008-2-7,36,29,0 warp #008-2-7_36_29 0,0,008-1,101,56
+008-2-7,36,30,0 warp #008-2-7_36_30 0,0,008-1,272,103
diff --git a/npc/008-2-8/_warps.txt b/npc/008-2-8/_warps.txt
index 7e791e85..ca801b84 100644
--- a/npc/008-2-8/_warps.txt
+++ b/npc/008-2-8/_warps.txt
@@ -1,3 +1,4 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 008-2-8: Hurnscald Forge warps
-008-2-8,37,39,0 warp #008-2-8_37_39 1,0,008-1,120,72
+008-2-8,37,39,0 warp #008-2-8_37_39 1,0,008-1,292,119
+008-2-8,26,29,0 warp #008-2-8_26_29 0,0,008-1,287,114
diff --git a/npc/008-2-9/_warps.txt b/npc/008-2-9/_warps.txt
index 7021feae..71ae1413 100644
--- a/npc/008-2-9/_warps.txt
+++ b/npc/008-2-9/_warps.txt
@@ -1,3 +1,3 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 008-2-9: Jack's Abode warps
-008-2-9,30,35,0 warp #008-2-9_30_35 0,0,008-1,72,69
+008-2-9,30,35,0 warp #008-2-9_30_35 0,0,008-1,243,116
diff --git a/npc/008-3-1/_import.txt b/npc/008-3-1/_import.txt
new file mode 100644
index 00000000..36cd6d97
--- /dev/null
+++ b/npc/008-3-1/_import.txt
@@ -0,0 +1,4 @@
+// Map 008-3-1: Bat Cave
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/008-3-1/_mobs.txt",
+"npc/008-3-1/_warps.txt",
diff --git a/npc/008-3-1/_mobs.txt b/npc/008-3-1/_mobs.txt
new file mode 100644
index 00000000..8a09426c
--- /dev/null
+++ b/npc/008-3-1/_mobs.txt
@@ -0,0 +1,8 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-3-1: Bat Cave mobs
+008-3-1,42,35,7,5 monster Crafty 1018,10,1000,120000
+008-3-1,44,54,4,2 monster Crafty 1018,5,10000,75000
+008-3-1,43,39,5,2 monster Spider 1044,1,4000,8000
+008-3-1,46,53,5,2 monster Spider 1044,2,2000,7500
+008-3-1,52,31,0,0 monster Iron Vein 1047,1,600000,60000
+008-3-1,43,25,0,0 monster Coal Vein 1048,1,600000,60000
diff --git a/npc/008-3-1/_warps.txt b/npc/008-3-1/_warps.txt
new file mode 100644
index 00000000..221789b7
--- /dev/null
+++ b/npc/008-3-1/_warps.txt
@@ -0,0 +1,3 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 008-3-1: Bat Cave warps
+008-3-1,34,34,0 warp #008-3-1_34_34 0,0,008-1,128,139
diff --git a/npc/_anchors.txt b/npc/_anchors.txt
new file mode 100644
index 00000000..3630ba7e
--- /dev/null
+++ b/npc/_anchors.txt
@@ -0,0 +1,37 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+
+- script __anchors__ 32767,{
+OnInit:
+ .ht = htnew();
+ htput(.ht, "^ALCH", "001-2-26 32 40");
+ htput(.ht, "^ALIG|^HID", "000-2-4 36 30");
+ htput(.ht, "^ART", "001-1 89 86");
+ htput(.ht, "^BLACK|SMITH", "001-2-27 35 32");
+ htput(.ht, "^CAMP|FIRE", "008-1 55 46");
+ htput(.ht, "^CITY|^HALL", "001-2-7 36 41");
+ htput(.ht, "^DIMOND|COVE", "008-1 106 222");
+ htput(.ht, "^DRA|ISLAND", "000-1 62 111");
+ htput(.ht, "^FARM|MOUB", "008-1 71 129");
+ htput(.ht, "^FIRST|^DECK1?$", "000-2-0 23 28");
+ htput(.ht, "^HARB|^MASTER", "001-2-16 28 32");
+ htput(.ht, "^HOLD$", "000-2-2 42 31");
+ htput(.ht, "^HURN", "008-1 250 109");
+ htput(.ht, "^LEG", "001-2-33 34 42");
+ htput(.ht, "^LIB", "001-2-4 42 35");
+ htput(.ht, "^LIGHT", "001-2-0 37 32");
+ htput(.ht, "^MERCH|^BANK", "001-2-19 28 30");
+ htput(.ht, "^MOON", "001-2-2 40 34");
+ htput(.ht, "^NARD", "000-2-3 21 28");
+ htput(.ht, "^NOBLE1?$", "001-2-1 37 37");
+ htput(.ht, "^NOBLE2$", "001-2-10 40 37");
+ htput(.ht, "^NOBLE3$", "001-2-11 45 33");
+ htput(.ht, "^NOBLE4$", "001-2-12 34 32");
+ htput(.ht, "^NOBLE5$", "001-2-15 34 38");
+ htput(.ht, "^RED|PLUSH|^INN", "001-2-28 30 35");
+ htput(.ht, "^SECOND|^DECK2$", "000-2-1 67 32");
+ htput(.ht, "^SHIP2$", "001-2-21 23 28");
+ htput(.ht, "^START2$", "000-0-0 26 28");
+ htput(.ht, "^START3$", "000-0-1 26 28");
+ htput(.ht, "^START|^BEGIN", "000-0 22 24");
+ htput(.ht, "^WARE", "001-2-18 37 31");
+}
diff --git a/npc/_import.txt b/npc/_import.txt
index 1718dc71..ff79ccb8 100644
--- a/npc/_import.txt
+++ b/npc/_import.txt
@@ -55,6 +55,7 @@
@include "npc/001-2-9/_import.txt"
@include "npc/001-3-0/_import.txt"
@include "npc/001-3-1/_import.txt"
+@include "npc/008-1-1/_import.txt"
@include "npc/008-1/_import.txt"
@include "npc/008-2-0/_import.txt"
@include "npc/008-2-1/_import.txt"
@@ -63,13 +64,31 @@
@include "npc/008-2-12/_import.txt"
@include "npc/008-2-13/_import.txt"
@include "npc/008-2-14/_import.txt"
+@include "npc/008-2-15/_import.txt"
+@include "npc/008-2-16/_import.txt"
+@include "npc/008-2-17/_import.txt"
+@include "npc/008-2-18/_import.txt"
+@include "npc/008-2-19/_import.txt"
@include "npc/008-2-2/_import.txt"
+@include "npc/008-2-20/_import.txt"
+@include "npc/008-2-21/_import.txt"
+@include "npc/008-2-22/_import.txt"
+@include "npc/008-2-23/_import.txt"
+@include "npc/008-2-24/_import.txt"
+@include "npc/008-2-25/_import.txt"
+@include "npc/008-2-26/_import.txt"
+@include "npc/008-2-27/_import.txt"
+@include "npc/008-2-28/_import.txt"
+@include "npc/008-2-29/_import.txt"
@include "npc/008-2-3/_import.txt"
+@include "npc/008-2-30/_import.txt"
@include "npc/008-2-4/_import.txt"
@include "npc/008-2-5/_import.txt"
@include "npc/008-2-6/_import.txt"
@include "npc/008-2-7/_import.txt"
@include "npc/008-2-8/_import.txt"
@include "npc/008-2-9/_import.txt"
+@include "npc/008-3-1/_import.txt"
@include "npc/test/_import.txt"
@include "npc/testbg/_import.txt"
+"npc/_anchors.txt",
diff --git a/npc/commands/warp.txt b/npc/commands/warp.txt
index e64b87db..318489d7 100644
--- a/npc/commands/warp.txt
+++ b/npc/commands/warp.txt
@@ -17,100 +17,74 @@
end;
OnCall:
- .@request$ = strtoupper(strip(.@atcmd_parameters$[0])); // sanitize
- .@map$ = "";
- .@x = 0;
- .@y = 0;
+ .@params$ = strtoupper(strip(implode(.@atcmd_parameters$[0], " ")));
+ .@request$ = replacestr(.@params$, " ", "");
- for (.@i = 0; .@i < .count; .@i += 2)
+ cleararray($@regexmatch$[1], "", 3);
+ if (.@params$ ~= "^(.+) ([0-9]+) ([0-9]+)$")
{
- if (.@request$ ~= .aliases$[.@i])
+ .@request$ = replacestr(strip($@regexmatch$[1]), " ", "");
+ .@req_x = atoi(strip($@regexmatch$[2]));
+ .@req_y = atoi(strip($@regexmatch$[3]));
+ }
+
+ .@ht = getvariableofnpc(.ht, "__anchors__");
+ .@it = htiterator(.@ht);
+ for (.@key$ = htifirstkey(.@it); hticheck(.@it); .@key$ = htinextkey(.@it))
+ {
+ if (.@request$ ~= .@key$)
{
- sscanf .aliases$[.@i + 1], "%s %d %d", .@map$, .@x, .@y;
+ sscanf(htget(.@ht, .@key$, ""), "%s %d %d", .@map$, .@x, .@y);
break;
}
}
+ htidelete(.@it);
- if (.@map$ == "")
- {
- .@map$ = .@atcmd_parameters$[0];
- }
+ .@map$ = .@map$ ? .@map$ : .@request$;
+ .@x = .@req_y ? .@req_x : .@x;
+ .@y = .@req_y ? .@req_y : .@y;
- if (.@atcmd_parameters$[2] != "")
+ if (!map_exists(.@map$))
{
- .@x = atoi(.@atcmd_parameters$[1]);
- .@y = atoi(.@atcmd_parameters$[2]);
- }
-
- // FIXME: here getmapusers() is used only to check if the map exists
- // replace this when/if we get a dedicated function for that
- if (getmapusers(.@map$) < 0)
- {
- end; // invalid map
+ if (map_exists(.@atcmd_parameters$[0]))
+ {
+ .@map$ = .@atcmd_parameters$[0];
+ }
+ else
+ {
+ dispbottom(l("Map or anchor not found: %s", .@atcmd_parameters$[0]));
+ end;
+ }
}
while (!checkcell(.@map$, .@x, .@y, cell_chkpass))
{
- if (.@e == 50) end;
- .@x = rand(20, 250);
- .@y = rand(20, 250);
+ // FIXME: this whole cell finding loop is DIRTY!
+ // we should have a command to get a random free coordinate
+ // or we should make buildin_warp silently ignore 0,0
+
+ if (.@e == 50) break; // FIXME: triggers a console warning
+ .@x = rand(20, 20 + (.@e * 5));
+ .@y = rand(20, 20 + (.@e * 5));
++.@e;
}
- cwarp .@map$, .@x, .@y; // XXX: maybe here use a slide_or_warp function
+ slide_or_warp(.@map$, .@x, .@y);
+ end;
OnInit:
- setarray .aliases$[0],
-
- // ARTIS
- "^ART", "001-1 89 86", // artis town square
- "^LIGHT", "001-2-0 37 32", // light armor shop
- "^NOBLE1?$", "001-2-1 37 37", // noble house 1
- "^NOBLE2$", "001-2-10 40 38", // noble house 2
- "^NOBLE3$", "001-2-11 45 33", // noble house 3
- "^NOBLE4$", "001-2-12 34 32", // noble house 4
- "^NOBLE5$", "001-2-15 34 38", // noble house 5
- "^MOON", "001-2-2 39 34", // moon's house
- "^LIB", "001-2-4 49 37", // library
- "^CITY|^HALL", "001-2-7 36 38", // city hall
- "^HARB|^MASTER", "001-2-16 32 33", // harbourmaster
- "^WARE", "001-2-18 39 31", // warehouse
- "^MERCH|^BANK", "001-2-19 29 31", // merchant hall
- "^SHIP2$", "001-2-21 30 28", // la johanne (artis)
- "^ALCH", "001-2-26 30 32", // alchemist
- "^BLACK|SMITH", "001-2-27 35 32", // blacksmith
- "^RED|PLUSH|^INN", "001-2-28 32 32", // red plush inn
- "^LEG", "001-2-33 34 36", // legion
-
- // PROLOGUE
- "^START|^BEGIN", "000-0 22 24", // starting point
- "^START2$", "000-0-0 26 28", // starting point step 2
- "^START3$", "000-0-1 26 28", // starting point step 3
- "^DRA|ISLAND", "000-1 77 110", // drasil island
- "^FIRST|^DECK1?$", "000-2-0 27 27", // first deck
- "^SECOND|^DECK2$", "000-2-1 53 33", // second deck
- "^HOLD$", "000-2-2 43 30", // hold
- "^NARD", "000-2-3 21 27", // nard's room
- "^ALIG|^HID", "000-2-4 36 29", // alige's hideout
-
- // WOODLAND
- "^HURN", "008-1 79 64", // hurnscald: town square
- "^CELE", "008-2-0 25 27", // hurnscald: celestia
- "^HMER", "008-2-1 33 39", // hurnscald: merchant guild
- "^RUST", "008-2-2 37 30", // hurnscald: inn
- "^ARRO|^ARCH", "008-2-6 27 29", // hurnscald: archery shop
- "^A?POT", "008-2-7 34 27", // hurnscald: potion shop
- "^HBLA", "008-2-8 36 34", // hurnscald: forge
- "^HHAL|^HCIT", "008-2-10 36 31", // hurnscald: city hall
- "HOSP|CLIN", "008-2-13 25 31"; // hurnscald: clinic / hospital
-
- .count = getarraysize(.aliases$[0]);
-
if (debug > 0)
{
- bindatcmd "w", "@w::OnCall", 0, 2, 0;
- end;
+ bindatcmd("w", "@w::OnCall", 0, 2, 0);
+ bindatcmd("go", "@w::OnCall", 0, 2, 0);
+ bindatcmd("to", "@w::OnCall", 0, 2, 0);
+ bindatcmd("warp", "@w::OnCall", 0, 2, 0);
+ }
+ else
+ {
+ bindatcmd("w", "@w::OnCall", 2, 2, 1);
+ bindatcmd("go", "@w::OnCall", 2, 2, 1);
+ bindatcmd("to", "@w::OnCall", 2, 2, 1);
+ bindatcmd("warp", "@w::OnCall", 2, 2, 1);
}
-
- bindatcmd "w", "@w::OnCall", 1, 2, 1;
}
diff --git a/npc/functions/RNGesus.txt b/npc/functions/RNGesus.txt
index f71c2f28..6883f8f1 100644
--- a/npc/functions/RNGesus.txt
+++ b/npc/functions/RNGesus.txt
@@ -21,3 +21,53 @@ function script any {
function script any_of {
return getelementofarray(getarg(0), getarrayindex(getarg(0)) + rand(getarraysize(getarg(0)) - getarrayindex(getarg(0))));
}
+
+
+
+// relative_array_random(<array: 0, {[value, probability]..}>)
+// returns a random entry from the array, by relative probability
+// the first key of the array should be 0 and every entries are a tuple
+// of [value, probability]
+
+function script relative_array_random {
+ .@is_str = getdatatype(getarg(0)) & DATATYPE_STR;
+ .@total_prob = getelementofarray(getarg(0), 0);
+ .@initial_index = getarrayindex(getarg(0));
+ .@initial_index = .@initial_index ? .@initial_index : 1;
+ freeloop(true);
+
+ if (.@total_prob < 1 || getarg(1, false))
+ {
+ // first calculation, or forced re-calculation
+ .@total_prob = 0;
+ .@size = getarraysize(getarg(0));
+
+ for (.@i = .@initial_index + 1; .@i < .@size; .@i += 2) {
+ if (.@is_str) {
+ .@total_prob += max(1, atoi(getelementofarray(getarg(0), .@i)));
+ } else {
+ .@total_prob += max(1, getelementofarray(getarg(0), .@i));
+ }
+ }
+
+ // we cache on the first key
+ set(getelementofarray(getarg(0), 0), .@total_prob);
+ }
+
+ .@target_sum = rand(0, .@total_prob);
+
+ for (.@i = .@initial_index; .@sum < .@target_sum; .@i += 2) {
+ if (.@is_str) {
+ .@sum += atoi(getelementofarray(getarg(0), .@i + 1));
+ } else {
+ .@sum += getelementofarray(getarg(0), .@i + 1);
+ }
+
+ if (.@sum >= .@target_sum) {
+ break;
+ }
+ }
+
+ freeloop(false);
+ return getelementofarray(getarg(0), .@i);
+}
diff --git a/npc/functions/array.txt b/npc/functions/array.txt
index d9d64992..6093aa32 100644
--- a/npc/functions/array.txt
+++ b/npc/functions/array.txt
@@ -310,22 +310,15 @@ function script array_push {
// array_shuffle(<array>)
// shuffles the array
+// uses the Durstenfeld implementation of the Fisher-Yates algorithm
function script array_shuffle {
.@index = getarrayindex(getarg(0));
.@size = getarraysize(getarg(0)) - .@index;
freeloop(true);
- if (isstr(getarg(0)) == 1) {
- copyarray(.@tmp$[0], getarg(0), .@size);
- for (; .@size >= 1; --.@size) {
- set(getelementofarray(getarg(0), .@index + .@size - 1), array_shift(.@tmp$[rand(.@size)]));
- }
- } else {
- copyarray(.@tmp[0], getarg(0), .@size);
- for (; .@size >= 1; --.@size) {
- set(getelementofarray(getarg(0), .@index + .@size - 1), array_shift(.@tmp[rand(.@size)]));
- }
+ for (.@i = .@size - 1; .@i >= .@index + 1; --.@i) {
+ swap(getelementofarray(getarg(0), rand(.@index, .@i)), getelementofarray(getarg(0), .@i));
}
freeloop(false);
@@ -387,7 +380,7 @@ function script array_diff {
-// array_filter(<array>, "<function>")
+// array_filter(<array>, "<function>"{, <neq>})
// filters the array using a callback function
function script array_filter {
@@ -408,3 +401,45 @@ function script array_filter {
freeloop(false);
return .@count;
}
+
+
+
+// array_sort(<array>)
+// sorts the array in ascending order
+// uses the Lomuto implementation of the Quicksort algorithm
+
+function script array_sort {
+ callsub(S_Quicksort, getarg(0), getarrayindex(getarg(0)), getarraysize(getarg(0)) - 1);
+ return true;
+
+S_Quicksort:
+ if (getarg(1) < getarg(2)) {
+ .@p = callsub(S_Partition, getarg(0), getarg(1), getarg(2));
+ callsub(S_Quicksort, getarg(0), getarg(1), .@p - 1);
+ callsub(S_Quicksort, getarg(0), .@p + 1, getarg(2));
+ }
+ return true;
+
+S_Partition:
+ .@i = getarg(1) - 1;
+
+ freeloop(true);
+ for (.@j = getarg(1); .@j <= getarg(2) - 1; ++.@j) {
+ if (getelementofarray(getarg(0), .@j) < getelementofarray(getarg(0), getarg(2))) {
+ swap(getelementofarray(getarg(0), ++.@i), getelementofarray(getarg(0), .@j));
+ }
+ }
+ freeloop(false);
+
+ swap(getelementofarray(getarg(0), ++.@i), getelementofarray(getarg(0), getarg(2)));
+ return .@i;
+}
+
+
+
+// array_rsort(<array>)
+// sorts the array in descending order
+
+function script array_rsort {
+ return array_sort(getarg(0)) && array_reverse(getarg(0));
+}
diff --git a/npc/functions/clientversion.txt b/npc/functions/clientversion.txt
index 9d502be3..93a6b371 100644
--- a/npc/functions/clientversion.txt
+++ b/npc/functions/clientversion.txt
@@ -5,7 +5,7 @@
// Function checking the client version and reports if it is too old.
function script checkclientversion {
- if (ClientVersion > 20) return;
+ if (ClientVersion > 23) return;
mesn "Narrator";
mes col("Warning.", 9);
diff --git a/npc/functions/confused-tree-dict.txt b/npc/functions/confused-tree-dict.txt
index 4250ec35..138c4704 100644
--- a/npc/functions/confused-tree-dict.txt
+++ b/npc/functions/confused-tree-dict.txt
@@ -33,7 +33,7 @@ function script TREE_dictionaries {
// the substitutions are an array separated by backticks (`)
// XXX: this could become a hashtable at some point if it gets too big
- setarray getvariableofnpc(.alias$[0], .npc$),
+ setarray(getvariableofnpc(.alias$[0], .npc$),
"^veryape(?:gm)?$", "hairyape",
"^wu-?shin$", "Dwarven Princess`"
@@ -52,8 +52,8 @@ function script TREE_dictionaries {
"o'matt",
"^prsm$", "Refractor`"
- "Overlord";
- set getvariableofnpc(.alias, .npc$), getarraysize(getvariableofnpc(.alias$, .npc$));
+ "Overlord");
+ set(getvariableofnpc(.alias, .npc$), getarraysize(getvariableofnpc(.alias$, .npc$)));
@@ -62,499 +62,454 @@ function script TREE_dictionaries {
// and allow {{variables}}
// XXX: this could become a hashtable at some point if it gets too big
- setarray getvariableofnpc(.sdrops$[0], .npc$),
+ setarray(getvariableofnpc(.sdrops$[0], .npc$),
"^reid$", "*drops an empty jar of Nutella on ~p*",
- "^omatt$", "*drops Elisabeth Granneman on ~p*";
- set getvariableofnpc(.sdrops, .npc$), getarraysize(getvariableofnpc(.sdrops$, .npc$));
+ "^omatt$", "*drops Elisabeth Granneman on ~p*");
+ set(getvariableofnpc(.sdrops, .npc$), getarraysize(getvariableofnpc(.sdrops$, .npc$)));
// variables below
- setarray getvariableofnpc(.D_size$[0], .npc$), // {{size}}
- "tiny",
- "small",
- "perfectly sized",
- "large",
- "huge",
- "humongous",
- "ginormous";
- set getvariableofnpc(.D_size, .npc$), getarraysize(getvariableofnpc(.D_size$, .npc$));
-
- setarray getvariableofnpc(.D_color$[0], .npc$), // {{color}}
- "red",
- "orange",
- "yellow",
- "pink",
- "aqua",
- "cyan",
- "blue",
- "indigo",
- "violet",
- "purple",
- "magenta",
- "pink",
- "black",
- "white",
- "grey",
- "greyscale",
- "brown",
- "maroon",
- "turquoise",
- "lime",
- "sky blue",
- "invisible";
- set getvariableofnpc(.D_color, .npc$), getarraysize(getvariableofnpc(.D_color$, .npc$));
-
- setarray getvariableofnpc(.D_violentadverb$[0], .npc$), // {{violent adverb}}
- "violently",
- "repeatedly",
- "casually",
- "forcefully",
- "slowly",
- "carefully",
- "hopefully",
- "dangerously",
- "shockingly",
- "religiously";
- set getvariableofnpc(.D_violentadverb, .npc$), getarraysize(getvariableofnpc(.D_violentadverb$, .npc$));
-
- setarray getvariableofnpc(.D_hello$[0], .npc$), // {{hello}}
- "hi",
- "hi",
- "hi",
- "hi",
- "hey",
- "hey",
- "hey",
- "yo",
- "yo",
- "hello",
- "hello",
- "hello",
- "hello",
- "hello",
- "hello",
- "hello",
- "hello",
- "hello",
- "hello",
- "howdy",
- "bonjour";
- set getvariableofnpc(.D_hello, .npc$), getarraysize(getvariableofnpc(.D_hello$, .npc$));
-
- setarray getvariableofnpc(.D_violentverb$[0], .npc$), // {{violent verb}}
- "slaps",
- "slaps",
- "slaps",
- "slaps",
- "slaps", // yeah the tree likes to slap a lot
- "hits",
- "pummels",
- "beats",
- "flattens",
- "taunts",
- "liquidates",
- "spanks",
- "affronts",
- "tranquilizes",
- "atomizes",
- "impales",
- "dismembers";
- set getvariableofnpc(.D_violentverb, .npc$), getarraysize(getvariableofnpc(.D_violentverb$, .npc$));
-
- setarray getvariableofnpc(.D_location$[0], .npc$), // {{location}}
- "Artis",
- "Hurnscald",
- "Tulimshar",
- "Nivalis",
- "Candor",
- "Drasil";
- set getvariableofnpc(.D_location, .npc$), getarraysize(getvariableofnpc(.D_location$, .npc$));
-
- setarray getvariableofnpc(.D_sizeableobject$[0], .npc$), // {{sizeable object}}
- "trout",
- "whale",
- "space whale",
- "penguin",
- "coelacanth",
- "squid",
- "shrimp",
- "crab",
- "tentacle",
- "dictionary",
- "grammar book",
- "textbook",
- "dinosaur",
- "t-rex",
- "star-nosed mole",
- "chimpanzee",
- "mermaid",
- "merman",
- "piano",
- "prince",
- "princess",
- "pinkie",
- "squirrel",
- "mouboo",
- "wet mop",
- "drunken pirate",
- "cake",
- "cookie",
- "chocobo",
- "restraining order",
- "freight train",
- "carnival hammer",
- "crate",
- "bomb",
- "bowl of petinuas",
- "box",
- "platypus",
- "magic eightball",
- "vase";
- set getvariableofnpc(.D_sizeableobject, .npc$), getarraysize(getvariableofnpc(.D_sizeableobject$, .npc$));
-
- setarray getvariableofnpc(.D_nsizeableobject$[0], .npc$), // {{n sizeable object}}
- "octopus",
- "elephant",
- "angry cat",
- "anvil",
- "encyclopedia set";
- set getvariableofnpc(.D_nsizeableobject, .npc$), getarraysize(getvariableofnpc(.D_nsizeableobject$, .npc$));
-
- setarray getvariableofnpc(.D_someone$[0], .npc$), // {{someone}}
- "Voldemort",
- "Cthulhu",
- "Platyna",
- "Hitler",
- "Luvia",
- "General Krukan",
- "Borg Queen",
- "Freeyorp",
- "MadCamel";
- set getvariableofnpc(.D_someone, .npc$), getarraysize(getvariableofnpc(.D_someone$, .npc$));
+ setarray(getvariableofnpc(.D_size$[1], .npc$), // {{size}}
+ "tiny", 1,
+ "small", 1,
+ "perfectly sized", 1,
+ "large", 1,
+ "huge", 1,
+ "humongous", 1,
+ "ginormous", 1);
+ set(getvariableofnpc(.D_size, .npc$), getarraysize(getvariableofnpc(.D_size$, .npc$)));
+
+ setarray(getvariableofnpc(.D_color$[1], .npc$), // {{color}}
+ "red", 1,
+ "orange", 1,
+ "yellow", 1,
+ "pink", 1,
+ "aqua", 1,
+ "cyan", 1,
+ "blue", 1,
+ "indigo", 1,
+ "violet", 1,
+ "purple", 1,
+ "magenta", 1,
+ "pink", 1,
+ "black", 1,
+ "white", 1,
+ "grey", 1,
+ "greyscale", 1,
+ "brown", 1,
+ "maroon", 1,
+ "turquoise", 1,
+ "lime", 1,
+ "sky blue", 1,
+ "invisible", 1);
+ set(getvariableofnpc(.D_color, .npc$), getarraysize(getvariableofnpc(.D_color$, .npc$)));
+
+ setarray(getvariableofnpc(.D_violentadverb$[1], .npc$), // {{violent adverb}}
+ "violently", 1,
+ "repeatedly", 1,
+ "casually", 1,
+ "forcefully", 1,
+ "slowly", 1,
+ "carefully", 1,
+ "hopefully", 1,
+ "dangerously", 1,
+ "shockingly", 1,
+ "religiously", 1);
+ set(getvariableofnpc(.D_violentadverb, .npc$), getarraysize(getvariableofnpc(.D_violentadverb$, .npc$)));
+
+ setarray(getvariableofnpc(.D_hello$[1], .npc$), // {{hello}}
+ "hi", 4,
+ "hey", 3,
+ "yo", 2,
+ "hello", 10,
+ "howdy", 1,
+ "bonjour", 1);
+ set(getvariableofnpc(.D_hello, .npc$), getarraysize(getvariableofnpc(.D_hello$, .npc$)));
+
+ setarray(getvariableofnpc(.D_violentverb$[1], .npc$), // {{violent verb}}
+ "slaps", 5,
+ "hits", 1,
+ "pummels", 1,
+ "beats", 1,
+ "flattens", 1,
+ "taunts", 1,
+ "liquidates", 1,
+ "spanks", 1,
+ "affronts", 1,
+ "tranquilizes", 1,
+ "atomizes", 1,
+ "impales", 1,
+ "dismembers", 1);
+ set(getvariableofnpc(.D_violentverb, .npc$), getarraysize(getvariableofnpc(.D_violentverb$, .npc$)));
+
+ setarray(getvariableofnpc(.D_location$[1], .npc$), // {{location}}
+ "Artis", 1,
+ "Hurnscald", 1,
+ "Tulimshar", 1,
+ "Nivalis", 1,
+ "Candor", 1,
+ "Drasil", 1);
+ set(getvariableofnpc(.D_location, .npc$), getarraysize(getvariableofnpc(.D_location$, .npc$)));
+
+ setarray(getvariableofnpc(.D_sizeableobject$[1], .npc$), // {{sizeable object}}
+ "trout", 1,
+ "whale", 1,
+ "space whale", 1,
+ "penguin", 1,
+ "coelacanth", 1,
+ "squid", 1,
+ "shrimp", 1,
+ "crab", 1,
+ "tentacle", 1,
+ "dictionary", 1,
+ "grammar book", 1,
+ "textbook", 1,
+ "dinosaur", 1,
+ "t-rex", 1,
+ "star-nosed mole", 1,
+ "chimpanzee", 1,
+ "mermaid", 1,
+ "merman", 1,
+ "piano", 1,
+ "prince", 1,
+ "princess", 1,
+ "pinkie", 1,
+ "squirrel", 1,
+ "mouboo", 1,
+ "wet mop", 1,
+ "drunken pirate", 1,
+ "cake", 1,
+ "cookie", 1,
+ "chocobo", 1,
+ "restraining order", 1,
+ "freight train", 1,
+ "carnival hammer", 1,
+ "crate", 1,
+ "bomb", 1,
+ "bowl of petinuas", 1,
+ "box", 1,
+ "platypus", 1,
+ "magic eightball", 1,
+ "vase", 1);
+ set(getvariableofnpc(.D_sizeableobject, .npc$), getarraysize(getvariableofnpc(.D_sizeableobject$, .npc$)));
+
+ setarray(getvariableofnpc(.D_nsizeableobject$[1], .npc$), // {{n sizeable object}}
+ "octopus", 1,
+ "elephant", 1,
+ "angry cat", 1,
+ "anvil", 1,
+ "encyclopedia set", 1);
+ set(getvariableofnpc(.D_nsizeableobject, .npc$), getarraysize(getvariableofnpc(.D_nsizeableobject$, .npc$)));
+
+ setarray(getvariableofnpc(.D_someone$[1], .npc$), // {{someone}}
+ "Voldemort", 1,
+ "Cthulhu", 1,
+ "Platyna", 1,
+ "Hitler", 1,
+ "Luvia", 1,
+ "General Krukan", 1,
+ "Borg Queen", 1,
+ "Freeyorp", 1,
+ "MadCamel", 1);
+ set(getvariableofnpc(.D_someone, .npc$), getarraysize(getvariableofnpc(.D_someone$, .npc$)));
// replies below
- setarray getvariableofnpc(.greetings$[0], .npc$),
- "{{^ hello }} ~p!",
- "{{^ hello }} ~p!",
- "{{^ hello }} ~p!",
- "{{^ hello }} ~p!",
- "{{^ hello }} ~p.",
- "{{^ hello }} ~p.",
- "{{^ hello }} ~p.",
- "{{^ hello }} ~p.",
- "{{^ hello }} ~p.",
- "{{^ hello }} ~p.",
- "{{^ hello }} ~p, what's up?",
- "{{^ hello }} ~p, anything new?",
- "{{^ hello }} ~p, how are you?",
- "~p!!!!",
- "~p!!!",
- "~p!!",
- "{{^ hello }} ~p! You are looking lovely today!",
- "Welcome back, ~p.",
- "Welcome back, ~p.",
- "Welcome back, ~p.",
- "~p is back!!",
- "Hello and welcome to the Aperture Science computer-aided enrichment center.",
- "Greetings ~p.",
- "What's up ~p?",
- "What's up ~p?",
- "How are you ~p?";
- set getvariableofnpc(.greetings, .npc$), getarraysize(getvariableofnpc(.greetings$, .npc$));
-
- setarray getvariableofnpc(.jokes$[0], .npc$),
- "How did the tree get drunk? On root beer.",
- "Do you think I'm lazy?",
- "I miss CrazyTree %%S.",
- "I miss LazyTree %%S.",
- "I'm not telling you!",
- "*sighs.*",
- "If I do it for you, then I have to do it for everybody.",
- "What did the beaver say to the tree? It's been nice gnawing you.",
- "What did the little tree say to the big tree? Leaf me alone.",
- "What did the tree wear to the pool party? Swimming trunks.",
- "What do trees give to their dogs? Treets.",
- "What do you call a tree that only eats meat? Carniforous.",
- "What do you call a tree who's always envious? Evergreen.",
- "What is the tree's least favourite month? Sep-timber!",
- "What kind of tree can fit into your hand? A palm-tree.",
- "What was the tree's favorite subject in school? Chemistree.",
- "Why did the leaf go to the doctor? It was feeling green.",
- "Why doesn't the tree need sudo? Because it has root.",
- "Why was the cat afraid of the tree? Because of its bark.",
- "Why was the tree executed? For treeson.",
- "How do trees get on the internet? They log in.",
- "Why did the pine tree get into trouble? Because it was being knotty.",
- "Did you hear the one about the oak tree? It's a corn-y one!",
- "What do you call a blonde in a tree with a briefcase? Branch Manager.",
- "How is an apple like a lawyer? They both look good hanging from a tree.",
- "Why did the sheriff arrest the tree? Because its leaves rustled.",
- "I'm too tired, ask someone else.",
- "If you are trying to get me to tell jokes you are barking up the wrong tree!",
- "You wooden think they were funny anyhow. Leaf me alone!",
- "What is brown and sticky? A stick.",
- "What's the best way to carve wood? Whittle by whittle.",
- "What did the tree do when the bank closed? It started its own branch.",
- "Do you want a brief explanation of an acorn? In a nutshell, it’s an oak tree.",
- "A snare drum and a crash cymbal fell out of a tree. *BA-DUM TSSSHH*",
- "How do you properly identify a dogwood tree? By the bark!",
- "Where do saplings go to learn? Elementree school.",
- "Why do trees make great thieves? Sticky fingers.",
- "What is green, has leaves, and a trunk? A houseplant going on vacation.",
- "Where can Adansonia trees go for a quick trim? To the baobarber.",
- "What looks like half a spruce tree? The other half.",
- "What do you give to a sick citrus tree? Lemon aid.",
- "What did the tree say to the drill? You bore me.",
- "What happened to the wooden car with wooden wheels and a wooden engine? It wooden go.",
- "How do trees keep you in suspense? I'll tell you tomorrow.",
- "Where do birch trees keep their valuables? In a river bank.",
- "What kind of stories do giant sequoia trees tell? Tall tales.",
- "What is the most frustrating thing about being a tree? Having so many limbs and not being able to walk.",
- "What's black, highly dangerous, and lives in a tree? A crow with a machine gun.",
- "What kind of wood doesn't float? Natalie Wood.",
- "Two men passed a sign while looking for work. It was for tree fellers. They said: “what a shame, there are only two of us”.";
- set getvariableofnpc(.jokes, .npc$), getarraysize(getvariableofnpc(.jokes$, .npc$));
-
- setarray getvariableofnpc(.healing$[0], .npc$),
- "Eat an apple, they're good for you.",
- "If I do it for you, then I have to do it for everybody.",
- "Oh, go drink a potion or something.",
- "Whoops! I lost my spellbook.",
- "No mana.";
- set getvariableofnpc(.healing, .npc$), getarraysize(getvariableofnpc(.healing$, .npc$));
-
- setarray getvariableofnpc(.whoami$[0], .npc$),
- "An undercover GM.",
- "An exiled GM.",
- "I'm not telling you!",
- "I'm a bot! I'll be level 99 one day! Mwahahahaaha!!!111!",
- "Somebody said I'm a Chinese copy of CrazyTree.",
- "I am your evil twin.",
- "I don't remember anything after I woke up! What happened to me?",
- "I don't know. Why am I here??",
- "Who are you?",
- "On the 8th day, God was bored and said 'There will be bots'. So here I am.",
- "♪ I'm your hell, I'm your dream, I'm nothing in between ♪♪",
- "♪♪ Aperture Science. We do what we must, because... we can ♪",
- "I'm just a reincarnation of a copy.";
- set getvariableofnpc(.whoami, .npc$), getarraysize(getvariableofnpc(.whoami$, .npc$));
-
- setarray getvariableofnpc(.drops$[0], .npc$),
- "*drops a {{ sizeable object }} on ~p's head.*",
- "*drops a {{ sizeable object }} on ~p's head.*",
- "*drops a {{ sizeable object }} on ~p's head.*",
- "*drops a {{ sizeable object }} on ~p's head.*",
- "*drops a {{ sizeable object }} on ~p's head.*",
- "*drops a {{ sizeable object }} on ~p's head.*",
- "*drops a {{ sizeable object }} on ~p's head.*",
- "*drops a {{ sizeable object }} on ~p's head.*",
- "*drops an {{ n sizeable object }} on ~p's head.*",
- "*drops an {{ n sizeable object }} on ~p's head.*",
- "*drops {{ someone }} on ~p's head.*",
- "*drops a coin on ~p's head.*",
- "*drops a fruit on ~p's head.*",
- "*drops an apple on ~p's head.*",
- "*drops an iten on ~p's head.*",
- "*drops a GM on ~p.*",
- "*drops a piece of moon rock on ~p's head.*",
- "*drops a pin on ~p's head.*",
- "*drops a rock on ~p's head.*",
- "*drops a tub of paint on ~p's head.*",
- "*drops a sandworm on ~p.*",
- "*drops an idea in ~p's head.*",
- "*drops The Hitchhiker's Guide to the Galaxy on ~p's head.*",
- "Ouch.",
- "Ouchy.",
- "*drops dead.*",
- "*sighs.*",
- "Leaf me alone.",
- "Stop it! I doesn't drop branches, try the Druid tree for once!";
- set getvariableofnpc(.drops, .npc$), getarraysize(getvariableofnpc(.drops$, .npc$));
-
- setarray getvariableofnpc(.die$[0], .npc$),
- "*drops an iten on ~p's head.*",
- "*drops a piece of moon rock on ~p's head.*",
- "*drops {{ someone }} on ~p's head.*",
- "*drops a {{ sizeable object }} on ~p's head.*",
- "*drops a {{ sizeable object }} on ~p's head.*",
- "*drops a {{ sizeable object }} on ~p's head.*",
- "*drops an {{ n sizeable object }} on ~p's head.*",
- "*drops a {{ size }} {{ sizeable object, n sizeable object }} on ~p's head.*",
- "*drops a {{ size }} {{ color }} {{ sizeable object, n sizeable object }} on ~p's head.*",
- "*{{ violent adverb }} {{ violent verb }} ~p.*",
- "*drops dead.*",
- "*sighs.*",
- "Avada Kedavra!",
- "Make me!",
- "Never!!",
- "You die, ~p!",
- "You die, ~p!",
- "You die, ~p!",
- "You die, ~p!",
- "No!",
- "In a minute.",
- "Suuure... I'll get right on it...";
- set getvariableofnpc(.die, .npc$), getarraysize(getvariableofnpc(.die$, .npc$));
-
- setarray getvariableofnpc(.poke$[0], .npc$),
- "*tickles.*";
- set getvariableofnpc(.poke, .npc$), getarraysize(getvariableofnpc(.poke$, .npc$));
-
- setarray getvariableofnpc(.disgusting$[0], .npc$),
- "Ewwwww %%^.";
- set getvariableofnpc(.disgusting, .npc$), getarraysize(getvariableofnpc(.disgusting$, .npc$));
-
- setarray getvariableofnpc(.answer$[0], .npc$),
- "42.",
- "Kittens.";
- set getvariableofnpc(.answer, .npc$), getarraysize(getvariableofnpc(.answer$, .npc$));
-
- setarray getvariableofnpc(.burning$[0], .npc$),
- "*curses ~p and dies %%c.*",
- "Help! I'm on fire!",
- "Oh hot.. hot hot!",
- "*is glowing.*",
- "*is flaming.*",
- "Ehemm. Where are firefighters? I need them now!",
- "*is so hot!.*",
- "*slowly catches fire.*",
- "*trembles with trepidation.*",
- "*is immune to fire.*";
- set getvariableofnpc(.burning, .npc$), getarraysize(getvariableofnpc(.burning$, .npc$));
-
- setarray getvariableofnpc(.kill$[0], .npc$),
- "*curses ~p and dies %%c.*";
- set getvariableofnpc(.kill, .npc$), getarraysize(getvariableofnpc(.kill$, .npc$));
-
- setarray getvariableofnpc(.silly$[0], .npc$),
- "Hahaha, good one!";
- set getvariableofnpc(.silly, .npc$), getarraysize(getvariableofnpc(.silly$, .npc$));
-
- setarray getvariableofnpc(.love$[0], .npc$),
- "♪♪ and IIII.. will alwayyyys loooovvve youuuuu. ♪♪ %%]",
- "♪♪ nothing's gonna change my love for you, you oughta know by now how much I love you.. ♪ %%]",
- "♪ ..and then I go and spoil it all, by saying something stupid like: “I love you.” ♪",
- "♪ ..won't you find a place for me? somewhere in your heart... ♪♪",
- "Thank you.",
- "♪♪ ..I can't love another when my heart is somewhere far away.. ♪",
- "%%]";
- set getvariableofnpc(.love, .npc$), getarraysize(getvariableofnpc(.love$, .npc$));
-
- setarray getvariableofnpc(.dance$[0], .npc$),
- "I would but I am rooted to the ground.",
- "Have you ever seen a tree dance before?",
- "Hahaha, good one!";
- set getvariableofnpc(.dance, .npc$), getarraysize(getvariableofnpc(.dance$, .npc$));
-
- setarray getvariableofnpc(.hate$[0], .npc$),
- "Right back at you!",
- "Ok...",
- "*pats ~p, let it go...*",
- "Hu hu hu, ~p hates me.";
- set getvariableofnpc(.hate, .npc$), getarraysize(getvariableofnpc(.hate$, .npc$));
-
- setarray getvariableofnpc(.bye$[0], .npc$),
- "*waves goodbye to ~p in tears, come back soon!*";
- set getvariableofnpc(.bye, .npc$), getarraysize(getvariableofnpc(.bye$, .npc$));
-
- setarray getvariableofnpc(.pain$[0], .npc$),
- "Ouch.",
- "Ouchy.",
- "Argh.",
- "Eek.",
- "*howls.*",
- "*screams.*",
- "*groans.*",
- "*cries.*",
- "*faints.*",
- "*shrieks.*",
- "*hides behind itself.*",
- "%%k",
- "Why, what did I do to you? %%i";
- set getvariableofnpc(.pain, .npc$), getarraysize(getvariableofnpc(.pain$, .npc$));
-
- setarray getvariableofnpc(.eightball$[0], .npc$),
- "It is possible.",
- "Yes!",
- "Of course.",
- "Naturally.",
- "Obviously.",
- "It shall be.",
- "The outlook is good.",
- "It is so.",
- "One would be wise to think so.",
- "The answer is certainly yes.",
- "In your dreams.",
- "I doubt it very much.",
- "No chance.",
- "The outlook is very poor.",
- "Unlikely.",
- "About as likely as pigs flying.",
- "You're kidding, right?",
- "NO!",
- "NO.",
- "No.",
- "Maybe...",
- "No clue.",
- "I don't know.",
- "The outlook is hazy, please ask again later.",
- "What are you asking me for?",
- "Come again?",
- "You know the answer better than I.",
- "The answer is def-- oooh! shiny thing!",
- "No idea.",
- "Perhaps.",
- "I think it is better not to tell you.",
- "Error 417: Expectation failed.";
- set getvariableofnpc(.eightball, .npc$), getarraysize(getvariableofnpc(.eightball$, .npc$));
-
- setarray getvariableofnpc(.bad$[0], .npc$),
- "I'm not bad! You are bad!",
- "OK, I'm bad.",
- "I'm just a littttle bad.",
- "Not as bad as the people that made me.";
- set getvariableofnpc(.bad, .npc$), getarraysize(getvariableofnpc(.bad$, .npc$));
-
- setarray getvariableofnpc(.no_idea$[0], .npc$),
- "What?",
- "What??",
- "What?",
- "Whatever.",
- "Hmm...",
- "Hmm...",
- "Huh?",
- "*yawns.*",
- "Wait a minute...",
- "What are you talking about?",
- "Who are you?",
- "What about me?",
- "I don't know what you are talking about",
- "Excuse me?",
- "Very interesting.",
- "Really?",
- "Go on...",
- "*scratches its leafy head.*",
- "*feels a disturbance in the force.*",
- "%%j",
- "*senses a disturbance in the force.*",
- "I'm bored...",
- "%%U",
- "%%[";
- set getvariableofnpc(.no_idea, .npc$), getarraysize(getvariableofnpc(.no_idea$, .npc$));
-
- setarray getvariableofnpc(.shut_up$[0], .npc$),
- "*goes hide in a corner %%S.*";
- set getvariableofnpc(.shut_up, .npc$), getarraysize(getvariableofnpc(.shut_up$, .npc$));
-
- setarray getvariableofnpc(.climb$[0], .npc$),
- "*sways violently.*",
- "*bends all the way to the ground.*",
- "*creaks and bends.*",
- "*welcomes those who come to play %%I.*",
- "*beams with pride.*";
- set getvariableofnpc(.climb, .npc$), getarraysize(getvariableofnpc(.climb$, .npc$));
+ setarray(getvariableofnpc(.greetings$[1], .npc$),
+ "{{^ hello }} ~p!", 4,
+ "{{^ hello }} ~p.", 6,
+ "{{^ hello }} ~p, what's up?", 1,
+ "{{^ hello }} ~p, anything new?", 1,
+ "{{^ hello }} ~p, how are you?", 1,
+ "~p!!!!", 1,
+ "~p!!!", 1,
+ "~p!!", 1,
+ "{{^ hello }} ~p! You are looking lovely today!", 1,
+ "Welcome back, ~p.", 3,
+ "~p is back!!", 1,
+ "Hello and welcome to the Aperture Science computer-aided enrichment center.", 1,
+ "Greetings ~p.", 1,
+ "What's up ~p?", 2,
+ "How are you ~p?", 1);
+ set(getvariableofnpc(.greetings, .npc$), getarraysize(getvariableofnpc(.greetings$, .npc$)));
+
+ setarray(getvariableofnpc(.jokes$[1], .npc$),
+ "How did the tree get drunk? On root beer.", 1,
+ "Do you think I'm lazy?", 1,
+ "I miss CrazyTree %%S.", 1,
+ "I miss LazyTree %%S.", 1,
+ "I'm not telling you!", 1,
+ "*sighs.*", 1,
+ "If I do it for you, then I have to do it for everybody.", 1,
+ "What did the beaver say to the tree? It's been nice gnawing you.", 1,
+ "What did the little tree say to the big tree? Leaf me alone.", 1,
+ "What did the tree wear to the pool party? Swimming trunks.", 1,
+ "What do trees give to their dogs? Treets.", 1,
+ "What do you call a tree that only eats meat? Carniforous.", 1,
+ "What do you call a tree who's always envious? Evergreen.", 1,
+ "What is the tree's least favourite month? Sep-timber!", 1,
+ "What kind of tree can fit into your hand? A palm-tree.", 1,
+ "What was the tree's favorite subject in school? Chemistree.", 1,
+ "Why did the leaf go to the doctor? It was feeling green.", 1,
+ "Why doesn't the tree need sudo? Because it has root.", 1,
+ "Why was the cat afraid of the tree? Because of its bark.", 1,
+ "Why was the tree executed? For treeson.", 1,
+ "How do trees get on the internet? They log in.", 1,
+ "Why did the pine tree get into trouble? Because it was being knotty.", 1,
+ "Did you hear the one about the oak tree? It's a corn-y one!", 1,
+ "What do you call a blonde in a tree with a briefcase? Branch Manager.", 1,
+ "How is an apple like a lawyer? They both look good hanging from a tree.", 1,
+ "Why did the sheriff arrest the tree? Because its leaves rustled.", 1,
+ "I'm too tired, ask someone else.", 1,
+ "If you are trying to get me to tell jokes you are barking up the wrong tree!", 1,
+ "You wooden think they were funny anyhow. Leaf me alone!", 1,
+ "What is brown and sticky? A stick.", 1,
+ "What's the best way to carve wood? Whittle by whittle.", 1,
+ "What did the tree do when the bank closed? It started its own branch.", 1,
+ "Do you want a brief explanation of an acorn? In a nutshell, it’s an oak tree.", 1,
+ "A snare drum and a crash cymbal fell out of a tree. *BA-DUM TSSSHH*", 1,
+ "How do you properly identify a dogwood tree? By the bark!", 1,
+ "Where do saplings go to learn? Elementree school.", 1,
+ "Why do trees make great thieves? Sticky fingers.", 1,
+ "What is green, has leaves, and a trunk? A houseplant going on vacation.", 1,
+ "Where can Adansonia trees go for a quick trim? To the baobarber.", 1,
+ "What looks like half a spruce tree? The other half.", 1,
+ "What do you give to a sick citrus tree? Lemon aid.", 1,
+ "What did the tree say to the drill? You bore me.", 1,
+ "What happened to the wooden car with wooden wheels and a wooden engine? It wooden go.", 1,
+ "How do trees keep you in suspense? I'll tell you tomorrow.", 1,
+ "Where do birch trees keep their valuables? In a river bank.", 1,
+ "What kind of stories do giant sequoia trees tell? Tall tales.", 1,
+ "What is the most frustrating thing about being a tree? Having so many limbs and not being able to walk.", 1,
+ "What's black, highly dangerous, and lives in a tree? A crow with a machine gun.", 1,
+ "What kind of wood doesn't float? Natalie Wood.", 1,
+ "Two men passed a sign while looking for work. It was for tree fellers. They said: “what a shame, there are only two of us”.", 1);
+ set(getvariableofnpc(.jokes, .npc$), getarraysize(getvariableofnpc(.jokes$, .npc$)));
+
+ setarray(getvariableofnpc(.healing$[1], .npc$),
+ "Eat an apple, they're good for you.", 1,
+ "If I do it for you, then I have to do it for everybody.", 1,
+ "Oh, go drink a potion or something.", 1,
+ "Whoops! I lost my spellbook.", 1,
+ "No mana.", 1);
+ set(getvariableofnpc(.healing, .npc$), getarraysize(getvariableofnpc(.healing$, .npc$)));
+
+ setarray(getvariableofnpc(.whoami$[1], .npc$),
+ "An undercover GM.", 1,
+ "An exiled GM.", 1,
+ "I'm not telling you!", 1,
+ "I'm a bot! I'll be level 99 one day! Mwahahahaaha!!!111!", 1,
+ "Somebody said I'm a Chinese copy of CrazyTree.", 1,
+ "I am your evil twin.", 1,
+ "I don't remember anything after I woke up! What happened to me?", 1,
+ "I don't know. Why am I here??", 1,
+ "Who are you?", 1,
+ "On the 8th day, God was bored and said 'There will be bots'. So here I am.", 1,
+ "♪ I'm your hell, I'm your dream, I'm nothing in between ♪♪", 1,
+ "♪♪ Aperture Science. We do what we must, because... we can ♪", 1,
+ "I'm just a reincarnation of a copy.", 1);
+ set(getvariableofnpc(.whoami, .npc$), getarraysize(getvariableofnpc(.whoami$, .npc$)));
+
+ setarray(getvariableofnpc(.drops$[1], .npc$),
+ "*drops a {{ sizeable object }} on ~p's head.*", 8,
+ "*drops an {{ n sizeable object }} on ~p's head.*", 2,
+ "*drops {{ someone }} on ~p's head.*", 1,
+ "*drops a coin on ~p's head.*", 1,
+ "*drops a fruit on ~p's head.*", 1,
+ "*drops an apple on ~p's head.*", 1,
+ "*drops an iten on ~p's head.*", 1,
+ "*drops a GM on ~p.*", 1,
+ "*drops a piece of moon rock on ~p's head.*", 1,
+ "*drops a pin on ~p's head.*", 1,
+ "*drops a rock on ~p's head.*", 1,
+ "*drops a tub of paint on ~p's head.*", 1,
+ "*drops a sandworm on ~p.*", 1,
+ "*drops an idea in ~p's head.*", 1,
+ "*drops The Hitchhiker's Guide to the Galaxy on ~p's head.*", 1,
+ "Ouch.", 1,
+ "Ouchy.", 1,
+ "*drops dead.*", 1,
+ "*sighs.*", 1,
+ "Leaf me alone.", 1,
+ "Stop it! I don't drop branches, try the Druid tree for once!", 1);
+ set(getvariableofnpc(.drops, .npc$), getarraysize(getvariableofnpc(.drops$, .npc$)));
+
+ setarray(getvariableofnpc(.die$[1], .npc$),
+ "*drops an iten on ~p's head.*", 1,
+ "*drops a piece of moon rock on ~p's head.*", 1,
+ "*drops {{ someone }} on ~p's head.*", 1,
+ "*drops a {{ sizeable object }} on ~p's head.*", 3,
+ "*drops an {{ n sizeable object }} on ~p's head.*", 1,
+ "*drops a {{ size }} {{ sizeable object, n sizeable object }} on ~p's head.*", 1,
+ "*drops a {{ size }} {{ color }} {{ sizeable object, n sizeable object }} on ~p's head.*", 1,
+ "*{{ violent adverb }} {{ violent verb }} ~p.*", 1,
+ "*drops dead.*", 1,
+ "*sighs.*", 1,
+ "Avada Kedavra!", 1,
+ "Make me!", 1,
+ "Never!!", 1,
+ "You die, ~p!", 4,
+ "No!", 1,
+ "In a minute.", 1,
+ "Suuure... I'll get right on it...", 1);
+ set(getvariableofnpc(.die, .npc$), getarraysize(getvariableofnpc(.die$, .npc$)));
+
+ setarray(getvariableofnpc(.poke$[1], .npc$),
+ "*tickles.*", 1);
+ set(getvariableofnpc(.poke, .npc$), getarraysize(getvariableofnpc(.poke$, .npc$)));
+
+ setarray(getvariableofnpc(.disgusting$[1], .npc$),
+ "Ewwwww %%^.", 1);
+ set(getvariableofnpc(.disgusting, .npc$), getarraysize(getvariableofnpc(.disgusting$, .npc$)));
+
+ setarray(getvariableofnpc(.answer$[1], .npc$),
+ "42.", 1,
+ "Kittens.", 1);
+ set(getvariableofnpc(.answer, .npc$), getarraysize(getvariableofnpc(.answer$, .npc$)));
+
+ setarray(getvariableofnpc(.burning$[1], .npc$),
+ "*curses ~p and dies %%c.*", 1,
+ "Help! I'm on fire!", 1,
+ "Oh hot.. hot hot!", 1,
+ "*is glowing.*", 1,
+ "*is flaming.*", 1,
+ "Ehemm. Where are firefighters? I need them now!", 1,
+ "*is so hot!.*", 1,
+ "*slowly catches fire.*", 1,
+ "*trembles with trepidation.*", 1,
+ "*is immune to fire.*", 1);
+ set(getvariableofnpc(.burning, .npc$), getarraysize(getvariableofnpc(.burning$, .npc$)));
+
+ setarray(getvariableofnpc(.kill$[1], .npc$),
+ "*curses ~p and dies %%c.*", 1);
+ set(getvariableofnpc(.kill, .npc$), getarraysize(getvariableofnpc(.kill$, .npc$)));
+
+ setarray(getvariableofnpc(.silly$[1], .npc$),
+ "Hahaha, good one!", 1);
+ set(getvariableofnpc(.silly, .npc$), getarraysize(getvariableofnpc(.silly$, .npc$)));
+
+ setarray(getvariableofnpc(.love$[1], .npc$),
+ "♪♪ and IIII.. will alwayyyys loooovvve youuuuu. ♪♪ %%]", 1,
+ "♪♪ nothing's gonna change my love for you, you oughta know by now how much I love you.. ♪ %%]", 1,
+ "♪ ..and then I go and spoil it all, by saying something stupid like: “I love you.” ♪", 1,
+ "♪ ..won't you find a place for me? somewhere in your heart... ♪♪", 1,
+ "Thank you.", 1,
+ "♪♪ ..I can't love another when my heart is somewhere far away.. ♪", 1,
+ "%%]", 1);
+ set(getvariableofnpc(.love, .npc$), getarraysize(getvariableofnpc(.love$, .npc$)));
+
+ setarray(getvariableofnpc(.dance$[1], .npc$),
+ "I would but I am rooted to the ground.", 1,
+ "Have you ever seen a tree dance before?", 1,
+ "Hahaha, good one!", 1);
+ set(getvariableofnpc(.dance, .npc$), getarraysize(getvariableofnpc(.dance$, .npc$)));
+
+ setarray(getvariableofnpc(.hate$[1], .npc$),
+ "Right back at you!", 1,
+ "Ok...", 1,
+ "*pats ~p, let it go...*", 1,
+ "Hu hu hu, ~p hates me.", 1);
+ set(getvariableofnpc(.hate, .npc$), getarraysize(getvariableofnpc(.hate$, .npc$)));
+
+ setarray(getvariableofnpc(.bye$[1], .npc$),
+ "*waves goodbye to ~p in tears, come back soon!*", 1);
+ set(getvariableofnpc(.bye, .npc$), getarraysize(getvariableofnpc(.bye$, .npc$)));
+
+ setarray(getvariableofnpc(.pain$[1], .npc$),
+ "Ouch.", 1,
+ "Ouchy.", 1,
+ "Argh.", 1,
+ "Eek.", 1,
+ "*howls.*", 1,
+ "*screams.*", 1,
+ "*groans.*", 1,
+ "*cries.*", 1,
+ "*faints.*", 1,
+ "*shrieks.*", 1,
+ "*hides behind itself.*", 1,
+ "%%k", 1,
+ "Why, what did I do to you? %%i", 1);
+ set(getvariableofnpc(.pain, .npc$), getarraysize(getvariableofnpc(.pain$, .npc$)));
+
+ setarray(getvariableofnpc(.eightball$[1], .npc$),
+ "It is possible.", 1,
+ "Yes!", 1,
+ "Of course.", 1,
+ "Naturally.", 1,
+ "Obviously.", 1,
+ "It shall be.", 1,
+ "The outlook is good.", 1,
+ "It is so.", 1,
+ "One would be wise to think so.", 1,
+ "The answer is certainly yes.", 1,
+ "In your dreams.", 1,
+ "I doubt it very much.", 1,
+ "No chance.", 1,
+ "The outlook is very poor.", 1,
+ "Unlikely.", 1,
+ "About as likely as pigs flying.", 1,
+ "You're kidding, right?", 1,
+ "NO!", 1,
+ "NO.", 1,
+ "No.", 1,
+ "Maybe...", 1,
+ "No clue.", 1,
+ "I don't know.", 1,
+ "The outlook is hazy, please ask again later.", 1,
+ "What are you asking me for?", 1,
+ "Come again?", 1,
+ "You know the answer better than I.", 1,
+ "The answer is def-- oooh! shiny thing!", 1,
+ "No idea.", 1,
+ "Perhaps.", 1,
+ "I think it is better not to tell you.", 1,
+ "Error 417: Expectation failed.", 1);
+ set(getvariableofnpc(.eightball, .npc$), getarraysize(getvariableofnpc(.eightball$, .npc$)));
+
+ setarray(getvariableofnpc(.bad$[1], .npc$),
+ "I'm not bad! You are bad!", 1,
+ "OK, I'm bad.", 1,
+ "I'm just a littttle bad.", 1,
+ "Not as bad as the people that made me.", 1);
+ set(getvariableofnpc(.bad, .npc$), getarraysize(getvariableofnpc(.bad$, .npc$)));
+
+ setarray(getvariableofnpc(.no_idea$[1], .npc$),
+ "What?", 2,
+ "What??", 1,
+ "Whatever.", 1,
+ "Hmm...", 2,
+ "Huh?", 1,
+ "*yawns.*", 1,
+ "Wait a minute...", 1,
+ "What are you talking about?", 1,
+ "Who are you?", 1,
+ "What about me?", 1,
+ "I don't know what you are talking about", 1,
+ "Excuse me?", 1,
+ "Very interesting.", 1,
+ "Really?", 1,
+ "Go on...", 1,
+ "*scratches its leafy head.*", 1,
+ "*feels a disturbance in the force.*", 1,
+ "%%j", 1,
+ "*senses a disturbance in the force.*", 1,
+ "I'm bored...", 1,
+ "%%U", 1,
+ "%%[", 1);
+ set(getvariableofnpc(.no_idea, .npc$), getarraysize(getvariableofnpc(.no_idea$, .npc$)));
+
+ setarray(getvariableofnpc(.shut_up$[1], .npc$),
+ "*goes hide in a corner %%S.*", 1);
+ set(getvariableofnpc(.shut_up, .npc$), getarraysize(getvariableofnpc(.shut_up$, .npc$)));
+
+ setarray(getvariableofnpc(.climb$[1], .npc$),
+ "*sways violently.*", 1,
+ "*bends all the way to the ground.*", 1,
+ "*creaks and bends.*", 1,
+ "*welcomes those who come to play %%I.*", 1,
+ "*beams with pride.*", 1);
+ set(getvariableofnpc(.climb, .npc$), getarraysize(getvariableofnpc(.climb$, .npc$)));
return;
}
diff --git a/npc/functions/doors.txt b/npc/functions/doors.txt
index c1b6565e..4cca24e3 100644
--- a/npc/functions/doors.txt
+++ b/npc/functions/doors.txt
@@ -7,6 +7,10 @@
// none
function script doorTouch {
+ getmapxy(.@pc_map$, .@pc_x, .@pc_y, UNITTYPE_PC); // get char location
+ if (.@pc_y < .y)
+ end;
+
if (getareausers() <= 1)
{
.dir = 2;
@@ -17,6 +21,9 @@ function script doorTouch {
}
function script doorUnTouch {
+ if (.dir != 2 && .dir != 6)
+ end;
+
if (getareausers(.map$) == 0)
{
.dir = 4;
diff --git a/npc/functions/fishing.txt b/npc/functions/fishing.txt
index 9952fa17..f1782f3e 100644
--- a/npc/functions/fishing.txt
+++ b/npc/functions/fishing.txt
@@ -101,19 +101,13 @@ function script fishing {
.@pull_rand_max = getvariableofnpc(.pull_rand_max, .@npc$);
.@pull_rand_max = (.@pull_rand_max ? .@pull_rand_max : 800);
- .@fish_id = getvariableofnpc(.common_fish, .@npc$);
- .@fish_id = (.@fish_id ? .@fish_id : CommonCarp);
- .@rare_id = getvariableofnpc(.rare_fish, .@npc$);
- .@rare_fish = (.@rare_fish ? .@rare_fish : GrassCarp);
-
- .@rare_fish_chance = getvariableofnpc(.rare_fish_chance, .@npc$);
- .@rare_fish_chance = (.@rare_fish_chance ? .@rare_fish_chance : 25);
-
- if (getvariableofnpc(.bait_ids[0], .@npc$) < 1)
+ if (getvariableofnpc(.bait_ids[1], .@npc$) < 1)
{
// default baits (bait, chance booster)
- setarray getvariableofnpc(.bait_ids[0], .@npc$),
+ // TODO: we should have some fish prefer certain baits while other
+ // prefer other bait. currently all fish prefer the same baits
+ setarray getvariableofnpc(.bait_ids[1], .@npc$),
SmallTentacles, 0,
Bread, 0,
Aquada, 1,
@@ -122,6 +116,14 @@ function script fishing {
Tentacles, 0;
}
+ if (getvariableofnpc(.fish_ids[1], .@npc$) < 1)
+ {
+ // default fish: <array: 0, {[fish, probability]..}>
+ setarray getvariableofnpc(.fish_ids[1], .@npc$),
+ CommonCarp, 25,
+ GrassCarp, 1;
+ }
+
if (.@baits < 1)
{
// only count it once
@@ -178,17 +180,10 @@ function script fishing {
return -4;
}
- // RNG to obtain a rare fish
- // TODO: chance booster
- if (rand(.@rare_fish_chance) == 0)
- {
- // TODO: rare fish array
- .@fish_id = .@rare_id;
- }
- // TODO: else common fish array
+ .@fish_id = relative_array_random(getvariableofnpc(.fish_ids[0], .@npc$));
// RNG to obtain a fish
- if (rand(gettimetick(0) - @fishing_tick) <= .@pull_rand_max)
+ if (rand(gettimetick(0) - @fishing_tick) <= .@pull_rand_max + (100 * @FISHING_BOOSTER[getnpcid(0)]))
{
specialeffect(.@success_fx, SELF, playerattached()); // event success
@@ -244,11 +239,12 @@ function script fishing {
return -6;
}
- for (.@i = 0; .@i < .@baits; .@i += 2)
+ for (.@i = 1; .@i < .@baits; .@i += 2)
{
if (getvariableofnpc(.bait_ids[.@i], .@npc$) == .@bait)
{
.@bait_c = true;
+ @FISHING_BOOSTER[getnpcid(0)] = getvariableofnpc(.bait_ids[.@i + 1], .@npc$);
break;
}
}
diff --git a/npc/functions/game-rules.txt b/npc/functions/game-rules.txt
index f633ee5f..0a9f6569 100644
--- a/npc/functions/game-rules.txt
+++ b/npc/functions/game-rules.txt
@@ -46,12 +46,14 @@ OnCall:
OnUseBook:
if (openbook())
read_book;
- bye;
+ closeclientdialog();
+ close;
OnShelfUse:
if (openbookshelf())
read_book;
- bye;
+ closeclientdialog();
+ close;
OnInit:
.book_name$ = "The Book of Laws";
diff --git a/npc/functions/goodbye.txt b/npc/functions/goodbye.txt
index 0e8dfc2e..6c8879c5 100644
--- a/npc/functions/goodbye.txt
+++ b/npc/functions/goodbye.txt
@@ -1,19 +1,13 @@
// Evol functions.
// Authors:
-// gumi
// Reid
-// Description:
-// script terminator functions
+// goodbye
+// displays a canned message and quits
-// goodbye_msg
-// Tell a random goodbye sentence.
-// Variables:
-// .@rand = Random number between the number of "goodbye" choice.
-
-function script goodbye_msg {
- setarray .byemsg$[0],
+function script goodbye {
+ setarray(.@byemsg$[0],
l("See you!"),
l("See you later!"),
l("See you soon!"),
@@ -26,127 +20,9 @@ function script goodbye_msg {
l("Talk to you later!"),
l("Have a good day!"),
l("Cheers!"),
- l("Take care!");
-
- return .byemsg$[rand(getarraysize(.byemsg$))];
-}
-
-
-
-// cwarp
-// Closes the dialog, then warps the player.
-// You almost always want to use this instead of `warp`.
-// usage:
-// cwarp;
-// cwarp x, y;
-// cwarp map, x, y;
-
-function script cwarp {
- .@map$ = getarg(0, "");
- .@x = getarg(1, 0);
- .@y = getarg(2, 0);
-
- if (getargcount() > 0 && getargcount() < 3)
- {
- .@npc$ = strnpcinfo(0);
- .@map$ = getvariableofnpc(.map$, .@npc$);
- .@x = getarg(0);
- .@y = getarg(1);
- }
-
- getmapxy .@pc_map$, .@pc_x, .@pc_y, UNITTYPE_PC; // get char location
-
- closeclientdialog;
-
- if (getargcount() < 1)
- {
- warp .@pc_map$, .@pc_x, .@pc_y; // no arguments, just refresh
- close;
- }
+ l("Take care!"));
- if (.@map$ == .@pc_map$)
- {
- if (.@pc_x == .@x && .@pc_y == .@y)
- {
- close; // same location, don't move
- }
-
- else
- {
- slide .@x, .@y; // same map, slide instead of full warp
- close;
- }
- }
-
- warp .@map$, .@x, .@y; // different map, warp to given location
+ closeclientdialog();
+ npctalkonce(.@byemsg$[rand(getarraysize(.@byemsg$))]);
close;
}
-
-
-
-// cshop
-// closes the dialog, then opens a shop
-// if no npc is given, calls "#<npc> $"
-
-function script cshop {
- closeclientdialog;
- shop getarg(0, "#" + strnpcinfo(0) + " $");
- //close; => the shop buildin already sends close, and is a terminator itself
-}
-
-
-
-// cstorage
-// closes the dialog, then opens storage
-
-function script cstorage {
- closeclientdialog;
- openstorage;
- close;
-}
-
-
-
-// bye
-// closes the dialog without waiting for the player to press close
-// can also display an emote
-
-function script bye {
- .@emote = getarg(0, -1);
- closeclientdialog;
-
- if (.@emote >= 0)
- emotion .@emote;
-
- close;
-}
-
-
-
-// goodbye
-// same as bye, but also displays a canned message
-// can also display an emote
-
-function script goodbye {
- npctalkonce(goodbye_msg());
- bye getarg(0, -1);
-}
-
-
-
-// goodbye2
-// Waits for the player to press close, displays a canned message,
-// ends execution.
-// Can also display an emote
-
-function script goodbye2 {
- .@emote = getarg(0, -1);
-
- close2;
- npctalkonce(goodbye_msg());
-
- if (.@emote >= 0)
- emotion .@emote;
-
- end;
-}
diff --git a/npc/functions/main.txt b/npc/functions/main.txt
index 243ae383..97c34702 100644
--- a/npc/functions/main.txt
+++ b/npc/functions/main.txt
@@ -1,6 +1,7 @@
// Evol functions.
// Authors:
// 4144
+// Jesusalva
// Travolta
// Description:
// Build in functions.
@@ -42,6 +43,10 @@ function script col {
return "##" + .@color + getarg(0) + "##0";
}
+function script mesc {
+ return mes(col(getarg(0, ""), getarg(1, 9)));
+}
+
function script adddefaultskills {
if (getskilllv(NV_BASIC) < 6)
{
diff --git a/npc/functions/openbook.txt b/npc/functions/openbook.txt
index 0278415c..cb1a0b11 100644
--- a/npc/functions/openbook.txt
+++ b/npc/functions/openbook.txt
@@ -3,26 +3,24 @@
// Reid
// Description:
// Narrator dialogue to show the selected book.
-// Variables:
-// @book_name$ = The name of the book to read.
function script openbook {
- .@book_name$ = "\"" + l(getarg(0, getvariableofnpc(.book_name$, strnpcinfo(0)))) + "\"";
+ .@book_name$ = getarg(0, getvariableofnpc(.book_name$, strnpcinfo(0)));
- narrator S_LAST_NEXT,
- l("You open a book named @@.", .@book_name$),
- l("Do you want to read it?");
+ narrator(S_LAST_NEXT,
+ l("You open a book named \"%s\".", .@book_name$),
+ l("Do you want to read it?"));
return (select("Yes.", "No.") == 1);
}
function script openbookshelf {
- .@book_name$ = "\"" + l(getarg(0, getvariableofnpc(.book_name$, strnpcinfo(0)))) + "\"";
+ .@book_name$ = getarg(0, getvariableofnpc(.book_name$, strnpcinfo(0)));
- narrator S_LAST_NEXT,
+ narrator(S_LAST_NEXT,
l("You see a dust covered book on the shelf..."),
- l("The name of the book is @@.", .@book_name$),
- l("Do you want to read it?");
+ l("The name of the book is \"%s\".", .@book_name$),
+ l("Do you want to read it?"));
return (select("Yes.", "No.") == 1);
}
diff --git a/npc/functions/shops.txt b/npc/functions/shops.txt
index 79890e81..8962997e 100644
--- a/npc/functions/shops.txt
+++ b/npc/functions/shops.txt
@@ -1,13 +1,18 @@
// Evol functions.
// Author:
// 4144
+// Jesusalva
// Description:
// Shops utility functions
-// Variables:
-// none
+
+
+
+// restoreshopitem(<item nameid>, <amount>{, <price>})
+// adds back an item to the sell list if less than the specified amount
+// returns true
function script restoreshopitem {
if (shopcount(getarg(0)) < getarg(1))
- sellitem getarg(0), -1, getarg(1);
+ sellitem(getarg(0), getarg(2, -1), getarg(1));
return;
}
diff --git a/npc/functions/warp.txt b/npc/functions/warp.txt
new file mode 100644
index 00000000..df7b76b0
--- /dev/null
+++ b/npc/functions/warp.txt
@@ -0,0 +1,58 @@
+// Evol functions.
+// Authors:
+// gumi
+
+
+
+// map_exists
+// self-explanatory
+
+function script map_exists {
+ return getmapinfo(MAPINFO_ID, getarg(0)) >= 0;
+}
+
+
+
+// slide_or_warp
+// Slides the player instead of warping, when possible.
+// usage:
+// slide_or_warp({<aid>});
+// slide_or_warp(<x>, <y>{, <aid>});
+// slide_or_warp("<map>", <x>, <y>{, <aid>});
+
+function script slide_or_warp {
+ if (getargcount() <= 1) {
+ .@aid = getarg(1, 0);
+ } else {
+ if (getargcount() >= 3 && getdatatype(getarg(0)) & DATATYPE_STR) {
+ .@map$ = getarg(0);
+ .@x = getarg(1);
+ .@y = getarg(2);
+ .@aid = getarg(3, 0);
+ } else {
+ .@x = getarg(0);
+ .@y = getarg(1);
+ .@aid = getarg(2, 0);
+ }
+ }
+
+ if (!isloggedin(.@aid)) {
+ if ((.@aid = playerattached()) == 0) {
+ debugmes("slide_or_warp: no player attached!");
+ return false;
+ }
+ }
+
+ getmapxy(.@pc_map$, .@pc_x, .@pc_y, UNITTYPE_PC, .@aid); // get char location
+ .@cid = getcharid(CHAR_ID_CHAR, strcharinfo(PC_NAME, .@aid)); // FIXME: [Hercules] make it so you can pass account id directly to getcharid
+
+ if (getargcount() < 1) {
+ warpchar(.@pc_map$, .@pc_x, .@pc_y, .@cid); // no arguments, just refresh
+ } else if (.@map$ == .@pc_map$ && (.@pc_x != .@x || .@pc_y != .@y)) {
+ slide(.@x, .@y); // same map, slide instead of full warp
+ // FIXME: make slide take GID as optional arg
+ } else {
+ warpchar(.@map$, .@x, .@y, .@cid); // different map, warp to given location
+ }
+ return true;
+}
diff --git a/npc/items/croconut.txt b/npc/items/croconut.txt
index eb8b6d65..8e54971d 100644
--- a/npc/items/croconut.txt
+++ b/npc/items/croconut.txt
@@ -14,7 +14,7 @@
OnUse:
mesn "Narrator";
- mes col(l("Do you want to cut this @@?", getitemlink(Croconut)), 9);
+ mesc(l("Do you want to cut this @@?", getitemlink(Croconut)), 9);
next;
menu
@@ -27,7 +27,7 @@ OnUse:
L_Weapon:
mes "";
mesn "Narrator";
- mes col(l("Which of your weapons do you want to use in order to cut this @@?", getitemlink(Croconut)), 9);
+ mesc(l("Which of your weapons do you want to use in order to cut this @@?", getitemlink(Croconut)), 9);
next;
menu
@@ -48,24 +48,24 @@ L_TooWeak:
if ( (.@q == 3) || (.@q == 4) || (.@q == 5) ) goto L_Weak;
L_TooWeakLost:
- mes col(l("You hit too hard with your fist, you destroyed your @@.", getitemlink(Croconut)), 9);
+ mesc(l("You hit too hard with your fist, you destroyed your @@.", getitemlink(Croconut)), 9);
close;
L_TooWeakFail:
- mes col(l("Your hands are too weak, you did not succeed in opening this @@.", getitemlink(Croconut)), 9);
+ mesc(l("Your hands are too weak, you did not succeed in opening this @@.", getitemlink(Croconut)), 9);
getitem Croconut, 1;
close;
L_Weak:
- mes col(l("You opened the @@ in two parts, but you crushed one of them.", getitemlink(Croconut)), 9);
+ mesc(l("You opened the @@ in two parts, but you crushed one of them.", getitemlink(Croconut)), 9);
getitem HalfCroconut, 1;
close;
L_Good:
- mes col(l("You perfectly cut your @@ into two edible parts.", getitemlink(Croconut)), 9);
+ mesc(l("You perfectly cut your @@ into two edible parts.", getitemlink(Croconut)), 9);
getitem HalfCroconut, 2;
close;
diff --git a/npc/items/shovel.txt b/npc/items/shovel.txt
index f01a0fcb..81c0d22e 100644
--- a/npc/items/shovel.txt
+++ b/npc/items/shovel.txt
@@ -8,6 +8,15 @@
function CheckDigLocation {
getmapxy(.@map$, .@x, .@y, 0);
+
+ if (getunits(BL_NPC, .@units, 1, .@map$, .@x - 1, .@y, .@x + 1, .@y + 1))
+ {
+ dispbottom(l("You cannot bury under a NPC!"));
+ return false;
+ }
+
+ // TODO: we should have a way to check for GROUNDTOP collisions too
+
for (.@i = 0; .@i < getarraysize(.WorldDigRect_Map$); .@i++)
{
if (!strcmp(.WorldDigRect_Map$[.@i], .@map$) &&
@@ -16,10 +25,12 @@
.WorldDigRect_y1[.@i] <= .@y &&
.WorldDigRect_y2[.@i] >= .@y)
{
- return 1;
+ return true;
}
}
- return 0;
+
+ dispbottom(l("You can't use the shovel here."));
+ return false;
}
function AddDigRect {
@@ -43,16 +54,19 @@
}
function PlayerIsTired {
+ if (is_evtc())
+ return false; // event coordinators are never tired
+
.@tick = gettimetick(1);
.@playertick = .PlayerTiredTime - readparam(bStr);
if (@ShovelLastUsed + max(4, .@playertick) > .@tick)
{
narrator S_FIRST_BLANK_LINE,
lg("You are exhausted, you should rest a bit.");
- return 1;
+ return true;
}
@ShovelLastUsed = .@tick;
- return 0;
+ return false;
}
function Dig {
@@ -82,24 +96,32 @@
}
function Bury {
- narrator S_FIRST_BLANK_LINE | S_LAST_BLANK_LINE, l("What would you like to bury?");
- .@items$ = "";
- getinventorylist;
- for (.@i = 0; .@i < @inventorylist_count; .@i++)
+ narrator(S_FIRST_BLANK_LINE | S_LAST_NEXT,
+ l("What would you like to bury?"));
+
+ mes("##B" + l("Drag and drop an item from your inventory.") + "##b");
+ .@id = requestitem();
+
+ // You cannot bury: Items you don't have, your shovel, Bound Items, and items which are not dropped by any mobs.
+ // The "item not dropped by any mob" is temporary, and should be replaced by "items with trade restrictions" later. [JESUS]
+ // event coordinators can always bury
+ if (!is_evtc() && (.@id < 1 || countitem(.@id) < 1 ||
+ compare(getitemname(.@id), "shovel") || checkbound(.@id) ||
+ !getiteminfo(.@id, ITEMINFO_MAXCHANCE)))
{
- .@items$ = .@items$ + getitemname(@inventorylist_id[.@i]) + ":";
- debugmes getitemname(@inventorylist_id[.@i]);
+ mesc(l("You cannot bury this item!"));
+ return false;
}
- .@idx = select(.@items$) - 1;
- .@id = @inventorylist_id[.@idx];
+
.@amount = 1;
- if (@inventorylist_amount[.@idx] > 1)
+ if (countitem(.@id) > 1)
{
narrator S_FIRST_BLANK_LINE | S_LAST_BLANK_LINE, l("Amount?");
- input .@amount, 1, @inventorylist_amount[.@idx];
+ input .@amount, 1, countitem(.@id);
}
getmapxy(.@map$, .@x, .@y, 0);
+
delitem .@id, .@amount;
.@wtc = getarraysize($WorldBuriedTreasures_id);
$WorldBuriedTreasures_id[.@wtc] = .@id;
@@ -109,7 +131,7 @@
$WorldBuriedTreasures_y[.@wtc] = .@y;
narrator S_FIRST_BLANK_LINE, l("You buried @@ @@.", .@amount, getitemname(.@id));
- return 0;
+ return true;
}
function ShovelQuests {
@@ -134,10 +156,7 @@
OnUse:
if (!CheckDigLocation())
- {
- message strcharinfo(0), l("I can't use the shovel here.");
- close;
- }
+ end;
narrator S_LAST_BLANK_LINE,
l("You hold the shovel in your hands."),
diff --git a/npc/scripts.conf b/npc/scripts.conf
index 83fb0348..3bb929a9 100644
--- a/npc/scripts.conf
+++ b/npc/scripts.conf
@@ -11,6 +11,7 @@
"npc/functions/string.txt",
"npc/functions/RNGesus.txt",
"npc/functions/math.txt",
+"npc/functions/warp.txt",
// Misc functions
"npc/functions/main.txt",
diff --git a/sql-files/main.sql b/sql-files/main.sql
index 12607531..d1c6364c 100644
--- a/sql-files/main.sql
+++ b/sql-files/main.sql
@@ -219,6 +219,8 @@ CREATE TABLE IF NOT EXISTS `char` (
`uniqueitem_counter` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
`sex` ENUM('M','F','U') NOT NULL DEFAULT 'U',
`hotkey_rowshift` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
+ `attendance_count` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
+ `attendance_timer` BIGINT(20) NULL DEFAULT '0',
PRIMARY KEY (`char_id`),
UNIQUE KEY `name_key` (`name`),
KEY `account_id` (`account_id`),
@@ -780,6 +782,7 @@ CREATE TABLE IF NOT EXISTS `pet` (
`hungry` SMALLINT(9) UNSIGNED NOT NULL DEFAULT '0',
`rename_flag` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0',
`incubate` INT(11) UNSIGNED NOT NULL DEFAULT '0',
+ `autofeed` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (`pet_id`)
) ENGINE=MyISAM;
@@ -889,6 +892,10 @@ INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1489588190); -- 2017-03-1
INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1496588640); -- 2017-06-04--15-04.sql
INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1496588700); -- 2017-06-04--15-05.sql
INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1509835214); -- 2017-11-04--10-39.sql
+INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1519671456); -- 2018-02-26--15-57.sql
+INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1520654809); -- 2018-03-10--04-06.sql
+INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1528180320); -- 2018-06-05--12-02.sql
+INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1532403228); -- 2018-07-24--03-23.sql
--
-- Table structure for table `storage`
--
@@ -959,12 +966,13 @@ CREATE TABLE IF NOT EXISTS `rodex_mail` (
`sender_id` INT(11) NOT NULL,
`receiver_name` VARCHAR(30) NOT NULL,
`receiver_id` INT(11) NOT NULL,
- `receiver_accountid` INT(11) NOT NULL,
+ `receiver_accountid` INT(11) NOT NULL,
`title` VARCHAR(50) NOT NULL,
`body` VARCHAR(510) NOT NULL,
`zeny` BIGINT(20) NOT NULL,
`type` TINYINT(8) UNSIGNED NOT NULL,
`is_read` TINYINT(8) NOT NULL,
+ `sender_read` TINYINT(2) NOT NULL,
`send_date` INT(11) NOT NULL,
`expire_date` INT(11) NOT NULL,
`weight` INT(11) NOT NULL,
diff --git a/sql-files/upgrades/2018-02-26--15-57.sql b/sql-files/upgrades/2018-02-26--15-57.sql
new file mode 100644
index 00000000..a2090bb3
--- /dev/null
+++ b/sql-files/upgrades/2018-02-26--15-57.sql
@@ -0,0 +1,6 @@
+#1519671456
+
+ALTER TABLE `rodex_mail`
+ ADD COLUMN `sender_read` TINYINT(2) NOT NULL DEFAULT '0' AFTER `is_read`;
+
+INSERT INTO `sql_updates` (`timestamp`, `ignored`) VALUES (1519671456 , 'No');
diff --git a/sql-files/upgrades/2018-03-10--04-06.sql b/sql-files/upgrades/2018-03-10--04-06.sql
new file mode 100644
index 00000000..ee827735
--- /dev/null
+++ b/sql-files/upgrades/2018-03-10--04-06.sql
@@ -0,0 +1,24 @@
+#1520654809
+
+-- This file is part of Hercules.
+-- http://herc.ws - http://github.com/HerculesWS/Hercules
+--
+-- Copyright (C) 2017 Hercules Dev Team
+--
+-- Hercules is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ALTER TABLE `char` ADD COLUMN `attendance_count` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `hotkey_rowshift`;
+ALTER TABLE `char` ADD COLUMN `attendance_timer` BIGINT(20) NULL DEFAULT '0' AFTER `attendance_count`;
+
+INSERT INTO `sql_updates` (`timestamp`, `ignored`) VALUES (1520654809 , 'No');
diff --git a/sql-files/upgrades/2018-06-05--12-02.sql b/sql-files/upgrades/2018-06-05--12-02.sql
new file mode 100644
index 00000000..26c22243
--- /dev/null
+++ b/sql-files/upgrades/2018-06-05--12-02.sql
@@ -0,0 +1,24 @@
+#1528180320
+
+-- This file is part of Hercules.
+-- http://herc.ws - http://github.com/HerculesWS/Hercules
+--
+-- Copyright (C) 2018 Hercules Dev Team
+-- Copyright (C) 2018 Dastgir
+--
+-- Hercules is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ALTER TABLE `pet` ADD COLUMN `autofeed` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0';
+
+INSERT INTO `sql_updates` (`timestamp`, `ignored`) VALUES (1528180320 , 'No');
diff --git a/sql-files/upgrades/2018-07-24--03-23.sql b/sql-files/upgrades/2018-07-24--03-23.sql
new file mode 100644
index 00000000..a8d2d8f7
--- /dev/null
+++ b/sql-files/upgrades/2018-07-24--03-23.sql
@@ -0,0 +1,22 @@
+#1532403228
+
+-- This file is part of Hercules.
+-- http://herc.ws - http://github.com/HerculesWS/Hercules
+--
+-- Copyright (C) 2018 Hercules Dev Team
+--
+-- Hercules is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+UPDATE `inventory` SET `identify` = 1, `attribute` = 1 WHERE `card0` = -256 and `identify` = 0;
+INSERT INTO `sql_updates` (`timestamp`) VALUES (1532403228);
diff --git a/sql-files/upgrades/index.txt b/sql-files/upgrades/index.txt
index 494e9bf1..1d313a0c 100644
--- a/sql-files/upgrades/index.txt
+++ b/sql-files/upgrades/index.txt
@@ -42,3 +42,7 @@
2017-06-04--15-04.sql
2017-06-04--15-05.sql
2017-11-04--10-39.sql
+2018-02-26--15-57.sql
+2018-03-10--04-06.sql
+2018-06-05--12-02.sql
+2018-07-24--03-23.sql