diff --git a/.gitignore b/.gitignore index aa62c8abf2a..1b2d8ba0a18 100644 --- a/.gitignore +++ b/.gitignore @@ -228,3 +228,7 @@ modules/init.txt # Doxygen doxygen/ + +# Docker (not supported) +Dockerfile +docker-compose* diff --git a/.vscode/settings.json b/.vscode/settings.json index a1d75b71058..c5d8d18a2b7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -445,6 +445,7 @@ "ForceCrash", "BuildString", "SendLuaFuncStringToZone", + "DYNAMIC_LOOKUP", ], "Lua.diagnostics.disable": [ "lowercase-global" diff --git a/CMakeLists.txt b/CMakeLists.txt index bb891a192d4..ce04d99be37 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,7 +60,7 @@ set_project_warnings(project_warnings) add_definitions( -DSOL_ALL_SAFETIES_ON=1 -DSOL_NO_CHECK_NUMBER_PRECISION=1 - -DSOL_NO_EXCEPTIONS=1 + -DSOL_DEFAULT_PASS_ON_ERROR=1 -DSOL_PRINT_ERRORS=0 ) diff --git a/DOCKER.md b/DOCKER.md deleted file mode 100644 index 3d6a77e4636..00000000000 --- a/DOCKER.md +++ /dev/null @@ -1,32 +0,0 @@ -Docker Guide -========== - -This guide assumes you have Docker (https://www.docker.com/) installed on your machine. - -## How to start the server - -* Launch docker -* Pull the repo -* Open powershell or whatever terminal you're using and navigate to the server directory -* Type `docker-compose up -d` (the `-d` is optional and will free up -detach- the terminal) -* Wait until everything is complete. If you previously stopped or deleted the services then you may encounter `ERROR: The image for the service you're trying to recreate has been removed. If you continue, volume data could be lost. Consider backing up your data before continuing. Continue with the new image? [yN]`. You can enter `y` to force the install. - -Note the zone IPs are not updated in the DB and will default to 127.0.0.1 so you will need to use the `--hairpin` option when connecting to the server. - -## How to restart the Server/DB - -The server runs in the "game" service and the database in the "db" service and will likely be named something like `server_game_1` similarly the database will be something like `server_db_1`. To see the names assigned to your services type `docker ps`. To restart them you can use the `docker restart` command such as `docker restart server_game_1`. - -Alternatively you can stop and start individual services with `docker stop container_name` and `docker start container_name` where `container_name` is the container name from the `docker ps` command. The run order should be "database" then "game". - -## Connect to server terminal - -If you need to access the terminal on the server you can enter `docker exec -it server_game_1 bash` where `server_game_1` is the container name from the `docker ps` command. To exit type `exit`. - -## Transfer files to server from local machine - -If you need to transfer files from your local machine to the server you can use the `docker cp` command. All code on the server exists in the `/server` directory. See below for example. -This is useful for things like updating and testing the lua scripts without needing to restart the server. - -Example copying godmode.lua script from local machine to server (where server name is `server_game_1`): -`docker cp scripts/commands/godmode.lua server_game_1:/server/scripts/commands/godmode.lua` diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index e6ab241cdbb..00000000000 --- a/Dockerfile +++ /dev/null @@ -1,41 +0,0 @@ -FROM ubuntu:20.04 - -RUN apt clean - -# Avoid any UI since we don't have one -ENV DEBIAN_FRONTEND=noninteractive - -# Set env variables to override the configuration settings -ENV XI_DB_HOST=db -ENV XI_DB_PORT=3306 -ENV XI_DB_USER=xiuser -ENV XI_DB_USER_PASSWD=xipassword -ENV XI_DB_NAME=xidb - -# Working directory will be /server meaning that the contents of server will exist in /server -WORKDIR /server - -# Update and install all requirements as well as some useful tools such as net-tools and nano -RUN apt update && apt install -y net-tools nano software-properties-common git clang-11 cmake make libluajit-5.1-dev libzmq3-dev libssl-dev zlib1g-dev mariadb-server libmariadb-dev luarocks - -# Use Clang 11 -ENV CC=/usr/bin/clang-11 -ENV CXX=/usr/bin/clang++-11 - -# Copy everything from the host machine server folder to /server -ADD . /server - -# Configure and build -RUN mkdir docker_build && cd docker_build && cmake .. && make -j $(nproc) && cd .. && rm -r /server/docker_build - -# Copy the docker config files to the conf folder instead of the default config -COPY /conf/default/* conf/ - -# Copy the docker settings files to the settings folder instead of the default settings -COPY /scripts/settings/default/* scripts/settings/ - -# Ensure wait_for_db_then_launch.sh is executable -RUN chmod +x ./tools/wait_for_db_then_launch.sh - -# Startup the server when the container starts -ENTRYPOINT ./tools/wait_for_db_then_launch.sh diff --git a/cmake/FindLuaJIT.cmake b/cmake/FindLuaJIT.cmake index 8b77efb1769..0cd33ebf058 100644 --- a/cmake/FindLuaJIT.cmake +++ b/cmake/FindLuaJIT.cmake @@ -22,35 +22,41 @@ # # TEST AND MAKE SURE THAT EVERYTHING STILL WORKS! -if (UNIX) - message(STATUS "Downloading LuaJIT src") - CPMAddPackage( - NAME LuaJIT - GITHUB_REPOSITORY LuaJIT/LuaJIT - GIT_TAG e3bae12fc0461cfa7e4bef3dfed2dad372e5da8d - DOWNLOAD_ONLY YES - ) - if (LuaJIT_ADDED) - message(STATUS "Modifying LuaJIT build flags (adding -DLUAJIT_NO_UNWIND=1)") - file(READ "${LuaJIT_SOURCE_DIR}/src/Makefile" FILE_CONTENTS) - string(REPLACE "CCOPT= -O2 -fomit-frame-pointer\n" "CCOPT= -O2 -fomit-frame-pointer -DLUAJIT_NO_UNWIND=1\n" FILE_CONTENTS "${FILE_CONTENTS}") - file(WRITE "${LuaJIT_SOURCE_DIR}/src/Makefile" "${FILE_CONTENTS}") - - # LuaJIT has no CMake support, so we break out to using make on it's own - message(STATUS "Building LuaJIT from src") - - if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - execute_process(COMMAND export MACOSX_DEPLOYMENT_TARGET=11.6 ; make WORKING_DIRECTORY ${LuaJIT_SOURCE_DIR}) # TODO don't hardcode MACOSX_DEPLOYMENT_TARGET - else() - execute_process(COMMAND make WORKING_DIRECTORY ${LuaJIT_SOURCE_DIR}) - endif() - - endif() -endif() +########## Removed as we don't need to build LuaJIT with #-DSOL_NO_EXCEPTIONS=1. We may want to build our own LuaJIT in the future, so leaving this commented out. +#if (UNIX) +# message(STATUS "Downloading LuaJIT src") +# CPMAddPackage( +# NAME LuaJIT +# GITHUB_REPOSITORY LuaJIT/LuaJIT +# GIT_TAG e3bae12fc0461cfa7e4bef3dfed2dad372e5da8d +# DOWNLOAD_ONLY YES +# ) +# if (LuaJIT_ADDED) +# +# # LuaJIT does not run properly on x86_84 systems without -DLUAJIT_NO_UNWIND=1 which disables external unwinding. +# # Conversely, LuaJIT does not build properly on aarch64 *with* -DLUAJIT_NO_UNWIND=1, so only change the makefile where we know we need it. +# if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64") +# message(STATUS "Modifying LuaJIT build flags (adding -DLUAJIT_NO_UNWIND=1)") +# file(READ "${LuaJIT_SOURCE_DIR}/src/Makefile" FILE_CONTENTS) +# string(REPLACE "CCOPT= -O2 -fomit-frame-pointer\n" "CCOPT= -O2 -fomit-frame-pointer -fPIC -DLUAJIT_NO_UNWIND=1\n" FILE_CONTENTS "${FILE_CONTENTS}") +# file(WRITE "${LuaJIT_SOURCE_DIR}/src/Makefile" "${FILE_CONTENTS}") +# endif() +# +# # LuaJIT has no CMake support, so we break out to using make on it's own +# message(STATUS "Building LuaJIT from src") +# +# if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") +# execute_process(COMMAND export MACOSX_DEPLOYMENT_TARGET=11.6 ; make WORKING_DIRECTORY ${LuaJIT_SOURCE_DIR}) # TODO don't hardcode MACOSX_DEPLOYMENT_TARGET +# else() +# execute_process(COMMAND make WORKING_DIRECTORY ${LuaJIT_SOURCE_DIR}) +# endif() +# +# endif() +#endif() find_library(LuaJIT_LIBRARY NAMES - libluajit.a luajit luajit_64 luajit-5.1 libluajit libluajit_64 + luajit luajit_64 luajit-5.1 libluajit libluajit_64 PATHS ${LuaJIT_SOURCE_DIR}/src/ ${PROJECT_SOURCE_DIR}/ext/luajit/${libpath} diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index f946831b35e..00000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,42 +0,0 @@ -version: '3.1' - -services: - # The DB service - db: - image: mariadb - restart: always - environment: - MYSQL_USER: xiuser - MYSQL_PASSWORD: xipassword - MYSQL_ROOT_PASSWORD: root - MYSQL_DATABASE: xidb - # Run all the .sql files in the /sql directory to initalize the DB. This only hapens the first time this service is started and will not handle additions/modifications - volumes: - - ./sql:/docker-entrypoint-initdb.d - ports: - - "3306:3306" - - # Ease of access tool for the DB, you can type in localhost:8080 to get a web interface to the DB. You can log in with root:wheel - db_admin_portal: - image: adminer - restart: always - depends_on: - - "db" - ports: - - 8080:8080 - - # The server service - game: - # Build whatever is in the Dockerfile in the server root folder - build: . - depends_on: - - "db" - ports: - # connect - - "54230:54230/tcp" - - "54231:54231/tcp" - - "54001:54001/tcp" - # search - - "54002:54002/tcp" - # game - - "54230:54230/udp" diff --git a/documentation/message.log b/documentation/message.log index 6d477b0f9d3..acb29867751 100644 --- a/documentation/message.log +++ b/documentation/message.log @@ -1,417 +1,421 @@ -001 - The hits for .. points of damage -002 - a casts (NULL). takes .. points of damage. -003 - The starts casting Curaga IV. +000 - Display nothing +001 - hits for points of damage. +002 - casts . takes damage. +003 - starts casting . 004 - is out of range. 005 - Unable to see . 006 - The defeats . -007 - The casts (NULL). recovers .. HP. -008 - The gains 0 experience points. -009 - The attains level 0! -010 - The loses 0 experience points. -011 - The falls to level 0. +007 - casts . recovers HP. +008 - gains experience point(s). +009 - attains level . +010 - loses experience point(s). +011 - falls to level 012 - Cannot attack. Your target is already claimed. -013 - Debug Message: : is now invincible. -014 - The 's attack is countered by . 0 of 's shadows absorb the damage and disappear. -015 - The misses . -016 - The 's casting is interrupted. +014 - 's attack is countered by . of 's shadows absorb the damage and disappear. +015 - misses . +016 - The 's casting is interrupted. 017 - Unable to cast spells at this time. 018 - Unable to cast spells at this time. -019 - The calls for help! -020 - falls to the ground. +019 - calls for help! +020 - falls to the ground. 021 - No experience points gained. -020 - falls to the ground. 022 - You cannot call for help at this time. -023 - The learns a new spell! -024 - recovers .. HP. -025 - recovers .. MP. -026 - recovers HP and MP. +023 - learns a new spell! +024 - ${target} recovers ${number} HP. +025 - ${target} recovers ${number} MP. +026 - ${target} recovers ${number} HP and MP. 027 - Debug Message: Cannot execute command. No (BTCALC) command in ATEL source. -028 - The uses a ... +028 - ${actor} uses a ${item}. 029 - The is paralyzed. 030 - anticipates the attack. 031 - .. of 's shadows absorb the damage and disappear. -032 - dodges the attack. -033 - The 's attack is countered by . The takes 0 points of damage. +032 - dodges the attack. +033 - 's attack is countered by . takes points of damage. 034 - The does not have enough MP to cast (NULL). 035 - The lacks the ninja tools to cast (NULL). 036 - You lose sight of . 037 - You are too far from the battle to gain experience. -038 - 's (N/A) skill rises points. -039 - You need the Dual Wield ability to equip the as a sub-weapon. -040 - You cannot use (spell) in this area. -041 - : Status ailment check (0) Cannot rest at this time. -042 - The casts on . -043 - The readies Final Heaven. -044 - 's spikes deal points of damage to the . -045 - The learns ! -046 - Debug Message: Current POP number: -047 - The cannot cast . -048 - cannot be cast on . +038 - 's skill rises points. +039 - You need the Dual Wield ability to equip the as a sub-weapon. +040 - You cannot use in this area. +041 - : Status ailment check () Cannot rest at this time. +042 - casts on . +043 - ${actor} readies ${weapon_skill}. +044 - 's spikes deal points of damage to the . +045 - learns ! +046 - Debug Message: Current POP number: () +047 - cannot cast . +048 - cannot be cast on . (example: tractor) 049 - The is unable to cast spells. -050 - The earns a merit point! (Total: 0) +050 - earns a merit point! (Total: ) 051 - --Out of sight-- -052 - gives up chasing . ---Find Path Error--- -053 - 's (N/A) skill reaches level ... -054 - The gains Besieged points. +052 - gives up chasing . --Find Path Error-- +053 - 's skill reaches level . +054 - gains Besieged points. +055 - Unable to use item. 056 - Unable to use item. 057 - Job changed. 058 - Invalid job number. 059 - You do not have access to specified job yet. 060 - You do not have access to support jobs yet. -061 - You cannot have the same job as both main and support jobs. -062 - The fails to activate. -063 - The misses . -064 - is no longer stunned. -065 - You are not carrying any Petras. You cannot use the . +061 - You cannot have the same job as both main and supprot jobs. +062 - The ${item} fails to activate. +063 - misses . +064 - is no longer . +065 - You are not carrying any Petras.${lb}You cannot use the ${item}. 066 - Debug: Resisted spell! -067 - The scores a critical hit! takes points of damage. +067 - scores a critical hit! takes damage. 068 - Debug: Casting interrupted! -069 - blocks the 's attack with his shield. -070 - parries the 's attack with his weapon. +069 - blocks the 's attack with his shield. +070 - parries the 's attack with his weapon. 071 - The cannot perform that action. 072 - That action cannot be performed on . -073 - Debug: 's status is now 'd. -074 - Debug: recovers from KO. -075 - The 's (NULL) has no effect on . +073 - Debug: 's status is now hastened. +074 - Debug: recovers from . +075 - 's has no effect on . 076 - No valid target within area of effect. -077 - The uses Sange. takes points of damage. +077 - uses Sange. takes point(s) of damage. 078 - is too far away. -079 - Debug: uses Double Attack(0) -080 - Debug: uses Triple Attack(0) -081 - Debug: Battle Debug No. (0) used on . -082 - The casts . is stunned! -083 - The casts . The successfully removes 's stun. -084 - The is paralyzed. -085 - The casts . resists the spell. -086 - The casts , but is outside the area of effect. +079 - Debug: uses Double Attack(%). +080 - Debug: uses Triple Attack(%). +081 - Debug: Battle Debug No. () used on . +082 - casts . is ! +083 - casts . successfully removes 's . +084 - is . +085 - casts . resists the spell. +086 - casts , but is outside the area of effect. 087 - Unable to use job ability. 088 - Unable to use job ability. -089 - Unable to use weapon skill. -090 - Unable to use weapon skill. -091 - The does not have any . -092 - Cannot use the on . -093 - The casts . vanishes. +089 - Unable to use weaponskill. +090 - Unable to use weaponskill. +091 - ${actor} does not have any ${item}. +092 - Cannot use the ${item} on ${target}. +093 - casts . vanishes. 094 - You must wait longer to perform that action. 095 - You cannot learn . You do not meet the job or level requirements. 096 - You already know . -097 - was defeated by the . -098 - You obtain from . -099 - >: +097 - was defeated by . +098 - You obtain a ${item} from ${target}. +099 - > : , 100 - The uses .. -101 - The uses .. +101 - The uses .. 102 - The uses .. recovers .. HP. 103 - The uses .. recovers .. HP. -104 - Unable to use item. You do not meet the level requirement. -105 - The gains experience points. +104 - Unable to use item.${lb}You do not meet the level requirement. +105 - gains experience point(s). 106 - The is intimidated by 's presence. -107 - is temporarily unable to access support job abilities. +107 - is temporarily unable to access support job abilities 108 - The uses .. Pet's powers increase! -109 - The uses .. Pet's powers increase! -110 - The uses .. takes .. points of damage. -111 - You cannot use while medicated. -112 - 's doom counter is now down to 0. -113 - The casts . falls to the ground. -114 - The casts on , but the spell fails to take effect. -115 - The uses .. Attacks are enhanced but defense weakens. -116 - The uses .. 's attacks are enhanced. -117 - The uses .. Defense is enhanced but attacks weaken. -118 - The uses .. Accuracy is enhanced but evasion is impaired. -119 - The uses .. on . -120 - The uses .. 's accuracy is enhanced. -121 - The uses .. 's evasion is enhanced. -122 - The uses .. The recovers .. HP. -123 - The uses .. The successfully removes 's stun. -124 - The achieves Gate Breach status! -125 - The uses .. The steals a .. from . -126 - The uses .. The 's movement speed increases. -127 - The uses .. is stunned. -128 - is KO'd and cannot perform that action. -129 - The uses .. The mugs .. gil from . -130 - is KO'd for making an equipment change. -131 - The uses .. is fortified against undead. -132 - 's spikes drain HP from the . -133 - The uses .. The steals .. Petras from . -134 - The uses .. is fortified against arcana. -135 - The uses .. on . -136 - The uses .. is now under the 's control. -137 - The uses .. The fails to charm . -138 - The uses .. seems friendlier. -139 - The uses .. but finds nothing. -140 - The uses .. and finds a ... -141 - The uses .. is stunned. -142 - The uses .. receives the effect of Accuracy Down and Evasion Down. -143 - The uses .. Ranged attacks become more accurate. -144 - The uses .. receives the effect of Accuracy Down and Evasion Down. -145 - receives the effect of Accuracy Down and Evasion Down. -146 - The uses .. receives the effect of Accuracy Boost and Evasion Boost. -147 - receives the effect of Accuracy Boost and Evasion Boost. -148 - The uses .. is fortified against demons. +109 - The uses .. Pet's powers increase! +110 - uses . takes damage. +111 - You cannot use ${item} while medicated. +112 - 's doom counter is now down to . +113 - casts . falls to the ground. +114 - casts on , but the spell fails to take effect. +115 - uses . Attacks are enhanced but defense weakens. +116 - uses . 's attacks are enhanced. +117 - uses . Defense is enhanced but attacks weaken. +118 - uses . Accuracy is enhanced but evasion is impaired. +119 - uses on . +120 - uses . 's accuracy is enhanced. +121 - uses . 's evasion is enhanced. +122 - uses . recovers HP. +123 - uses . successfully removes 's . +124 - achieves Gate Breach status! +125 - uses . steals from . +126 - uses . 's movement speed increases. +127 - uses . is . +128 - is weakened and cannot perform that action. +129 - uses . mugs gil from . +130 - is weakened for making an equipment change. +131 - uses . is fortified against undead. +132 - 's spikes drain HP from the . +133 - uses . steals Petras from . +134 - uses . is fortified against arcana. +135 - uses on . +136 - uses . is now under 's control. +137 - uses . fails to charm . +138 - uses . seems friendlier. +139 - uses , but finds nothing. +140 - uses , and finds a . +141 - uses . is stunned. +142 - uses . receives the effect of and . +143 - uses . Ranged attacks become more accurate. +144 - uses . receives the effect of and . +145 - receives the effect of and . +146 - uses . receives the effect of and . +147 - receives the effect of and . +148 - uses . is fortified against demons. 149 - is fortified against demons. -150 - The uses .. is fortified against dragons. +150 - uses . is fortified against dragons. 151 - is fortified against dragons. -152 - Additional effect: The recovers 0 MP. -153 - The uses .. The fails to steal from . +152 - Additional effect: The recovers MP. +153 - uses . fails to steal from . 154 - is out of range. 155 - You cannot perform that action on the specified target. -156 - The uses .. No effect on . -157 - The uses Barrage. takes .. points of damage. -158 - The uses .. but misses. -159 - The uses .. 's stun effect disappears! -160 - Additional effect: KO. -161 - Additional effect: 0 HP drained from . -162 - Additional effect: 0 MP drained from . -163 - Additional effect: 0 points of damage. -164 - Additional effect: KO. -165 - Additional effect: 0 TP drained from . -166 - Additional effect: The gains the effect of KO. -167 - Additional effect: The recovers 0 HP. -168 - Additional effect: 's KO effect disappears! -169 - Additional effect: Warp! -170 - seems .. . It seems to have high evasion and defense. -171 - seems .. . It seems to have high evasion. -172 - seems .. . It seems to have high evasion but low defense. -173 - seems .. . It seems to have high defense. -174 - seems .. . -175 - seems .. . It seems to have low defense. -176 - seems .. . It seems to have low evasion but high defense. -177 - seems .. . It seems to have low evasion. -178 - seems .. . It seems to have low evasion and defense. -179 - : hit-eva(0) => .. -180 - str-vit(0) dmg-adj(..) -181 - atk-def(0) ofs-adj%(..) -182 - : MonNo(0)-Lev(..) -183 - HIT-EVA(0) ATK-DEF(..) -184 - :ALLIANCE SUM=0/LEV=.. -185 - The uses .. takes .. points of damage. -186 - The uses .. gains the effect of stun. -187 - The uses .. .. HP drained from . -188 - The uses .. but misses . -189 - The uses .. No effect on . +156 - uses . No effect on . (1 line msg) +157 - uses Barrage. takes points of damage. +158 - uses , but misses. (no name included) +159 - uses 's effect disappears! +160 - Additional effect: . +161 - Additional effect: HP drained from . +162 - Additional effect: MP drained from . +163 - Additional effect: points of damage. +164 - Additional effect: . (Duplicate?) +165 - Additional effect: TP drained from . +166 - Additional effect: gains the effect of . +167 - Additional effect: The recovers HP. +168 - Additional effect: 's effect disappears! +169 - Additional effect: Warp! (used by Halloween staves) +170 - seems . It seems to have high evasion and defense. +171 - seems . It seems to have high evasion. +172 - seems . It seems to have high evasion but low defense. +173 - seems . It seems to have high defense. +174 - seems . +175 - seems . It seems to have low defense. +176 - seems . It seems to have low evasion but high defense. +177 - seems . It seems to have low evasion. +178 - seems . It seems to have low evasion and low defense. +179 - : hit-eva(value) => % +180 - str-vit() dmg-adj() +181 - atk-def() ofs-adj%() +182 - : MonNo()-Lev() +183 - HIT-EVA(value) ATK-DEF() +184 - :ALLIANCE SUM=/LEV= +185 - player uses, target takes 10 damage. DEFAULT +186 - uses . gains the effect of . +187 - uses . HP drained from +188 - uses , but misses . +189 - uses . No effect on . 190 - The cannot use that weapon ability. -191 - The is unable to use weapon skills. +191 - is unable to use weapon skills. 192 - The does not have enough TP. -193 - .. cannot be used against that target. -194 - The uses .. gains the effect of stun. -195 - : TOTAL ALLIANCE SUM=0/LEV=.. -196 - Skillchain! takes 0 points of damage. -197 - The uses .. but resists. takes .. points of damage. +193 - cannot be used against that target. +194 - uses . gains the effect of . +195 - : TOTAL ALLIANCE SUM=/LEV= +196 - Skillchain! takes point(s) of damage. +197 - uses , but resists. takes point(s) of damage. 198 - is too far away. 199 - That action requires a shield. -200 - Time left until next use: (0:00:00) -201 - Current time: (0:00:00) +200 - Time left until next use: (::) +201 - Current time: (::) 202 - Time left: (0:00:00) -203 - is KO'd. -204 - is no longer KO'd. -205 - gains the effect of KO. -206 - 's KO effect wears off. -207 - HP / HPMax:0/.. -208 - MP / MPMax:0/.. -209 - TP:0% -210 - The cannot charm ! -211 - It would be very difficult for the to charm . -212 - It would be difficult for the to charm . -213 - The might be able to charm . -214 - The should be able to charm . +203 - ${target} is ${status}. +204 - ${target} is no longer ${status}. +205 - ${target} gains the effect of ${status}. +206 - ${target}'s ${status} effect wears off. +207 - HP / HPMax:/ +208 - MP / MPMax:/ +209 - TP:% +210 - cannot charm ! +211 - It would be very difficult for to charm . +212 - It would be difficult for to charm . +213 - might be able to charm . +214 - should be able to charm . 215 - That action requires a pet. 216 - You do not have an appropriate ranged weapon equipped. 217 - You cannot see . 218 - You move and interrupt your aim. 219 - You cannot see . 220 - You move and interrupt your aim. -221 - The uses .. 's pet is released. +221 - uses . 's pet is released. 222 - isn't selling anything. -223 - Skillchain: 0 points of damage. -224 - The uses .. recovers .. MP. -225 - The uses .. .. MP drained from . -226 - The uses .. .. TP drained from . -227 - The casts (NULL). .. HP drained from . -228 - The casts (NULL). .. MP drained from . -229 - Additional effect: takes additional points of damage. -230 - The casts (NULL). gains the effect of stun. -231 - The uses .. .. of 's effects disappear! +223 - Skillchain: points of damage. +224 - uses . recovers MP. +225 - uses . MP drained from +226 - uses . TP drained from +227 - casts . HP drained from . +228 - casts . MP drained from . +229 - Additional effect: The takes additional points of damage. +230 - casts . gains the effect of . +231 - of 's effects disappear! 232 - is drawn in! 233 - You are ineligible to attack that target. 234 - Auto-targeting . 235 - That is someone's pet. -236 - The casts (NULL). is stunned. -237 - The casts (NULL). receives the effect of stun. -238 - The uses .. recovers .. HP. -239 - Size: -240 - The tries to hide, but is spotted by . -241 - The hides! -242 - The uses .. is stunned. -243 - The uses .. receives the effect of stun. -244 - The fails to mug . -245 - The uses Eagle Eye Shot, but misses . -246 - is full. -247 - The can't eat the .. -248 - The 's attack has no effect on . +236 - casts . is . +237 - casts . receives the effect of . +238 - uses . recovers HP. +239 - Size: +240 - The tries to hide, but is spotted by . +241 - hides! +242 - uses . is . +243 - uses . receives the effect of . +244 - fails to mug . +245 - The uses Eagle Eye Shot, but misses . +246 - ${target} is full. +247 - ${actor} can't eat the ${item}. +248 - 's attack has no effect on . 249 - 's strength is impossible to gauge! 250 - Reraise takes effect! -251 - The effect of KO is about to wear off. -252 - The casts (NULL). Magic Burst! takes .. points of damage. -253 - EXP chain #..! The gains 0 experience points. -254 - Current enmity: -255 - DEBUG: >0% chance of success. -256 - In this flower pot: Seeds sown: -257 - Crystal used: .. -258 - Crystal used: .. -259 - First crystal used: .. Second crystal used: .. -260 - First crystal used: .. Second crystal used: .. -261 - First crystal used: .. Second crystal used: .. -262 - First crystal used: .. Second crystal used: .. -263 - recovers .. HP. -264 - takes .. points of damage. -265 - Magic Burst! takes .. points of damage. -266 - gains the effect of stun. -267 - receives the effect of stun. -268 - The casts (NULL). Magic Burst! receives the effect of stun. -269 - Magic Burst! receives the effect of stun. -270 - is stunned. -271 - The casts (NULL). Magic Burst! is stunned. -272 - Magic Burst! is stunned. -273 - vanishes! -274 - The casts (NULL). Magic Burst! .. HP drained from . -275 - The casts (NULL). Magic Burst! .. MP drained from . -276 - recovers .. MP. -277 - is stunned. -278 - receives the effect of stun. -279 - is stunned. -280 - gains the effect of stun. -281 - .. HP drained from . +251 - The effect of ${status} is about to wear off. +252 - casts . Magic Burst! takes point(s) of damage. +253 - EXP chain #! gains experience point(s). +254 - Current enmity: +255 - DEBUG: >% chance of success. +256 - In this flower pot: Seeds sown: +257 - Crystal used: none +258 - Crystal used: +259 - First crystal used: Second crystal used: +260 - First crystal used: none Second crystal used: +261 - First crystal used: Second crystal used: none +262 - First crystal used: none Second crystal used: none +263 - recovers HP. +264 - takes points of damage. +265 - Magic Burst! takes point(s) of damage. +266 - gains the effect of . +267 - receives the effect of . +268 - casts . Magic Burst! receives the effect of . +269 - Magic Burst! receives the effect of . +270 - is . +271 - casts . Magic Burst! is . +272 - Magic Burst! is . +273 - vanishes! +274 - casts . Magic Burst! HP drained from . +275 - casts . Magic Burst! MP drained from . +276 - recovers mp. +277 - is . +278 - receives the effect of . +279 - is . +280 - is . +281 - HP is drained from . 282 - evades. 283 - No effect on . 284 - resists the effects of the spell! -285 - 's attacks are enhanced. -286 - is fortified against undead. -287 - is fortified against arcana. -288 - Skillchain: Light. takes 0 points of damage. -289 - Skillchain: Darkness. takes 0 points of damage. -290 - Skillchain: Gravitation. takes 0 points of damage. -291 - Skillchain: Fragmentation. takes 0 points of damage. -292 - Skillchain: Distortion. takes 0 points of damage. -293 - Skillchain: Fusion. takes 0 points of damage. -294 - Skillchain: Compression. takes 0 points of damage. -295 - Skillchain: Liquefaction. takes 0 points of damage. -296 - Skillchain: Induration. takes 0 points of damage. -297 - Skillchain: Reverberation. takes 0 points of damage. -298 - Skillchain: Transfixion. takes 0 points of damage. -299 - Skillchain: Scission. takes 0 points of damage. -300 - Skillchain: Detonation. takes 0 points of damage. -301 - Skillchain: Impaction. takes 0 points of damage. -302 - Skillchain: Cosmic Elucidation. takes .. points of damage. -303 - The uses Divine Seal. -304 - The uses Elemental Seal. -305 - The uses Trick Attack. -306 - The uses .. recovers .. HP. +285 - 's attacks are enhanced. +286 - is fortified against undead. +287 - is fortified against arcana. +288 - Skillchain: Light. takes point(s) of damage. +289 - Skillchain: Darkness. takes point(s) of damage. +290 - Skillchain: Gravitation. takes point(s) of damage. +291 - Skillchain: Fragmentation. takes point(s) of damage. +292 - Skillchain: Distortion. takes point(s) of damage. +293 - Skillchain: Fusion. takes point(s) of damage. +294 - Skillchain: Compression. takes point(s) of damage. +295 - Skillchain: Liquefaction. takes point(s) of damage. +296 - Skillchain: Induration. takes point(s) of damage. +297 - Skillchain: Reverberation. takes point(s) of damage. +298 - Skillchain: Transfixion. takes point(s) of damage. +299 - Skillchain: Scission. takes point(s) of damage. +300 - Skillchain: Detonation. takes point(s) of damage. +301 - Skillchain: Impaction. takes point(s) of damage. +302 - Skillchain: Cosmic Elucidation. takes point(s) of damage. +303 - uses Divine Seal. +304 - uses Elemental Seal. +305 - uses Trick Attack. +306 - uses . recovers HP. (Blue text) 307 - That action requires a two-handed weapon. -308 - Unable to use the . Inventory is full. -309 - The casts (NULL) on . -310 - The 's (N/A) skill drops 0... points! +308 - Unable to use the ${item}.${lb}${target}'s inventory is full. +309 - casts on . +310 - 's skill drops 0. points! 311 - The covers . 312 - The 's attempt to cover has no effect. -313 - is out of range. Unable to cast (NULL). -314 - 's level is currently restricted to 0. Equipment affected by the level restriction will be adjusted accordingly. +313 - is out of range. Unable to cast . +314 - 's level is currently restricted to . Equipment affected by the level restriction will be adjusted accordingly. 315 - The already has a pet. 316 - That action cannot be used in this area. 317 - The uses .. takes .. points of damage. -318 - The uses .. recovers .. HP. -319 - The uses .. gains the effect of stun. -320 - The uses .. receives the effect of stun. -321 - The uses .. is no longer KO'd. -322 - The uses .. 's stun effect wears off. -323 - The uses .. No effect on . -324 - The uses .. but misses . +318 - uses . recovers HP. (Blue text) +319 - uses gains the effect of . +320 - uses . receives the effect of . +321 - uses . 's wears off. +322 - uses . s' effect wears off. +323 - uses . No effect on . (2 line msg) +324 - uses , but misses . (includes target name) 325 - You are charmed by an enemy and unable to act. -326 - The readies .. -327 - The starts casting on . +326 - readies . +327 - starts casting on . 328 - is too far away. -329 - The casts (NULL). 's STR is drained. -330 - The casts (NULL). 's DEX is drained. -331 - The casts (NULL). 's VIT is drained. -332 - The casts (NULL). 's AGI is drained. -333 - The casts (NULL). 's INT is drained. -334 - The casts (NULL). 's MND is drained. -335 - The casts (NULL). 's CHR is drained. +329 - casts . 's STR is drained. +330 - casts . 's DEX is drained. +331 - casts . 's VIT is drained. +332 - casts . 's AGI is drained. +333 - casts . 's INT is drained. +334 - casts . 's MND is drained. +335 - casts . 's CHR is drained. 336 - No effect on that pet. 337 - You do not have the necessary item equipped to call a beast. 338 - You cannot summon avatars here. -339 - Your chocobo senses a hostile presence and refuses to come to your side. +339 - Your mount senses a hostile presence and refuses to come to your side. 340 - You must equip your main weapon first to use Dual Wield. -341 - The casts (NULL). 's stun effect disappears! -342 - The casts (NULL). 's stun effect disappears! -343 - 's stun effect disappears! -344 - 's stun effect disappears! +341 - casts . 's effect disappears! +342 - casts . 's effect disappears! +343 - 's effect disappears! +344 - 's effect disappears! 345 - You cannot heal while you have an avatar summoned. 346 - You must summon an avatar to use that command. 347 - You must have pet food equipped to use that command. 348 - You cannot call wyverns here. 349 - You cannot call beasts here. -350 - is no longer stunned. -351 - The remedy removes 's status ailments. -352 - The 's ranged attack hits for .. points of damage. -353 - The 's ranged attack scores a critical hit! takes .. points of damage. -354 - The 's ranged attack misses. -355 - The 's ranged attack has no effect on . +350 - is no longer weakened. +351 - The remedy removes 's status ailments. +352 - 's ranged attack hits for point(s) of damage. +353 - 's ranged attack scores a critical hit! takes points of damage. +354 - 's ranged attack misses. +355 - 's ranged attack has no effect on . 356 - Cannot execute command. Your inventory is full. -357 - regains .. HP. -358 - regains .. MP. -359 - narrowly escapes impending doom. -360 - The uses .. All of 's abilities are recharged. -361 - All of 's abilities are recharged. -362 - The uses .. 's TP is reduced to ... -363 - 's TP is reduced to ... -364 - The uses .. All of 's status parameters are boosted. +357 - regains HP. +358 - regains MP. +359 - narrowly escapes impending doom. +360 - uses . All of 's abilities are recharged. +360 - uses . All of 's abilities are recharged. +361 - All of ${target}'s abilities are recharged. +362 - uses . 's TP is reduced to . +363 - 's TP is reduced to . +364 - uses . All of 's status paramaters are boosted. 365 - All of 's status parameters are boosted. -366 - .. MP drained from . -367 - recovers .. HP. -368 - The earns a merit point! (Total: 0) -369 - The uses .. .. of 's attributes are drained. -370 - The uses .. .. status effects are drained from . -371 - The gains 0 limit points. -372 - Limit chain #..! The gains 0 limit points. -373 - The hits . recovers .. hit points! -374 - Striking 's armor causes to become . - -378 - The uses .. 's stun effect disappears! -- Probably item related) -379 - The uses .. Magic Burst! takes .. points of damage. -382 - The 's ranged attack hits . recovers .. hit points! -383 - 's spikes restore 0 HP to the . -384 - Additional effect: recovers 0 HP. -385 - Skillchain: Light. recovers 0 hit points! -386 - Skillchain: Darkness. recovers 0 hit points! -387 - Skillchain: Gravitation. recovers 0 hit points! -388 - Skillchain: Fragmentation. recovers 0 hit points! -389 - Skillchain: Distortion. recovers 0 hit points! -390 - Skillchain: Fusion. recovers 0 hit points! -391 - Skillchain: Compression. recovers 0 hit points! -392 - Skillchain: Liquefaction. recovers 0 hit points! -393 - Skillchain: Induration. recovers 0 hit points! -394 - Skillchain: Reverberation. recovers 0 hit points! -395 - Skillchain: Transfixion. recovers 0 hit points! -396 - Skillchain: Scission. recovers 0 hit points! -397 - Skillchain: Detonation. recovers 0 hit points! -398 - Skillchain: Impaction. recovers 0 hit points! -399 - The uses .. All of 's Petras vanish! -400 - The uses .. .. of 's status ailments disappear! -401 - The uses .. .. of 's effects disappear! -- Item related. -402 - The uses .. 's magic defense is enhanced. -403 - .. of 's attributes are drained. -404 - .. status effects are drained from . -405 - The uses .. .. of 's effects disappear! -406 - The uses .. falls to the ground. -407 - The uses .. 's TP is reduced. -408 - The uses .. No effect on . -409 - The uses .. 's TP is increased to ... +367 - recovers HP. +368 - earns a merit point! (Total: uses . of 's attributes is drained. +370 - status effects are drained from . +371 - gains limit point(s). +372 - Limit Chain #! gains limit points. +373 - hits . recovers hit points! +374 - Striking 's armor causes to become . +375 - ${actor} uses a ${item}.${lb}${target} receives the effect of ${status}. +376 - ${actor} uses a ${item}.${lb}${target} obtains a ${item2}. +377 - ${actor} uses a ${item}.${lb}${target} obtains ${item2}. +378 - ${actor} uses a ${item}.${lb}${target}'s ${status} effect disappears! +379 - uses . Magic Burst! takes point(s) of damage. +380 - BUGGED? Prevents other messages? +381 - BUGGED? Prevents other messages? +382 - 's ranged attack hits . recovers hit points! +383 - 's spikes restore HP to the . +384 - Additional effect: recovers HP. +385 - Skillchain: Light. recovers hit points! +386 - Skillchain: Darkness. recovers hit points! +387 - Skillchain: Gravitation. recovers hit points! +388 - Skillchain: Fragmentation. recovers hit points! +389 - Skillchain: Distortion. recovers hit points! +390 - Skillchain: Fusion. recovers hit points! +391 - Skillchain: Compression. recovers hit points! +392 - Skillchain: Liquefaction. recovers hit points! +393 - Skillchain: Induration. recovers hit points! +394 - Skillchain: Reverberation. recovers hit points! +395 - Skillchain: Transfixion. recovers hit points! +396 - Skillchain: Scission. recovers hit points! +397 - Skillchain: Detonation. recovers hit points! +398 - Skillchain: Impaction. recovers hit points! +399 - uses an . All of 's Petras vanish! +400 - uses a . of 's status ailments disappears! +401 - uses a . of 's effects disappear! +402 - uses . 's magic defense is enhanced. +403 - of 's attributes are drained. +404 - status effects are drained from . +405 - uses . of 's effects disappear! +406 - uses . falls to the ground. +407 - uses a . 's TP is reduced +408 - uses a . No effect on . +409 - uses . 's TP is increased to . 410 - No target available. Unable to use item. -411 - The attempts to use the , but lacks the required number of Ballista Points. You currently have .. Ballista Points. -412 - The uses .. receives the effect of stun. -413 - The uses .. takes .. points of damage. -414 - The uses .. receives the effect of Magic Attack Boost and Magic Defense Boost. +411 - attempts to use the , but lacks the required number of Ballista Points. You currently have Ballista Points. +412 - uses an . receives the effect of . +413 - uses an . takes point(s) of damage. +414 - uses . receives the effect of Magic Attack Boost and Magic Defense Boost. 415 - receives the effect of Magic Attack Boost and Magic Defense Boost. -416 - The uses .. receives the effect of Magic Attack Boost and Magic Defense Boost. -417 - The uses .. .. of 's attributes are drained. -418 - The uses .. on . 's target switches to the ! +416 - uses . receives the effect of Magic Attack Boost and Magic Defense Boost. +417 - uses . of 's attributes are drained. +418 - uses on . 's target switches to ! 419 - learns (NULL)! 420 - The uses .. The total comes to ..! receives the effect of .. 421 - receives the effect of .. @@ -423,236 +427,400 @@ 427 - loses the effect of .. 428 - There are no rolls eligible for Double-Up. Unable to use ability. 429 - The same roll is already active on the . -430 - The casts (NULL). .. of 's attributes is drained. -431 - The casts (NULL). 's TP is reduced. -432 - The casts (NULL). receives the effect of Accuracy Boost and Evasion Boost. -433 - The casts (NULL). receives the effect of Magic Attack Boost and Magic Defense Boost. -434 - You cannot customize an activated automaton. -435 - The uses ..! 's abilities are recharged. +430 - casts . 1 of 's effects is drained. +431 - casts . 's TP is reduced. +432 - casts . receives the effect of Accuracy Boost and Evasion Boost. +433 - casts . receives the effect of Magic Attack Boost and Magic Defense Boost. +434 - You cannot customize and activated automaton. +435 - uses ! 's abilities are recharged. 436 - 's abilities are recharged. -437 - The uses ..! 's abilities are recharged. 's TP is increased. +437 - uses ! 's abilities are recharged. 's TP is increased. 438 - 's abilities are recharged. 's TP is increased. -439 - The uses ..! All of 's abilities are recharged. regains MP. +439 - uses ! All of 's abilities are recharged. regains MP. 440 - All of 's abilities are recharged. regains MP. -441 - The uses .. receives the effect of .. -442 - The learns a new ability! -443 - You cannot learn .. You do not meet the job or level requirements. -444 - You already know .. -445 - You cannot use items at this time +441 - uses . receives the effect of . +442 - learns a new ability! +443 - You cannot learn . You do not meet the job or level requirements. +444 - You already know . +445 - You cannot use items at this time. 446 - You cannot attack that target -447 - You are provoked and unable to change your target -448 - Time allowed in Dynamis has been extended by 0 minutes -449 - ----== WARNING ==----Time remaining in Dynamis: 0 minutes. -450 - WATCH0 :.. -451 - The uses .. regains .. MP. -452 - The uses .. regains .. TP. -453 - The uses .. The steals the effect of stun from . -454 - The casts (NULL). .. TP drained from . -455 - Debug : Fishing skill check: : -456 - Debug : Level Restriction on. PetType 0/ID -457 - Debug : Level restriction off. PetType 0/ID -458 - Debug : Dif - Now > 0 RATE ../1000 -459 - Self-destruct check: skipping calculation of 's self-destruct process md_no0/cmd_arg10 -460 - EXP Check: > XP:0/LvUp.. -461 - :STR 0/.. -462 - :DEX 0/.. -463 - :VIT 0/.. -464 - :AGI 0/.. -465 - :INT 0/.. -466 - :MND 0/.. -467 - :CHR 0/.. -468 - Wyvern: JobLv<0> TaskLv<..> -469 - ID: Master<0> Pet<..> -470 - Wyvern routine type: Master<0> Pet<..> -471 - Avatar type: Master<0> Pet<..> -472 - Avatar MP: Master<0> Pet<..> -473 - Avatar HP: Master<0> Pet<..> -474 - Avatar level: Master<0> Pet<..> -475 - Avatar No.: Master<0> Pet<..> -476 - Probability of dropping : ../10000 +447 - You are provoked and unable to change your target. +448 - Time allowed in Dynamis has been extended by minutes +449 - ----== WARNING ==----Time remaining in Dynamis: minutes. +450 - WATCH1 : +451 - uses . regains MP. +452 - uses . regains TP. +453 - uses . steals the effect of from . +454 - casts . TP drained from . +455 - Debug : Fishing skill check: : KANJI +456 - Debug : Level Restriction on. PetType /ID /ID RATE /1000 +459 - Self-destruct check: skipping calculation of 's self-destruct process md_no/cmd_arg ! +460 - EXP Check: > XP:/LvUp +461 - :STR +462 - :DEX +463 - :VIT +464 - :AGI +465 - :INT +466 - :MND +467 - :CHR +468 - Wyvern: JobLv<> TaskLv<> +469 - ID: Master<> Pet<> +470 - Wyvern routine type: Master<> Pet<> +471 - Avatar type: Master<> Pet<> +472 - Avatar MP: Master<> Pet<> +473 - Avatar HP: Master<> Pet<> +474 - Avatar level: Master<> Pet<> +475 - Avatar No.: Master<> Pet<> +476 - Probability of dropping : /10000 477 - Unable to target . You have not received the level cap status. -478 - Height differential between and : 0mm. +478 - Height differential between and : mm. 479 - Damage taken. -480 - Number of Targets (0) Damage (..) -481 - Overall: Number of Attacks (0) Misses (..) -482 - Number of Targets (0) Damage (..) -483 - Ranged Attack: Number of Attacks (0) Misses (..) -484 - Number of Targets (0) Damage (..) -485 - JA: Number of Attacks (0) Misses (..) -486 - Number of Targets (0) Damage (..) -487 - Weapon Skill: Number of Attacks (0) Misses (..) -488 - Number of Targets (0) Damage(..) -489 - Spell: Number of Attacks (0) Misses (..) -490 - Number of Targets (0) Damage(..) -491 - AA: Number of Attacks (0) Misses (..) -492 - Time: -493 - 's log -494 - -495 - -496 - -497 - -498 - -499 - Hate : > 0/.. -500 - -501 - -502 - StatusGet(:0/..) StatusSet(:0/..) -503 - : Skillchain Element 0(..) -504 - -505 - -506 - -507 - -508 - -509 - :< 0/.. > -510 - DEBUG:>great katana = 0% -511 - +480 - Number of Targets () Damage () +481 - Overall: Number of Attacks () Misses () +482 - Number of Targets () Damage () +483 - Ranged Attack: Number of Attacks () Misses () +484 - Number of Targets () Damage () +485 - JA: Number of Attacks () Misses () +486 - Number of Targets () Damage () +487 - Weapon Skill: Number of Attacks () Misses () +488 - Number of Targets () Damage () +489 - Spell: Number of Attacks () Misses () +490 - Number of Targets () Damage () +491 - AA: Number of Attacks () Misses () +492 - Time: +493 - 's log +494 - : : +495 - :healing magic> % +496 - :healing magic> % +497 - : + / + % +498 - > +499 - Hate : > +500 - to :CODE +501 - StatusGet(:/) +502 - StatusSet(:/) +503 - : Skillchain Element () +504 - : (, %) +505 - : (). (). +506 - : (). (). +507 - : /. +508 - : %,PS +509 - :< > +510 - DEBUG: > (N/A) = % +511 - DEBUG: > %() 512 - You must have a two-handed weapon equipped in the main weapon slot in order to equip a grip. 513 - This grip is not compatible with the two-handed weapon you currently have equipped. -514 - You do not have the proper items equipped to use the .. -515 - has successfully recorded the target's image onto a .. -516 - was unable to capture the target's image. -517 - The cannot be used on that target. -518 - The cannot be used while under the effect of Invisible or Sneak. -519 - The uses .. is afflicted with Lethargic Daze (lv...). -520 - The uses .. is afflicted with Sluggish Daze (lv...). -521 - The uses .. is afflicted with Weakened Daze (lv...). -522 - The uses Violent Flourish. takes .. points of damage and is stunned. -523 - The same effect is already active on the . +514 - You do not have the proper items equipped to use the . +515 - has successfully recorded the target's image onto an . +516 - was unable to capture the target's image. +517 - The cannot be used on that target. +518 - The cannot be used while under the effect of Invisible or Sneak. +519 - uses . is afflicted with Lethargic Daze (lv. uses . is afflicted with Sluggish Daze (lv.). +521 - uses . is afflicted with Weakened Daze (lv.). +522 - uses . takes point(s) of damage and is stunned. +523 - The same effect is already active on . 524 - You have not earned enough finishing moves to perform that action. 525 - .. can only be performed during battle. -526 - The uses .. Enmity is stolen from . -527 - The uses .. Ranged attack power and speed are increased. Melee attack power and speed are reduced. -528 - The uses .. Enmity is transferred to the 's pet. -529 - The uses .. is chainbound. -530 - 's petrification counter is now down to 0. -531 - is no longer KO'd. -532 - The uses .. receives the effect of Sneak and Invisible. -533 - The casts (..). 's Accuracy is drained. -534 - The casts (..). 's Attack is drained. -535 - retaliates. .. of 's shadows absorb the damage and disappear. -536 - retaliates. The takes 0 points of damage. -537 - 's TP is increased to ..%. -538 - A protective energy absorbs the malice of your enemy! -539 - The uses .. regains HP. -540 - Level Sync activated. Your level has been restricted to ... Equipment affected by the level restriction will be adjusted accordingly. Experience points will become unavailable for all party members should the Level Sync designee stray too far from the enemy. -541 - Level Sync could not be activated. The designated player is below level ... +526 - uses . Enmity is stolen from . +527 - uses . Ranged attack power and speed are increased. Melee attack power and speed are reduced. +528 - uses . Enmity is transferred to the 's pet. +529 - uses . is chainbound. +530 - 's petrification counter is now down to . +531 - is no longer . +532 - uses . receives the effect of Sneak and Invisible. +533 - casts . 's Accuracy is drained. +534 - casts . 's Attack is drained. +535 - retaliates. of 's shadows absorb the damage and disappear. +536 - retaliates. takes point(s) of damage. +537 - 's TP is increased to %. +538 - A protective energy absorbs the malice of your enemy. +539 - uses . regains HP. +540 - Level Sync activated. Your level has been restricted to . Equipment affected by the level restriction will be adjusted accordingly. Experience points will become unavailable for all party members should the Level Sync designee stray too far from the enemy. +541 - Level Sync could not be activated. The designated player is below level 10. 542 - Level Sync could not be activated. The designated player is in a different area. 543 - Level Sync could not be activated. One or more party members are currently under the effect of a status which prevents synchronization. -544 - Level synchronization will be removed in .. seconds. -545 - No experience points gained... The Level Sync designee is either too far from the enemy, or unconscious. -546 - Your stun effect duration has been extended. +544 - Level synchronization will be removed in seconds. +545 - No experience points gained...The Level Sync designee is either too far from the enemy, or unconscious. +546 - Your effect duration has been extended. 547 - This ability can only be used on targets under the effect of a helix. 548 - The party member you have selected is incapable of receiving experience points, and as such cannot be a Level Sync designee. -549 - No experience points gained... The Level Sync designee is incapable of receiving experience points. -550 - Level Sync will be deactivated in .. seconds. One or more party members have received the effect of a status which prevents synchronization. -551 - Level Sync will be deactivated in .. seconds. The party leader or the Level Sync designee has left the area. -552 - Level Sync will be deactivated in .. seconds. Less than two party members fulfill the requirements for Level Sync. -553 - Level Sync will be deactivated in .. seconds. The party leader has removed synchronization, or the Level Sync designee has left the party. -554 - Level Sync will be deactivated in .. seconds. The Level Sync designee has fallen below level ... -555 - Level Sync will be deactivated in .. seconds. A party member has undergone a job change. -556 - Level Sync will be deactivated in .. seconds. The Level Sync designee is incapable of receiving experience points. -557 - receives .. pieces of alexandrite. -558 - You defeated a designated target. (Progress: ../..) +549 - No experience points gained...The Level Sync designee is incapable of receiving experience points. +550 - Level Sync will be deactivated in seconds. One or more party members have received the effect of a status which prevents synchronization. +551 - Level Sync will be deactivated in seconds. The party leader or the Level Sync designee has left the area. +552 - Level Sync will be deactivated in seconds. Less than two party members fulfill the requirements for Level Sync. +553 - Level Sync will be deactivated in seconds. The party leader has removed synchronization, or the Level Sync designee has left the party. +554 - Level Sync will be deactivated in seconds. The Level Sync designee has fallen below level 10. +555 - Level Sync will be deactivated in seconds. A party member has undergone a job change. +556 - Level Sync will be deactivated in seconds. The Level Sync designee is incapable of receiving experience points. +557 - receives pieces of alexandrite. +558 - You defeated a designated target.${lb}(Progress: ${number}/${number2}) 559 - You have successfully completed the training regime. -560 - uses .. Finishing moves now ... +560 - uses . Finishing move(s) now . 561 - Unable to perform that action. Your have already earned the maximum number of finishing moves. -562 - The status parameters of have increased. -563 - The destroys . +562 - The status parameters of ${target} have increased. +563 - destroys . 564 - were destroyed. -565 - obtains .. gil. -566 - obtains .. tabs. (Total: ..) -567 - stowed away a .. in his tattered Maze Monger pouch. -568 - Your tattered Maze Monger pouch already contains a .. and cannot hold another. +565 - ${target} obtains ${gil}. +566 - ${target} obtains ${number} tab.${lb}(Total: ${number}) +567 - stowed away an in his/her tattered Maze Monger pouch. +568 - Your tattered Maze Monger pouch already contains an and cannot hold another. 569 - Your current status prevents you from using that ability. -570 - The casts (NULL). .. of 's status ailments disappear! -571 - .. of 's status ailments disappear! -572 - The casts (NULL). You absorb .. of 's status ailments. -573 - or an alliance member is participating in a union. Ineligible to obtain treasure from this enemy. +570 - casts . of 's status ailments disappears! +571 - of 's status ailments disappear! +572 - casts . absorbs of 's status ailments. +573 - or an alliance member is participating in a union. Ineligible to obtain treasure from this enemy. 574 - 's pet is currently unable to perform that action. 575 - 's pet does not have enough TP to perform that action. -576 - The 's ranged attack hits squarely for .. points of damage! -577 - The 's ranged attack strikes true, pummeling for .. points of damage! +576 - 's ranged attack hits squarely for point(s) of damage! +577 - 's ranged attack strikes true, pummeling for point(s) of damage! 578 - Hunt objective fulfilled! Please report to a hunt registry to collect your reward. -579 - Unable to use the .. Party leaders or those not in a party cannot use .. -580 - Unable to use the .. The party leader is in either an area beyond warping range or a place you have yet to visit. -581 - Unable to cast (NULL). Astral Flow must be in effect to cast this spell. -582 - obtains .. gil. -583 - Trial ..: .. objectives remain. -584 - You have completed Trial ... Report your success to a Magian Moogle. -585 - -586 - -587 - -588 - -589 - -590 - -591 - -592 - -593 - -594 - -595 - -596 - -597 - -598 - -599 - -600 - -601 - Objective fufilled! ... Please report to a Dominion Sergeant to collect your reward. -602 - -603 - Additional Effect: Treasure hunter effectiveness against increases to . -604 - -605 - -606 - -607 - -608 - uses ... Treasure Hunter effectiveness against increases to . -609 - Prowess attained: increased treasure casket discovery. -610 - Prowess attained: increased combat and magic skill gain. -611 - Prowess attained: increased crystal yield. -612 - Prowess attained: increased Treasure Hunter Bonus. -613 - Prowess attained: increased attack speed. -614 - Prowess attained: increased HP and MP. -615 - Prowess attained: increased accuracy and ranged accuracy. -616 - Prowess attained: increased attack and ranged attack. -617 - Prowess attained: increased magic accuracy and magic attack. +579 - Unable to use the . Party leaders or those not in a party cannot use an . +580 - Unable to use the . The party leader is in either an area beyond warping range or a place you have yet to visit. +581 - Unable to cast . Astral Flow must be in effect to cast this spell. +582 - obtains gil. +583 - Trial : objectives remain. +584 - You have completed Trial . Report your success to a Magian Moogle. +585 - uses . 's enmity towards is %. +586 - Towards is %. +587 - regains HP. +588 - regains MP. +589 - have been healed of ailments. +590 - You can now perform . +591 - uses . is afflicted with Bewildered Daze (lv.). +592 - attempts to counter 's attack, but misses. +593 - ${actor} uses ${ability}.${lb}${actor} steals a ${item} from ${target}.${lb}Additional effect: ${target} is afflicted with Attack Down. +594 - ${actor} uses ${ability}.${lb}${actor} steals a ${item} from ${target}.${lb}Additional effect: ${target} is afflicted with Defense Down. +595 - ${actor} uses ${ability}.${lb}${actor} steals a ${item} from ${target}.${lb}Additional effect: ${target} is afflicted with Magic Atk. Down. +596 - ${actor} uses ${ability}.${lb}${actor} steals a ${item} from ${target}.${lb}Additional effect: ${target} is afflicted with Magic Def. Down. +597 - ${actor} uses ${ability}.${lb}${actor} steals a ${item} from ${target}.${lb}Additional effect: ${target} is afflicted with Evasion Down. +598 - ${actor} uses ${ability}.${lb}${actor} steals a ${item} from ${target}.${lb}Additional effect: ${target} is afflicted with Accuracy Down. +599 - ${actor} uses ${ability}.${lb}${actor} steals a ${item} from ${target}.${lb}Additional effect: ${target} is afflicted with Slow. +600 - ${actor} eats a ${item}.${lb}${actor} finds a ${item2} inside! +601 - Objective fulfilled! Please report to a Dominion Sergeant to collect your reward. +602 - uses . receives the effect of . +603 - Additional effect: Treasure Hunter effectiveness against increases to . +604 - ${actor} eats a ${item}, but finds nothing inside... +605 - Additional effect: falls to the ground. +606 - absorbs 's counter. recovers HP. +607 - uses . of 's status ailments disappear! +608 - uses . Treasure Hunter effectiveness against increases to . +609 - Prowess attained: Increased treasure casket discovery. +610 - Prowess attained: Increased combat and magic skill gain. +611 - Prowess attained: Increased crystal yield. +612 - Prowess attained: Treasure Hunter bonus. +613 - Prowess attained: Increased attack speed. +614 - Prowess attained: Increased HP and MP. +615 - Prowess attained: Enhanced accuracy and ranged accuracy. +616 - Prowess attained: Enhanced attack and ranged attack. +617 - Prowess attained: Enhanced magic accuracy and magic attack. 618 - Prowess attained: Enhanced "Cure" potency. -619 - Prowess attained: increased weapon skill damage. +619 - Prowess attained: Increased weapon skill damage. 620 - Prowess attained: "Killer" effects bonus. -621-624 null? -625 - Prowess boosted: increased treasure casket discovery. -626 - Prowess boosted: increased combat and magic skill gain. -627 - Prowess boosted: increased crystal yield. -628 - Prowess boosted: increased Treasure Hunter Bonus. -629 - Prowess boosted: increased attack speed. -630 - Prowess boosted: increased HP and MP. -631 - Prowess boosted: increased accuracy and ranged accuracy. -632 - Prowess boosted: increased attack and ranged attack. -633 - Prowess boosted: increased magic accuracy and magic attack. +621 - Blank Line/Prompt +622 - Blank Line/Prompt +623 - Blank Line/Prompt +624 - Blank Line/Prompt +625 - Prowess boosted: Increased treasure casket discovery. +626 - Prowess boosted: Increased combat and magic skill gain. +627 - Prowess boosted: Increased crystal yield. +628 - Prowess boosted: Treasure Hunter bonus. +629 - Prowess boosted: Increased attack speed. +630 - Prowess boosted: Increased HP and MP. +631 - Prowess boosted: Enhanced accuracy and ranged accuracy. +632 - Prowess boosted: Enhanced attack and ranged attack. +633 - Prowess boosted: Enhanced magic accuracy and magic attack. 634 - Prowess boosted: Enhanced "Cure" potency. -635 - Prowess boosted: increased weapon skill damage. +635 - Prowess boosted: Increased weapon skill damage. 636 - Prowess boosted: "Killer" effects bonus. - -673 - obtains corpuscles of mweya plasm. -674 - -675 - -676 - -677 - You are now able to posess a new monster! +637 - Blank Line/Prompt +638 - Blank Line/Prompt +639 - Blank Line/Prompt +640 - Blank Line/Prompt +641 - Additional effect: of 's attributes are drained. +642 - casts . absorbs of 's status benefits. +643 - Your current training regime will begin anew! +644 - uses . of 's status effects are removed. +645 - uses . is . +646 - uses . falls to the ground. +647 - casts . 's effect disappears! +648 - leads the casting of . takes point(s) of damage. +649 - A member of another party is readying against your target. You cannot cast the same spell at this time. +650 - leads the casting of . Magic Burst! takes point(s) of damage. +651 - leads the casting of . recovers hit points. +652 - Additional effect: loses TP. +653 - casts . -> resists the spell. ->Immunobreak! +654 - -> resists the spell. ->Immunobreak! +655 - casts . -> completely resists the spell. +656 - -> completely resists the spell. +657 - uses . ->All enmity is transferred to . +658 - uses , but misses . +659 - No effect on . +660 - The same effect is already active on that luopan!. +661 - has already placed a luopan. Unable to use ability. +662 - This action requires a luopan. +663 - uses . The luopan's HP consumption rate has been reduced. +664 - uses . The luopan's HP consumption rate has been increased. +665 - has a pet. Unable to use ability. +666 - That action requires the ability Rune Enchantment. +667 - uses . Accuracy and evasion are enhanced. +668 - receives the effect of Vallation, reducing damage taken from certain elemental magic spells. -- Vallation and Valiance both use this message for the RUN using the ja +669 - Magic damage of a certain element is reduced for --- This message is when a party member recieves the aoe effect of Valiance +670 - uses . can now absorb magic damage of a certain element. +671 - uses . now has enhanced resistance. +672 - uses . receives the effect of Gambit, reducing magic defense against magic of a certain element. +673 - obtains corpuscles of mweya plasm. +674 - uses , and finds . +675 - readies . +676 - 's movement speed increases. +677 - You are now able to possess a new monster! 678 - You have learned a new instinct! -679 - -680 - - -690 - You have completed the following record of Eminence objective: -691 - This objective may be repeated, and can be canceled from the menu. -692 - You receive sparks of eminence, and now possess a total of . -693 - As a special bonus for your valiant efforts, you have been awarded a ! -694 - As a special bonus for your valiant efforts, you have been awarded sparks of eminence! -695 - Unable to receive bonus. ... Make room in your inventory and receive your reward from the records of eminence menu. -696 - You have yet to receive certain special bonuses from objectives you have completed. Make room in your inventory and receive your rewards from thr record of eminence menu. -697 - Records of Emminence: -698 - Progress / +679 - will return to the Feretory in: . +680 - A newfound puissance courses through your veins. +681 - Your muscles ripple with an immensely powerful and invigorating force. +682 - Your puissance withers slightly. +683 - You have claimed ! +684 - has been claimed! +685 - The enemy you are battling will no longer be claimed in: . +686 - The enemy you were battling is no longer claimed. +687 - captured . +688 - has fled! +689 - captured . +690 - You have completed the following Records of Eminence objective: . +691 - This objective may be repeated, and can be cancelled from the menu. +692 - You receive sparks of eminence, and now possess a total of . +693 - As a special bonus for your valiant efforts, you have been awarded ! +694 - As a special bonus for your valiant efforts, you have been awarded sparks of eminence! +695 - Unable to receive special bonus. Make room in your inventory and receive your reward from the Records of Eminence menu. +696 - You have yet to receive certain special bonuses from the objectives you have completed. Make room in your inventory and receive your reward from the Records of Eminence menu. +697 - Records of Eminence: . +698 - Progress: /. 699 - A new objective has been added! 700 - You are unable to use Trust magic at this time. 701 - There's no time to do that now! +702 - Blank Line/Prompt +703 - Blank Line/Prompt +704 - You have undertaken . +705 - You have undertaken the limited-time Records of Eminence challenge "". +706 - You have obtained as a special reward! +707 - As a first-time bonus, you receive sparks of eminence for a total of ! +708 - This place is now known as a location that brings memories flooding back to the . +709 - As a special bonus for your valiant efforts, you have been awarded the following: x! +710 - You are cleared to fulfill this objective once again. +711 - (Adventuring Fellow?) () It's far too late for your foes to make amends, and with me at your side, they'll meet untimely ends! +712 - (/checkparam) Primary Accuracy: / Primary Attack: . +713 - (/checkparam) Auxiliary Accuracy: / Auxiliary Attack: . +714 - (/checkparam) Ranged Accuracy: / Ranged Attack: . +715 - (/checkparam) Evasion: / Defense: . +716 - starts casting . +717 - You cannot call forth alter egos here. they'll meet untimely ends! +718 - gains capacity point(s). earns a job point! (Total: ) +719 - earns a job point! (Total: ) +720 - CRASHES THE CLIENT +721 - You receive a bonus of fishing guild point(s)! +722 - You receive a bonus of woodworking guild point(s)! +723 - You receive a bonus of smithing guild point(s)! +724 - You receive a bonus of goldsmithing guild point(s)! +725 - You receive a bonus of clothcraft guild point(s)! +726 - You receive a bonus of leathercraft guild point(s)! +727 - You receive a bonus of bonecraft guild point(s)! +728 - You receive a bonus of alchemy guild point(s)! +729 - You receive a bonus of cooking guild point(s)! +730 - uses . 's TP is reduced to . +731 - (/checkparam) Average item level: . +732 - Skillchain: Universal Enlightenment. takes point(s) of damage. +733 - : +734 - uses on . +735 - Capacity chain #! gains capacity point(s). +736 - uses . HP drained from . +737 - uses . of 's magic effects is drained. +738 - uses . +739 - receives magical effect(s). +740 - :< $/$ > +741 - You have gained Unity accolade[/s] for a total of ! +742 - You are currently unable to undertake this objective. +743 - uses . 's enmity decreases. +744 - Blank Line/Prompt +745 - Your automaton exceeds one or more elemental capacity values and cannot be activated. +746 - uses . TP drained from . +747 - uses . Magic Burst! takes point(s) of damage. +748 - uses . Magic Burst! HP drained from . +749 - Magic Burst! HP drained from . +750 - uses . Magic Burst! MP drained from . +751 - Magic Burst! MP drained from . +752 - uses . Magic Burst! TP drained from . +753 - Magic Burst! TP drained from . +754 - uses . Magic Burst! is . +755 - uses . Magic Burst! receives the effect of . +756 - 's spikes cause to fall to the ground. +757 - of 's effects disappears. +758 - Obtained key item: . +759 - You already have key item: . +760 - You are only able to possess one and thus are unable to receive your just reward. Clear out your inventory and receive the item from the Records of Eminence Menu. +761 - You were unable to receive your just reward because you need 1 free space in your inventory. Clear out your bags and receive your item from the Records of Eminence Menu. +762 - uses . All of 's status parameters are boosted. +763 - uses . has grown noticeably bored. +764 - uses . feels the Fever! +765 - uses a . obtains 2 escha silt. +766 - uses a . obtains 2 escha beads. +767 - Skillchain: Radiance. takes points of damage. +768 - Skillchain: Umbra. takes points of damage. +769 - Skillchain: Radiance. recovers hit points! +770 - Skillchain: Umbra. recovers hit points! +771 - Congratulations! Your deeds of valor will ring throughout the ages - providing inspiration for generations to come. +772 - stands resolute thanks to the power of the bonds that tie you! +773 - You are unable to call forth your mount because your main job level is not at least . +774 - You already possess that item and are unable to receive your just reward! +775 - A new objective has been added in the Contents > Content (Ambuscade) Records or Eminence category! +776 - Additional Effect: is chainbound. +777 - You cannot mount at this time. +778 - uses . copies magical effect(s) from . +779 - uses . A barrier begins to pulsate around . +780 - uses . takes aim at ! +781 - retaliates, absorbing TP from . +782 - The bonus conditions for increasing the Craftsmanship has changed to {FIR}%+d ! +783 - The Craftsmanship bonus conditions have disappeared! +784 - Craftsmanship has increased by .%! (ex. 1.1%) +785 - Craftsmanship has increased by .0%! (ex. 1.01%) +786 - Craftsmanship has increased to %! (ex. 1%) +787 - has had the fun sucked out of them! +788 - no longer recalls what fun is... +789 - dmgfix() +790 - The contains gil. +791 - uses . receives motes of paradise. +792 - uses . of 's effects disappear! +793 - you find . +794 - You find . (plural) +795 - You receive deeds of heroism, for a total of ! +796 - gains potpourri for a total of ! +797 - attains level ! +798 - The 's overload chance is %. +799 - The 's overload chance is %. The is overloaded! +800 - activates. takes point(s) of damage. +801 - You cannot use the until the effect expires. +802 - The uses . HP drained from . +803 - uses . Magic Burst! HP drained from . +804 - uses receives the effect of . +805 - uses . 's effect disappears! +806 - 's effect disappears! +807 - receives job points. +808 - was unable to use that because they cannot hold any more. +809 - gains exemplar points. +810 - Master chain #! gains exemplar points. +811 - attains master level ! +812 - Master Level: ( experience) +813 - falls to master level . +814 - Level Sync activated. Your master level has been restricted to . Experience points will become unavailable for all party members should the Level Sync designee stray too far from the enemy. +815 - uses . is knocked back far into the distance! +816 - Blank Line/Prompt +... +1020 - Blank Line/Prompt -735 - Capacity chain#! ... gains capacity points. +1021 - Flower-viewing time! +1022 - uses . is ready for flower viewing! +1023 - uses . 's attacks and defenses are enhanced. -1023 - 's damage dealt is increased and damage taken is reduced. ------------------------------------------------- End of client dat file. No entries above 1023. diff --git a/documentation/mods_by_id.txt b/documentation/mods_by_id.txt index 054baa68eac..9bbeac35d92 100644 --- a/documentation/mods_by_id.txt +++ b/documentation/mods_by_id.txt @@ -760,6 +760,8 @@ CAIT_SITH_LVL_BONUS = 1042, // Cait Sith: Lv.+ (Increases Cait Sith's base level above 99) WYVERN_LVL_BONUS = 1043, // Wyvern: Lv.+ (Increases wyvern's base level above 99) AUTOMATON_LVL_BONUS = 1044, // Automaton: Lv. (Increases automaton's base level above 99) + ENHANCES_RESTRAINT = 1045, // Enhances "Restraint" effect/"Restraint" + (Increases the damage bonus of Restraint by XXX%) + ENHANCES_BLOOD_RAGE = 1046, // Enhances "Blood Rage" effect/"Blood Rage" duration + // The spares take care of finding the next ID to use so long as we don't forget to list IDs that have been freed up by refactoring. // 570 through 825 used by WS DMG mods these are not spares. @@ -767,5 +769,5 @@ // The following modifier should not ever be set, but %damage modifiers to weaponskills use the next 255 IDs (this modifier + the WSID) // For example, +10% damage to Chant du Cygne would be ID 570 + 225 (795) - // SPARE = 1045, + // SPARE = 1047, diff --git a/scripts/globals/abilities/arcane_circle.lua b/scripts/globals/abilities/arcane_circle.lua index 6e7099014fc..8c75631dd41 100644 --- a/scripts/globals/abilities/arcane_circle.lua +++ b/scripts/globals/abilities/arcane_circle.lua @@ -15,7 +15,13 @@ end ability_object.onUseAbility = function(player, target, ability) local duration = 180 + player:getMod(xi.mod.ARCANE_CIRCLE_DURATION) - target:addStatusEffect(xi.effect.ARCANE_CIRCLE, 15, 0, duration) + local power = 5 + + if player:getMainJob() == xi.job.DRK then + power = 15 + end + + target:addStatusEffect(xi.effect.ARCANE_CIRCLE, power, 0, duration) end return ability_object diff --git a/scripts/globals/abilities/holy_circle.lua b/scripts/globals/abilities/holy_circle.lua index 158e76cd3b1..db5c06a6689 100644 --- a/scripts/globals/abilities/holy_circle.lua +++ b/scripts/globals/abilities/holy_circle.lua @@ -16,7 +16,13 @@ end ability_object.onUseAbility = function(player, target, ability) local duration = 180 + player:getMod(xi.mod.HOLY_CIRCLE_DURATION) - target:addStatusEffect(xi.effect.HOLY_CIRCLE, 15, 0, duration) + local power = 5 + + if player:getMainJob() == xi.job.PLD then + power = 15 + end + + target:addStatusEffect(xi.effect.HOLY_CIRCLE, power, 0, duration) end return ability_object diff --git a/scripts/globals/abilities/pets/welt.lua b/scripts/globals/abilities/pets/welt.lua new file mode 100644 index 00000000000..693660d6f00 --- /dev/null +++ b/scripts/globals/abilities/pets/welt.lua @@ -0,0 +1,33 @@ +----------------------------------- +-- Welt +----------------------------------- +require("scripts/globals/job_utils/summoner") + +----------------------------------- +local ability_object = {} + +ability_object.onAbilityCheck = function(player, target, ability) + return xi.job_utils.summoner.canUseBloodPact(player, player:getPet(), target, ability) +end + +-- http://wiki.ffo.jp/html/37926.html +ability_object.onPetAbility = function(target, pet, petskill) + local numhits = 1 + local accmod = 1 + local dmgmod = 3.0 + + local totaldamage = 0 + + xi.job_utils.onUseBloodPact(pet:getMaster(), pet, target, petskill) + + local damage = xi.summon.avatarPhysicalMove(pet, target, petskill, numhits, accmod, dmgmod, 0, xi.mobskills.magicalTpBonus.NO_EFFECT, 1, 2, 3) + + totaldamage = xi.summon.avatarFinalAdjustments(damage.dmg, pet, petskill, target, xi.attackType.PHYSICAL, xi.damageType.SLASHING, numhits) + + target:takeDamage(totaldamage, pet, xi.attackType.PHYSICAL, xi.damageType.PIERCING) + target:updateEnmityFromDamage(pet, totaldamage) + + return totaldamage +end + +return ability_object diff --git a/scripts/globals/abilities/warding_circle.lua b/scripts/globals/abilities/warding_circle.lua index 49ef6e0652d..fec468b274a 100644 --- a/scripts/globals/abilities/warding_circle.lua +++ b/scripts/globals/abilities/warding_circle.lua @@ -2,8 +2,8 @@ -- Ability: Warding Circle -- Grants resistance, defense, and attack against Demons to party members within the area of effect. -- Obtained: Samurai Level 5 --- Recast Time: 5:00 --- Duration: 3:00 +-- Recast Time: 5:00 minutes +-- Duration: 3:00 minutes ----------------------------------- require("scripts/globals/settings") require("scripts/globals/status") diff --git a/scripts/globals/ability.lua b/scripts/globals/ability.lua index 81f9df1483a..d4754a1543a 100644 --- a/scripts/globals/ability.lua +++ b/scripts/globals/ability.lua @@ -704,6 +704,22 @@ xi.specEffect = CRITICAL_HIT = 0x22, } +-- addType, used in ability:getAddType(). the addType of an ability is defined in sql. +xi.addType = +{ + ADDTYPE_NORMAL = 0, + ADDTYPE_MERIT = 1, + ADDTYPE_ASTRAL_FLOW = 2, + ADDTYPE_MAIN_ONLY = 4, + ADDTYPE_LEARNED = 8, + ADDTYPE_LIGHT_ARTS = 16, + ADDTYPE_DARK_ARTS = 32, + ADDTYPE_JUGPET = 64, + ADDTYPE_CHARMPET = 128, + ADDTYPE_AVATAR = 256, + ADDTYPE_AUTOMATON = 512, +} + function AbilityFinalAdjustments(dmg,mob,skill,target,skilltype,skillparam,shadowbehav) -- seems to only be used for Wyvern breaths -- physical attack missed, skip rest local msg = skill:getMsg() diff --git a/scripts/globals/abyssea.lua b/scripts/globals/abyssea.lua index b468940dd9c..7ee6db435fc 100644 --- a/scripts/globals/abyssea.lua +++ b/scripts/globals/abyssea.lua @@ -8,6 +8,7 @@ require("scripts/globals/status") require("scripts/globals/utils") require("scripts/globals/weaponskillids") require("scripts/globals/zone") +require("scripts/globals/extravaganza") ----------------------------------- xi = xi or {} xi.abyssea = xi.abyssea or {} @@ -71,6 +72,81 @@ xi.abyssea.abyssiteType = DEMILUNE = 20, } +xi.abyssea.itemType = +{ + ITEM = 1, + TEMP = 2, + KEYITEM = 3, + ENHANCEMENT = 4, +} + +local itemType = xi.abyssea.itemType + +xi.abyssea.visionsCruorProspectorItems= +{-- Sel Item Cost, Qty + [ 1] = { xi.items.PERLE_SALADE, 4000 }, + [ 2] = { xi.items.PERLE_HAUBERK, 5000 }, + [ 3] = { xi.items.PERLE_MOUFLES, 3000 }, + [ 4] = { xi.items.PERLE_BRAYETTES, 3000 }, + [ 5] = { xi.items.PERLE_SOLLERETS, 3000 }, + [ 6] = { xi.items.AURORE_BERET, 4000 }, + [ 7] = { xi.items.AURORE_DOUBLET, 5000 }, + [ 8] = { xi.items.AURORE_GLOVES, 3000 }, + [ 9] = { xi.items.AURORE_BRAIS, 3000 }, + [10] = { xi.items.AURORE_GAITERS, 3000 }, + [11] = { xi.items.TEAL_CHAPEAU, 4000 }, + [12] = { xi.items.TEAL_SAIO, 5000 }, + [13] = { xi.items.TEAL_CUFFS, 3000 }, + [14] = { xi.items.TEAL_SLOPS, 3000 }, + [15] = { xi.items.TEAL_PIGACHES, 3000 }, + [16] = { xi.items.FORBIDDEN_KEY, 500 }, + [17] = { xi.items.CIPHER_OF_JOACHIMS_ALTER_EGO, 5000 }, + [18] = { xi.items.SHADOW_THRONE, 2000000 }, +} + +xi.abyssea.visionsCruorProspectorTemps= +{-- Sel Item Cost, Qty + [ 1] = { xi.items.LUCID_POTION_I, 80 }, + [ 2] = { xi.items.LUCID_ETHER_I, 80 }, + [ 3] = { xi.items.BOTTLE_OF_CATHOLICON, 80 }, + [ 4] = { xi.items.DUSTY_ELIXIR, 120 }, + [ 5] = { xi.items.TUBE_OF_CLEAR_SALVE_I, 120 }, + [ 6] = { xi.items.BOTTLE_OF_STALWARTS_TONIC, 150 }, + [ 7] = { xi.items.BOTTLE_OF_ASCETICS_TONIC, 150 }, + [ 8] = { xi.items.BOTTLE_OF_CHAMPIONS_TONIC, 150 }, + [ 9] = { xi.items.LUCID_POTION_II, 200 }, + [10] = { xi.items.LUCID_ETHER_II, 200 }, + [11] = { xi.items.LUCID_ELIXIR_I, 300 }, + [12] = { xi.items.FLASK_OF_HEALING_POWDER, 300 }, + [13] = { xi.items.PINCH_OF_MANA_POWDER, 300 }, + [14] = { xi.items.TUBE_OF_HEALING_SALVE_I, 300 }, + [15] = { xi.items.BOTTLE_OF_VICARS_DRINK, 300 }, + [16] = { xi.items.TUBE_OF_CLEAR_SALVE_II, 300 }, + [17] = { xi.items.PRIMEVAL_BREW, 2000000 }, +} + +xi.abyssea.visionsCruorProspectorBuffs= +{-- Sel Effect (Abyssea) Actual Effect Amt, KeyItem for Bonus, Bonus Mult Cost + [ 6] = { { { xi.effect.ABYSSEA_HP, xi.effect.MAX_HP_BOOST, 20, xi.abyssea.abyssiteType.MERIT, 10 }, }, 50 }, + [ 7] = { { { xi.effect.ABYSSEA_MP, xi.effect.MAX_MP_BOOST, 10, xi.abyssea.abyssiteType.MERIT, 5 }, }, 120 }, + [ 8] = { { { xi.effect.ABYSSEA_STR, xi.effect.STR_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, + { xi.effect.ABYSSEA_DEX, xi.effect.DEX_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, }, 120 }, + [ 9] = { { { xi.effect.ABYSSEA_VIT, xi.effect.VIT_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, + { xi.effect.ABYSSEA_AGI, xi.effect.AGI_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, }, 100 }, + [10] = { { { xi.effect.ABYSSEA_INT, xi.effect.INT_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, + { xi.effect.ABYSSEA_CHR, xi.effect.CHR_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, + { xi.effect.ABYSSEA_MND, xi.effect.MND_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, }, 100 }, + [11] = { { { xi.effect.ABYSSEA_HP, xi.effect.MAX_HP_BOOST, 20, xi.abyssea.abyssiteType.MERIT, 10 }, + { xi.effect.ABYSSEA_MP, xi.effect.MAX_MP_BOOST, 10, xi.abyssea.abyssiteType.MERIT, 5 }, + { xi.effect.ABYSSEA_STR, xi.effect.STR_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, + { xi.effect.ABYSSEA_DEX, xi.effect.DEX_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, + { xi.effect.ABYSSEA_VIT, xi.effect.VIT_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, + { xi.effect.ABYSSEA_AGI, xi.effect.AGI_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, + { xi.effect.ABYSSEA_INT, xi.effect.INT_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, + { xi.effect.ABYSSEA_CHR, xi.effect.CHR_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, + { xi.effect.ABYSSEA_MND, xi.effect.MND_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, }, 470 }, +} + -- Sequential Abyssite Key Items. -- NOTE: Demilune is not sequential, and handled in a separate table local abyssiteKeyItems = @@ -447,6 +523,73 @@ local popEvents = -- public functions ----------------------------------- +xi.abyssea.visionsCruorProspectorOnTrigger = function(player, npc) + local active = xi.extravaganza.campaignActive() + local cipher = 0 + local cruor = player:getCurrency("cruor") + local demilune = xi.abyssea.getDemiluneAbyssite(player) + + if active == xi.extravaganza.campaign.SUMMER_NY or active == xi.extravaganza.campaign.BOTH then + cipher = 1 + end + + player:startEvent(2002, cruor, demilune, 0, 0, cipher) +end + +xi.abyssea.visionsCruorProspectorOnEventFinish = function (player, csid, option, prospectorItems) + local itemCategory = bit.band(option, 0x07) + local itemSelected = bit.band(bit.rshift(option, 16), 0x1F) + local cruorTotal = player:getCurrency("cruor") + + if itemCategory == itemType.ITEM then + local itemData = prospectorItems[itemCategory][itemSelected] + local itemQty = itemData[1] ~= xi.items.FORBIDDEN_KEY and 1 or bit.rshift(option, 24) + local itemCost = itemData[2] * itemQty + + if + itemCost <= cruorTotal and + npcUtil.giveItem(player, {{ itemData[1], itemQty }}) + then + player:delCurrency("cruor", itemCost) + end + elseif itemCategory == itemType.TEMP then + local itemData = prospectorItems[itemCategory][itemSelected] + local itemCost = itemData[2] + + if + itemCost <= cruorTotal and + npcUtil.giveTempItem(player, {{ itemData[1], 1 }}) + then + player:delCurrency("cruor", itemCost) + end + elseif itemCategory == itemType.KEYITEM then + local itemData = prospectorItems[itemCategory][itemSelected] + + if + itemData[2] <= cruorTotal and + npcUtil.giveKeyItem(player, itemData[1]) + then + player:delCurrency("cruor", itemData[2]) + end + elseif itemCategory == itemType.ENHANCEMENT then + local enhanceData = prospectorItems[itemCategory][itemSelected] + + if enhanceData[2] <= cruorTotal then + for _, v in ipairs(enhanceData[1]) do + player:addStatusEffectEx(v[1], v[2], v[3] + xi.abyssea.getAbyssiteTotal(player, v[4]) * v[5], 0, 0) + + if v[1] == xi.effect.ABYSSEA_HP then + player:addHP(v[3] + xi.abyssea.getAbyssiteTotal(player, v[4]) * v[5]) + elseif v[1] == xi.effect.ABYSSEA_MP then + player:addMP(v[3] + xi.abyssea.getAbyssiteTotal(player, v[4]) * v[5]) + end + end + + player:delCurrency("cruor", enhanceData[2]) + end + end +end + -- returns Traverser Stone KI cap xi.abyssea.getTraverserCap = function(player) local stones = 3 diff --git a/scripts/globals/abyssea/sturdypyxis/spawn.lua b/scripts/globals/abyssea/sturdypyxis/spawn.lua index fb0996296a0..96ec09845f3 100644 --- a/scripts/globals/abyssea/sturdypyxis/spawn.lua +++ b/scripts/globals/abyssea/sturdypyxis/spawn.lua @@ -162,8 +162,9 @@ end -- Desc: This method allow you to get next chest available --------------------------------------------------------------------------------------------- local function GetPyxisID(player) - local ID = zones[player:getZoneID()] - local baseChestId = ID.npc.STURDY_PYXIS_BASE + local zone = player:getZone() + local pyxii = zone:queryEntitiesByName('Sturdy_Pyxis') -- Get the ID of the first entry and use that as our base ID to offset against + local baseChestId = pyxii[1]:getID() local chestId = 0 -- Get next chest ID available diff --git a/scripts/globals/avatars_favor.lua b/scripts/globals/avatars_favor.lua index 4755f706108..2f12eb48d9d 100644 --- a/scripts/globals/avatars_favor.lua +++ b/scripts/globals/avatars_favor.lua @@ -74,11 +74,11 @@ local avatarsFavorEffect = scaling = {10, 12, 14, 16, 18, 20, 22, 24, 26, 27, 28}, effect = xi.effect.CAIT_SITHS_FAVOR }, - --[xi.pet.id.SIREN] = -- Subtle Blow - --{ - -- scaling = {9, 11, 13, 15, 17, 19, 20, 21, 22, 23}, - -- effect = xi.effect.SRIENS_FAVOR - --}, + [xi.pet.id.SIREN] = -- Subtle Blow + { + scaling = {9, 11, 13, 15, 17, 19, 20, 21, 22, 23}, + effect = xi.effect.SIRENS_FAVOR + }, } ------------------------------------------- -- Given a :getPetID petID (Not a getMobID) @@ -93,7 +93,7 @@ local shouldAvatarsFavorBeApplied = function(petId) shouldApply = true end - if petId and petId == xi.pet.id.CAIT_SITH then + if petId and (petId == xi.pet.id.CAIT_SITH or petId == xi.pet.id.SIREN) then shouldApply = true end diff --git a/scripts/globals/besieged.lua b/scripts/globals/besieged.lua index 0b91f9fb299..384ad6f94b7 100644 --- a/scripts/globals/besieged.lua +++ b/scripts/globals/besieged.lua @@ -3,15 +3,28 @@ -- Functions for Besieged system -- ----------------------------------- -require("scripts/globals/keyitems") -require("scripts/globals/npc_util") -require("scripts/globals/status") -require("scripts/globals/teleports") +require('scripts/globals/keyitems') +require('scripts/globals/npc_util') +require('scripts/globals/status') +require('scripts/globals/teleports') +require('scripts/globals/settings') +require('scripts/globals/items') +require('scripts/globals/extravaganza') ----------------------------------- xi = xi or {} xi.besieged = xi.besieged or {} +xi.besieged.cipherValue = function() + local active = xi.extravaganza.campaignActive() + + if active == xi.extravaganza.campaign.SUMMER_NY or active == xi.extravaganza.campaign.BOTH then + return 65536 * 16384 + else + return 0 + end +end + local function getMapBitmask(player) local mamook = player:hasKeyItem(xi.ki.MAP_OF_MAMOOK) and 1 or 0 -- Map of Mammok local halvung = player:hasKeyItem(xi.ki.MAP_OF_HALVUNG) and 2 or 0 -- Map of Halvung @@ -59,6 +72,7 @@ local function getISPItem(i) [45057] = {id = 3309, price = 5000}, -- barrage turbine [53249] = {id = 3311, price = 5000}, -- galvanizer [57345] = {id = 6409, price = 50000}, + [69633] = {id = xi.items.CIPHER_OF_MIHLIS_ALTER_EGO, price = 5000}, -- mihli -- Private Second Class -- Map Key Items (handled separately) -- Private First Class @@ -136,7 +150,7 @@ xi.besieged.onTrigger = function(player, npc, eventBase) player:startEvent(eventBase + 1, npc) else local maps = getMapBitmask(player) - player:startEvent(eventBase, player:getCurrency("imperial_standing"), maps, mercRank, 0, unpack(getImperialDefenseStats())) + player:startEvent(eventBase, player:getCurrency("imperial_standing"), (maps + xi.besieged.cipherValue()), mercRank, 0, unpack(getImperialDefenseStats())) end end @@ -144,7 +158,7 @@ xi.besieged.onEventUpdate = function(player, csid, option) local itemId = getISPItem(option) if itemId and option < 0x40000000 then local maps = getMapBitmask(player) - player:updateEvent(player:getCurrency("imperial_standing"), maps, xi.besieged.getMercenaryRank(player), player:canEquipItem(itemId) and 2 or 1, unpack(getImperialDefenseStats())) + player:updateEvent(player:getCurrency("imperial_standing"), (maps + xi.besieged.cipherValue()), xi.besieged.getMercenaryRank(player), player:canEquipItem(itemId) and 2 or 1, unpack(getImperialDefenseStats())) end end diff --git a/scripts/globals/campaign.lua b/scripts/globals/campaign.lua index 7d13825842e..68d67be9e5c 100644 --- a/scripts/globals/campaign.lua +++ b/scripts/globals/campaign.lua @@ -4,6 +4,7 @@ require("scripts/globals/teleports") require("scripts/globals/zone") require("scripts/globals/status") +require("scripts/globals/items") ----------------------------------- xi = xi or {} xi.campaign = {} @@ -117,8 +118,8 @@ xi.campaign.getSandOriaNotesItem = function(i) [1282] = {id = 15841, price = 5000, adj = 5000}, -- Recall Ring: Jugner [1538] = {id = 15842, price = 5000, adj = 5000}, -- Recall Ring: Pashow [1794] = {id = 15843, price = 5000, adj = 5000}, -- Recall Ring: Meriphataud - [2050] = {id = 10116, price = 2000}, -- Cipher: Valaineral - [2306] = {id = 10153, price = 2000}, -- Cipher: Adelheid + [2050] = {id = xi.items.CIPHER_OF_VALAINERALS_ALTER_EGO, price = 2000}, -- Cipher: Valaineral + [2306] = {id = xi.items.CIPHER_OF_ADELHEIDS_ALTER_EGO, price = 2000}, -- Cipher: Adelheid -- Stars Service [18] = {id = 14581, price = 15000, adj = 10000}, -- Iron Ram Chainmain [274] = {id = 15005, price = 10500, adj = 7000}, -- Iron Ram Mufflers diff --git a/scripts/globals/caskets.lua b/scripts/globals/caskets.lua index 54c51dc544d..7cd3b36a33c 100644 --- a/scripts/globals/caskets.lua +++ b/scripts/globals/caskets.lua @@ -133,7 +133,15 @@ end -- Desc: Grabs an id for a casket if one is available if not, no casket will spawn. ----------------------------------- local function getCasketID(mob) - local baseChestId = zones[mob:getZoneID()].npc.CASKET_BASE + local zone = mob:getZone() + -- Get a list of all entities in this zone that have the name 'Treasure_Casket' + local caskets = zone:queryEntitiesByName('Treasure_Casket') + -- If there are none, bail out + if #caskets == 0 then + return 0 + end + -- Get the ID of the first entry and use that as our base ID to offset against + local baseChestId = caskets[1]:getID() local chestId = 0 for i = baseChestId, baseChestId + 15 do @@ -648,7 +656,11 @@ xi.caskets.onTrigger = function(player, npc) local chestOwner = npc:getLocalVar("[caskets]PARTYID") -- the id of the party that has rights to the chest. local leaderId = player:getLeaderID() --local aumentflag = 0x0202 -- Used for Evoliths (not implemented yet). - local eventBase = zones[npc:getZoneID()].npc.CASKET_BASE -- base id of the current chest. + local zone = npc:getZone() + -- Get a list of all entities in this zone that have the name 'Treasure_Casket' + local caskets = zone:queryEntitiesByName('Treasure_Casket') + -- Get the ID of the first entry and use that as our base ID to offset against + local eventBase = caskets[1]:getID() -- base id of the current chest. local lockedEvent = casketInfo.cs[chestId - eventBase] + 2 -- Chest locked cs's. local unlockedEvent = casketInfo.cs[chestId - eventBase] -- Chest unlocked cs's. diff --git a/scripts/globals/conquest.lua b/scripts/globals/conquest.lua index 5a52063e5a3..a25e10d5b7f 100644 --- a/scripts/globals/conquest.lua +++ b/scripts/globals/conquest.lua @@ -10,6 +10,8 @@ require("scripts/globals/npc_util") require("scripts/globals/settings") require("scripts/globals/status") require("scripts/globals/zone") +require("scripts/globals/items") +require("scripts/globals/extravaganza") ----------------------------------- xi = xi or {} @@ -628,6 +630,7 @@ local function getArg1(player, guardNation, guardType) local pNation = player:getNation() local output = 0 local signet = 0 + local cipher = xi.extravaganza.campaignActive() * 20 * 65536 if guardNation == xi.nation.WINDURST then output = 33 @@ -660,7 +663,7 @@ local function getArg1(player, guardNation, guardType) output = 1808 end - return output + return output + cipher end -- arg6 encodes a player's rank and nationality: @@ -685,7 +688,11 @@ local overseerInvCommon = [32934] = {cp = 1000, lvl = 1, item = 15762}, -- empress_band [32935] = {cp = 2000, lvl = 1, item = 15763}, -- emperor_band [32936] = {cp = 5000, lvl = 1, item = 28540}, -- warp_ring - [32941] = {cp = 20000, lvl = 1, item = 6380, rank = 10}, -- refined_chair_set + [32937] = {cp = 1000, lvl = 1, item = xi.items.CIPHER_OF_TENZENS_ALTER_EGO}, + [32938] = {cp = 1000, lvl = 1, item = xi.items.CIPHER_OF_RAHALS_ALTER_EGO}, + [32939] = {cp = 1000, lvl = 1, item = xi.items.CIPHER_OF_KUKKIS_ALTER_EGO}, + [32941] = {cp = 20000, lvl = 1, item = xi.items.REFINED_CHAIR_SET, rank = 10}, + [32942] = {cp = 1000, lvl = 1, item = xi.items.CIPHER_OF_MAKKIS_ALTER_EGO}, } local overseerInvNation = diff --git a/scripts/globals/effects/blood_rage.lua b/scripts/globals/effects/blood_rage.lua index dd9c7c9eb4b..fe19462e0d6 100644 --- a/scripts/globals/effects/blood_rage.lua +++ b/scripts/globals/effects/blood_rage.lua @@ -6,14 +6,14 @@ require("scripts/globals/status") local effect_object = {} effect_object.onEffectGain = function(target, effect) - target:addMod(xi.mod.CRITHITRATE, 20) + target:addMod(xi.mod.CRITHITRATE, effect:getPower()) end effect_object.onEffectTick = function(target, effect) end effect_object.onEffectLose = function(target, effect) - target:delMod(xi.mod.CRITHITRATE, 20) + target:delMod(xi.mod.CRITHITRATE, effect:getPower()) end return effect_object diff --git a/scripts/globals/effects/restraint.lua b/scripts/globals/effects/restraint.lua index ca105009b4a..fde4e94cfd8 100644 --- a/scripts/globals/effects/restraint.lua +++ b/scripts/globals/effects/restraint.lua @@ -10,6 +10,9 @@ effect_object.onEffectTick = function(target, effect) end effect_object.onEffectLose = function(target, effect) + local power = effect:getPower() + + target:delMod(xi.mod.ALL_WSDMG_FIRST_HIT, power) end return effect_object diff --git a/scripts/globals/effects/sirens_favor.lua b/scripts/globals/effects/sirens_favor.lua new file mode 100644 index 00000000000..909e7f344ec --- /dev/null +++ b/scripts/globals/effects/sirens_favor.lua @@ -0,0 +1,20 @@ +----------------------------------- +-- xi.effect.SIRENS_FAVOR +----------------------------------- +require("scripts/globals/status") +--------------------------------------------- + +local effect_object = {} + +effect_object.onEffectGain = function(target, effect) + target:addMod(xi.mod.SUBTLE_BLOW, effect:getPower()) +end + +effect_object.onEffectTick = function(target, effect) +end + +effect_object.onEffectLose = function(target, effect) + target:delMod(xi.mod.SUBTLE_BLOW, effect:getPower()) +end + +return effect_object diff --git a/scripts/globals/effects/tomahawk.lua b/scripts/globals/effects/tomahawk.lua new file mode 100644 index 00000000000..1ded64d6d78 --- /dev/null +++ b/scripts/globals/effects/tomahawk.lua @@ -0,0 +1,51 @@ +----------------------------------- +-- xi.effect.TOMAHAWK +----------------------------------- +require("scripts/globals/status") +require("scripts/globals/magic") +----------------------------------- +local effect_object = {} +local physSDT = {xi.mod.SLASH_SDT, xi.mod.PIERCE_SDT, xi.mod.IMPACT_SDT, xi.mod.HTH_SDT} + +effect_object.onEffectGain = function(target, effect) + for i = 1, #physSDT do + local sdtModPhys = target:getMod(physSDT[i]) + local reductionPhys = (1000 - sdtModPhys) * 0.25 + + target:addMod(physSDT[i], reductionPhys) + end + + for i = 1, #xi.magic.specificDmgTakenMod do + local sdtModMagic = target:getMod(xi.magic.specificDmgTakenMod[i]) + local reductionMagic = sdtModMagic * 0.25 + + target:addMod(xi.magic.specificDmgTakenMod[i], -reductionMagic) + end +end + +effect_object.onEffectTick = function(target, effect) +end + +effect_object.onEffectLose = function(target, effect) + for i = 1, #physSDT do + local sdtModPhys = target:getMod(physSDT[i]) + local restorePhys = (1000 - sdtModPhys) / 0.75 + + if sdtModPhys <= 250 then + restorePhys = sdtModPhys + elseif sdtModPhys >= 1000 then + restorePhys = 0 + end + + target:delMod(physSDT[i], restorePhys) + end + + for i = 1, #xi.magic.specificDmgTakenMod do + local sdtModMagic = target:getMod(xi.magic.specificDmgTakenMod[i]) + local restoreMagic = (sdtModMagic / 0.75) - sdtModMagic + + target:delMod(xi.magic.specificDmgTakenMod[i], -restoreMagic) + end +end + +return effect_object diff --git a/scripts/globals/extravaganza.lua b/scripts/globals/extravaganza.lua new file mode 100644 index 00000000000..42cc303f186 --- /dev/null +++ b/scripts/globals/extravaganza.lua @@ -0,0 +1,83 @@ +----------------------------------- +-- Alter Ego Extravaganza +----------------------------------- +require('scripts/globals/settings') +require('scripts/globals/items') +require('scripts/globals/npc_util') +----------------------------------- + +xi = xi or {} +xi.extravaganza = {} + +xi.extravaganza.campaign = +{ + NONE = 0, + SUMMER_NY = 1, + SPRING_FALL = 2, + BOTH = 3, +} + +xi.extravaganza.campaignActive = function() + return xi.settings.main.ENABLE_TRUST_ALTER_EGO_EXTRAVAGANZA +end + +----------------------------------------------- +-- Determine Which Ciphers to Grant by NPC Name +----------------------------------------------- + +xi.extravaganza.getShadowEraCiphers = function(npc) + local cipherNpcs = + { + ["Shixo"] = { xi.items.CIPHER_OF_NOILLURIES_ALTER_EGO, xi.items.CIPHER_OF_LEONOYNES_ALTER_EGO }, + ["Shenni"] = { xi.items.CIPHER_OF_ELIVIRAS_ALTER_EGO, xi.items.CIPHER_OF_MAXIMILIANS_ALTER_EGO }, + ["Shuvo"] = { xi.items.CIPHER_OF_LHUS_ALTER_EGO, xi.items.CIPHER_OF_KAYEELS_ALTER_EGO }, + } + return cipherNpcs[npc:getName()] +end + +---------------------------------------------------------- +-- Check if Extravaganza is Active, set Ciphers, Launch CS +---------------------------------------------------------- + +xi.extravaganza.shadowEraTrigger = function(player, npc, notes) + local active = xi.extravaganza.campaignActive() + if active == xi.extravaganza.campaign.SUMMER_NY or active == xi.extravaganza.campaign.BOTH then + local cipherids = xi.extravaganza.getShadowEraCiphers(npc) + player:setLocalVar("ShadowCipher1", cipherids[1]) + player:setLocalVar("ShadowCipher2", cipherids[2]) + player:startEvent(7300, 0, notes, 6) + else + -- TODO: Need Cap of CS with params when event not active + -- for now have NPC stare blankly + end +end + +------------------------------------------------------ +-- Pull Cipher IDs out of local vars between functions +-- Choose the right cipher depending on Menu Option +------------------------------------------------------ + +xi.extravaganza.shadowEraFinish = function(player, csid, option) + local ID = zones[player:getZoneID()] + local notes = player:getCurrency("allied_notes") + local cipherid = {player:getLocalVar("ShadowCipher1"), player:getLocalVar("ShadowCipher2")} + local choice = 0 + + if csid == 7300 then -- All 3 Shadow Era Cipher vendors share the same CSID and options + if option == 65537 then -- First Cipher + choice = 1 + elseif option == 131073 then -- Second Cipher + choice = 2 + end + + if option == 65537 or option == 131073 then + if notes >= 1000 then + if npcUtil.giveItem(player, cipherid[choice]) then + player:delCurrency("allied_notes", 1000) + end + elseif notes < 1000 then + player:messageSpecial(ID.text.NOT_ENOUGH_NOTES) + end + end + end +end diff --git a/scripts/globals/geomantic_reservoir.lua b/scripts/globals/geomantic_reservoir.lua index 2f620db21c1..ac440a9ef44 100644 --- a/scripts/globals/geomantic_reservoir.lua +++ b/scripts/globals/geomantic_reservoir.lua @@ -24,6 +24,7 @@ local geoSpellTable = [xi.magic.spell.GEO_MND ] = { xi.items.GEO_MND }, [xi.magic.spell.GEO_FURY ] = { xi.items.GEO_FURY }, [xi.magic.spell.GEO_INT ] = { xi.items.GEO_INT }, + [xi.magic.spell.GEO_AGI ] = { xi.items.GEO_AGI }, [xi.magic.spell.GEO_POISON ] = { xi.items.GEO_POISON }, [xi.magic.spell.GEO_FEND ] = { xi.items.GEO_FEND }, [xi.magic.spell.GEO_VIT ] = { xi.items.GEO_VIT }, diff --git a/scripts/globals/items.lua b/scripts/globals/items.lua index edf0e8300ae..071403b5d61 100644 --- a/scripts/globals/items.lua +++ b/scripts/globals/items.lua @@ -103,6 +103,7 @@ xi.items = DELKFUTT_KEY = 549, LOCK_OF_HIWONS_HAIR = 552, DANGRUF_STONE = 553, + GOLD_ORCMASK = 554, DIVINATION_SPHERE = 556, AHRIMAN_LENS = 557, TARUT_CARD_THE_FOOL = 558, @@ -705,6 +706,9 @@ xi.items = HEAVY_QUADAV_BACKPLATE = 2505, LADYBUG_WING = 2506, LYCOPODIUM_FLOWER = 2507, + ORC_HELMET = 2510, + ORC_PAULDRON = 2511, + GNOLE_CLAW = 2521, PEISTE_SKIN = 2523, PLUME_DOR = 2528, SQUARE_OF_SMILODON_LEATHER = 2529, @@ -779,11 +783,37 @@ xi.items = GIANT_BUGARD_TUSK = 2912, CLOUDED_LENS = 2913, MURMURING_GLOBULE = 2914, + HIGH_QUALITY_CLIONID_WING = 2915, + HIGH_QUALITY_LIMULE_PINCER = 2916, + BLOODSHOT_HECTEYE = 2917, + BALEFUL_SKULL = 2918, + BLOODY_FANG = 2919, CLUMP_OF_ALKALINE_HUMUS = 2920, + VENOMOUS_SCORPION_STINGER = 2921, EFT_EGG = 2922, CHUNK_OF_COCKATRICE_TAILMEAT = 2923, SHOCKING_WHISKER = 2924, RESILIENT_MANE = 2925, + MOANING_VESTIGE = 2926, + GLAVOID_SHELL = 2927, + TWO_LEAF_CHLORIS_BUD = 2928, + HELM_OF_BRIAREUS = 2929, + CARABOSSES_GEM = 2930, + VIAL_OF_FISTULE_DISCHARGE = 2931, + KULKULKANS_FANG = 2932, + CHUKWAS_EGG = 2933, + MANANANGGALS_NECKLET = 2934, + MARVINS_PELAGE = 2935, + CHASMIC_PELAGE = 2936, + RASKOVNIK_VINE = 2937, + BAKKAS_WING = 2938, + CUELEBRES_HORN = 2939, + MICTLANTECUHTLIS_HABIT = 2940, + KEESHA_POPPOS_PAMAMA = 2941, + MIKEYS_SILVER_NUGGET = 2942, + BALAUR_SKULL = 2943, + LIEJE_LANTERN = 2944, + SHRIVELED_WING = 2945, TARNISHED_PINCER = 2946, EXORCISED_SKULL = 2947, CLUMP_OF_ACIDIC_HUMUS = 2948, @@ -793,18 +823,103 @@ xi.items = HIGH_KINDREDS_CREST = 2956, SACRED_KINDREDS_CREST = 2957, WATER_LILY = 2960, + SANQUINE_SPIKE = 2961, + ITZPAPALOTLS_SCALE = 2962, + ULHUADSHIS_FANG = 2963, + SOBEKS_SKIN = 2964, + CIREIN_CROINS_LANTERN = 2965, + BUKHISS_WING = 2966, + SEDNAS_TUSK = 2967, WITHERED_COCOON = 3072, ERUCA_EGG = 3073, VIAL_OF_UNDYING_OOZE = 3075, HANDFUL_OF_BONE_CHIPS = 3076, + SET_OF_WAILING_RAGS = 3077, + CRACKED_DRAGONSCALE = 3078, + GORY_PINCER = 3079, EXTENDED_EYESTALK = 3080, + COEURL_ROUND = 3081, + WITHERED_BUD = 3082, MANGLED_COCKATRICE_SKIN = 3083, + GREAT_ROOT = 3084, + BEWITCHING_TUSK = 3085, + HANDFUL_OF_MOLT_SCRAPS = 3086, + HANDFUL_OF_APKALLU_DOWN = 3087, AVIAN_REMEX = 3088, + CHUNK_OF_OROBON_CHEEKMEAT = 3089, + SPHEROID_PLATE = 3090, HARDENED_RAPTOR_SKIN = 3091, MOCKING_BEAK = 3092, + SLICE_OF_HIGH_QUALITY_CRAB_MEAT = 3093, + CHUNK_OF_HIGH_QUALITY_ROCK_SALT = 3094, + WORM_EATEN_BUD = 3095, SPOTTED_FLYFROND = 3096, BLACK_RABBIT_TAIL = 3097, + GNARLED_TAURUS_HORN = 3098, + GARGOUILLE_STONE = 3099, + MOONBEAM_CLAM = 3100, DENTED_SKULL = 3101, + STIFFENED_TENTACLE = 3102, + BLACK_WHISKER = 3103, + OPAQUE_WING = 3104, + FORTUNE_WING = 3105, + VIAL_OF_DJINN_ASHES = 3106, + SHOCKSHROOM = 3107, + CRAWLER_FLOATSTONE = 3108, + HIGH_QUALITY_RABBIT_HIDE = 3109, + VIAL_OF_TABLILLA_MERCURY = 3230, + SHARABHA_HIDE = 3231, + TIGER_KINGS_HIDE = 3232, + VIAL_OF_VADLEANY_FLUID = 3233, + BOTTLE_OF_OASIS_WATER = 3234, + SANDY_SHARD = 3235, + SMOLDERING_ARM = 3236, + SAND_CAKED_FANG = 3237, + HIGH_QUALITY_DHALMEL_HIDE = 3238, + VIAL_OF_PUPPETS_BLOOD = 3239, + HIGH_QUALITY_COCKATRICE_SKIN = 3240, + LADYBIRD_LEAF = 3241, + HIGH_QUALITY_SCORPION_CLAW = 3242, + HANDFUL_OF_SABULOUS_CLAY = 3243, + SPRIG_OF_GIANT_MISTLETOE = 3244, + BEVEL_GEAR = 3245, + SNOW_GOD_CORE = 3246, + SISYPHUS_FRAGMENT = 3247, + RIMED_WING = 3248, + AUDUMBLA_HIDE = 3249, + HELICAL_GEAR = 3250, + VIAL_OF_GEAR_FLUID = 3251, + GELID_ARM = 3252, + HIGH_QUALITY_MARID_HIDE = 3253, + ICE_WYVERN_SCALE = 3254, + HANDFUL_OF_WHITEWORM_CLAY = 3255, + IMP_SENTRYS_HORN = 3256, + BENUMBED_EYE = 3257, + HIGH_QUALITY_BUFFALO_HORN = 3258, + HIGH_QUALITY_BLACK_TIGER_HIDE = 3259, + TEEKESSELCHEN_FRAGMENT = 3260, + MINARUJA_SKULL = 3261, + JACULUS_WING = 3262, + NAIADS_LOCK = 3263, + JAR_OF_GOBLIN_GUNPOWDER = 3264, + FLASK_OF_BUBBLING_OIL = 3265, + DARKFLAME_ARM = 3266, + PURSUERS_WING = 3267, + HIGH_QUALITY_WIVRE_HIDE = 3268, + DECAYING_MOLAR = 3269, + HIGH_QUALITY_PUGIL_SCALE = 3270, + FAY_TEARDROP = 3271, + UNSEELIE_EYE = 3272, + LENGTH_OF_GOBLIN_ROPE = 3273, + JAR_OF_GOBLIN_OIL = 3274, + ORTHRUSS_CLAW = 3287, + DRAGUAS_SCALE = 3288, + APADEMAKS_HORN = 3289, + ISGEBINDS_HEART = 3290, + ALFARDS_FANG = 3291, + AZDAJAS_HORN = 3292, + IRON_PLATE = 3293, + COLORLESS_SOUL = 3294, INCRESCENT_SHADE = 3295, DECRESCENT_SHADE = 3296, BEASTLY_SHANK = 3341, @@ -951,9 +1066,13 @@ xi.items = REMEDY = 4155, FLASK_OF_SLEEPING_POTION = 4161, RERAISER = 4172, + VILE_ELIXIR = 4174, + VILE_ELIXIR_P1 = 4175, SCROLL_OF_INSTANT_WARP = 4181, + SCROLL_OF_INSTANT_RERAISE = 4182, DAEDALUS_WING = 4202, BOTTLE_OF_CATHOLICON = 4206, + ICARUS_WING = 4213, BOTTLE_OF_CURSED_BEVERAGE = 4234, BOWL_OF_CURSED_SOUP = 4235, INFERNO_CRYSTAL = 4238, @@ -1106,6 +1225,7 @@ xi.items = WALNUT = 5661, DRAGON_FRUIT = 5662, LYNX_MEAT = 5667, + ANGLERS_CASSOULET = 5704, HOMEMADE_SALISBURY_STEAK = 5705, DISH_OF_HOMEMADE_CARBONARA = 5706, HOMEMADE_OMELETTE = 5707, @@ -1146,6 +1266,11 @@ xi.items = DOOM_SCREEN = 5879, POISON_SCREEN = 5880, OLDE_RARAB_TAIL = 5911, + COALITION_POTION = 5986, + COALITION_ETHER = 5987, + SCROLL_OF_INSTANT_PROTECT = 5988, + SCROLL_OF_INSTANT_SHELL = 5989, + SCROLL_OF_INSTANT_STONESKIN = 5990, ANIMUS_AUGEO_SCHEMA = 6059, PLATE_OF_INDI_POISON = 6074, PLATE_OF_INDI_SLOW = 6099, @@ -1179,6 +1304,7 @@ xi.items = GEO_PARALYSIS = 6129, GEO_GRAVITY = 6130, GEO_HASTE = 6132, + REFINED_CHAIR_SET = 6380, SHADOW_THRONE = 6410, PORXIE_QUIVER = 6414, SEKI_SHURIKEN_POUCH = 6415, @@ -1267,15 +1393,41 @@ xi.items = GOLDEN_BOMB_NOTEBOOK = 10076, BUFFALO_NOTEBOOK = 10077, WIVRE_NOTEBOOK = 10078, + CIPHER_OF_TENZENS_ALTER_EGO = 10114, + CIPHER_OF_MIHLIS_ALTER_EGO = 10115, + CIPHER_OF_VALAINERALS_ALTER_EGO = 10116, + CIPHER_OF_JOACHIMS_ALTER_EGO = 10117, CIPHER_OF_RAINEMARDS_ALTER_EGO = 10119, + CIPHER_OF_OVJANGS_ALTER_EGO = 10121, + CIPHER_OF_MNEJINGS_ALTER_EGO = 10122, + CIPHER_OF_SAKURAS_ALTER_EGO = 10123, + CIPHER_OF_ELIVIRAS_ALTER_EGO = 10130, + CIPHER_OF_NOILLURIES_ALTER_EGO = 10131, + CIPHER_OF_LHUS_ALTER_EGO = 10132, + CIPHER_OF_F_COFFINS_ALTER_EGO = 10133, + CIPHER_OF_CIDS_ALTER_EGO = 10138, + CIPHER_OF_RAHALS_ALTER_EGO = 10139, + CIPHER_OF_KORU_MORUS_ALTER_EGO = 10140, + CIPHER_OF_KUKKIS_ALTER_EGO = 10146, + CIPHER_OF_MARGRETS_ALTER_EGO = 10147, + CIPHER_OF_GILGAMESHS_ALTER_EGO = 10148, + CIPHER_OF_QULTADAS_ALTER_EGO = 10152, + CIPHER_OF_ADELHEIDS_ALTER_EGO = 10153, + CIPHER_OF_AMCHUCHUS_ALTER_EGO = 10154, CIPHER_OF_SEMIHS_ALTER_EGO = 10157, CIPHER_OF_HALVERS_ALTER_EGO = 10158, CIPHER_OF_LIONS_ALTER_EGO_II = 10159, CIPHER_OF_ZEIDS_ALTER_EGO_II = 10160, + CIPHER_OF_LEONOYNES_ALTER_EGO = 10163, + CIPHER_OF_MAXIMILIANS_ALTER_EGO = 10164, + CIPHER_OF_KAYEELS_ALTER_EGO = 10165, CIPHER_OF_TENZENS_ALTER_EGO_II = 10167, CIPHER_OF_PRISHES_ALTER_EGO_II = 10168, CIPHER_OF_ABQUHBAHS_ALTER_EGO = 10169, CIPHER_OF_NASHMEIRAS_ALT_EGO_II = 10170, + CIPHER_OF_MAKKIS_ALTER_EGO = 10180, + CIPHER_OF_KINGS_ALTER_EGO = 10181, + CIPHER_OF_MORIMARS_ALTER_EGO = 10182, HEXED_HAUBERT = 10240, HEXED_DOMARU = 10241, HEXED_JACKET = 10242, @@ -2924,6 +3076,7 @@ xi.items = SWORD_OF_TRIALS = 16952, YUKITSUGU = 16971, PIECE_OF_ROTTEN_MEAT = 16995, + GOLIATH_WORM = 17010, BOUNCER_CLUB = 17029, SHELL_SCEPTER = 17031, GOBBIE_GAVEL = 17032, @@ -2935,6 +3088,7 @@ xi.items = PEBBLE = 17296, QUAKE_GRENADE = 17314, ICE_ARROW = 17323, + CROSSBOW_BOLT = 17336, CARBON_FISHING_ROD = 17384, WILLOW_FISHING_ROD = 17391, SHRIMP_LURE = 17402, @@ -2992,6 +3146,7 @@ xi.items = FORTITUDE_AXE = 18222, ORPHIC_EGG = 18256, BIBIKI_SEASHELL = 18257, + THROWING_TOMAHAWK = 18258, CAESTUS = 18263, SPHARAI = 18264, BATARDEAU = 18269, @@ -3037,9 +3192,11 @@ xi.items = ARK_TABAR = 18545, TWILIGHT_SCYTHE = 18551, ARK_SCYTHE = 18563, + CREPUSCULAR_SCYTHE = 18566, PYF_HARP = 18573, IMPERIAL_POLE = 18583, PERDU_STAFF = 18588, + RAM_STAFF = 18612, SAMUDRA = 18618, IMPERIAL_KAMAN = 18685, IMPERIAL_GUN = 18686, diff --git a/scripts/globals/items/grape_daifuku.lua b/scripts/globals/items/grape_daifuku.lua index 9873164ec10..a5b0b421675 100644 --- a/scripts/globals/items/grape_daifuku.lua +++ b/scripts/globals/items/grape_daifuku.lua @@ -3,10 +3,10 @@ -- Item: grape_daifuku -- Food Effect: 30 Min, All Races ----------------------------------- --- HP + 20 (Pet & Master) --- Vitality + 3 (Pet & Master) +-- HP + 20 STR + 2 VIT + 3 (Pet & Master) +-- Accuracy/Ranged Accuracy +10% (cap 80 on master, cap 105 on pet) +-- Attack/Ranged Attack +11% (cap 50 on master, cap 75 on pet) -- Master MAB + 3 , Pet MAB + 14 --- Accuracy/Ranged Accuracy +10% (cap 50 on master, cap 75 on pet) ----------------------------------- require("scripts/globals/status") require("scripts/globals/msg") @@ -27,36 +27,56 @@ end item_object.onEffectGain = function(target, effect) target:addMod(xi.mod.HP, 20) + target:addMod(xi.mod.STR, 2) target:addMod(xi.mod.VIT, 3) - target:addMod(xi.mod.MATT, 3) target:addMod(xi.mod.FOOD_ACCP, 10) - target:addMod(xi.mod.FOOD_ACC_CAP, 50) + target:addMod(xi.mod.FOOD_ACC_CAP, 80) + target:addMod(xi.mod.FOOD_ATTP, 10) + target:addMod(xi.mod.FOOD_ATT_CAP, 50) target:addMod(xi.mod.FOOD_RACCP, 10) + target:addMod(xi.mod.FOOD_RACC_CAP, 80) + target:addMod(xi.mod.FOOD_RATTP, 10) target:addMod(xi.mod.FOOD_RACC_CAP, 50) + target:addMod(xi.mod.MATT, 3) target:addPetMod(xi.mod.HP, 20) + target:addPetMod(xi.mod.STR, 2) target:addPetMod(xi.mod.VIT, 3) - target:addPetMod(xi.mod.MATT, 14) target:addPetMod(xi.mod.FOOD_ACCP, 10) - target:addPetMod(xi.mod.FOOD_ACC_CAP, 75) + target:addPetMod(xi.mod.FOOD_ACC_CAP, 105) + target:addPetMod(xi.mod.FOOD_ATTP, 10) + target:addPetMod(xi.mod.FOOD_ATT_CAP, 75) target:addPetMod(xi.mod.FOOD_RACCP, 10) + target:addPetMod(xi.mod.FOOD_RACC_CAP, 105) + target:addPetMod(xi.mod.FOOD_RATTP, 10) target:addPetMod(xi.mod.FOOD_RACC_CAP, 75) + target:addPetMod(xi.mod.MATT, 14) end item_object.onEffectLose = function(target, effect) target:delMod(xi.mod.HP, 20) + target:delMod(xi.mod.STR, 2) target:delMod(xi.mod.VIT, 3) - target:delMod(xi.mod.MATT, 3) target:delMod(xi.mod.FOOD_ACCP, 10) - target:delMod(xi.mod.FOOD_ACC_CAP, 50) + target:delMod(xi.mod.FOOD_ACC_CAP, 80) + target:delMod(xi.mod.FOOD_ATTP, 10) + target:delMod(xi.mod.FOOD_ATT_CAP, 50) target:delMod(xi.mod.FOOD_RACCP, 10) + target:delMod(xi.mod.FOOD_RACC_CAP, 80) + target:delMod(xi.mod.FOOD_RATTP, 10) target:delMod(xi.mod.FOOD_RACC_CAP, 50) + target:delMod(xi.mod.MATT, 3) target:delPetMod(xi.mod.HP, 20) + target:delPetMod(xi.mod.STR, 2) target:delPetMod(xi.mod.VIT, 3) - target:delPetMod(xi.mod.MATT, 14) target:delPetMod(xi.mod.FOOD_ACCP, 10) - target:delPetMod(xi.mod.FOOD_ACC_CAP, 75) + target:delPetMod(xi.mod.FOOD_ACC_CAP, 105) + target:delPetMod(xi.mod.FOOD_ATTP, 10) + target:delPetMod(xi.mod.FOOD_ATT_CAP, 75) target:delPetMod(xi.mod.FOOD_RACCP, 10) + target:delPetMod(xi.mod.FOOD_RACC_CAP, 105) + target:delPetMod(xi.mod.FOOD_RATTP, 10) target:delPetMod(xi.mod.FOOD_RACC_CAP, 75) + target:delPetMod(xi.mod.MATT, 14) end return item_object diff --git a/scripts/globals/items/grape_daifuku_+1.lua b/scripts/globals/items/grape_daifuku_+1.lua index a24911a92ba..8b88b6462c0 100644 --- a/scripts/globals/items/grape_daifuku_+1.lua +++ b/scripts/globals/items/grape_daifuku_+1.lua @@ -3,10 +3,10 @@ -- Item: grape_daifuku+1 -- Food Effect: 60 Min, All Races ----------------------------------- --- HP + 30 (Pet & Master) --- Vitality + 4 (Pet & Master) +-- HP + 30 STR + 3 VIT + 4 (Pet & Master) +-- Accuracy/Ranged Accuracy +11% (cap 85 on master, cap 110 on pet) +-- Attack/Ranged Attack +11% (cap 55 on master, cap 80 on pet) -- Master MAB + 4 , Pet MAB + 15 --- Accuracy/Ranged Accuracy +11% (cap 54 on master, cap 81 on pet) ----------------------------------- require("scripts/globals/status") require("scripts/globals/msg") @@ -27,36 +27,56 @@ end item_object.onEffectGain = function(target, effect) target:addMod(xi.mod.HP, 30) + target:addMod(xi.mod.STR, 3) target:addMod(xi.mod.VIT, 4) - target:addMod(xi.mod.MATT, 4) target:addMod(xi.mod.FOOD_ACCP, 11) - target:addMod(xi.mod.FOOD_ACC_CAP, 54) + target:addMod(xi.mod.FOOD_ACC_CAP, 85) + target:addMod(xi.mod.FOOD_ATTP, 11) + target:addMod(xi.mod.FOOD_ATT_CAP, 55) target:addMod(xi.mod.FOOD_RACCP, 11) - target:addMod(xi.mod.FOOD_RACC_CAP, 54) + target:addMod(xi.mod.FOOD_RACC_CAP, 85) + target:addMod(xi.mod.FOOD_RATTP, 11) + target:addMod(xi.mod.FOOD_RACC_CAP, 55) + target:addMod(xi.mod.MATT, 4) target:addPetMod(xi.mod.HP, 30) + target:addPetMod(xi.mod.STR, 3) target:addPetMod(xi.mod.VIT, 4) - target:addPetMod(xi.mod.MATT, 15) target:addPetMod(xi.mod.FOOD_ACCP, 11) - target:addPetMod(xi.mod.FOOD_ACC_CAP, 81) + target:addPetMod(xi.mod.FOOD_ACC_CAP, 110) + target:addPetMod(xi.mod.FOOD_ATTP, 11) + target:addPetMod(xi.mod.FOOD_ATT_CAP, 80) target:addPetMod(xi.mod.FOOD_RACCP, 11) - target:addPetMod(xi.mod.FOOD_RACC_CAP, 81) + target:addPetMod(xi.mod.FOOD_RACC_CAP, 110) + target:addPetMod(xi.mod.FOOD_RATTP, 11) + target:addPetMod(xi.mod.FOOD_RACC_CAP, 80) + target:addPetMod(xi.mod.MATT, 15) end item_object.onEffectLose = function(target, effect) target:delMod(xi.mod.HP, 30) + target:delMod(xi.mod.STR, 3) target:delMod(xi.mod.VIT, 4) - target:delMod(xi.mod.MATT, 4) target:delMod(xi.mod.FOOD_ACCP, 11) - target:delMod(xi.mod.FOOD_ACC_CAP, 54) + target:delMod(xi.mod.FOOD_ACC_CAP, 85) + target:delMod(xi.mod.FOOD_ATTP, 11) + target:delMod(xi.mod.FOOD_ATT_CAP, 55) target:delMod(xi.mod.FOOD_RACCP, 11) - target:delMod(xi.mod.FOOD_RACC_CAP, 54) + target:delMod(xi.mod.FOOD_RACC_CAP, 85) + target:delMod(xi.mod.FOOD_RATTP, 11) + target:delMod(xi.mod.FOOD_RACC_CAP, 55) + target:delMod(xi.mod.MATT, 4) target:delPetMod(xi.mod.HP, 30) + target:delPetMod(xi.mod.STR, 3) target:delPetMod(xi.mod.VIT, 4) - target:delPetMod(xi.mod.MATT, 15) target:delPetMod(xi.mod.FOOD_ACCP, 11) - target:delPetMod(xi.mod.FOOD_ACC_CAP, 81) + target:delPetMod(xi.mod.FOOD_ACC_CAP, 110) + target:delPetMod(xi.mod.FOOD_ATTP, 11) + target:delPetMod(xi.mod.FOOD_ATT_CAP, 80) target:delPetMod(xi.mod.FOOD_RACCP, 11) - target:delPetMod(xi.mod.FOOD_RACC_CAP, 81) + target:delPetMod(xi.mod.FOOD_RACC_CAP, 110) + target:delPetMod(xi.mod.FOOD_RATTP, 11) + target:delPetMod(xi.mod.FOOD_RACC_CAP, 80) + target:delPetMod(xi.mod.MATT, 15) end return item_object diff --git a/scripts/globals/items/rolanberry_(864_ce).lua b/scripts/globals/items/rolanberry_864_ce.lua similarity index 100% rename from scripts/globals/items/rolanberry_(864_ce).lua rename to scripts/globals/items/rolanberry_864_ce.lua diff --git a/scripts/globals/items/rolanberry_(874_ce).lua b/scripts/globals/items/rolanberry_874_ce.lua similarity index 100% rename from scripts/globals/items/rolanberry_(874_ce).lua rename to scripts/globals/items/rolanberry_874_ce.lua diff --git a/scripts/globals/items/rolanberry_(881_ce).lua b/scripts/globals/items/rolanberry_881_ce.lua similarity index 100% rename from scripts/globals/items/rolanberry_(881_ce).lua rename to scripts/globals/items/rolanberry_881_ce.lua diff --git a/scripts/globals/items/toolbag_(chonofuda).lua b/scripts/globals/items/toolbag_chonofuda.lua similarity index 100% rename from scripts/globals/items/toolbag_(chonofuda).lua rename to scripts/globals/items/toolbag_chonofuda.lua diff --git a/scripts/globals/items/toolbag_(furu).lua b/scripts/globals/items/toolbag_furu.lua similarity index 100% rename from scripts/globals/items/toolbag_(furu).lua rename to scripts/globals/items/toolbag_furu.lua diff --git a/scripts/globals/items/toolbag_(hiraishin).lua b/scripts/globals/items/toolbag_hiraishin.lua similarity index 100% rename from scripts/globals/items/toolbag_(hiraishin).lua rename to scripts/globals/items/toolbag_hiraishin.lua diff --git a/scripts/globals/items/toolbag_(inoshishinofuda).lua b/scripts/globals/items/toolbag_inoshishinofuda.lua similarity index 100% rename from scripts/globals/items/toolbag_(inoshishinofuda).lua rename to scripts/globals/items/toolbag_inoshishinofuda.lua diff --git a/scripts/globals/items/toolbag_(jinko).lua b/scripts/globals/items/toolbag_jinko.lua similarity index 100% rename from scripts/globals/items/toolbag_(jinko).lua rename to scripts/globals/items/toolbag_jinko.lua diff --git a/scripts/globals/items/toolbag_(jusatsu).lua b/scripts/globals/items/toolbag_jusatsu.lua similarity index 100% rename from scripts/globals/items/toolbag_(jusatsu).lua rename to scripts/globals/items/toolbag_jusatsu.lua diff --git a/scripts/globals/items/toolbag_(kabenro).lua b/scripts/globals/items/toolbag_kabenro.lua similarity index 100% rename from scripts/globals/items/toolbag_(kabenro).lua rename to scripts/globals/items/toolbag_kabenro.lua diff --git a/scripts/globals/items/toolbag_(kaginawa).lua b/scripts/globals/items/toolbag_kaginawa.lua similarity index 100% rename from scripts/globals/items/toolbag_(kaginawa).lua rename to scripts/globals/items/toolbag_kaginawa.lua diff --git a/scripts/globals/items/toolbag_(kawahori-ogi).lua b/scripts/globals/items/toolbag_kawahori-ogi.lua similarity index 100% rename from scripts/globals/items/toolbag_(kawahori-ogi).lua rename to scripts/globals/items/toolbag_kawahori-ogi.lua diff --git a/scripts/globals/items/toolbag_(kodoku).lua b/scripts/globals/items/toolbag_kodoku.lua similarity index 100% rename from scripts/globals/items/toolbag_(kodoku).lua rename to scripts/globals/items/toolbag_kodoku.lua diff --git a/scripts/globals/items/toolbag_(makibishi).lua b/scripts/globals/items/toolbag_makibishi.lua similarity index 100% rename from scripts/globals/items/toolbag_(makibishi).lua rename to scripts/globals/items/toolbag_makibishi.lua diff --git a/scripts/globals/items/toolbag_(mizu-deppo).lua b/scripts/globals/items/toolbag_mizu-deppo.lua similarity index 100% rename from scripts/globals/items/toolbag_(mizu-deppo).lua rename to scripts/globals/items/toolbag_mizu-deppo.lua diff --git a/scripts/globals/items/toolbag_(mokujin).lua b/scripts/globals/items/toolbag_mokujin.lua similarity index 100% rename from scripts/globals/items/toolbag_(mokujin).lua rename to scripts/globals/items/toolbag_mokujin.lua diff --git a/scripts/globals/items/toolbag_(ranka).lua b/scripts/globals/items/toolbag_ranka.lua similarity index 100% rename from scripts/globals/items/toolbag_(ranka).lua rename to scripts/globals/items/toolbag_ranka.lua diff --git a/scripts/globals/items/toolbag_(ryuno).lua b/scripts/globals/items/toolbag_ryuno.lua similarity index 100% rename from scripts/globals/items/toolbag_(ryuno).lua rename to scripts/globals/items/toolbag_ryuno.lua diff --git a/scripts/globals/items/toolbag_(sairui-ran).lua b/scripts/globals/items/toolbag_sairui-ran.lua similarity index 100% rename from scripts/globals/items/toolbag_(sairui-ran).lua rename to scripts/globals/items/toolbag_sairui-ran.lua diff --git a/scripts/globals/items/toolbag_(sanjaku-tenugui).lua b/scripts/globals/items/toolbag_sanjaku-tenugui.lua similarity index 100% rename from scripts/globals/items/toolbag_(sanjaku-tenugui).lua rename to scripts/globals/items/toolbag_sanjaku-tenugui.lua diff --git a/scripts/globals/items/toolbag_(shihei).lua b/scripts/globals/items/toolbag_shihei.lua similarity index 100% rename from scripts/globals/items/toolbag_(shihei).lua rename to scripts/globals/items/toolbag_shihei.lua diff --git a/scripts/globals/items/toolbag_(shikanofuda).lua b/scripts/globals/items/toolbag_shikanofuda.lua similarity index 100% rename from scripts/globals/items/toolbag_(shikanofuda).lua rename to scripts/globals/items/toolbag_shikanofuda.lua diff --git a/scripts/globals/items/toolbag_(shinobi-tabi).lua b/scripts/globals/items/toolbag_shinobi-tabi.lua similarity index 100% rename from scripts/globals/items/toolbag_(shinobi-tabi).lua rename to scripts/globals/items/toolbag_shinobi-tabi.lua diff --git a/scripts/globals/items/toolbag_(soshi).lua b/scripts/globals/items/toolbag_soshi.lua similarity index 100% rename from scripts/globals/items/toolbag_(soshi).lua rename to scripts/globals/items/toolbag_soshi.lua diff --git a/scripts/globals/items/toolbag_(tsurara).lua b/scripts/globals/items/toolbag_tsurara.lua similarity index 100% rename from scripts/globals/items/toolbag_(tsurara).lua rename to scripts/globals/items/toolbag_tsurara.lua diff --git a/scripts/globals/items/toolbag_(uchitake).lua b/scripts/globals/items/toolbag_uchitake.lua similarity index 100% rename from scripts/globals/items/toolbag_(uchitake).lua rename to scripts/globals/items/toolbag_uchitake.lua diff --git a/scripts/globals/job_utils/summoner.lua b/scripts/globals/job_utils/summoner.lua new file mode 100644 index 00000000000..c0e71ce9b82 --- /dev/null +++ b/scripts/globals/job_utils/summoner.lua @@ -0,0 +1,107 @@ +----------------------------------- +-- Summoner Job Utilities +----------------------------------- +require("scripts/globals/ability") +require("scripts/globals/status") +require("scripts/globals/msg") +require("scripts/globals/jobpoints") +----------------------------------- +xi = xi or {} +xi.job_utils = xi.job_utils or {} +xi.job_utils.summoner = xi.job_utils.summoner or {} +----------------------------------- + +-- sort of a misnomer, as if Apogee is up, the "base" mp cost rises. +local function getBaseMPCost(player, abilityId) + local baseMPCostMap = + { + -- Siren + [xi.jobAbility.WELT] = 9, + } + local baseMPCost = baseMPCostMap[abilityId] + + if baseMPCost == nil then + printf("[warning] scripts/globals/job_utils/summoner.lua::getBaseMPCost(): MP cost for xi.jobAbility with id %d not implemented.", abilityId) + return 9999 + end + + -- https://www.bg-wiki.com/ffxi/Apogee + -- Apogee, 1.5x MP cost, don't delete effect here because we need to reset BP: Ward/Rage timer upon use + if player:hasStatusEffect(xi.effect.APOGEE) then + baseMPCost = baseMPCost * 1.5 + end + + return baseMPCost +end + +local function getMPCost(baseMPCost, player, petskill) + + local mpCost = baseMPCost + + -- don't proc blood boon on Astral Flow + if petskill:getAddType() ~= xi.addType.ADDTYPE_ASTRAL_FLOW then + local bloodBoonRate = player:getMod(xi.mod.BLOOD_BOON) + -- assuming it works like Conserve MP... https://www.bg-wiki.com/ffxi/Conserve_MP + if math.random(100) < bloodBoonRate then + mpCost = mpCost * math.random(8, 15) / 16 + end + end + + return mpCost +end + +xi.job_utils.summoner.canUseBloodPact = function(player, pet, target, ability) + + -- TODO: verify order of out of MP/range/etc checks. + if pet ~= nil then + -- There is some complex interaction here. + -- First off, you will get out of range message if the pet isn't within the abilities range to it's target. + -- Second, if your pet is in range, but you're out of range of your pet, retail provides no message for some reason but the pet does nothing. + -- No out of range error message is unhelpful so we are setting that message anyway. + + -- TODO: The hardcoded ranges of 21/22 need to take into account mob size. + -- TODO: add "era" setting or setting in general for this. Era used to have a smaller range for BPs. + -- This is a "new" change -- https://forum.square-enix.com/ffxi/threads/48564-Sep-16-2015-%28JST%29-Version-Update + -- TODO: verify who/what is "out of range" for out of range messages + + -- check if target is too far from pet for ability + if pet:checkDistance(target) >= ability:getRange() then + return xi.msg.basic.TARG_OUT_OF_RANGE, 0 + end + + -- check if player is too far from pet + if pet:checkDistance(player) >= 21 then + return xi.msg.basic.TARG_OUT_OF_RANGE, 0 + end + + -- check if player is too far from target + if target:checkDistance(player) >= 22 then + return xi.msg.basic.TARG_OUT_OF_RANGE, 0 + end + + local baseMPCost = getBaseMPCost(player, ability:getID()) + + if player:getMP() < baseMPCost then + return xi.msg.basic.UNABLE_TO_USE_JA2, 0 -- TODO: verify exact message in packet. + end + + return 0, 0 + end + + return xi.msg.basic.UNABLE_TO_USE_JA2, 0 -- TODO: verify exact message in packet. +end + +xi.job_utils.onUseBloodPact = function(player, pet, target, petskill) + + local bloodPactAbility = GetAbility(petskill:getID()) -- Player abilities and Avatar abilities are mapped 1:1 + + local baseMPCost = getBaseMPCost(player, bloodPactAbility:getID()) + local mpCost = getMPCost(baseMPCost, player, bloodPactAbility) + + if player:hasStatusEffect(xi.effect.APOGEE) then + player:resetRecast(xi.recast.ABILITY, bloodPactAbility:getRecastID()) + player:delStatusEffect(xi.effect.APOGEE) + end + + player:delMP(mpCost) +end diff --git a/scripts/globals/job_utils/warrior.lua b/scripts/globals/job_utils/warrior.lua index c5eefaec5e7..233be8587ad 100644 --- a/scripts/globals/job_utils/warrior.lua +++ b/scripts/globals/job_utils/warrior.lua @@ -1,6 +1,7 @@ ----------------------------------- -- Warrior Job Utilities ----------------------------------- +require('scripts/globals/items') require("scripts/globals/settings") require("scripts/globals/status") ----------------------------------- @@ -22,8 +23,13 @@ xi.job_utils.warrior.checkMightyStrikes = function(player, target, ability) end xi.job_utils.warrior.checkTomahawk = function(player, target, ability) - --Placeholder code. Needs to check for direction and equiped ammo. - return 0, 0 + local ammoID = player:getEquipID(xi.slot.AMMO) + + if ammoID == xi.items.THROWING_TOMAHAWK then + return 0, 0 + else + return xi.msg.basic.CANNOT_PERFORM, 0 + end end ----------------------------------- @@ -39,7 +45,10 @@ xi.job_utils.warrior.useBerserk = function(player, target, ability) end xi.job_utils.warrior.useBloodRage = function(player, target, ability) - player:addStatusEffect(xi.effect.BLOOD_RAGE, 1, 0, 30) + local power = 20 + player:getJobPointLevel(xi.jp.BLOOD_RAGE_EFFECT) + local duration = 30 + player:getMod(xi.mod.ENHANCES_BLOOD_RAGE) + + player:addStatusEffect(xi.effect.BLOOD_RAGE, power, 0, duration) end xi.job_utils.warrior.useBrazenRush = function(player, target, ability) @@ -55,7 +64,7 @@ xi.job_utils.warrior.useMightyStrikes = function(player, target, ability) end xi.job_utils.warrior.useRestraint = function(player, target, ability) - --placeholder + player:addStatusEffect(xi.effect.RESTRAINT, 0, 0, 300) end xi.job_utils.warrior.useRetaliation = function(player, target, ability) @@ -63,7 +72,11 @@ xi.job_utils.warrior.useRetaliation = function(player, target, ability) end xi.job_utils.warrior.useTomahawk = function(player, target, ability) - --placeholder + local merits = player:getMerit(xi.merit.TOMAHAWK) - 15 + local duration = 30 + merits + + target:addStatusEffectEx(xi.effect.TOMAHAWK, 0, 25, 3, duration, 0, 0, 0) + player:removeAmmo() end xi.job_utils.warrior.useWarcry = function(player, target, ability) diff --git a/scripts/globals/missions.lua b/scripts/globals/missions.lua index 24a338bde23..6bf37870692 100644 --- a/scripts/globals/missions.lua +++ b/scripts/globals/missions.lua @@ -343,18 +343,18 @@ xi.mission.id = TRAITOR_IN_THE_MIDST = 17, -- ± BETRAYAL_AT_BEAUCEDINE = 18, -- ± ON_THIN_ICE = 19, -- ± - PROOF_OF_VALOR = 20, - A_SANGUINARY_PRELUDE = 21, - DUNGEONS_AND_DANCERS = 22, - DISTORTER_OF_TIME = 23, - THE_WILL_OF_THE_WORLD = 24, - FATE_IN_HAZE = 25, - THE_SCENT_OF_BATTLE = 26, - ANOTHER_WORLD = 27, - A_HAWK_IN_REPOSE = 28, - THE_BATTLE_OF_XARCABARD = 29, - PRELUDE_TO_A_STORM = 30, - STORM_S_CRESCENDO = 31, + PROOF_OF_VALOR = 20, -- ± + A_SANGUINARY_PRELUDE = 21, -- ± + DUNGEONS_AND_DANCERS = 22, -- ± + DISTORTER_OF_TIME = 23, -- ± + THE_WILL_OF_THE_WORLD = 24, -- ± + FATE_IN_HAZE = 25, -- ± + THE_SCENT_OF_BATTLE = 26, -- ± + ANOTHER_WORLD = 27, -- ± + A_HAWK_IN_REPOSE = 28, -- ± + THE_BATTLE_OF_XARCABARD = 29, -- ± + PRELUDE_TO_A_STORM = 30, -- ± + STORMS_CRESCENDO = 31, INTO_THE_BEAST_S_MAW = 32, THE_HUNTER_ENSNARED = 33, FLIGHT_OF_THE_LION = 34, diff --git a/scripts/globals/pets.lua b/scripts/globals/pets.lua index a9c5fbf6f50..7e23b278f0d 100644 --- a/scripts/globals/pets.lua +++ b/scripts/globals/pets.lua @@ -50,6 +50,7 @@ xi.pet.id = ODIN = 18, ATOMOS = 19, CAIT_SITH = 20, + SIREN = 76, -- Beastmaster SHEEP_FAMILIAR = 21, diff --git a/scripts/globals/quests.lua b/scripts/globals/quests.lua index ec0706291b0..9bbe5a50349 100644 --- a/scripts/globals/quests.lua +++ b/scripts/globals/quests.lua @@ -734,7 +734,7 @@ xi.quest.id = ----------------------------------- [xi.quest.area[xi.quest.log_id.CRYSTAL_WAR]] = { - LOST_IN_TRANSLOCATION = 0, -- + + LOST_IN_TRANSLOCATION = 0, -- + Converted MESSAGE_ON_THE_WINDS = 1, -- + Converted THE_WEEKLY_ADVENTURER = 2, HEALING_HERBS = 3, @@ -785,8 +785,8 @@ xi.quest.id = A_JEWELERS_LAMENT = 48, BENEATH_THE_MASK = 49, WHAT_PRICE_LOYALTY = 50, - SONGBIRDS_IN_A_SNOWSTORM = 51, - BLOOD_OF_HEROES = 52, + SONGBIRDS_IN_A_SNOWSTORM = 51, -- + Converted + BLOOD_OF_HEROES = 52, -- + Converted SINS_OF_THE_MOTHERS = 53, HOWL_FROM_THE_HEAVENS = 54, SUCCOR_TO_THE_SIDHE = 55, diff --git a/scripts/globals/regimes.lua b/scripts/globals/regimes.lua index e22b287ea66..3b667654eb3 100644 --- a/scripts/globals/regimes.lua +++ b/scripts/globals/regimes.lua @@ -16,6 +16,8 @@ require("scripts/globals/utils") require("scripts/globals/zone") require("scripts/globals/msg") require("scripts/globals/roe") +require("scripts/globals/npc_util") +require("scripts/globals/extravaganza") ----------------------------------- xi = xi or {} @@ -471,27 +473,26 @@ local regimeInfo = }, finishOptions = { - [ 3] = {act = "CANCEL_REGIME", cost = 0, discounted = 0}, - [ 20] = {act = "REPATRIATION", cost = 50, discounted = 10}, - [ 36] = {act = "CIRCUMSPECTION", cost = 5, discounted = 5}, - [ 52] = {act = "HOMING_INSTINCT", cost = 50, discounted = 25}, - [ 68] = {act = "RERAISE", cost = 10, discounted = 5}, - [ 84] = {act = "RERAISE_II", cost = 20, discounted = 10}, - [100] = {act = "RERAISE_III", cost = 30, discounted = 15}, - [116] = {act = "REGEN", cost = 20, discounted = 10}, - [132] = {act = "REFRESH", cost = 20, discounted = 10}, - [148] = {act = "PROTECT", cost = 15, discounted = 5}, - [164] = {act = "SHELL", cost = 15, discounted = 5}, - [180] = {act = "HASTE", cost = 20, discounted = 10}, - [196] = {act = "DRIED_MEAT", cost = 50, discounted = 25, food = true}, - [212] = {act = "SALTED_FISH", cost = 50, discounted = 25, food = true}, - [228] = {act = "HARD_COOKIE", cost = 50, discounted = 25, food = true}, - [244] = {act = "INSTANT_NOODLES", cost = 50, discounted = 25, food = true}, - [260] = {act = "DRIED_AGARICUS", cost = 50, discounted = 25, food = true}, - [276] = {act = "INSTANT_RICE", cost = 50, discounted = 25, food = true}, - - -- TODO: implement Trust: Sakura and Trust: Koru-Moru (Alter Ego Extravaganza) - -- CIPHER_SAKURA = 292, + [ 3] = {act = "CANCEL_REGIME", cost = 0, discounted = 0}, + [ 20] = {act = "REPATRIATION", cost = 50, discounted = 10}, + [ 36] = {act = "CIRCUMSPECTION", cost = 5, discounted = 5}, + [ 52] = {act = "HOMING_INSTINCT", cost = 50, discounted = 25}, + [ 68] = {act = "RERAISE", cost = 10, discounted = 5}, + [ 84] = {act = "RERAISE_II", cost = 20, discounted = 10}, + [100] = {act = "RERAISE_III", cost = 30, discounted = 15}, + [116] = {act = "REGEN", cost = 20, discounted = 10}, + [132] = {act = "REFRESH", cost = 20, discounted = 10}, + [148] = {act = "PROTECT", cost = 15, discounted = 5}, + [164] = {act = "SHELL", cost = 15, discounted = 5}, + [180] = {act = "HASTE", cost = 20, discounted = 10}, + [196] = {act = "DRIED_MEAT", cost = 50, discounted = 25, food = true}, + [212] = {act = "SALTED_FISH", cost = 50, discounted = 25, food = true}, + [228] = {act = "HARD_COOKIE", cost = 50, discounted = 25, food = true}, + [244] = {act = "INSTANT_NOODLES", cost = 50, discounted = 25, food = true}, + [260] = {act = "DRIED_AGARICUS", cost = 50, discounted = 25, food = true}, + [276] = {act = "INSTANT_RICE", cost = 50, discounted = 25, food = true}, + [292] = {act = "CIPHER_SAKURA", cost = 300, discounted = 300}, + [308] = {act = "CIPHER_KORU", cost = 300, discounted = 300}, }, zone = { @@ -1051,6 +1052,12 @@ xi.regime.clearRegimeVars = function(player) end xi.regime.bookOnTrigger = function(player, regimeType) + local cipher = 0 -- Trust Alter Ego Extravaganza + local active = xi.extravaganza.campaignActive() + if active == xi.extravaganza.campaign.SPRING_FALL or active == xi.extravaganza.campaign.BOTH then + cipher = 3 + end + local info = regimeInfo[regimeType].zone[player:getZoneID()] -- checks if hunt is active, if so prompts player to cancel if player:getCharVar("[hunt]status") >= 1 then @@ -1072,7 +1079,7 @@ xi.regime.bookOnTrigger = function(player, regimeType) arg4 = 1 end - player:startEvent(info.event, 0, arg2, 0, arg4, 0, 0, player:getCurrency("valor_point"), player:getCharVar("[regime]id")) + player:startEvent(info.event, 0, arg2, cipher, arg4, 0, 0, player:getCurrency("valor_point"), player:getCharVar("[regime]id")) else player:PrintToPlayer("Disabled.") end @@ -1300,6 +1307,18 @@ xi.regime.bookOnEventFinish = function(player, option, regimeType) ['INSTANT_RICE'] = function() player:addStatusEffectEx(xi.effect.FIELD_SUPPORT_FOOD, 251, 6, 0, 1800) end, + + ['CIPHER_SAKURA'] = function() + if not npcUtil.giveItem(player, xi.items.CIPHER_OF_SAKURAS_ALTER_EGO) then + player:addCurrency("valor_point", 300) --refund player if they can't obtain + end + end, + + ['CIPHER_KORU'] = function() + if not npcUtil.giveItem(player, xi.items.CIPHER_OF_KORU_MORUS_ALTER_EGO) then + player:addCurrency("valor_point", 300) --refund player if they can't obtain + end + end, } -- select a training regime diff --git a/scripts/globals/sparkshop.lua b/scripts/globals/sparkshop.lua index 7c0fb617349..a4254f8efff 100644 --- a/scripts/globals/sparkshop.lua +++ b/scripts/globals/sparkshop.lua @@ -1,8 +1,11 @@ ----------------------------------- --- TO DO: add event trusts +-- Spark Shop +-- TO DO: Add Naakaul Seven Treasures ----------------------------------- - require("scripts/globals/npc_util") - require("scripts/globals/zone") +require('scripts/globals/npc_util') +require('scripts/globals/zone') +require('scripts/globals/items') +require('scripts/globals/extravaganza') ----------------------------------- xi = xi or {} @@ -546,6 +549,13 @@ local optionToItem = [57] = { cost = 7000, id = 21355 }, -- Hachiya shuriken [58] = { cost = 7000, id = 22260 }, -- Eminent animator II }, + [12] = { -- Alter Ego Extravaganza Trusts + [10133] = { cost = 500, id = xi.items.CIPHER_OF_F_COFFINS_ALTER_EGO }, -- F. Coffin + [10138] = { cost = 500, id = xi.items.CIPHER_OF_CIDS_ALTER_EGO }, -- Cid + [10148] = { cost = 500, id = xi.items.CIPHER_OF_GILGAMESHS_ALTER_EGO }, -- Gilgamesh + [10152] = { cost = 500, id = xi.items.CIPHER_OF_QULTADAS_ALTER_EGO }, -- Qultada + [10181] = { cost = 500, id = xi.items.CIPHER_OF_KINGS_ALTER_EGO }, -- King + }, [20] = { -- Currency Exchange [ 0] = { amount = 1000, name = "spark_of_eminence" }, [ 1] = { amount = 1000, name = "conquest_points" }, @@ -586,8 +596,6 @@ local function getCurrencyCap(currencyName) return cap end --- TO DO: add event trusts - function xi.sparkshop.onTrade(player, npc, trade, eventid) local copperVouchersStored = player:getCurrency("aman_vouchers") local count = trade:getItemQty(8711) @@ -604,9 +612,11 @@ function xi.sparkshop.onTrigger(player, npc, event) local sparks = player:getCurrency("spark_of_eminence") local vouchers = player:getCurrency("aman_vouchers") local remainingLimit = xi.settings.main.WEEKLY_EXCHANGE_LIMIT - player:getCharVar("weekly_sparks_spent") + local cipher = xi.extravaganza.campaignActive() * 16 * 65536 -- Trust Alter Ego Extravaganza + local naakual = 0 -- TODO: Naakual Seven Treasures Item Logic -- opens shop and lists available sparks - player:startEvent(event, 0, sparks, vouchers, 0, 0, remainingLimit) + player:startEvent(event, 0, sparks, vouchers, naakual, cipher, remainingLimit) end function xi.sparkshop.onEventUpdate(player,csid,option) @@ -620,10 +630,10 @@ function xi.sparkshop.onEventUpdate(player,csid,option) qty = qty > 0 and qty or 1 -- There are three specific cases for Sparks rewards currently implemented: - -- 1. Grant an Item based on Sparks cost (Category <= 10) + -- 1. Grant an Item based on Sparks cost (Category <= 10 or 12) -- 2. Grant Currency based on Vouchers spent (Category == 20) -- 3. Grant Provision Items based on Vouchers spent (Category == 30) - if category <= 10 then + if category <= 10 or category == 12 then local item = optionToItem[category][selection] local cost = item.cost * qty diff --git a/scripts/globals/spells/summoning/fenrir.lua b/scripts/globals/spells/summoning/fenrir.lua index f56a5f8c056..5a4fbbe85f2 100644 --- a/scripts/globals/spells/summoning/fenrir.lua +++ b/scripts/globals/spells/summoning/fenrir.lua @@ -25,7 +25,7 @@ end spell_object.onSpellCast = function(caster, target, spell) caster:spawnPet(xi.pet.id.FENRIR) - if caster:hasStatusEffect(xi.effect.AVATAR_S_FAVOR) then + if caster:hasStatusEffect(xi.effect.AVATARS_FAVOR) then local effect = caster:getStatusEffect(xi.effect.AVATARS_FAVOR) effect:setPower(1) -- resummon resets effect xi.avatarsFavor.applyAvatarsFavorAuraToPet(caster, effect) diff --git a/scripts/globals/spells/summoning/siren.lua b/scripts/globals/spells/summoning/siren.lua new file mode 100644 index 00000000000..d1a864814b3 --- /dev/null +++ b/scripts/globals/spells/summoning/siren.lua @@ -0,0 +1,36 @@ +----------------------------------- +-- Spell: SIREN +-- Summons Siren to fight by your side +----------------------------------- +require("scripts/globals/summon") +require("scripts/globals/pets") +require("scripts/globals/msg") +require("scripts/globals/status") +----------------------------------- +local spell_object = {} + +spell_object.onMagicCastingCheck = function(caster, target, spell) + if (not caster:canUseMisc(xi.zoneMisc.PET)) then + return xi.msg.basic.CANT_BE_USED_IN_AREA + elseif (caster:hasPet()) then + return xi.msg.basic.ALREADY_HAS_A_PET + elseif (caster:getObjType() == xi.objType.PC) then + return xi.summon.avatarMiniFightCheck(caster) + end + return 0 +end + +spell_object.onSpellCast = function(caster, target, spell) + xi.pet.spawnPet(caster, xi.pet.id.SIREN) + + if caster:hasStatusEffect(xi.effect.AVATARS_FAVOR) then + local effect = caster:getStatusEffect(xi.effect.AVATARS_FAVOR) + effect:setPower(1) -- resummon resets effect + xi.avatarsFavor.applyAvatarsFavorAuraToPet(caster, effect) + xi.avatarsFavor.applyAvatarsFavorDebuffsToPet(caster) + end + + return 0 +end + +return spell_object diff --git a/scripts/globals/status.lua b/scripts/globals/status.lua index f94b10bc85c..8f8303f8566 100644 --- a/scripts/globals/status.lua +++ b/scripts/globals/status.lua @@ -838,9 +838,10 @@ xi.effect = ELEMENTALRES_DOWN = 802, -- Elemental resistance down FULL_SPEED_AHEAD = 803, -- Helper for quest: Full Speed Ahead! HYSTERIA = 804, -- Used for Hysteroanima to stop after readying a weaponskill with no msg. - -- PLACEHOLDER = 805, -- Description - -- 805-1022 - -- PLACEHOLDER = 1023 -- The client dat file seems to have only this many "slots", results of exceeding that are untested. + TOMAHAWK = 805, -- Silent status effect inflicted by a Warrior using the "Tomahawk" job ability + -- PLACEHOLDER = 806, -- Description + -- 806-1022 + -- PLACEHOLDER = 1023 -- The client dat file seems to have only this many "slots", results of exceeding that are untested. } ----------------------------------- @@ -1231,6 +1232,10 @@ xi.mod = TP_BONUS = 345, PERPETUATION_REDUCTION = 346, + -- Warrior + ENHANCES_RESTRAINT = 1045, -- Enhances "Restraint" effect/"Restraint" + (Increases the damage bonus of Restraint by XXX%) + ENHANCES_BLOOD_RAGE = 1046, -- Enhances "Blood Rage" effect/"Blood Rage" duration + + -- Dragoon WYVERN_LVL_BONUS = 1043, -- Wyvern: Lv.+ (Increases wyvern's base level above 99) @@ -2684,43 +2689,44 @@ xi.recast = xi.action = { - NONE = 0, - ATTACK = 1, - RANGED_FINISH = 2, - WEAPONSKILL_FINISH = 3, - MAGIC_FINISH = 4, - ITEM_FINISH = 5, - JOBABILITY_FINISH = 6, - WEAPONSKILL_START = 7, - MAGIC_START = 8, - ITEM_START = 9, - JOBABILITY_START = 10, - MOBABILITY_FINISH = 11, - RANGED_START = 12, - RAISE_MENU_SELECTION = 13, - DANCE = 14, - UNKNOWN_15 = 15, - ROAMING = 16, - ENGAGE = 17, - DISENGAGE = 18, - CHANGE_TARGET = 19, - FALL = 20, - DROPITEMS = 21, - DEATH = 22, - FADE_OUT = 23, - DESPAWN = 24, - SPAWN = 25, - STUN = 26, - SLEEP = 27, - ITEM_USING = 28, - ITEM_INTERRUPT = 29, - MAGIC_CASTING = 30, - MAGIC_INTERRUPT = 31, - RANGED_INTERRUPT = 32, - MOBABILITY_START = 33, - MOBABILITY_USING = 34, - MOBABILITY_INTERRUPT = 35, - LEAVE = 36, + NONE = 0, + ATTACK = 1, + RANGED_FINISH = 2, + WEAPONSKILL_FINISH = 3, + MAGIC_FINISH = 4, + ITEM_FINISH = 5, + JOBABILITY_FINISH = 6, + WEAPONSKILL_START = 7, + MAGIC_START = 8, + ITEM_START = 9, + JOBABILITY_START = 10, + MOBABILITY_FINISH = 11, + RANGED_START = 12, + PET_MOBABILITY_FINISH = 13, + DANCE = 14, + RUN_WARD_EFFUSION = 15, + ROAMING = 16, + ENGAGE = 17, + DISENGAGE = 18, + CHANGE_TARGET = 19, + FALL = 20, + DROPITEMS = 21, + DEATH = 22, + FADE_OUT = 23, + DESPAWN = 24, + SPAWN = 25, + STUN = 26, + SLEEP = 27, + ITEM_USING = 28, + ITEM_INTERRUPT = 29, + MAGIC_CASTING = 30, + MAGIC_INTERRUPT = 31, + RANGED_INTERRUPT = 32, + MOBABILITY_START = 33, + MOBABILITY_USING = 34, + MOBABILITY_INTERRUPT = 35, + LEAVE = 36, + RAISE_MENU_SELECTION = 37, } xi.act = xi.action diff --git a/scripts/globals/zone.lua b/scripts/globals/zone.lua index 210c8c048dc..34237d5e57e 100644 --- a/scripts/globals/zone.lua +++ b/scripts/globals/zone.lua @@ -7,6 +7,8 @@ xi = xi or {} +DYNAMIC_LOOKUP = -1 + xi.zoneType = { NONE = 0, diff --git a/scripts/missions/rov/2_06_Desert_Winds.lua b/scripts/missions/rov/2_06_Desert_Winds.lua index 17c061d7e7f..cb588efa9f2 100644 --- a/scripts/missions/rov/2_06_Desert_Winds.lua +++ b/scripts/missions/rov/2_06_Desert_Winds.lua @@ -4,9 +4,7 @@ ----------------------------------- -- !addmission 13 54 ----------------------------------- -require('scripts/globals/items') require('scripts/globals/missions') -require('scripts/globals/rhapsodies') require('scripts/globals/zone') require('scripts/globals/interaction/mission') ----------------------------------- @@ -22,8 +20,7 @@ mission.sections = { { check = function(player, currentMission, missionStatus, vars) - return currentMission == mission.missionId and - xi.rhapsodies.charactersAvailable(player) + return currentMission == mission.missionId end, -- We should be guaranteed that the player has not been to TOAU areas if this diff --git a/scripts/missions/wotg/21_Proof_of_Valor.lua b/scripts/missions/wotg/21_Proof_of_Valor.lua new file mode 100644 index 00000000000..f4539650a01 --- /dev/null +++ b/scripts/missions/wotg/21_Proof_of_Valor.lua @@ -0,0 +1,536 @@ +----------------------------------- +-- Proof of Valor +-- Wings of the Goddess Mission 21 +----------------------------------- +-- !addmission 5 20 +-- Raustigne : !pos 3.979 -1.999 44.456 80 +----------------------------------- +require('scripts/globals/missions') +require('scripts/globals/interaction/mission') +require('scripts/globals/zone') +----------------------------------- +local pastSandoriaID = require('scripts/zones/Southern_San_dOria_[S]/IDs') +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.WOTG, xi.mission.id.wotg.PROOF_OF_VALOR) + +mission.reward = +{ + nextMission = { xi.mission.log_id.WOTG, xi.mission.id.wotg.A_SANGUINARY_PRELUDE }, +} + +local itemRewards = +{ + [xi.items.MOLYBDENUM_INGOT ] = 120, + [xi.items.ORICHALCUM_INGOT ] = 100, + [xi.items.ANGEL_SKIN_ORB ] = 81, + [xi.items.SQUARE_OF_FOULARD] = 41, + [xi.items.OXBLOOD_ORB ] = 30, +} + +local orcItems = +{ + [xi.items.ORCISH_AXE ] = 5, + [xi.items.ORC_HELMET ] = 10, + [xi.items.ORC_PAULDRON] = 10, + [xi.items.GOLD_ORCMASK] = 15, +} + +local function completePetition(player, posBit, numSignatures) + mission:setVarBit(player, 'Status', posBit) + mission:addVar(player, 'Option', numSignatures) + + local totalSignatures = mission:getVar(player, 'Option') + + player:messageSpecial(pastSandoriaID.text.HAVE_GATHERED_SIGNATURE, xi.ki.NORTH_BOUND_PETITION, totalSignatures) +end + +local function updateGameRound(player, option, correctOptions) + local gameRound = mission:getLocalVar(player, 'gameRound') + local numCorrect = mission:getLocalVar(player, 'numCorrect') + + if option == #correctOptions * 3 then + player:updateEvent(numCorrect) + elseif option == correctOptions[gameRound] then + mission:setLocalVar(player, 'numCorrect', numCorrect + 1) + mission:setLocalVar(player, 'gameRound', gameRound + 1) + end +end + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + [xi.zone.SOUTHERN_SAN_DORIA_S] = + { + ['Raustigne'] = + { + onTrigger = function(player, npc) + local numPetitions = mission:getVar(player, 'Option') + + if not mission:getMustZone(player) then + if numPetitions < 20 then + -- NOTE: The below messages are only displayed once per zone. + mission:setMustZone(player) + + player:messageSpecial(pastSandoriaID.text.MUST_GATHER_SIGNATURES, 20) + return mission:messageSpecial(pastSandoriaID.text.CURRENT_PETITIONS, 0, numPetitions, xi.ki.NORTH_BOUND_PETITION) + else + return mission:progressEvent(148, player:getCampaignAllegiance(), mission:getVar(player, 'Option')) + end + end + end, + }, + + ['Aissaville'] = + { + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 0) then + return mission:progressEvent(123) + end + end, + }, + + ['Andagge'] = + { + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 2) then + return mission:progressEvent(121) + end + end, + }, + + ['Aurfet'] = + { + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 11) then + mission:setLocalVar(player, 'gameRound', 1) + mission:setLocalVar(player, 'numCorrect', 2) + + return mission:progressEvent(127) + end + end, + }, + + ['Corseihaut'] = + { + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 12) then + mission:setLocalVar(player, 'gameRound', 1) + mission:setLocalVar(player, 'numCorrect', 0) + + return mission:progressEvent(128) + end + end, + }, + + ['Coucheutand'] = + { + onTrade = function(player, npc, trade) + for itemId, signatureValue in pairs(orcItems) do + if npcUtil.tradeHasExactly(trade, itemId) then + mission:setLocalVar(player, 'numSignatures', signatureValue) + + return mission:progressEvent(136, itemId) + end + end + end, + + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 15) then + if not mission:isVarBitsSet(player, 'Remind', 1) then + return mission:progressEvent(132) + else + return mission:event(142) + end + end + end, + }, + + ['Daigraffeaux'] = + { + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 3) then + return mission:progressEvent(118, player:getCampaignAllegiance(), 19, 6, 0, 0, 0, 8, 0) + end + end, + }, + + ['Elnonde'] = + { + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 6) then + return mission:progressEvent(116, player:getCampaignAllegiance(), 23, 2964, 32747, 1073741823, 3, 10, 0) + end + end, + }, + + ['Eumielle'] = + { + onTrade = function(player, npc, trade) + if + npcUtil.tradeHasExactly(trade, xi.items.ANGLERS_CASSOULET) and + mission:isVarBitsSet(player, 'Remind', 0) + then + return mission:progressEvent(135) + end + end, + + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 14) then + if not mission:isVarBitsSet(player, 'Remind', 0) then + return mission:progressEvent(131) + else + return mission:event(141) + end + end + end, + }, + + ['Farouel'] = + { + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 10) then + mission:setLocalVar(player, 'gameRound', 1) + mission:setLocalVar(player, 'numCorrect', 3) + + return mission:progressEvent(125) + end + end, + }, + + ['Hauberliond'] = + { + onTrade = function(player, npc, trade) + -- TODO: This may not be accurate, and may follow a similar pattern + -- discovered with Sabiliont. A single crossbow bolt may be an + -- acceptable trade. + if + npcUtil.tradeHasOnly(trade, xi.items.CROSSBOW_BOLT) and + trade:getItemCount() >= 99 and + mission:isVarBitsSet(player, 'Remind', 2) + then + local numStacks = math.floor(trade:getItemCount() / 99) + local numSignatures = math.min(12, 8 + numStacks) + + mission:setLocalVar(player, 'numSignatures', numSignatures) + + return mission:progressEvent(134) + end + end, + + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 16) then + if not mission:isVarBitsSet(player, 'Remind', 2) then + return mission:progressEvent(130) + else + return mission:event(140) + end + end + end, + }, + + ['Illeuse'] = + { + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 1) then + return mission:progressEvent(115, player:getCampaignAllegiance(), 22) + end + end, + }, + + ['Loillie'] = + { + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 7) then + return mission:progressEvent(117) + end + end, + }, + + ['Louxiard'] = + { + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 4) then + return mission:progressEvent(119) + end + end, + }, + + ['Machionage'] = + { + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 5) then + return mission:progressEvent(120) + end + end, + }, + + ['Mailleronce'] = + { + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 9) then + return mission:progressEvent(122) + end + end, + }, + + ['Remiotte'] = + { + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 8) then + return mission:progressEvent(124) + end + end, + }, + + ['Rongelouts_N_Distaud'] = + { + onTrade = function(player, npc, trade) + if npcUtil.tradeHasExactly(trade, xi.items.GNOLE_CLAW) then + return mission:progressEvent(144) + end + end, + + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 18) then + if mission:getVar(player, 'Prog') == 0 then + if not mission:isVarBitsSet(player, 'Remind', 4) then + return mission:progressEvent(137) + else + return mission:event(143):oncePerZone() + end + else + return mission:progressEvent(138, 80, 60) + end + else + return mission:event(150):oncePerZone() + end + end, + }, + + ['Sabiliont'] = + { + onTrade = function(player, npc, trade) + if + npcUtil.tradeHasOnly(trade, xi.items.BUNCH_OF_GYSAHL_GREENS) and + mission:isVarBitsSet(player, 'Remind', 3) + then + -- TODO: This formula is estimated; however, a trade of a single gysahl green + -- awards 5 signatures. While not aligning with Wiki, adding a bonus to that + -- base value for each full stack to that. + local numStacks = math.floor(trade:getItemCount() / 99) + local numSignatures = math.min(12, 5 + numStacks) + + mission:setLocalVar(player, 'numSignatures', numSignatures) + + return mission:progressEvent(133) + end + end, + + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 17) then + if not mission:isVarBitsSet(player, 'Remind', 3) then + return mission:progressEvent(129) + else + return mission:event(139) + end + end + end, + }, + + ['Vichauxdat'] = + { + onTrigger = function(player, npc) + if not mission:isVarBitsSet(player, 'Status', 13) then + mission:setLocalVar(player, 'gameRound', 1) + mission:setLocalVar(player, 'numCorrect', 3) + + return mission:progressEvent(126) + end + end, + }, + + onEventUpdate = + { + [125] = function(player, csid, option, npc) + -- NOTE: There are other options that may be considered valid in this event. + updateGameRound(player, option, { 1, 4, 8 }) + end, + + [126] = function(player, csid, option, npc) + updateGameRound(player, option, { 1, 4, 6 }) + end, + + [127] = function(player, csid, option, npc) + updateGameRound(player, option, { 1, 5, 7, 10 }) + end, + + [128] = function(player, csid, option, npc) + updateGameRound(player, option, { 2, 5, 6, 11, 13, 16 }) + end, + }, + + onEventFinish = + { + [115] = function(player, csid, option, npc) + completePetition(player, 1, 1) + end, + + [116] = function(player, csid, option, npc) + completePetition(player, 6, 1) + end, + + [117] = function(player, csid, option, npc) + completePetition(player, 7, 1) + end, + + [118] = function(player, csid, option, npc) + completePetition(player, 3, 1) + end, + + [119] = function(player, csid, option, npc) + completePetition(player, 4, 1) + end, + + [120] = function(player, csid, option, npc) + completePetition(player, 5, 1) + end, + + [121] = function(player, csid, option, npc) + completePetition(player, 2, 1) + end, + + [122] = function(player, csid, option, npc) + completePetition(player, 9, 1) + end, + + [123] = function(player, csid, option, npc) + completePetition(player, 0, 1) + end, + + [124] = function(player, csid, option, npc) + completePetition(player, 8, 1) + end, + + [125] = function(player, csid, option, npc) + if option == 1 then + local numSignatures = mission:getVar(player, 'numCorrect') + completePetition(player, 10, numSignatures) + end + end, + + [126] = function(player, csid, option, npc) + if option == 1 then + local numSignatures = mission:getVar(player, 'numCorrect') + completePetition(player, 13, numSignatures) + end + end, + + [127] = function(player, csid, option, npc) + if option == 1 then + local numSignatures = mission:getVar(player, 'numCorrect') + completePetition(player, 11, numSignatures) + end + end, + + [128] = function(player, csid, option, npc) + if option == 1 then + local numSignatures = mission:getVar(player, 'numCorrect') + completePetition(player, 12, numSignatures) + end + end, + + [129] = function(player, csid, option, npc) + mission:setVarBit(player, 'Remind', 3) + end, + + [130] = function(player, csid, option, npc) + mission:setVarBit(player, 'Remind', 2) + end, + + [131] = function(player, csid, option, npc) + mission:setVarBit(player, 'Remind', 0) + end, + + [132] = function(player, csid, option, npc) + mission:setVarBit(player, 'Remind', 1) + end, + + [133] = function(player, csid, option, npc) + player:confirmTrade() + + local numSignatures = mission:getLocalVar(player, 'numSignatures') + completePetition(player, 17, numSignatures) + end, + + [134] = function(player, csid, option, npc) + player:confirmTrade() + + local numSignatures = mission:getLocalVar(player, 'numSignatures') + completePetition(player, 16, numSignatures) + end, + + [135] = function(player, csid, option, npc) + player:confirmTrade() + completePetition(player, 14, 12) + end, + + [136] = function(player, csid, option, npc) + player:confirmTrade() + + local numSignatures = mission:getLocalVar(player, 'numSignatures') + completePetition(player, 15, numSignatures) + end, + + [137] = function(player, csid, option, npc) + mission:setVarBit(player, 'Remind', 4) + end, + + [138] = function(player, csid, option, npc) + if option == 1 then + completePetition(player, 18, 35) + end + end, + + [144] = function(player, csid, option, npc) + player:confirmTrade() + + if option == 1 then + completePetition(player, 18, 35) + else + mission:setVar(player, 'Prog', 1) + end + end, + + [148] = function(player, csid, option, npc) + if option == 1 then + local numSignatures = mission:getVar(player, 'Option') + local rewardItemId = nil + + for itemId, requiredSignatures in pairs(itemRewards) do + if numSignatures >= requiredSignatures then + rewardItemId = itemId + break + end + end + + if + rewardItemId == nil or + npcUtil.giveItem(player, rewardItemId) + then + mission:complete(player) + end + else + mission:setMustZone(player) + end + end, + }, + }, + }, +} + +return mission diff --git a/scripts/missions/wotg/22_A_Sanguinary_Prelude.lua b/scripts/missions/wotg/22_A_Sanguinary_Prelude.lua new file mode 100644 index 00000000000..3a8e4c90cf6 --- /dev/null +++ b/scripts/missions/wotg/22_A_Sanguinary_Prelude.lua @@ -0,0 +1,47 @@ +----------------------------------- +-- A Sanguinary Prelude +-- Wings of the Goddess Mission 22 +----------------------------------- +-- !addmission 5 21 +----------------------------------- +require('scripts/globals/keyitems') +require('scripts/globals/missions') +require('scripts/globals/interaction/mission') +require('scripts/globals/zone') +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.WOTG, xi.mission.id.wotg.A_SANGUINARY_PRELUDE) + +mission.reward = +{ + keyItem = xi.ki.AROMA_BUG, + nextMission = { xi.mission.log_id.WOTG, xi.mission.id.wotg.DUNGEONS_AND_DANCERS }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + [xi.zone.BEAUCEDINE_GLACIER_S] = + { + onZoneIn = + { + function(player, prevZone) + return 17 + end, + }, + + onEventFinish = + { + [17] = function(player, csid, option, npc) + mission:complete(player) + end, + }, + }, + }, +} + +return mission diff --git a/scripts/missions/wotg/23_Dungeons_and_Dancers.lua b/scripts/missions/wotg/23_Dungeons_and_Dancers.lua new file mode 100644 index 00000000000..cf87361e0c8 --- /dev/null +++ b/scripts/missions/wotg/23_Dungeons_and_Dancers.lua @@ -0,0 +1,97 @@ +----------------------------------- +-- Dungeons and Dancers +-- Wings of the Goddess Mission 23 +----------------------------------- +-- !addmission 5 22 +-- Regal Pawprints (G-9) : !pos -145.266 -61.851 -174.171 136 +----------------------------------- +require('scripts/globals/keyitems') +require('scripts/globals/missions') +require('scripts/globals/interaction/mission') +require('scripts/globals/zone') +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.WOTG, xi.mission.id.wotg.DUNGEONS_AND_DANCERS) + +mission.reward = +{ + keyItem = xi.ki.UMBRA_BUG, + nextMission = { xi.mission.log_id.WOTG, xi.mission.id.wotg.DISTORTER_OF_TIME }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + [xi.zone.BEAUCEDINE_GLACIER_S] = + { + ['Regal_Pawprints_8'] = + { + onTrigger = function(player, npc) + if mission:getVar(player, 'Status') == 0 then + return mission:progressEvent(20, 36, 5, 1756) + end + end, + }, + + ['Regal_Pawprints_1'] = + { + onTrigger = function(player, npc) + if + not player:hasKeyItem(xi.ki.AROMA_BUG) and + mission:getVar(player, 'Timer') <= VanadielUniqueDay() + then + -- TODO: For future Instance implementation, on instance fail, + -- Timer var should be set to VanadielUniqueDay() + 1 + + return mission:progressEvent(25, 136, 23, 1756, 0, 0, 7995412, 0, 0) + end + end, + }, + + onZoneIn = + { + function(player, prevZone) + if mission:getVar(player, 'Status') == 2 then + return 18 + end + end, + }, + + onEventFinish = + { + [18] = function(player, csid, option, npc) + mission:complete(player) + end, + + [20] = function(player, csid, option, npc) + mission:setVar(player, 'Status', 1) + end, + + [25] = function(player, csid, option, npc) + npcUtil.giveKeyItem(xi.ki.AROMA_BUG) + end, + }, + }, + + [xi.zone.EVERBLOOM_HOLLOW] = + { + onEventFinish = + { + [10000] = function(player, csid, option, npc) + -- TODO: The assumption for this mission script is to catch Event 10000 which is + -- sent once the battlefield has been cleared. This needs to be verified upon + -- implementation of the instance. + + mission:setVar(player, 'Status', 2) + player:setPos(-148.078, -61.320, -176.608, 32, xi.zone.BEAUCEDINE_GLACIER_S) + end, + }, + }, + }, +} + +return mission diff --git a/scripts/missions/wotg/24_Distorter_of_Time.lua b/scripts/missions/wotg/24_Distorter_of_Time.lua new file mode 100644 index 00000000000..b1a35681b04 --- /dev/null +++ b/scripts/missions/wotg/24_Distorter_of_Time.lua @@ -0,0 +1,83 @@ +----------------------------------- +-- Distorter of Time +-- Wings of the Goddess Mission 24 +----------------------------------- +-- !addmission 5 23 +-- Regal Pawprints (9) : !pos 54.437 -41.904 104.974 136 +----------------------------------- +require('scripts/globals/keyitems') +require('scripts/globals/missions') +require('scripts/globals/interaction/mission') +require('scripts/globals/zone') +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.WOTG, xi.mission.id.wotg.DISTORTER_OF_TIME) + +mission.reward = +{ + nextMission = { xi.mission.log_id.WOTG, xi.mission.id.wotg.THE_WILL_OF_THE_WORLD }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + [xi.zone.BEAUCEDINE_GLACIER_S] = + { + ['Regal_Pawprints_1'] = + { + onTrigger = function(player, npc) + if + not player:hasKeyItem(xi.ki.UMBRA_BUG) and + mission:getVar(player, 'Timer') <= VanadielUniqueDay() + then + -- TODO: For future Instance implementation, on instance fail, + -- Timer var should be set to VanadielUniqueDay() + 1 + + return mission:progressEvent(26, 136, 23, 1756) + end + end, + }, + + onZoneIn = + { + function(player, prevZone) + if mission:getVar(player, 'Status') == 1 then + return 19 + end + end, + }, + + onEventFinish = + { + [19] = function(player, csid, option, npc) + mission:complete(player) + end, + + [26] = function(player, csid, option, npc) + npcUtil.giveKeyItem(player, xi.ki.UMBRA_BUG) + end, + }, + }, + + [xi.zone.RUHOTZ_SILVERMINES] = + { + onEventFinish = + { + [10000] = function(player, csid, option, npc) + -- TODO: The assumption for this mission script is to catch Event 10000 which is + -- sent once the battlefield has been cleared. This needs to be verified upon + -- implementation of the instance. + + mission:setVar(player, 'Status', 1) + player:setPos(51.641, -41.230, 98.680, 0, xi.zone.BEAUCEDINE_GLACIER_S) + end, + }, + }, + }, +} + +return mission diff --git a/scripts/missions/wotg/25_The_Will_of_the_World.lua b/scripts/missions/wotg/25_The_Will_of_the_World.lua new file mode 100644 index 00000000000..9ac7946790b --- /dev/null +++ b/scripts/missions/wotg/25_The_Will_of_the_World.lua @@ -0,0 +1,46 @@ +----------------------------------- +-- The Will of the World +-- Wings of the Goddess Mission 25 +----------------------------------- +-- !addmission 5 24 +-- Raustigne : !pos 3.979 -1.999 44.456 80 +----------------------------------- +require('scripts/globals/missions') +require('scripts/globals/interaction/mission') +require('scripts/globals/zone') +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.WOTG, xi.mission.id.wotg.THE_WILL_OF_THE_WORLD) + +mission.reward = +{ + nextMission = { xi.mission.log_id.WOTG, xi.mission.id.wotg.FATE_IN_HAZE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + [xi.zone.SOUTHERN_SAN_DORIA_S] = + { + ['Raustigne'] = + { + onTrigger = function(player, npc) + return mission:progressEvent(149, player:getCampaignAllegiance(), 5, 2964, 0, 0, 0, 1, 4095) + end, + }, + + onEventFinish = + { + [149] = function(player, csid, option, npc) + mission:complete(player) + end, + }, + }, + }, +} + +return mission diff --git a/scripts/missions/wotg/26_Fate_in_Haze.lua b/scripts/missions/wotg/26_Fate_in_Haze.lua new file mode 100644 index 00000000000..1212db7fe57 --- /dev/null +++ b/scripts/missions/wotg/26_Fate_in_Haze.lua @@ -0,0 +1,98 @@ +----------------------------------- +-- Fate in Haze +-- Wings of the Goddess Mission 26 +----------------------------------- +-- !addmission 5 25 +-- Lion Springs Door : !pos 96 0 106 80 +----------------------------------- +require('scripts/globals/missions') +require('scripts/globals/interaction/mission') +require('scripts/globals/zone') +require('scripts/missions/wotg/helpers') +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.WOTG, xi.mission.id.wotg.FATE_IN_HAZE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.WOTG, xi.mission.id.wotg.THE_SCENT_OF_BATTLE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId and + xi.wotg.helpers.meetsMission26Reqs(player) + end, + + [xi.zone.SOUTHERN_SAN_DORIA_S] = + { + ['Lion_Springs'] = + { + onTrigger = function(player, npc) + return mission:progressEvent(151, player:getCampaignAllegiance(), 0, 1, 0) + end, + }, + + ['Rholont'] = + { + onTrigger = function(player, npc) + -- TODO: Check if this message changes if the player is aligned with a + -- different nation, and has/has not completed Blood of Heroes. + + if player:getCampaignAllegiance() == 1 then + return mission:event(656) + end + end, + }, + + onZoneIn = + { + function(player, prevZone) + local missionStatus = mission:getVar(player, 'Status') + + if missionStatus == 1 then + return 154 + elseif missionStatus == 2 then + return 155 + end + end, + }, + + onEventUpdate = + { + [154] = function(player, csid, option, npc) + if option == 1 then + player:updateEvent(player:getCampaignAllegiance(), 0, 1756) + end + end, + + [155] = function(player, csid, option, npc) + if option == 1 then + player:updateEvent(player:getCampaignAllegiance(), 0, 1756) + end + end, + }, + + onEventFinish = + { + [151] = function(player, csid, option, npc) + mission:setVar(player, 'Status', 1) + player:setPos(100.801, 1, 103.211, 31, xi.zone.SOUTHERN_SAN_DORIA_S) + end, + + [154] = function(player, csid, option, npc) + mission:setVar(player, 'Status', 2) + player:setPos(100.801, 1, 103.211, 31, xi.zone.SOUTHERN_SAN_DORIA_S) + end, + + [155] = function(player, csid, option, npc) + mission:complete(player) + end, + }, + }, + }, +} + +return mission diff --git a/scripts/missions/wotg/27_The_Scent_of_Battle.lua b/scripts/missions/wotg/27_The_Scent_of_Battle.lua new file mode 100644 index 00000000000..4d0b6bcfdac --- /dev/null +++ b/scripts/missions/wotg/27_The_Scent_of_Battle.lua @@ -0,0 +1,41 @@ +----------------------------------- +-- The Scent of Battle +-- Wings of the Goddess Mission 27 +----------------------------------- +-- !addmission 5 26 +-- Bulwark Gate : !pos -447.174 -1.831 342.417 98 +----------------------------------- +require('scripts/globals/missions') +require('scripts/globals/interaction/mission') +require('scripts/globals/zone') +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.WOTG, xi.mission.id.wotg.THE_SCENT_OF_BATTLE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.WOTG, xi.mission.id.wotg.ANOTHER_WORLD }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + [xi.zone.SAUROMUGUE_CHAMPAIGN_S] = + { + ['Bulwark_Gate'] = mission:progressEvent(9, 98, 5, 0, 0, utils.MAX_UINT32 - 1611137536, utils.MAX_UINT32 - 41990201, 3, 1), + + onEventFinish = + { + [9] = function(player, csid, option, npc) + mission:complete(player) + end, + }, + }, + }, +} + +return mission diff --git a/scripts/missions/wotg/28_Another_World.lua b/scripts/missions/wotg/28_Another_World.lua new file mode 100644 index 00000000000..9fed88729cd --- /dev/null +++ b/scripts/missions/wotg/28_Another_World.lua @@ -0,0 +1,70 @@ +----------------------------------- +-- Another World +-- Wings of the Goddess Mission 28 +----------------------------------- +-- !addmission 5 27 +-- Halver : !pos 2 0.1 0.1 233 +----------------------------------- +require('scripts/globals/missions') +require('scripts/globals/interaction/mission') +require('scripts/globals/zone') +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.WOTG, xi.mission.id.wotg.ANOTHER_WORLD) + +mission.reward = +{ + nextMission = { xi.mission.log_id.WOTG, xi.mission.id.wotg.A_HAWK_IN_REPOSE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + [xi.zone.SOUTHERN_SAN_DORIA] = + { + onZoneIn = + { + function(player, prevZone) + if prevZone == xi.zone.EAST_RONFAURE then + return 945 + end + end, + }, + + onEventFinish = + { + [945] = function(player, csid, option, npc) + mission:setVar(player, 'Prog', 1) + end, + }, + }, + + [xi.zone.CHATEAU_DORAGUILLE] = + { + ['Halver'] = + { + onTrigger = function(player, npc) + if mission:getVar(player, 'Prog') == 1 then + -- TODO: Compare the last two parameters if the player is aligned to Bastok + -- or Windurst for Campaign Allegiance. These values may change. + + return mission:progressEvent(566, 233, 23, 1756, 0, 0, 0, 1, 1) + end + end, + }, + + onEventFinish = + { + [566] = function(player, csid, option, npc) + mission:complete(player) + end, + }, + }, + }, +} + +return mission diff --git a/scripts/missions/wotg/29_A_Hawk_in_Repose.lua b/scripts/missions/wotg/29_A_Hawk_in_Repose.lua new file mode 100644 index 00000000000..4bd12dbac16 --- /dev/null +++ b/scripts/missions/wotg/29_A_Hawk_in_Repose.lua @@ -0,0 +1,62 @@ +----------------------------------- +-- A Hawk in Repose +-- Wings of the Goddess Mission 29 +----------------------------------- +-- !addmission 5 28 +-- Weathered Gravestone : !pos 149.728 -5.109 -395.121 105 +----------------------------------- +require('scripts/globals/missions') +require('scripts/globals/interaction/mission') +require('scripts/globals/zone') +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.WOTG, xi.mission.id.wotg.A_HAWK_IN_REPOSE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.WOTG, xi.mission.id.wotg.THE_BATTLE_OF_XARCABARD }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + [xi.zone.BATALLIA_DOWNS] = + { + ['Weathered_Gravestone'] = + { + onTrade = function(player, npc, trade) + if + npcUtil.tradeHasExactly(trade, xi.items.LILAC) and + mission:getVar(player, 'Status') == 1 + then + return mission:progressEvent(503, 0, 23, 1753, 0, 0, 0, 1, 3871) + end + end, + + onTrigger = function(player, npc) + if mission:getVar(player, 'Status') == 0 then + return mission:progressEvent(502, 105, 2, 300000, 0, 0, 0, 1, 22262) + end + end, + }, + + onEventFinish = + { + [502] = function(player, csid, option, npc) + mission:setVar(player, 'Status', 1) + end, + + [503] = function(player, csid, option, npc) + player:confirmTrade() + mission:complete(player) + end, + }, + }, + }, +} + +return mission diff --git a/scripts/missions/wotg/30_The_Battle_of_Xarcabard.lua b/scripts/missions/wotg/30_The_Battle_of_Xarcabard.lua new file mode 100644 index 00000000000..c33fb62bd2d --- /dev/null +++ b/scripts/missions/wotg/30_The_Battle_of_Xarcabard.lua @@ -0,0 +1,63 @@ +----------------------------------- +-- The Battle of Xarcabard +-- Wings of the Goddess Mission 30 +----------------------------------- +-- !addmission 5 29 +-- Rally Point: Red : !pos -106.071 -25.5 -52.841 137 +----------------------------------- +require('scripts/globals/missions') +require('scripts/globals/interaction/mission') +require('scripts/globals/zone') +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.WOTG, xi.mission.id.wotg.THE_BATTLE_OF_XARCABARD) + +mission.reward = +{ + nextMission = { xi.mission.log_id.WOTG, xi.mission.id.wotg.PRELUDE_TO_A_STORM }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + [xi.zone.XARCABARD_S] = + { + ['Rally_Point_Red'] = + { + onTrigger = function(player, npc) + if mission:getVar(player, 'Status') == 1 then + -- TODO: Compare the last parameter if the player is aligned to Bastok + -- or Windurst for Campaign Allegiance. This value may change. + return mission:progressEvent(18, 0, 5, 0, 0, 0, 0, 0, 1) + end + end, + }, + + onZoneIn = + { + function(player, prevZone) + if mission:getVar(player, 'Status') == 0 then + return 17 + end + end, + }, + + onEventFinish = + { + [17] = function(player, csid, option, npc) + mission:setVar(player, 'Status', 1) + end, + + [18] = function(player, csid, option, npc) + mission:complete(player) + end, + }, + }, + }, +} + +return mission diff --git a/scripts/missions/wotg/31_Prelude_to_a_Storm.lua b/scripts/missions/wotg/31_Prelude_to_a_Storm.lua new file mode 100644 index 00000000000..6aaae5c87e4 --- /dev/null +++ b/scripts/missions/wotg/31_Prelude_to_a_Storm.lua @@ -0,0 +1,130 @@ +----------------------------------- +-- Prelude to a Storm +-- Wings of the Goddess Mission 31 +----------------------------------- +-- !addmission 5 30 +-- Rally Point: Green : !pos 54.013 -23.402 -203.103 137 +-- Spell-worked Snow : !pos 75.989 -24.249 -248.089 137 +----------------------------------- +require('scripts/globals/missions') +require('scripts/globals/interaction/mission') +require('scripts/globals/zone') +----------------------------------- +local pastXarcabardID = require('scripts/zones/Xarcabard_[S]/IDs') +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.WOTG, xi.mission.id.wotg.PRELUDE_TO_A_STORM) + +mission.reward = +{ + nextMission = { xi.mission.log_id.WOTG, xi.mission.id.wotg.STORMS_CRESCENDO }, +} + +local rewardItems = +{ + xi.items.ELIXIR, + xi.items.VILE_ELIXIR, + xi.items.VILE_ELIXIR_P1, +} + +-- NOTE: Instance is triggered at the Spell-Worked Snow behind the Green Rally point, and +-- observed Event 27, Params 0, 30 + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + [xi.zone.XARCABARD_S] = + { + ['Rally_Point_Red'] = + { + onTrigger = function(player, npc) + player:messageName(pastXarcabardID.text.REQUIRED_TO_DELIVER, nil) + + return mission:noAction() + end, + }, + + ['Rally_Point_Green'] = + { + onTrigger = function(player, npc) + local missionStatus = mission:getVar(player, 'Status') + + if missionStatus == 0 then + return mission:progressEvent(21, 137, 300, 200, 100, 0, 6553620, 0, 0) + elseif missionStatus == 1 then + if player:hasKeyItem(xi.ki.MAGELIGHT_SIGNAL_FLARE) then + player:messageName(pastXarcabardID.text.HELP_FEDERATION_PREPARE, nil) + + return mission:noAction() + else + return mission:progressEvent(25, 137, 23, 2963) + end + end + end, + }, + + onZoneIn = + { + function(player, prevZone) + if mission:getVar(player, 'Status') == 2 then + return 22 + end + end, + }, + + onEventUpdate = + { + [22] = function(player, csid, option, npc) + if option == 13 then + player:updateEvent(0, 23, 1756, 0, 0, 0, 0, 2) + end + end, + }, + + onEventFinish = + { + [21] = function(player, csid, option, npc) + npcUtil.giveKeyItem(player, xi.ki.MAGELIGHT_SIGNAL_FLARE) + mission:setVar(player, 'Status', 1) + end, + + [22] = function(player, csid, option, npc) + local rewardItemID = mission:getVar(player, 'Option') + + if npcUtil.giveItem(player, rewardItems[rewardItemID]) then + mission:complete(player) + end + end, + + [25] = function(player, csid, option, npc) + npcUtil.giveKeyItem(player, xi.ki.MAGELIGHT_SIGNAL_FLARE) + end, + }, + }, + + [xi.zone.GHOYUS_REVERIE] = + { + onEventFinish = + { + [10000] = function(player, csid, option, npc) + -- TODO: The assumption for this mission script is to catch Event 10000 which is + -- sent once the battlefield has been cleared. This needs to be verified upon + -- implementation of the instance. + + -- Given time remaining in instance, will also need to set a the 'Option' var from + -- 1..3 in order to determine the reward. Guess is 10min intervals to determine + -- highest tier reward: math.floor(minRemaining / 10) + 1 + + mission:setVar(player, 'Status', 2) + player:setPos(96.77, -23.943, -277.87, 253, xi.zone.XARCABARD_S) + end, + }, + }, + }, +} + +return mission diff --git a/scripts/quests/crystalWar/Blood_of_Heroes.lua b/scripts/quests/crystalWar/Blood_of_Heroes.lua new file mode 100644 index 00000000000..07b8dae2513 --- /dev/null +++ b/scripts/quests/crystalWar/Blood_of_Heroes.lua @@ -0,0 +1,159 @@ +----------------------------------- +-- Blood of Heroes +----------------------------------- +-- !addquest 7 52 +-- Animal Spoor : !pos 543.954 -0.522 -290.313 137 +-- Wheel Rut : !pos 345.162 -0.743 -309.161 137 +-- Forbidding Portal : !pos 320 -10.835 158.699 137 +----------------------------------- +require('scripts/globals/npc_util') +require('scripts/globals/quests') +require('scripts/globals/zone') +require('scripts/globals/interaction/quest') +----------------------------------- + +local quest = Quest:new(xi.quest.log_id.CRYSTAL_WAR, xi.quest.id.crystalWar.BLOOD_OF_HEROES) + +quest.reward = +{ + item = xi.items.RAM_STAFF, + title = xi.title.HOUSE_AURCHIAT_RETAINER, +} + +quest.sections = +{ + { + check = function(player, status, vars) + return status == QUEST_AVAILABLE and + player:hasCompletedQuest(xi.quest.log_id.CRYSTAL_WAR, xi.quest.id.crystalWar.SONGBIRDS_IN_A_SNOWSTORM) + end, + + [xi.zone.SOUTHERN_SAN_DORIA_S] = + { + ['Rholont'] = quest:event(656), + }, + + [xi.zone.XARCABARD_S] = + { + ['Animal_Spoor'] = quest:progressEvent(1), + + onEventFinish = + { + [1] = function(player, csid, option, npc) + quest:begin(player) + end, + }, + }, + }, + + { + check = function(player, status, vars) + return status == QUEST_ACCEPTED + end, + + [xi.zone.XARCABARD_S] = + { + ['Animal_Spoor'] = + { + onTrigger = function(player, npc) + local questProgress = quest:getVar(player, 'Prog') + + if questProgress == 1 then + return quest:progressEvent(3) + elseif + questProgress == 3 and + not player:hasKeyItem(xi.ki.VIAL_OF_MILITARY_PRISM_POWDER) + then + -- NOTE: Upon implementation of the instance for this quest, on instance failure will + -- need to set the 'Timer' charVar to VanadielUniqueDay() + 1 + + if quest:getVar(player, 'Timer') <= VanadielUniqueDay() then + return quest:progressEvent(13) + else + return quest:event(15) + end + end + end, + }, + + ['Forbidding_Portal'] = + { + onTrigger = function(player, npc) + -- TODO: Instance entry should require questProgress of 3, along with a Vial of Military Prism + -- Powder. Instance is accessed from this NPC with Event 12, param (0, 0, 52) + + if quest:getVar(player, 'Prog') == 2 then + return quest:progressEvent(4) + end + end, + }, + + ['Wheel_Rut'] = + { + onTrigger = function(player, npc) + local questProgress = quest:getVar(player, 'Prog') + + if questProgress == 0 then + return quest:progressEvent(2) + elseif questProgress == 5 then + return quest:progressEvent(7) + end + end, + }, + + onZoneIn = + { + function(player, prevZone) + if quest:getVar(player, 'Prog') == 4 then + return 6 + end + end, + }, + + onEventFinish = + { + [2] = function(player, csid, option, npc) + quest:setVar(player, 'Prog', 1) + end, + + [3] = function(player, csid, option, npc) + npcUtil.giveKeyItem(player, xi.ki.VIAL_OF_MILITARY_PRISM_POWDER) + quest:setVar(player, 'Prog', 2) + end, + + [4] = function(player, csid, option, npc) + quest:setVar(player, 'Prog', 3) + end, + + [6] = function(player, csid, option, npc) + quest:setVar(player, 'Prog', 5) + end, + + [7] = function(player, csid, option, npc) + quest:complete(player) + end, + + [13] = function(player, csid, option, npc) + npcUtil.giveKeyItem(player, xi.ki.VIAL_OF_MILITARY_PRISM_POWDER) + end, + }, + }, + + [xi.zone.GHOYUS_REVERIE] = + { + onEventFinish = + { + [10000] = function(player, csid, option, npc) + -- TODO: The assumption for this mission script is to catch Event 10000 which is + -- sent once the battlefield has been cleared. This needs to be verified upon + -- implementation of the instance. + + mission:setVar(player, 'Prog', 4) + player:setPos(319.8, -7.887, 153.741, 65, xi.zone.XARCABARD_S) + end, + }, + }, + }, +} + +return quest diff --git a/scripts/quests/crystalWar/Bonds_That_Never_Die.lua b/scripts/quests/crystalWar/Bonds_That_Never_Die.lua index c656806cf96..e37318d4b1c 100644 --- a/scripts/quests/crystalWar/Bonds_That_Never_Die.lua +++ b/scripts/quests/crystalWar/Bonds_That_Never_Die.lua @@ -159,6 +159,9 @@ quest.sections = [650] = function(player, csid, option, npc) if quest:complete(player) then quest:setVar(player, 'Option', 1) + + xi.quest.setVar(player, xi.quest.log_id.CRYSTAL_WAR, xi.quest.id.crystalWar.SONGBIRDS_IN_A_SNOWSTORM, 'Timer', VanadielUniqueDay() + 1) + xi.quest.setMustZone(player, xi.quest.log_id.CRYSTAL_WAR, xi.quest.id.crystalWar.SONGBIRDS_IN_A_SNOWSTORM) end end, }, diff --git a/scripts/quests/crystalWar/Lost_in_Translocation.lua b/scripts/quests/crystalWar/Lost_in_Translocation.lua new file mode 100644 index 00000000000..97d384f92a8 --- /dev/null +++ b/scripts/quests/crystalWar/Lost_in_Translocation.lua @@ -0,0 +1,152 @@ +----------------------------------- +-- Lost in Translocation +----------------------------------- +-- !addquest 7 0 +-- Thorben : !pos 175.346 8.038 -419.244 84 +-- Erik : !pos 258.643 -33.249 99.901 175 +-- Gravestone : !pos 254.428 -32.999 20.001 175 +-- Sarcophagus : !pos 336.594 -33.500 -56.728 175 +----------------------------------- +require('scripts/globals/keyitems') +require('scripts/globals/npc_util') +require('scripts/globals/quests') +require('scripts/globals/zone') +require('scripts/globals/interaction/quest') +----------------------------------- + +local quest = Quest:new(xi.quest.log_id.CRYSTAL_WAR, xi.quest.id.crystalWar.LOST_IN_TRANSLOCATION) + +quest.reward = +{ + gil = 2000, + exp = 2000, + keyItem = xi.ki.MAP_OF_GRAUBERG, +} + +local mapKeyItems = +{ + xi.ki.LEFT_MAP_PIECE, + xi.ki.MIDDLE_MAP_PIECE, + xi.ki.RIGHT_MAP_PIECE, +} + +local function getNumMapPieces(player) + local numKeyItems = 0 + + for _, keyItem in ipairs(mapKeyItems) do + if player:hasKeyItem(keyItem) then + numKeyItems = numKeyItems + 1 + end + end + + return numKeyItems +end + +quest.sections = +{ + { + check = function(player, status, vars) + return status == QUEST_AVAILABLE + end, + + [xi.zone.BATALLIA_DOWNS_S] = + { + ['Thorben'] = quest:progressEvent(103), + + onEventFinish = + { + [103] = function(player, csid, option, npc) + quest:begin(player) + end, + }, + }, + }, + + { + check = function(player, status, vars) + return status == QUEST_ACCEPTED + end, + + [xi.zone.BATALLIA_DOWNS_S] = + { + ['Thorben'] = + { + onTrigger = function(player, npc) + local numMapPieces = getNumMapPieces(player) + + if numMapPieces == 3 then + return quest:progressEvent(107) + elseif quest:getVar(player, 'Option') == 1 then + return quest:event(106) + elseif numMapPieces > 0 then + return quest:progressEvent(105) + else + return quest:event(104) + end + end, + }, + + onEventFinish = + { + [105] = function(player, csid, option, npc) + quest:setVar(player, 'Option', 1) + end, + + [107] = function(player, csid, option, npc) + if quest:complete(player) then + player:delKeyItem(xi.ki.LEFT_MAP_PIECE) + player:delKeyItem(xi.ki.MIDDLE_MAP_PIECE) + player:delKeyItem(xi.ki.RIGHT_MAP_PIECE) + end + end, + }, + }, + + [xi.zone.THE_ELDIEME_NECROPOLIS_S] = + { + ['Erik'] = + { + onTrigger = function(player, npc) + if not player:hasKeyItem(xi.ki.LEFT_MAP_PIECE) then + return quest:progressEvent(3) + end + end, + }, + + ['Gravestone'] = + { + onTrigger = function(player, npc) + if not player:hasKeyItem(xi.ki.MIDDLE_MAP_PIECE) then + return quest:progressEvent(4) + end + end, + }, + + ['Sarcophagus_map_quest'] = + { + onTrigger = function(player, npc) + if not player:hasKeyItem(xi.ki.RIGHT_MAP_PIECE) then + return quest:progressEvent(5) + end + end, + }, + + onEventFinish = + { + [3] = function(player, csid, option, npc) + npcUtil.giveKeyItem(player, xi.ki.LEFT_MAP_PIECE) + end, + + [4] = function(player, csid, option, npc) + npcUtil.giveKeyItem(player, xi.ki.MIDDLE_MAP_PIECE) + end, + + [5] = function(player, csid, option, npc) + npcUtil.giveKeyItem(player, xi.ki.RIGHT_MAP_PIECE) + end, + }, + }, + }, +} + +return quest diff --git a/scripts/quests/crystalWar/Songbirds_in_a_Snowstorm.lua b/scripts/quests/crystalWar/Songbirds_in_a_Snowstorm.lua new file mode 100644 index 00000000000..d7511e2bf63 --- /dev/null +++ b/scripts/quests/crystalWar/Songbirds_in_a_Snowstorm.lua @@ -0,0 +1,229 @@ +----------------------------------- +-- Songbirds in a Snowstorm +----------------------------------- +-- !addquest 7 51 +-- Rholont : !pos -168 -2 56 80 +-- Daigraffeaux : !pos -7 2 -89 80 +-- Colossal Footprint : !pos 82.144 -19.038 139.249 136 +-- Rocky Perch : !pos -106.321 0.282 -365.035 136 +-- Charred Firewood : !pos 83.296 -58.472 175.2 136 +-- Compressed Snow : !pos 46.437 -0.762 -370.178 136 +----------------------------------- +require('scripts/globals/keyitems') +require('scripts/globals/npc_util') +require('scripts/globals/quests') +require('scripts/globals/zone') +require('scripts/globals/interaction/quest') +----------------------------------- +local pastBeaucedineID = zones[xi.zone.BEAUCEDINE_GLACIER_S] +----------------------------------- + +local quest = Quest:new(xi.quest.log_id.CRYSTAL_WAR, xi.quest.id.crystalWar.SONGBIRDS_IN_A_SNOWSTORM) + +quest.reward = +{ + item = xi.items.ICARUS_WING, +} + +-- NOTE: For fishing up the required Key Items, capture was accomplished with 0 skill, and the +-- award message follows the format: obtained a ! + +-- During capture, a Lu Shang rod was used with 0 skill at the specific ponds. All three key +-- items were obtained on the first attempt. Minigame acted like a small fish (highly active), +-- and depleted stamina within ~5 seconds of playing. + +quest.sections = +{ + { + check = function(player, status, vars) + return status == QUEST_AVAILABLE and + player:hasCompletedQuest(xi.quest.log_id.CRYSTAL_WAR, xi.quest.id.crystalWar.BONDS_THAT_NEVER_DIE) and + player:hasCompletedMission(xi.mission.log_id.WOTG, xi.mission.id.wotg.THE_WILL_OF_THE_WORLD) + end, + + [xi.zone.SOUTHERN_SAN_DORIA_S] = + { + ['Rholont'] = + { + onTrigger = function(player, npc) + if + not quest:getMustZone(player) and + quest:getVar(player, 'Timer') <= VanadielUniqueDay() + then + local questProgress = quest:getVar(player, 'Prog') + + if questProgress == 0 then + return quest:progressEvent(113) + elseif questProgress == 1 then + if quest:getVar(player, 'Option') == 0 then + return quest:progressEvent(655) + else + return quest:event(49) + end + end + end + end, + }, + + ['Daigraffeaux'] = + { + onTrigger = function(player, npc) + if quest:getVar(player, 'Prog') == 1 then + return quest:progressEvent(114) + end + end, + }, + + onEventFinish = + { + [113] = function(player, csid, option, npc) + quest:setVar(player, 'Prog', 1) + end, + + [114] = function(player, csid, option, npc) + -- TODO: Decline option and followup needs to be captured. Given that the event option + -- returned for either selection is 0, operating under the assumption that this quest + -- will be added regardless. + + quest:begin(player) + end, + + [655] = function(player, csid, option, npc) + quest:setVar(player, 'Option', 1) + end, + }, + }, + }, + + { + check = function(player, status, vars) + return status == QUEST_ACCEPTED + end, + + [xi.zone.SOUTHERN_SAN_DORIA_S] = + { + ['Rholont'] = quest:event(656), + }, + + [xi.zone.BEAUCEDINE_GLACIER_S] = + { + ['Charred_Firewood'] = + { + onTrade = function(player, npc, trade) + if + npcUtil.tradeHasExactly(trade, xi.items.FLINT_STONE) and + quest:getVar(player, 'Prog') == 4 + then + return quest:progressEvent(4) + end + end, + }, + + ['Colossal_Footprint'] = + { + onTrigger = function(player, npc) + if + player:hasKeyItem(xi.ki.LANCE_FISH) and + player:hasKeyItem(xi.ki.PALADIN_LOBSTER) and + player:hasKeyItem(xi.ki.SCUTUM_CRAB) + then + return quest:progressEvent(3, 136) + elseif quest:getVar(player, 'Prog') == 2 then + return quest:progressEvent(2) + end + end, + }, + + ['Compressed_Snow'] = + { + onTrigger = function(player, npc) + local questProgress = quest:getVar(player, 'Prog') + + if questProgress == 5 then + return quest:progressEvent(5) + elseif + questProgress == 6 and + not GetMobByID(pastBeaucedineID.mob.ORCISH_BLOODLETTER):isSpawned() + then + return quest:progressEvent(27) + elseif questProgress == 7 then + return quest:progressEvent(6) + end + end, + }, + + ['Orcish_Bloodletter'] = + { + -- TODO: Orcish Bloodletter needs verification and implementation to ensure accuracy. Currently + -- is set to a very high level. + + onMobDeath = function(mob, player, isKiller, noKiller) + quest:setVar(player, 'Prog', 7) + end, + }, + + ['Rocky_Perch'] = + { + onTrigger = function(player, npc) + if quest:getVar(player, 'Prog') == 3 then + player:messageSpecial(pastBeaucedineID.text.NONDESCRIPT_MASS) + npcUtil.giveItem(player, xi.items.GOLIATH_WORM) + + return quest:noAction() + end + end, + }, + + onZoneIn = + { + function(player, prevZone) + if quest:getVar(player, 'Prog') == 1 then + return 1 + end + end, + }, + + onEventUpdate = + { + [1] = function(player, csid, option, npc) + if option == 11 then + player:updateEvent(0, 23, 1756, 0, 0, 5832718, 0, 1) + end + end, + }, + + onEventFinish = + { + [1] = function(player, csid, option, npc) + quest:setVar(player, 'Prog', 2) + end, + + [2] = function(player, csid, option, npc) + quest:setVar(player, 'Prog', 3) + end, + + [3] = function(player, csid, option, npc) + quest:setVar(player, 'Prog', 4) + end, + + [4] = function(player, csid, option, npc) + quest:setVar(player, 'Prog', 5) + end, + + [5] = function(player, csid, option, npc) + quest:setVar(player, 'Prog', 6) + end, + + [6] = function(player, csid, option, npc) + quest:complete(player) + end, + + [27] = function(player, csid, option, npc) + SpawnMob(pastBeaucedineID.mob.ORCISH_BLOODLETTER):updateClaim(player) + end, + }, + }, + }, +} + +return quest diff --git a/scripts/zones/Abyssea-Altepa/IDs.lua b/scripts/zones/Abyssea-Altepa/IDs.lua index 9a85a5e67ec..39fe51c4586 100644 --- a/scripts/zones/Abyssea-Altepa/IDs.lua +++ b/scripts/zones/Abyssea-Altepa/IDs.lua @@ -67,37 +67,31 @@ zones[xi.zone.ABYSSEA_ALTEPA] = }, mob = { + RANI_1 = 17670551, + ORTHUS_1 = 17670552, + DRAGUA_1 = 17670553, + BENNU_1 = 17670554, + RANI_2 = 17670555, + ORTHUS_2 = 17670556, + DRAGUA_2 = 17670557, + BENNU_2 = 17670558, + RANI_3 = 17670559, + ORTHUS_3 = 17670560, + DRAGUA_3 = 17670561, + BENNU_3 = 17670562, + IRONCLAD_SMITER = 17670565, + AMAROK = 17670567, + SHAULA = 17670570, + EMPERADOR_DE_ALTEPA = 17670571, + TABLILLA = 17670572, + SHARABHA = 17670574, + WAUGYL = 17670576, + CHICKCHARNEY = 17670577, + VADLEANY = 17670578, + BUGUL_NOZ = 17670579, }, npc = { - QM_POPS = - { - -- TODO: the first item, e.g. 'qm1', is unused and will be meaningless once I (Wren) finish entity-QC on all Abyssea zones. - -- When that is done, I will rewrite Abyssea global and adjust and neaten this table - -- [17670591] = { 'qm1', {3230, 3236}, {}, 17670565}, -- Ironclad Smiter - -- [17670592] = { 'qm2', {3231, 3232, 3238}, {}, 17670567}, -- Amarok - -- [17670593] = { 'qm3', {3233, 3242}, {}, 17670570}, -- Shaula - -- [17670594] = { 'qm4', {3234, 3244}, {}, 17670571}, -- Emperador de Altepa - -- [17670595] = { 'qm5', {3235}, {}, 17670572}, -- Tablilla - -- [17670596] = { 'qm6', {3237}, {}, 17670574}, -- Sharabha - -- [17670597] = { 'qm7', {3239}, {}, 17670576}, -- Waugyl - -- [17670598] = { 'qm8', {3240}, {}, 17670577}, -- Chickcharney - -- [17670599] = { 'qm9', {3241}, {}, 17670578}, -- Vadleany - -- [17670600] = {'qm10', {3243}, {}, 17670579}, -- Bugul Noz - -- [17670601] = {'qm11', {}, {xi.ki.BROKEN_IRON_GIANT_SPIKE, xi.ki.RUSTED_CHARIOT_GEAR}, 17670551}, -- Rani - -- [17670602] = {'qm12', {}, {xi.ki.STEAMING_CERBERUS_TONGUE}, 17670552}, -- Orthus - -- [17670603] = {'qm13', {}, {xi.ki.BLOODIED_DRAGON_EAR}, 17670553}, -- Dragua - -- [17670604] = {'qm14', {}, {xi.ki.RESPLENDENT_ROC_QUILL}, 17670554}, -- Bennu - -- [17670605] = {'qm15', {}, {xi.ki.BROKEN_IRON_GIANT_SPIKE, xi.ki.RUSTED_CHARIOT_GEAR}, 17670555}, -- Rani - -- [17670606] = {'qm16', {}, {xi.ki.STEAMING_CERBERUS_TONGUE}, 17670556}, -- Orthus - -- [17670607] = {'qm17', {}, {xi.ki.BLOODIED_DRAGON_EAR}, 17670557}, -- Dragua - -- [17670608] = {'qm18', {}, {xi.ki.RESPLENDENT_ROC_QUILL}, 17670558}, -- Bennu - -- [17670609] = {'qm19', {}, {xi.ki.BROKEN_IRON_GIANT_SPIKE, xi.ki.RUSTED_CHARIOT_GEAR}, 17670559}, -- Rani - -- [17670610] = {'qm20', {}, {xi.ki.STEAMING_CERBERUS_TONGUE}, 17670560}, -- Orthus - -- [17670611] = {'qm21', {}, {xi.ki.BLOODIED_DRAGON_EAR}, 17670561}, -- Dragua - -- [17670612] = {'qm22', {}, {xi.ki.RESPLENDENT_ROC_QUILL}, 17670562}, -- Bennu - }, - STURDY_PYXIS_BASE = 17670627, }, } diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm2.lua b/scripts/zones/Abyssea-Altepa/npcs/qm2.lua deleted file mode 100644 index eb9d72a3db6..00000000000 --- a/scripts/zones/Abyssea-Altepa/npcs/qm2.lua +++ /dev/null @@ -1,25 +0,0 @@ ------------------------------------ --- Zone: Abyssea-Altepa --- NPC: qm2 (???) --- Spawns Amarok --- !pos -558 0 161 218 ------------------------------------ -require("scripts/globals/abyssea") ------------------------------------ -local entity = {} - -entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) -end - -entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) -end - -entity.onEventUpdate = function(player, csid, option) -end - -entity.onEventFinish = function(player, csid, option) -end - -return entity diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm_amarok.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_amarok.lua new file mode 100644 index 00000000000..663e737ef71 --- /dev/null +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_amarok.lua @@ -0,0 +1,27 @@ +----------------------------------- +-- Zone: Abyssea-Altepa +-- NPC: qm_amarok (???) +-- Spawns Amarok +-- !pos -558 0 161 218 +----------------------------------- +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.AMAROK, { xi.items.SHARABHA_HIDE, xi.items.TIGER_KINGS_HIDE, xi.items.HIGH_QUALITY_DHALMEL_HIDE }) +end + +entity.onTrigger = function(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.SHARABHA_HIDE, xi.items.TIGER_KINGS_HIDE, xi.items.HIGH_QUALITY_DHALMEL_HIDE }) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) +end + +return entity diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm14.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_bennu_1.lua similarity index 68% rename from scripts/zones/Abyssea-Altepa/npcs/qm14.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_bennu_1.lua index 8f3474a4a00..d97c66022bd 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm14.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_bennu_1.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm14 (???) +-- NPC: qm_bennu_1 (???) -- Spawns Bennu -- !pos 91 -1 -140 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.BENNU_1, { xi.ki.RESPLENDENT_ROC_QUILL }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm18.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_bennu_2.lua similarity index 68% rename from scripts/zones/Abyssea-Altepa/npcs/qm18.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_bennu_2.lua index 1ea20b6f2b5..42bdbb9b7a3 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm18.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_bennu_2.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm18 (???) +-- NPC: qm_bennu_2 (???) -- Spawns Bennu -- !pos ? ? ? 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.BENNU_2, { xi.ki.RESPLENDENT_ROC_QUILL }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm22.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_bennu_3.lua similarity index 68% rename from scripts/zones/Abyssea-Altepa/npcs/qm22.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_bennu_3.lua index 0d84d2e1852..761e6d2a469 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm22.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_bennu_3.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm22 (???) +-- NPC: qm_bennu_3 (???) -- Spawns Bennu -- !pos -221 0.950 -320 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.BENNU_3, { xi.ki.RESPLENDENT_ROC_QUILL }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm10.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_bugul_noz.lua similarity index 55% rename from scripts/zones/Abyssea-Altepa/npcs/qm10.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_bugul_noz.lua index d33b94f69b7..1a5e0c3f9f1 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm10.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_bugul_noz.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm10 (???) +-- NPC: qm_bugul_noz (???) -- Spawns Bugul Noz -- !pos -608 -1 -397 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.BUGUL_NOZ, { xi.items.HANDFUL_OF_SABULOUS_CLAY }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.HANDFUL_OF_SABULOUS_CLAY }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm8.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_chickcharney.lua similarity index 54% rename from scripts/zones/Abyssea-Altepa/npcs/qm8.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_chickcharney.lua index f901d70bf88..28c973033ea 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm8.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_chickcharney.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm8 (???) +-- NPC: qm_chickcharney (???) -- Spawns Chickcharney -- !pos 36 0 -240 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.CHICKCHARNEY, { xi.items.HIGH_QUALITY_COCKATRICE_SKIN }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.HIGH_QUALITY_COCKATRICE_SKIN }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm13.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_dragua_1.lua similarity index 68% rename from scripts/zones/Abyssea-Altepa/npcs/qm13.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_dragua_1.lua index 675e59b33d1..66d41ebc66f 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm13.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_dragua_1.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm13 (???) +-- NPC: qm_dragua_1 (???) -- Spawns Dragua -- !pos -221 1 -335 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.DRAGUA_1, { xi.ki.BLOODIED_DRAGON_EAR }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm17.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_dragua_2.lua similarity index 68% rename from scripts/zones/Abyssea-Altepa/npcs/qm17.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_dragua_2.lua index 935e5a5886a..0d0082d95a8 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm17.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_dragua_2.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm17 (???) +-- NPC: qm_dragua_2 (???) -- Spawns Dragua -- !pos -221 0.8 -350 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.DRAGUA_2, { xi.ki.BLOODIED_DRAGON_EAR }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm21.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_dragua_3.lua similarity index 68% rename from scripts/zones/Abyssea-Altepa/npcs/qm21.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_dragua_3.lua index 4f696105c67..39df48e6d46 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm21.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_dragua_3.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm21 (???) +-- NPC: qm_dragua_3 (???) -- Spawns Dragua -- !pos -400 0.150 127 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.DRAGUA_3, { xi.ki.BLOODIED_DRAGON_EAR }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm4.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_emperador_de_altepa.lua similarity index 50% rename from scripts/zones/Abyssea-Altepa/npcs/qm4.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_emperador_de_altepa.lua index 50df7616dad..d16e5562692 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm4.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_emperador_de_altepa.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm4 (???) +-- NPC: qm_emperador_de_altepa (???) -- Spawns Emperor de Altepa -- !pos -491 0 -611 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.EMPERADOR_DE_ALTEPA, { xi.items.BOTTLE_OF_OASIS_WATER, xi.items.SPRIG_OF_GIANT_MISTLETOE }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.BOTTLE_OF_OASIS_WATER, xi.items.SPRIG_OF_GIANT_MISTLETOE }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm1.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_ironclad_smiter.lua similarity index 51% rename from scripts/zones/Abyssea-Altepa/npcs/qm1.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_ironclad_smiter.lua index c2a0e9e64dd..d450bc93012 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm1.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_ironclad_smiter.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm1 (???) +-- NPC: qm_ironclad_smiter (???) -- Spawns Ironclad Smiter -- !pos -744 -17 -696 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.IRONCLAD_SMITER, { xi.items.VIAL_OF_TABLILLA_MERCURY, xi.items.SMOLDERING_ARM }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.VIAL_OF_TABLILLA_MERCURY, xi.items.SMOLDERING_ARM }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm12.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_orthus_1.lua similarity index 68% rename from scripts/zones/Abyssea-Altepa/npcs/qm12.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_orthus_1.lua index b37e6e6a772..1ea17145fa1 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm12.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_orthus_1.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm12 (???) +-- NPC: qm_orthus_1 (???) -- Spawns Orthus -- !pos -400 0 112 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.ORTHUS_1, { xi.ki.STEAMING_CERBERUS_TONGUE }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm16.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_orthus_2.lua similarity index 68% rename from scripts/zones/Abyssea-Altepa/npcs/qm16.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_orthus_2.lua index be7bfb74c20..f9598f1922f 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm16.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_orthus_2.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm16 (???) +-- NPC: qm_orthus_2 (???) -- Spawns Orthrus -- !pos -400 0.9 97 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.ORTHUS_2, { xi.ki.STEAMING_CERBERUS_TONGUE }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm20.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_orthus_3.lua similarity index 68% rename from scripts/zones/Abyssea-Altepa/npcs/qm20.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_orthus_3.lua index 6df6ef72bd3..f9c7696fdab 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm20.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_orthus_3.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm20 (???) +-- NPC: qm_orthus_3 (???) -- Spawns Orthus -- !pos -823 -8.4 -390 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.ORTHUS_3, { xi.ki.STEAMING_CERBERUS_TONGUE }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm11.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_rani_1.lua similarity index 66% rename from scripts/zones/Abyssea-Altepa/npcs/qm11.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_rani_1.lua index e6de6b9013b..ba4d058feca 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm11.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_rani_1.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm11 (???) +-- NPC: qm_rani_1 (???) -- Spawns Rani -- !pos -812 -9 -379 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.RANI_1, { xi.ki.BROKEN_IRON_GIANT_SPIKE, xi.ki.RUSTED_CHARIOT_GEAR }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm15.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_rani_2.lua similarity index 66% rename from scripts/zones/Abyssea-Altepa/npcs/qm15.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_rani_2.lua index 3b344639962..261842ca52a 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm15.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_rani_2.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm15 (???) +-- NPC: qm_rani_2 (???) -- Spawns Rani -- !pos -801 -7.8 -368 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.RANI_2, { xi.ki.BROKEN_IRON_GIANT_SPIKE, xi.ki.RUSTED_CHARIOT_GEAR }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm19.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_rani_3.lua similarity index 66% rename from scripts/zones/Abyssea-Altepa/npcs/qm19.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_rani_3.lua index 5e1f4d7a7e6..806d4aca372 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm19.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_rani_3.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm19 (???) +-- NPC: qm_rani_3 (???) -- Spawns Rani -- !pos 102 0 -151 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.RANI_3, { xi.ki.BROKEN_IRON_GIANT_SPIKE, xi.ki.RUSTED_CHARIOT_GEAR }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm6.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_sharabha.lua similarity index 57% rename from scripts/zones/Abyssea-Altepa/npcs/qm6.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_sharabha.lua index fd4f75d75e2..309fc1ff22a 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm6.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_sharabha.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm6 (???) +-- NPC: qm_sharabha (???) -- Spawns Sharabha -- !pos -314 0 308 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.SHARABHA, { xi.items.SAND_CAKED_FANG }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.SAND_CAKED_FANG }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm3.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_shaula.lua similarity index 51% rename from scripts/zones/Abyssea-Altepa/npcs/qm3.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_shaula.lua index d22562688de..cc321aa613b 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm3.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_shaula.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm3 (???) +-- NPC: qm_shaula (???) -- Spawns Shaula -- !pos -71 0 408 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.SHAULA, { xi.items.VIAL_OF_VADLEANY_FLUID, xi.items.HIGH_QUALITY_SCORPION_CLAW }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.VIAL_OF_VADLEANY_FLUID, xi.items.HIGH_QUALITY_SCORPION_CLAW }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm5.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_tablilla.lua similarity index 57% rename from scripts/zones/Abyssea-Altepa/npcs/qm5.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_tablilla.lua index 076d4166a25..88c5447b3cb 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm5.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_tablilla.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm5 (???) +-- NPC: qm_tablilla (???) -- Spawns Tablilla -- !pos -877 -8 -524 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.TABLILLA, { xi.items.SANDY_SHARD }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.SANDY_SHARD }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm9.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_vadleany.lua similarity index 57% rename from scripts/zones/Abyssea-Altepa/npcs/qm9.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_vadleany.lua index c8a4e49d765..adb0d76f0ee 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm9.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_vadleany.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm9 (???) +-- NPC: qm_vadleany (???) -- Spawns Vadleany -- !pos -56 1 123 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.VADLEANY, { xi.items.LADYBIRD_LEAF }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.LADYBIRD_LEAF }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Altepa/npcs/qm7.lua b/scripts/zones/Abyssea-Altepa/npcs/qm_waugyl.lua similarity index 56% rename from scripts/zones/Abyssea-Altepa/npcs/qm7.lua rename to scripts/zones/Abyssea-Altepa/npcs/qm_waugyl.lua index 0daf4ce8b88..4289078ec6d 100644 --- a/scripts/zones/Abyssea-Altepa/npcs/qm7.lua +++ b/scripts/zones/Abyssea-Altepa/npcs/qm_waugyl.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Altepa --- NPC: qm7 (???) +-- NPC: qm_waugyl (???) -- Spawns Waugyl -- !pos -408 1 -299 218 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Altepa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.WAUGYL, { xi.items.VIAL_OF_PUPPETS_BLOOD }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.VIAL_OF_PUPPETS_BLOOD }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/IDs.lua b/scripts/zones/Abyssea-Attohwa/IDs.lua index df1897ee652..13c9e549659 100644 --- a/scripts/zones/Abyssea-Attohwa/IDs.lua +++ b/scripts/zones/Abyssea-Attohwa/IDs.lua @@ -67,40 +67,34 @@ zones[xi.zone.ABYSSEA_ATTOHWA] = }, mob = { + GRANITE_BORER = 17658261, + BLAZING_ERUCA = 17658262, + PALLID_PERCY = 17658263, + GAIZKIN = 17658264, + KHARON = 17658265, + DREKAVAC = 17658266, + SVARBHANU = 17658267, + KAMPE = 17658268, + BERSTUK = 17658269, + MAAHES = 17658270, + NIGHTSHADE = 17658271, + WHERWETRICE = 17658272, + MEILIKKI = 17658273, + SMOK_1 = 17658274, + TITLACAUAN_1 = 17658275, + ULHUADSHI_1 = 17658276, + ITZPAPALOTL_1 = 17658277, + SMOK_2 = 17658278, + TITLACAUAN_2 = 17658279, + ULHUADSHI_2 = 17658280, + ITZPAPALOTL_2 = 17658281, + SMOK_3 = 17658282, + TITLACAUAN_3 = 17658283, + ULHUADSHI_3 = 17658284, + ITZPAPALOTL_3 = 17658285, }, npc = { - QM_POPS = - { - -- TODO: the first item, e.g. 'qm1', is unused and will be meaningless once I (Wren) finish entity-QC on all Abyssea zones. - -- When that is done, I will rewrite Abyssea global and adjust and neaten this table - -- [17658351] = { 'qm1', {3072}, {}, 17658261}, -- Granite Borer - -- [17658352] = { 'qm2', {3073}, {}, 17658262}, -- Blazing Eruca - -- [17658353] = { 'qm3', {3074}, {}, 17658263}, -- Pallid Percy - -- [17658354] = { 'qm4', {3075}, {}, 17658264}, -- Gaizkin - -- [17658355] = { 'qm5', {3076}, {}, 17658265}, -- Kharon - -- [17658356] = { 'qm6', {3077}, {}, 17658266}, -- Drekavac - -- [17658357] = { 'qm7', {3078}, {}, 17658267}, -- Svarbhanu - -- [17658358] = { 'qm8', {3079}, {}, 17658268}, -- Kampe - -- [17658359] = { 'qm9', {3080}, {}, 17658269}, -- Berstuk - -- [17658360] = {'qm10', {3081}, {}, 17658270}, -- Maahes - -- [17658361] = {'qm11', {3082}, {}, 17658271}, -- Nightshade - -- [17658362] = {'qm12', {3083}, {}, 17658272}, -- Wherwetrice - -- [17658363] = {'qm13', {3084}, {}, 17658273}, -- Mielikki - -- [17658364] = {'qm14', {}, { xi.ki.HOLLOW_DRAGON_EYE}, 17658274}, -- Smok - -- [17658365] = {'qm15', {}, { xi.ki.BLOTCHED_DOOMED_TONGUE, xi.ki.CRACKED_SKELETON_CLAVICLE, xi.ki.WRITHING_GHOST_FINGER, xi.ki.RUSTED_HOUND_COLLAR}, 17658275}, -- Titlacauan - -- [17658366] = {'qm16', {}, { xi.ki.MUCID_WORM_SEGMENT, xi.ki.SHRIVELED_HECTEYES_STALK}, 17658276}, -- Ulhuadshi - -- [17658367] = {'qm17', {}, { xi.ki.VENOMOUS_WAMOURA_FEELER, xi.ki.BULBOUS_CRAWLER_COCOON, xi.ki.DISTENDED_CHIGOE_ABDOMEN}, 17658277}, -- Itzpapalotl - -- [17658368] = {'qm18', {}, { xi.ki.HOLLOW_DRAGON_EYE}, 17658278}, -- Smok - -- [17658369] = {'qm19', {}, { xi.ki.BLOTCHED_DOOMED_TONGUE, xi.ki.CRACKED_SKELETON_CLAVICLE, xi.ki.WRITHING_GHOST_FINGER, xi.ki.RUSTED_HOUND_COLLAR}, 17658279}, -- Titlacauan - -- [17658370] = {'qm20', {}, { xi.ki.MUCID_WORM_SEGMENT, xi.ki.SHRIVELED_HECTEYES_STALK}, 17658280}, -- Ulhuadshi - -- [17658371] = {'qm21', {}, { xi.ki.VENOMOUS_WAMOURA_FEELER, xi.ki.BULBOUS_CRAWLER_COCOON, xi.ki.DISTENDED_CHIGOE_ABDOMEN}, 17658281}, -- Itzpapalotl - -- [17658372] = {'qm22', {}, { xi.ki.HOLLOW_DRAGON_EYE}, 17658282}, -- Smok - -- [17658373] = {'qm23', {}, { xi.ki.BLOTCHED_DOOMED_TONGUE, xi.ki.CRACKED_SKELETON_CLAVICLE, xi.ki.WRITHING_GHOST_FINGER, xi.ki.RUSTED_HOUND_COLLAR}, 17658283}, -- Titlacauan - -- [17658374] = {'qm24', {}, { xi.ki.MUCID_WORM_SEGMENT, xi.ki.SHRIVELED_HECTEYES_STALK}, 17658284}, -- Ulhuadshi - -- [17658375] = {'qm25', {}, { xi.ki.VENOMOUS_WAMOURA_FEELER, xi.ki.BULBOUS_CRAWLER_COCOON, xi.ki.DISTENDED_CHIGOE_ABDOMEN}, 17658285}, -- Itzpapalotl - }, - STURDY_PYXIS_BASE = 17658390, }, } diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm9.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_berstuk.lua similarity index 57% rename from scripts/zones/Abyssea-Attohwa/npcs/qm9.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_berstuk.lua index 7289ad8bfdf..4a53fcc7a94 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm9.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_berstuk.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm9 (???) +-- NPC: qm_berstuk (???) -- Spawns Berstuk -- !pos -280.000 -4.000 -38.516 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.BERSTUK, { xi.items.EXTENDED_EYESTALK }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.EXTENDED_EYESTALK }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm2.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_blazing_eruca.lua similarity index 58% rename from scripts/zones/Abyssea-Attohwa/npcs/qm2.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_blazing_eruca.lua index 65eb52cf862..07c1da42b45 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm2.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_blazing_eruca.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm2 (???) +-- NPC: qm_blazing_eruca (???) -- Spawns Blazing Eruca -- !pos 233.162 19.720 -243.255 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.BLAZING_ERUCA, { xi.items.ERUCA_EGG }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.ERUCA_EGG }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm6.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_drekavac.lua similarity index 57% rename from scripts/zones/Abyssea-Attohwa/npcs/qm6.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_drekavac.lua index c301b14aa4c..599e877fee7 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm6.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_drekavac.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm6 (???) +-- NPC: qm_drekavac (???) -- Spawns Drekavac -- !pos -158.000 -0.340 220.000 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.DREKAVAC, { xi.items.CRACKED_DRAGONSCALE }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.CRACKED_DRAGONSCALE }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm4.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_gaizkin.lua similarity index 56% rename from scripts/zones/Abyssea-Attohwa/npcs/qm4.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_gaizkin.lua index b3f640c42bf..61cdfef5686 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm4.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_gaizkin.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm4 (???) +-- NPC: qm_gaizkin (???) -- Spawns Gaizkin -- !pos -132.253 0.015 0.753 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.GAIZKIN, { xi.items.HANDFUL_OF_BONE_CHIPS }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.HANDFUL_OF_BONE_CHIPS }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm1.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_granite_borer.lua similarity index 57% rename from scripts/zones/Abyssea-Attohwa/npcs/qm1.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_granite_borer.lua index 25447e8fe64..23f455458a6 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm1.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_granite_borer.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm1 (???) +-- NPC: qm_granite_borer (???) -- Spawns Granite Borer -- !pos 401.489 19.730 -282.864 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.GRANITE_BORER, { xi.items.WITHERED_COCOON }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.WITHERED_COCOON }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm17.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_itzpapalotl_1.lua similarity index 63% rename from scripts/zones/Abyssea-Attohwa/npcs/qm17.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_itzpapalotl_1.lua index 9fd80bbb03a..297431f260e 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm17.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_itzpapalotl_1.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm17 (???) +-- NPC: qm_itzpapalotl_1 (???) -- Spawns Itzpapalotl -- !pos 439.939 19.820 -194.226 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.ITZPAPALOTL_1, { xi.ki.VENOMOUS_WAMOURA_FEELER, xi.ki.BULBOUS_CRAWLER_COCOON, xi.ki.DISTENDED_CHIGOE_ABDOMEN }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm21.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_itzpapalotl_2.lua similarity index 63% rename from scripts/zones/Abyssea-Attohwa/npcs/qm21.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_itzpapalotl_2.lua index 47a03ad4fdd..b6e0a894099 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm21.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_itzpapalotl_2.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm21 (???) +-- NPC: qm_itzpapalotl_2 (???) -- Spawns Itzpapalotl -- !pos 424.940 20.220 -194.227 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.ITZPAPALOTL_2, { xi.ki.VENOMOUS_WAMOURA_FEELER, xi.ki.BULBOUS_CRAWLER_COCOON, xi.ki.DISTENDED_CHIGOE_ABDOMEN }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm25.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_itzpapalotl_3.lua similarity index 63% rename from scripts/zones/Abyssea-Attohwa/npcs/qm25.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_itzpapalotl_3.lua index 75a0b7bdd11..c000b92f53e 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm25.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_itzpapalotl_3.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm25 (???) +-- NPC: qm_itzpapalotl_3 (???) -- Spawns Itzpapalotl -- !pos 439.940 21.020 -179.227 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.ITZPAPALOTL_3, { xi.ki.VENOMOUS_WAMOURA_FEELER, xi.ki.BULBOUS_CRAWLER_COCOON, xi.ki.DISTENDED_CHIGOE_ABDOMEN }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm8.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_kampe.lua similarity index 57% rename from scripts/zones/Abyssea-Attohwa/npcs/qm8.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_kampe.lua index 12e7ad542f8..5a287226815 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm8.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_kampe.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm8 (???) +-- NPC: qm_kampe (???) -- Spawns Kampe -- !pos -401.612 3.738 -200.972 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.KAMPE, { xi.items.EXTENDED_EYESTALK }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.EXTENDED_EYESTALK }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm5.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_kharon.lua similarity index 57% rename from scripts/zones/Abyssea-Attohwa/npcs/qm5.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_kharon.lua index f20f964b8ba..988520fba1f 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm5.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_kharon.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm5 (???) +-- NPC: qm_kharon (???) -- Spawns Kharon -- !pos -403.909 -4.234 200.832 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.KHARON, { xi.items.SET_OF_WAILING_RAGS }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.SET_OF_WAILING_RAGS }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm10.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_maahes.lua similarity index 58% rename from scripts/zones/Abyssea-Attohwa/npcs/qm10.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_maahes.lua index c220cff8f29..7db61927358 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm10.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_maahes.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm10 (???) +-- NPC: qm_maahes (???) -- Spawns Maahes -- !pos 214.107 19.970 -93.816 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.MAAHES, { xi.items.COEURL_ROUND }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.COEURL_ROUND }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm13.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_mielikki.lua similarity index 58% rename from scripts/zones/Abyssea-Attohwa/npcs/qm13.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_mielikki.lua index 8a75f41dc29..02a7579f32c 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm13.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_mielikki.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm13 (???) +-- NPC: qm_mielikki (???) -- Spawns Mielikki -- !pos 481.096 20.000 39.549 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.MIELIKKI, { xi.items.GREAT_ROOT }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.GREAT_ROOT }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm11.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_nightshade.lua similarity index 57% rename from scripts/zones/Abyssea-Attohwa/npcs/qm11.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_nightshade.lua index 30abaf5555b..ce6145781df 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm11.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_nightshade.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm11 (???) +-- NPC: qm_nightshade (???) -- Spawns Nightshade -- !pos 410.304 19.500 13.227 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.NIGHTSHADE, { xi.items.WITHERED_BUD }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.WITHERED_BUD }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm3.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_pallid_percy.lua similarity index 56% rename from scripts/zones/Abyssea-Attohwa/npcs/qm3.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_pallid_percy.lua index be1f7068764..6d0dffc168b 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm3.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_pallid_percy.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm3 (???) +-- NPC: qm_pallid_percy (???) -- Spawns Pallid Percy -- !pos 281.063 20.376 174.011 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.PALLID_PERCY, { xi.items.VIAL_OF_UNDYING_OOZE }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.VIAL_OF_UNDYING_OOZE }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm14.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_smok_1.lua similarity index 69% rename from scripts/zones/Abyssea-Attohwa/npcs/qm14.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_smok_1.lua index eae7e536bd4..7b17593103e 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm14.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_smok_1.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm14 (???) +-- NPC: qm_smok_1 (???) -- Spawns Smok -- !pos -538.207 -6.640 -25.722 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.SMOK_1, { xi.ki.HOLLOW_DRAGON_EYE }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm18.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_smok_2.lua similarity index 69% rename from scripts/zones/Abyssea-Attohwa/npcs/qm18.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_smok_2.lua index a00ea4bbe9c..1fba11c72da 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm18.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_smok_2.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm18 (???) +-- NPC: qm_smok_2 (???) -- Spawns Smok -- !pos -530.208 -5.460 -39.323 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.SMOK_2, { xi.ki.HOLLOW_DRAGON_EYE }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm22.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_smok_3.lua similarity index 69% rename from scripts/zones/Abyssea-Attohwa/npcs/qm22.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_smok_3.lua index 884e0ed88a4..0d2e6a6ba15 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm22.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_smok_3.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm22 (???) +-- NPC: qm_smok_3 (???) -- Spawns Smok -- !pos -546.908 -4.640 -12.633 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.SMOK_3, { xi.ki.HOLLOW_DRAGON_EYE }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm7.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_svarbhanu.lua similarity index 58% rename from scripts/zones/Abyssea-Attohwa/npcs/qm7.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_svarbhanu.lua index 4280a7cdffe..9f6d7b567b6 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm7.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_svarbhanu.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm7 (???) +-- NPC: qm_svarbhanu (???) -- Spawns Svarbhanu -- !pos -545.043 -12.410 -72.175 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.SVARBHANU, { xi.items.GORY_PINCER }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.GORY_PINCER }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm15.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_titlacauan_1.lua similarity index 61% rename from scripts/zones/Abyssea-Attohwa/npcs/qm15.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_titlacauan_1.lua index 2354ae5d4f8..f05da008663 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm15.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_titlacauan_1.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm15 (???) +-- NPC: qm_titlacauan_1 (???) -- Spawns Titlacauan -- !pos -404.436 -4.000 246.000 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.TITLACAUAN_1, { xi.ki.BLOTCHED_DOOMED_TONGUE, xi.ki.CRACKED_SKELETON_CLAVICLE, xi.ki.WRITHING_GHOST_FINGER, xi.ki.RUSTED_HOUND_COLLAR }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm19.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_titlacauan_2.lua similarity index 61% rename from scripts/zones/Abyssea-Attohwa/npcs/qm19.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_titlacauan_2.lua index 42d9a94b805..28534e814df 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm19.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_titlacauan_2.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm19 (???) +-- NPC: qm_titlacauan_2 (???) -- Spawns Titlacauan -- !pos -389.437 -4.000 246.001 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.TITLACAUAN_2, { xi.ki.BLOTCHED_DOOMED_TONGUE, xi.ki.CRACKED_SKELETON_CLAVICLE, xi.ki.WRITHING_GHOST_FINGER, xi.ki.RUSTED_HOUND_COLLAR }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm23.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_titlacauan_3.lua similarity index 61% rename from scripts/zones/Abyssea-Attohwa/npcs/qm23.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_titlacauan_3.lua index 780d25fee20..2b23e39c3f5 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm23.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_titlacauan_3.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm23 (???) +-- NPC: qm_titlacauan_3 (???) -- Spawns Titlacauan -- !pos -396.937 -3.000 259.001 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.TITLACAUAN_3, { xi.ki.BLOTCHED_DOOMED_TONGUE, xi.ki.CRACKED_SKELETON_CLAVICLE, xi.ki.WRITHING_GHOST_FINGER, xi.ki.RUSTED_HOUND_COLLAR }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm16.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_ulhuadshi_1.lua similarity index 66% rename from scripts/zones/Abyssea-Attohwa/npcs/qm16.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_ulhuadshi_1.lua index daa87821783..2a15cfbd891 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm16.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_ulhuadshi_1.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm16 (???) +-- NPC: qm_ulhuadshi_1 (???) -- Spawns Ulhuadshi -- !pos 350.692 19.455 209.839 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.ULHUADSHI_1, { xi.ki.MUCID_WORM_SEGMENT, xi.ki.SHRIVELED_HECTEYES_STALK }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm20.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_ulhuadshi_2.lua similarity index 66% rename from scripts/zones/Abyssea-Attohwa/npcs/qm20.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_ulhuadshi_2.lua index dc015e82319..01ae923f5f8 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm20.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_ulhuadshi_2.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm20 (???) +-- NPC: qm_ulhuadshi_2 (???) -- Spawns Ulhuadshi -- !pos 361.193 20.005 199.340 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.ULHUADSHI_2, { xi.ki.MUCID_WORM_SEGMENT, xi.ki.SHRIVELED_HECTEYES_STALK }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm24.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_ulhuadshi_3.lua similarity index 66% rename from scripts/zones/Abyssea-Attohwa/npcs/qm24.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_ulhuadshi_3.lua index 10af8df00fa..7f7b1974d39 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm24.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_ulhuadshi_3.lua @@ -1,19 +1,20 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm24 (???) +-- NPC: qm_ulhuadshi_3 (???) -- Spawns Ulhuadshi -- !pos 340.193 20.005 220.340 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, ID.mob.ULHUADSHI_3, { xi.ki.MUCID_WORM_SEGMENT, xi.ki.SHRIVELED_HECTEYES_STALK }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Attohwa/npcs/qm12.lua b/scripts/zones/Abyssea-Attohwa/npcs/qm_wherwetrice.lua similarity index 56% rename from scripts/zones/Abyssea-Attohwa/npcs/qm12.lua rename to scripts/zones/Abyssea-Attohwa/npcs/qm_wherwetrice.lua index c2416ffac9a..39e7c7e8bcb 100644 --- a/scripts/zones/Abyssea-Attohwa/npcs/qm12.lua +++ b/scripts/zones/Abyssea-Attohwa/npcs/qm_wherwetrice.lua @@ -1,19 +1,21 @@ ----------------------------------- -- Zone: Abyssea-Attohwa --- NPC: qm12 (???) +-- NPC: qm_wherwetrice (???) -- Spawns Wherwetrice -- !pos 198.045 20.122 108.705 215 ----------------------------------- -require("scripts/globals/abyssea") +local ID = require('scripts/zones/Abyssea-Attohwa/IDs') +require('scripts/globals/abyssea') +require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) + xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.WHERWETRICE, { xi.items.MANGLED_COCKATRICE_SKIN }) end entity.onTrigger = function(player, npc) - -- xi.abyssea.qmOnTrigger(player, npc) + xi.abyssea.qmOnTrigger(player, npc, 0, 0, { xi.items.MANGLED_COCKATRICE_SKIN }) end entity.onEventUpdate = function(player, csid, option) diff --git a/scripts/zones/Abyssea-Grauberg/IDs.lua b/scripts/zones/Abyssea-Grauberg/IDs.lua index 3216bbff8b7..2f4b4b6234e 100644 --- a/scripts/zones/Abyssea-Grauberg/IDs.lua +++ b/scripts/zones/Abyssea-Grauberg/IDs.lua @@ -110,7 +110,6 @@ zones[xi.zone.ABYSSEA_GRAUBERG] = 17818224, 17818225, }, - STURDY_PYXIS_BASE = 17818119, }, } diff --git a/scripts/zones/Abyssea-Konschtat/IDs.lua b/scripts/zones/Abyssea-Konschtat/IDs.lua index 38ed683c6da..a763ea13c04 100644 --- a/scripts/zones/Abyssea-Konschtat/IDs.lua +++ b/scripts/zones/Abyssea-Konschtat/IDs.lua @@ -95,7 +95,6 @@ zones[xi.zone.ABYSSEA_KONSCHTAT] = }, npc = { - STURDY_PYXIS_BASE = 16839114, }, } diff --git a/scripts/zones/Abyssea-Konschtat/npcs/Cruor_Prospector.lua b/scripts/zones/Abyssea-Konschtat/npcs/Cruor_Prospector.lua index 41fe25793ed..4438811e173 100644 --- a/scripts/zones/Abyssea-Konschtat/npcs/Cruor_Prospector.lua +++ b/scripts/zones/Abyssea-Konschtat/npcs/Cruor_Prospector.lua @@ -7,60 +7,17 @@ require("scripts/globals/abyssea") require("scripts/globals/keyitems") require("scripts/globals/status") +require("scripts/globals/settings") ----------------------------------- local entity = {} -local itemType = -{ - ITEM = 1, - TEMP = 2, - KEYITEM = 3, - ENHANCEMENT = 4, -} +local itemType = xi.abyssea.itemType -local prospectorItems = +local localProspectorItems = { - [itemType.ITEM] = - {-- Sel Item Cost, Qty - [ 1] = { xi.items.PERLE_SALADE, 4000 }, - [ 2] = { xi.items.PERLE_HAUBERK, 5000 }, - [ 3] = { xi.items.PERLE_MOUFLES, 3000 }, - [ 4] = { xi.items.PERLE_BRAYETTES, 3000 }, - [ 5] = { xi.items.PERLE_SOLLERETS, 3000 }, - [ 6] = { xi.items.AURORE_BERET, 4000 }, - [ 7] = { xi.items.AURORE_DOUBLET, 5000 }, - [ 8] = { xi.items.AURORE_GLOVES, 3000 }, - [ 9] = { xi.items.AURORE_BRAIS, 3000 }, - [10] = { xi.items.AURORE_GAITERS, 3000 }, - [11] = { xi.items.TEAL_CHAPEAU, 4000 }, - [12] = { xi.items.TEAL_SAIO, 5000 }, - [13] = { xi.items.TEAL_CUFFS, 3000 }, - [14] = { xi.items.TEAL_SLOPS, 3000 }, - [15] = { xi.items.TEAL_PIGACHES, 3000 }, - [16] = { xi.items.FORBIDDEN_KEY, 500 }, - [17] = { xi.items.SHADOW_THRONE, 2000000 }, - }, + [itemType.ITEM] = xi.abyssea.visionsCruorProspectorItems, - [itemType.TEMP] = - {-- Sel Item Cost, Qty - [ 1] = { xi.items.LUCID_POTION_I, 80 }, - [ 2] = { xi.items.LUCID_ETHER_I, 80 }, - [ 3] = { xi.items.BOTTLE_OF_CATHOLICON, 80 }, - [ 4] = { xi.items.DUSTY_ELIXIR, 120 }, - [ 5] = { xi.items.TUBE_OF_CLEAR_SALVE_I, 120 }, - [ 6] = { xi.items.BOTTLE_OF_STALWARTS_TONIC, 150 }, - [ 7] = { xi.items.BOTTLE_OF_ASCETICS_TONIC, 150 }, - [ 8] = { xi.items.BOTTLE_OF_CHAMPIONS_TONIC, 150 }, - [ 9] = { xi.items.LUCID_POTION_II, 200 }, - [10] = { xi.items.LUCID_ETHER_II, 200 }, - [11] = { xi.items.LUCID_ELIXIR_I, 300 }, - [12] = { xi.items.FLASK_OF_HEALING_POWDER, 300 }, - [13] = { xi.items.PINCH_OF_MANA_POWDER, 300 }, - [14] = { xi.items.TUBE_OF_HEALING_SALVE_I, 300 }, - [15] = { xi.items.BOTTLE_OF_VICARS_DRINK, 300 }, - [16] = { xi.items.TUBE_OF_CLEAR_SALVE_II, 300 }, - [17] = { xi.items.PRIMEVAL_BREW, 2000000 }, - }, + [itemType.TEMP] = xi.abyssea.visionsCruorProspectorTemps, [itemType.KEYITEM] = {-- Sel Item Cost @@ -71,94 +28,21 @@ local prospectorItems = [5] = { xi.ki.CLEAR_DEMILUNE_ABYSSITE, 300 }, }, - [itemType.ENHANCEMENT] = - {-- Sel Effect (Abyssea) Actual Effect Amt, KeyItem for Bonus, Bonus Mult Cost - [ 6] = { { { xi.effect.ABYSSEA_HP, xi.effect.MAX_HP_BOOST, 20, xi.abyssea.abyssiteType.MERIT, 10 }, }, 50 }, - [ 7] = { { { xi.effect.ABYSSEA_MP, xi.effect.MAX_MP_BOOST, 10, xi.abyssea.abyssiteType.MERIT, 5 }, }, 120 }, - [ 8] = { { { xi.effect.ABYSSEA_STR, xi.effect.STR_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_DEX, xi.effect.DEX_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, }, 120 }, - [ 9] = { { { xi.effect.ABYSSEA_VIT, xi.effect.VIT_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_AGI, xi.effect.AGI_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, }, 100 }, - [10] = { { { xi.effect.ABYSSEA_INT, xi.effect.INT_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_CHR, xi.effect.CHR_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_MND, xi.effect.MND_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, }, 100 }, - [11] = { { { xi.effect.ABYSSEA_HP, xi.effect.MAX_HP_BOOST, 20, xi.abyssea.abyssiteType.MERIT, 10 }, - { xi.effect.ABYSSEA_MP, xi.effect.MAX_MP_BOOST, 10, xi.abyssea.abyssiteType.MERIT, 5 }, - { xi.effect.ABYSSEA_STR, xi.effect.STR_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_DEX, xi.effect.DEX_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_VIT, xi.effect.VIT_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_AGI, xi.effect.AGI_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_INT, xi.effect.INT_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_CHR, xi.effect.CHR_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_MND, xi.effect.MND_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, }, 470 }, - }, + [itemType.ENHANCEMENT] = xi.abyssea.visionsCruorProspectorBuffs, } entity.onTrade = function(player, npc, trade) end entity.onTrigger = function(player, npc) - local cruor = player:getCurrency("cruor") - local demilune = xi.abyssea.getDemiluneAbyssite(player) - - player:startEvent(2002, cruor, demilune) + xi.abyssea.visionsCruorProspectorOnTrigger(player,npc) end entity.onEventUpdate = function(player, csid, option) end entity.onEventFinish = function(player, csid, option) - local itemCategory = bit.band(option, 0x07) - local itemSelected = bit.band(bit.rshift(option, 16), 0x1F) - local cruorTotal = player:getCurrency("cruor") - - if itemCategory == itemType.ITEM then - local itemData = prospectorItems[itemCategory][itemSelected] - local itemQty = itemData[1] ~= xi.items.FORBIDDEN_KEY and 1 or bit.rshift(option, 24) - local itemCost = itemData[2] * itemQty - - if - itemCost <= cruorTotal and - npcUtil.giveItem(player, {{ itemData[1], itemQty }}) - then - player:delCurrency("cruor", itemCost) - end - elseif itemCategory == itemType.TEMP then - local itemData = prospectorItems[itemCategory][itemSelected] - local itemCost = itemData[2] - - if - itemCost <= cruorTotal and - npcUtil.giveTempItem(player, {{ itemData[1], 1 }}) - then - player:delCurrency("cruor", itemCost) - end - elseif itemCategory == itemType.KEYITEM then - local itemData = prospectorItems[itemCategory][itemSelected] - - if - itemData[2] <= cruorTotal and - npcUtil.giveKeyItem(player, itemData[1]) - then - player:delCurrency("cruor", itemData[2]) - end - elseif itemCategory == itemType.ENHANCEMENT then - local enhanceData = prospectorItems[itemCategory][itemSelected] - - if enhanceData <= cruorTotal then - for _, v in ipairs(enhanceData[1]) do - player:addStatusEffectEx(v[1], v[2], v[3] + xi.abyssea.getAbyssiteTotal(player, v[4]) * v[5]) - - if v[1] == xi.effect.ABYSSEA_HP then - player:addHP(v[3] + xi.abyssea.getAbyssiteTotal(player, v[4]) * v[5]) - elseif v[1] == xi.effect.ABYSSEA_MP then - player:addMP(v[3] + xi.abyssea.getAbyssiteTotal(player, v[4]) * v[5]) - end - end - - player:delCurrency("cruor", enhanceData[2]) - end - end + xi.abyssea.visionsCruorProspectorOnEventFinish(player, csid, option, localProspectorItems) end return entity diff --git a/scripts/zones/Abyssea-Konschtat/npcs/qm_alkonost.lua b/scripts/zones/Abyssea-Konschtat/npcs/qm_alkonost.lua index bfa1893655a..856488178c3 100644 --- a/scripts/zones/Abyssea-Konschtat/npcs/qm_alkonost.lua +++ b/scripts/zones/Abyssea-Konschtat/npcs/qm_alkonost.lua @@ -4,13 +4,13 @@ -- Spawns Alkonost -- !pos 54.000 30.654 414.000 15 ----------------------------------- +local ID = require('scripts/zones/Abyssea-Konschtat/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.ALKONOST, { xi.items.GIANT_BUGARD_TUSK }) end diff --git a/scripts/zones/Abyssea-Konschtat/npcs/qm_arimaspi.lua b/scripts/zones/Abyssea-Konschtat/npcs/qm_arimaspi.lua index cc95a08cb00..f5f055bb332 100644 --- a/scripts/zones/Abyssea-Konschtat/npcs/qm_arimaspi.lua +++ b/scripts/zones/Abyssea-Konschtat/npcs/qm_arimaspi.lua @@ -4,13 +4,13 @@ -- Spawns Arimaspi -- !pos 438.000 31.922 358.000 15 ----------------------------------- +local ID = require('scripts/zones/Abyssea-Konschtat/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.ARIMASPI, { xi.items.CLOUDED_LENS }) end diff --git a/scripts/zones/Abyssea-Konschtat/npcs/qm_ashtaerh_the_gallvexed.lua b/scripts/zones/Abyssea-Konschtat/npcs/qm_ashtaerh_the_gallvexed.lua index 58322bcbd59..97bcacf66df 100644 --- a/scripts/zones/Abyssea-Konschtat/npcs/qm_ashtaerh_the_gallvexed.lua +++ b/scripts/zones/Abyssea-Konschtat/npcs/qm_ashtaerh_the_gallvexed.lua @@ -4,13 +4,13 @@ -- Spawns Ashtaerh the Gallvexed -- !pos 360.000 -16.043 -400.000 15 ----------------------------------- +local ID = require('scripts/zones/Abyssea-Konschtat/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.ASHTAERH_THE_GALLVEXED, { xi.items.MURMURING_GLOBULE }) end diff --git a/scripts/zones/Abyssea-Konschtat/npcs/qm_bloodeye_vileberry.lua b/scripts/zones/Abyssea-Konschtat/npcs/qm_bloodeye_vileberry.lua index 86b5cd7c180..db824c5ff16 100644 --- a/scripts/zones/Abyssea-Konschtat/npcs/qm_bloodeye_vileberry.lua +++ b/scripts/zones/Abyssea-Konschtat/npcs/qm_bloodeye_vileberry.lua @@ -6,17 +6,16 @@ -- !pos 539.000 24.198 714.000 15 -- !pos 554.000 23.098 699.000 15 ----------------------------------- +local ID = require('scripts/zones/Abyssea-Konschtat/IDs') require('scripts/globals/abyssea') require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrigger(player, npc, ID.mob.BLOODEYE_VILEBERRY_1, { xi.ki.TWISTED_TONBERRY_CROWN }) end diff --git a/scripts/zones/Abyssea-Konschtat/npcs/qm_bloodguzzler.lua b/scripts/zones/Abyssea-Konschtat/npcs/qm_bloodguzzler.lua index ae97c86f2b0..6022ad266ea 100644 --- a/scripts/zones/Abyssea-Konschtat/npcs/qm_bloodguzzler.lua +++ b/scripts/zones/Abyssea-Konschtat/npcs/qm_bloodguzzler.lua @@ -4,13 +4,13 @@ -- Spawns Bloodguzzler -- !pos -155.000 64.117 590.000 15 ----------------------------------- +local ID = require('scripts/zones/Abyssea-Konschtat/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.BLOODGUZZLER, { xi.items.VIAL_OF_EFT_BLOOD }) end diff --git a/scripts/zones/Abyssea-Konschtat/npcs/qm_bombadeel.lua b/scripts/zones/Abyssea-Konschtat/npcs/qm_bombadeel.lua index b408abff194..13d61cc5d4c 100644 --- a/scripts/zones/Abyssea-Konschtat/npcs/qm_bombadeel.lua +++ b/scripts/zones/Abyssea-Konschtat/npcs/qm_bombadeel.lua @@ -4,13 +4,13 @@ -- Spawns Bombadeel -- !pos -358.000 8.000 -42.000 15 ----------------------------------- +local ID = require('scripts/zones/Abyssea-Konschtat/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.BOMBADEEL, { xi.items.CLUMP_OF_SNAKESKIN_MOSS }) end diff --git a/scripts/zones/Abyssea-Konschtat/npcs/qm_clingy_clare.lua b/scripts/zones/Abyssea-Konschtat/npcs/qm_clingy_clare.lua index 0ac932acae6..898d10b76cf 100644 --- a/scripts/zones/Abyssea-Konschtat/npcs/qm_clingy_clare.lua +++ b/scripts/zones/Abyssea-Konschtat/npcs/qm_clingy_clare.lua @@ -4,13 +4,13 @@ -- Spawns Clingy Clare -- !pos 150.000 17.601 90.000 15 ----------------------------------- +local ID = require('scripts/zones/Abyssea-Konschtat/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.CLINGY_CLARE, { xi.items.TINY_MORBOL_VINE }) end diff --git a/scripts/zones/Abyssea-Konschtat/npcs/qm_eccentric_eve.lua b/scripts/zones/Abyssea-Konschtat/npcs/qm_eccentric_eve.lua index 2f84485953e..dc84798ee77 100644 --- a/scripts/zones/Abyssea-Konschtat/npcs/qm_eccentric_eve.lua +++ b/scripts/zones/Abyssea-Konschtat/npcs/qm_eccentric_eve.lua @@ -4,17 +4,16 @@ -- Spawns Eccentric Eve -- !pos 230.413 32.278 280.677 15 ----------------------------------- +local ID = require('scripts/zones/Abyssea-Konschtat/IDs') require('scripts/globals/abyssea') require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrigger(player, npc, ID.mob.ECCENTRIC_EVE_1, { xi.ki.FRAGRANT_TREANT_PETAL, xi.ki.FETID_RAFFLESIA_STALK, xi.ki.DECAYING_MORBOL_TOOTH, xi.ki.TURBID_SLIME_OIL, xi.ki.VENOMOUS_PEISTE_CLAW }) end diff --git a/scripts/zones/Abyssea-Konschtat/npcs/qm_fear_gorta.lua b/scripts/zones/Abyssea-Konschtat/npcs/qm_fear_gorta.lua index f88d1625ef1..fd6175d4c59 100644 --- a/scripts/zones/Abyssea-Konschtat/npcs/qm_fear_gorta.lua +++ b/scripts/zones/Abyssea-Konschtat/npcs/qm_fear_gorta.lua @@ -4,13 +4,13 @@ -- Spawns Fear Gorta -- !pos 630.000 33.608 410.000 15 ----------------------------------- +local ID = require('scripts/zones/Abyssea-Konschtat/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.FEAR_GORTA, { xi.items.SQUARE_OF_MOONGLOW_CLOTH }) end diff --git a/scripts/zones/Abyssea-Konschtat/npcs/qm_hexenpilz.lua b/scripts/zones/Abyssea-Konschtat/npcs/qm_hexenpilz.lua index c0a525a31ed..98d3bb08695 100644 --- a/scripts/zones/Abyssea-Konschtat/npcs/qm_hexenpilz.lua +++ b/scripts/zones/Abyssea-Konschtat/npcs/qm_hexenpilz.lua @@ -4,13 +4,13 @@ -- Spawns Hexenpilz -- !pos -182.000 2.858 32.000 15 ----------------------------------- +local ID = require('scripts/zones/Abyssea-Konschtat/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.HEXENPILZ, { xi.items.OBLIVISPORE_MUSHROOM }) end diff --git a/scripts/zones/Abyssea-Konschtat/npcs/qm_keratyrannos.lua b/scripts/zones/Abyssea-Konschtat/npcs/qm_keratyrannos.lua index e0941a91bc0..96dfdacb2c9 100644 --- a/scripts/zones/Abyssea-Konschtat/npcs/qm_keratyrannos.lua +++ b/scripts/zones/Abyssea-Konschtat/npcs/qm_keratyrannos.lua @@ -4,13 +4,13 @@ -- Spawns Keratyrannos -- !pos -134.000 47.371 416.000 15 ----------------------------------- +local ID = require('scripts/zones/Abyssea-Konschtat/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.KERATYRANNOS, { xi.items.ARMORED_DRAGONHORN }) end diff --git a/scripts/zones/Abyssea-Konschtat/npcs/qm_kukulkan.lua b/scripts/zones/Abyssea-Konschtat/npcs/qm_kukulkan.lua index b98a4632748..794f3b36461 100644 --- a/scripts/zones/Abyssea-Konschtat/npcs/qm_kukulkan.lua +++ b/scripts/zones/Abyssea-Konschtat/npcs/qm_kukulkan.lua @@ -6,17 +6,16 @@ -- !pos -40.000 68.692 575.000 15 -- !pos -25.000 68.792 560.000 15 ----------------------------------- +local ID = require('scripts/zones/Abyssea-Konschtat/IDs') require('scripts/globals/abyssea') require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrigger(player, npc, ID.mob.KUKULKAN_1, { xi.ki.TATTERED_HIPPOGRYPH_WING, xi.ki.CRACKED_WIVRE_HORN, xi.ki.MUCID_AHRIMAN_EYEBALL }) end diff --git a/scripts/zones/Abyssea-Konschtat/npcs/qm_lentor.lua b/scripts/zones/Abyssea-Konschtat/npcs/qm_lentor.lua index f0d7fa3b2f2..43016287b9e 100644 --- a/scripts/zones/Abyssea-Konschtat/npcs/qm_lentor.lua +++ b/scripts/zones/Abyssea-Konschtat/npcs/qm_lentor.lua @@ -4,13 +4,13 @@ -- Spawns Lentor -- !pos -248.000 47.971 403.000 15 ----------------------------------- +local ID = require('scripts/zones/Abyssea-Konschtat/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.LENTOR, { xi.items.GIANT_SLUG_EYESTALK }) end diff --git a/scripts/zones/Abyssea-Konschtat/npcs/qm_sarcophilus.lua b/scripts/zones/Abyssea-Konschtat/npcs/qm_sarcophilus.lua index e96b00ea0bf..1e5dce332c2 100644 --- a/scripts/zones/Abyssea-Konschtat/npcs/qm_sarcophilus.lua +++ b/scripts/zones/Abyssea-Konschtat/npcs/qm_sarcophilus.lua @@ -4,13 +4,13 @@ -- Spawns Sarcophilus -- !pos -235.000 -15.882 -120.000 15 ----------------------------------- +local ID = require('scripts/zones/Abyssea-Konschtat/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.SARCOPHILUS, { xi.items.RIPPED_EFT_SKIN }) end diff --git a/scripts/zones/Abyssea-Konschtat/npcs/qm_siranpa-kamuy.lua b/scripts/zones/Abyssea-Konschtat/npcs/qm_siranpa-kamuy.lua index 3f9909e14f9..5aeb82b2a64 100644 --- a/scripts/zones/Abyssea-Konschtat/npcs/qm_siranpa-kamuy.lua +++ b/scripts/zones/Abyssea-Konschtat/npcs/qm_siranpa-kamuy.lua @@ -4,13 +4,13 @@ -- Spawns Siranpa-Kamuy -- !pos 370.000 1.601 10.000 15 ----------------------------------- +local ID = require('scripts/zones/Abyssea-Konschtat/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.SIRANPA_KAMUY, { xi.items.ROTTING_EYEBALL }) end diff --git a/scripts/zones/Abyssea-La_Theine/IDs.lua b/scripts/zones/Abyssea-La_Theine/IDs.lua index 919bf7eeef3..b5d8d2dd1fc 100644 --- a/scripts/zones/Abyssea-La_Theine/IDs.lua +++ b/scripts/zones/Abyssea-La_Theine/IDs.lua @@ -117,7 +117,6 @@ zones[xi.zone.ABYSSEA_LA_THEINE] = -- [17318492] = {'qm20', {}, {xi.ki.PELLUCID_FLY_EYE, xi.ki.SHIMMERING_PIXIE_PINION}, 17318460}, -- Carabosse -- [17318493] = {'qm21', {}, {xi.ki.MARBLED_MUTTON_CHOP, xi.ki.BLOODIED_SABER_TOOTH, xi.ki.GLITTERING_PIXIE_CHOKER, xi.ki.BLOOD_SMEARED_GIGAS_HELM}, 17318461}, -- Hadhayosh }, - STURDY_PYXIS_BASE = 17318509, }, } diff --git a/scripts/zones/Abyssea-La_Theine/npcs/Cruor_Prospector.lua b/scripts/zones/Abyssea-La_Theine/npcs/Cruor_Prospector.lua index e3e162d13c6..ea998d0fa9f 100644 --- a/scripts/zones/Abyssea-La_Theine/npcs/Cruor_Prospector.lua +++ b/scripts/zones/Abyssea-La_Theine/npcs/Cruor_Prospector.lua @@ -7,60 +7,17 @@ require("scripts/globals/abyssea") require("scripts/globals/keyitems") require("scripts/globals/status") +require("scripts/globals/settings") ----------------------------------- local entity = {} -local itemType = -{ - ITEM = 1, - TEMP = 2, - KEYITEM = 3, - ENHANCEMENT = 4, -} +local itemType = xi.abyssea.itemType -local prospectorItems = +local localProspectorItems = { - [itemType.ITEM] = - {-- Sel Item Cost, Qty - [ 1] = { xi.items.PERLE_SALADE, 4000 }, - [ 2] = { xi.items.PERLE_HAUBERK, 5000 }, - [ 3] = { xi.items.PERLE_MOUFLES, 3000 }, - [ 4] = { xi.items.PERLE_BRAYETTES, 3000 }, - [ 5] = { xi.items.PERLE_SOLLERETS, 3000 }, - [ 6] = { xi.items.AURORE_BERET, 4000 }, - [ 7] = { xi.items.AURORE_DOUBLET, 5000 }, - [ 8] = { xi.items.AURORE_GLOVES, 3000 }, - [ 9] = { xi.items.AURORE_BRAIS, 3000 }, - [10] = { xi.items.AURORE_GAITERS, 3000 }, - [11] = { xi.items.TEAL_CHAPEAU, 4000 }, - [12] = { xi.items.TEAL_SAIO, 5000 }, - [13] = { xi.items.TEAL_CUFFS, 3000 }, - [14] = { xi.items.TEAL_SLOPS, 3000 }, - [15] = { xi.items.TEAL_PIGACHES, 3000 }, - [16] = { xi.items.FORBIDDEN_KEY, 500 }, - [17] = { xi.items.SHADOW_THRONE, 2000000 }, - }, + [itemType.ITEM] = xi.abyssea.visionsCruorProspectorItems, - [itemType.TEMP] = - {-- Sel Item Cost, Qty - [ 1] = { xi.items.LUCID_POTION_I, 80 }, - [ 2] = { xi.items.LUCID_ETHER_I, 80 }, - [ 3] = { xi.items.BOTTLE_OF_CATHOLICON, 80 }, - [ 4] = { xi.items.DUSTY_ELIXIR, 120 }, - [ 5] = { xi.items.TUBE_OF_CLEAR_SALVE_I, 120 }, - [ 6] = { xi.items.BOTTLE_OF_STALWARTS_TONIC, 150 }, - [ 7] = { xi.items.BOTTLE_OF_ASCETICS_TONIC, 150 }, - [ 8] = { xi.items.BOTTLE_OF_CHAMPIONS_TONIC, 150 }, - [ 9] = { xi.items.LUCID_POTION_II, 200 }, - [10] = { xi.items.LUCID_ETHER_II, 200 }, - [11] = { xi.items.LUCID_ELIXIR_I, 300 }, - [12] = { xi.items.FLASK_OF_HEALING_POWDER, 300 }, - [13] = { xi.items.PINCH_OF_MANA_POWDER, 300 }, - [14] = { xi.items.TUBE_OF_HEALING_SALVE_I, 300 }, - [15] = { xi.items.BOTTLE_OF_VICARS_DRINK, 300 }, - [16] = { xi.items.TUBE_OF_CLEAR_SALVE_II, 300 }, - [17] = { xi.items.PRIMEVAL_BREW, 2000000 }, - }, + [itemType.TEMP] = xi.abyssea.visionsCruorProspectorTemps, [itemType.KEYITEM] = {-- Sel Item Cost @@ -71,94 +28,21 @@ local prospectorItems = [5] = { xi.ki.CLEAR_DEMILUNE_ABYSSITE, 300 }, }, - [itemType.ENHANCEMENT] = - {-- Sel Effect (Abyssea) Actual Effect Amt, KeyItem for Bonus, Bonus Mult Cost - [ 6] = { { { xi.effect.ABYSSEA_HP, xi.effect.MAX_HP_BOOST, 20, xi.abyssea.abyssiteType.MERIT, 10 }, }, 50 }, - [ 7] = { { { xi.effect.ABYSSEA_MP, xi.effect.MAX_MP_BOOST, 10, xi.abyssea.abyssiteType.MERIT, 5 }, }, 120 }, - [ 8] = { { { xi.effect.ABYSSEA_STR, xi.effect.STR_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_DEX, xi.effect.DEX_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, }, 120 }, - [ 9] = { { { xi.effect.ABYSSEA_VIT, xi.effect.VIT_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_AGI, xi.effect.AGI_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, }, 100 }, - [10] = { { { xi.effect.ABYSSEA_INT, xi.effect.INT_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_CHR, xi.effect.CHR_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_MND, xi.effect.MND_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, }, 100 }, - [11] = { { { xi.effect.ABYSSEA_HP, xi.effect.MAX_HP_BOOST, 20, xi.abyssea.abyssiteType.MERIT, 10 }, - { xi.effect.ABYSSEA_MP, xi.effect.MAX_MP_BOOST, 10, xi.abyssea.abyssiteType.MERIT, 5 }, - { xi.effect.ABYSSEA_STR, xi.effect.STR_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_DEX, xi.effect.DEX_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_VIT, xi.effect.VIT_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_AGI, xi.effect.AGI_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_INT, xi.effect.INT_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_CHR, xi.effect.CHR_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_MND, xi.effect.MND_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, }, 470 }, - }, + [itemType.ENHANCEMENT] = xi.abyssea.visionsCruorProspectorBuffs, } entity.onTrade = function(player, npc, trade) end entity.onTrigger = function(player, npc) - local cruor = player:getCurrency("cruor") - local demilune = xi.abyssea.getDemiluneAbyssite(player) - - player:startEvent(2002, cruor, demilune) + xi.abyssea.visionsCruorProspectorOnTrigger(player,npc) end entity.onEventUpdate = function(player, csid, option) end entity.onEventFinish = function(player, csid, option) - local itemCategory = bit.band(option, 0x07) - local itemSelected = bit.band(bit.rshift(option, 16), 0x1F) - local cruorTotal = player:getCurrency("cruor") - - if itemCategory == itemType.ITEM then - local itemData = prospectorItems[itemCategory][itemSelected] - local itemQty = itemData[1] ~= xi.items.FORBIDDEN_KEY and 1 or bit.rshift(option, 24) - local itemCost = itemData[2] * itemQty - - if - itemCost <= cruorTotal and - npcUtil.giveItem(player, {{ itemData[1], itemQty }}) - then - player:delCurrency("cruor", itemCost) - end - elseif itemCategory == itemType.TEMP then - local itemData = prospectorItems[itemCategory][itemSelected] - local itemCost = itemData[2] - - if - itemCost <= cruorTotal and - npcUtil.giveTempItem(player, {{ itemData[1], 1 }}) - then - player:delCurrency("cruor", itemCost) - end - elseif itemCategory == itemType.KEYITEM then - local itemData = prospectorItems[itemCategory][itemSelected] - - if - itemData[2] <= cruorTotal and - npcUtil.giveKeyItem(player, itemData[1]) - then - player:delCurrency("cruor", itemData[2]) - end - elseif itemCategory == itemType.ENHANCEMENT then - local enhanceData = prospectorItems[itemCategory][itemSelected] - - if enhanceData <= cruorTotal then - for _, v in ipairs(enhanceData[1]) do - player:addStatusEffectEx(v[1], v[2], v[3] + xi.abyssea.getAbyssiteTotal(player, v[4]) * v[5]) - - if v[1] == xi.effect.ABYSSEA_HP then - player:addHP(v[3] + xi.abyssea.getAbyssiteTotal(player, v[4]) * v[5]) - elseif v[1] == xi.effect.ABYSSEA_MP then - player:addMP(v[3] + xi.abyssea.getAbyssiteTotal(player, v[4]) * v[5]) - end - end - - player:delCurrency("cruor", enhanceData[2]) - end - end + xi.abyssea.visionsCruorProspectorOnEventFinish(player, csid, option, localProspectorItems) end return entity diff --git a/scripts/zones/Abyssea-La_Theine/npcs/qm_adamastor.lua b/scripts/zones/Abyssea-La_Theine/npcs/qm_adamastor.lua index be099c4b0e0..53b48c6e248 100644 --- a/scripts/zones/Abyssea-La_Theine/npcs/qm_adamastor.lua +++ b/scripts/zones/Abyssea-La_Theine/npcs/qm_adamastor.lua @@ -4,13 +4,13 @@ -- Spawns Adamastor -- !pos -716 15 639 132 ----------------------------------- +local ID = require('scripts/zones/Abyssea-La_Theine/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.ADAMASTOR, { xi.items.TROPHY_SHIELD }) end diff --git a/scripts/zones/Abyssea-La_Theine/npcs/qm_baba_yaga.lua b/scripts/zones/Abyssea-La_Theine/npcs/qm_baba_yaga.lua index 71a9a64b514..0c7e2faafad 100644 --- a/scripts/zones/Abyssea-La_Theine/npcs/qm_baba_yaga.lua +++ b/scripts/zones/Abyssea-La_Theine/npcs/qm_baba_yaga.lua @@ -4,13 +4,13 @@ -- Spawns Baba Yaga -- !pos -74 18 137 132 ----------------------------------- +local ID = require('scripts/zones/Abyssea-La_Theine/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.BABA_YAGA, { xi.items.PICEOUS_SCALE }) end diff --git a/scripts/zones/Abyssea-La_Theine/npcs/qm_briareus.lua b/scripts/zones/Abyssea-La_Theine/npcs/qm_briareus.lua index 2b84c7f93db..4dd05ae0d68 100644 --- a/scripts/zones/Abyssea-La_Theine/npcs/qm_briareus.lua +++ b/scripts/zones/Abyssea-La_Theine/npcs/qm_briareus.lua @@ -4,17 +4,16 @@ -- Spawns Briareus -- !pos -179 7 259 132 ----------------------------------- +local ID = require('scripts/zones/Abyssea-La_Theine/IDs') require('scripts/globals/abyssea') require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrigger(player, npc, ID.mob.BRIAREUS_1, { xi.ki.DENTED_GIGAS_SHIELD, xi.ki.WARPED_GIGAS_ARMBAND, xi.ki.SEVERED_GIGAS_COLLAR }) end diff --git a/scripts/zones/Abyssea-La_Theine/npcs/qm_carabosse.lua b/scripts/zones/Abyssea-La_Theine/npcs/qm_carabosse.lua index 44562e4a56b..4af608d243b 100644 --- a/scripts/zones/Abyssea-La_Theine/npcs/qm_carabosse.lua +++ b/scripts/zones/Abyssea-La_Theine/npcs/qm_carabosse.lua @@ -4,17 +4,16 @@ -- Spawns Carabosse -- !pos 11 17 148 132 ----------------------------------- +local ID = require('scripts/zones/Abyssea-La_Theine/IDs') require('scripts/globals/abyssea') require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrigger(player, npc, ID.mob.CARABOSSE_1, { xi.ki.PELLUCID_FLY_EYE, xi.ki.SHIMMERING_PIXIE_PINION }) end diff --git a/scripts/zones/Abyssea-La_Theine/npcs/qm_dozing_dorian.lua b/scripts/zones/Abyssea-La_Theine/npcs/qm_dozing_dorian.lua index f6eec630d1d..fdc2b613179 100644 --- a/scripts/zones/Abyssea-La_Theine/npcs/qm_dozing_dorian.lua +++ b/scripts/zones/Abyssea-La_Theine/npcs/qm_dozing_dorian.lua @@ -4,13 +4,13 @@ -- Spawns Dozing Dorian -- !pos 703 40 283 132 ----------------------------------- +local ID = require('scripts/zones/Abyssea-La_Theine/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.DOZING_DORIAN, { xi.items.DRIED_CHIGOE }) end diff --git a/scripts/zones/Abyssea-La_Theine/npcs/qm_grandgousier.lua b/scripts/zones/Abyssea-La_Theine/npcs/qm_grandgousier.lua index 0897ae41e36..e694af0a8ec 100644 --- a/scripts/zones/Abyssea-La_Theine/npcs/qm_grandgousier.lua +++ b/scripts/zones/Abyssea-La_Theine/npcs/qm_grandgousier.lua @@ -4,13 +4,13 @@ -- Spawns Grandgousier -- !pos -398 .010 -322 132 ----------------------------------- +local ID = require('scripts/zones/Abyssea-La_Theine/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.GRANDGOUSIER, { xi.items.MASSIVE_ARMBAND }) end diff --git a/scripts/zones/Abyssea-La_Theine/npcs/qm_hadhayosh.lua b/scripts/zones/Abyssea-La_Theine/npcs/qm_hadhayosh.lua index cb58c705eb3..6b60beb756d 100644 --- a/scripts/zones/Abyssea-La_Theine/npcs/qm_hadhayosh.lua +++ b/scripts/zones/Abyssea-La_Theine/npcs/qm_hadhayosh.lua @@ -4,17 +4,16 @@ -- Spawns Hadhayosh -- !pos 434 24 41 132 ----------------------------------- +local ID = require('scripts/zones/Abyssea-La_Theine/IDs') require('scripts/globals/abyssea') require('scripts/globals/keyitems') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - -- xi.abyssea.qmOnTrade(player, npc, trade) end entity.onTrigger = function(player, npc) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrigger(player, npc, ID.mob.HADHAYOSH_1, { xi.ki.MARBLED_MUTTON_CHOP, xi.ki.BLOODIED_SABER_TOOTH, xi.ki.GLITTERING_PIXIE_CHOKER, xi.ki.BLOOD_SMEARED_GIGAS_HELM }) end diff --git a/scripts/zones/Abyssea-La_Theine/npcs/qm_la_theine_liege.lua b/scripts/zones/Abyssea-La_Theine/npcs/qm_la_theine_liege.lua index 07e3f52b19d..eac7f376d2d 100644 --- a/scripts/zones/Abyssea-La_Theine/npcs/qm_la_theine_liege.lua +++ b/scripts/zones/Abyssea-La_Theine/npcs/qm_la_theine_liege.lua @@ -4,13 +4,13 @@ -- Spawns La Theine Liege -- !pos 80 15 199 132 ----------------------------------- +local ID = require('scripts/zones/Abyssea-La_Theine/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.LA_THEINE_LIEGE, { xi.items.TRANSPARENT_INSECT_WING }) end diff --git a/scripts/zones/Abyssea-La_Theine/npcs/qm_lugarhoo.lua b/scripts/zones/Abyssea-La_Theine/npcs/qm_lugarhoo.lua index acf43d29958..4c84a752436 100644 --- a/scripts/zones/Abyssea-La_Theine/npcs/qm_lugarhoo.lua +++ b/scripts/zones/Abyssea-La_Theine/npcs/qm_lugarhoo.lua @@ -4,13 +4,13 @@ -- Spawns Lugarhoo -- !pos -85 24 -513 132 ----------------------------------- +local ID = require('scripts/zones/Abyssea-La_Theine/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.LUGARHOO, { xi.items.FILTHY_GNOLE_CLAW }) end diff --git a/scripts/zones/Abyssea-La_Theine/npcs/qm_megantereon.lua b/scripts/zones/Abyssea-La_Theine/npcs/qm_megantereon.lua index af4b72d26c1..5ed81cd6573 100644 --- a/scripts/zones/Abyssea-La_Theine/npcs/qm_megantereon.lua +++ b/scripts/zones/Abyssea-La_Theine/npcs/qm_megantereon.lua @@ -4,13 +4,13 @@ -- Spawns Megantereon -- !pos -764 -8 121 132 ----------------------------------- +local ID = require('scripts/zones/Abyssea-La_Theine/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.MEGANTEREON, { xi.items.GARGANTUAN_BLACK_TIGER_FANG }) end diff --git a/scripts/zones/Abyssea-La_Theine/npcs/qm_nguruvilu.lua b/scripts/zones/Abyssea-La_Theine/npcs/qm_nguruvilu.lua index 72bad88bec9..49fac1c5805 100644 --- a/scripts/zones/Abyssea-La_Theine/npcs/qm_nguruvilu.lua +++ b/scripts/zones/Abyssea-La_Theine/npcs/qm_nguruvilu.lua @@ -4,13 +4,13 @@ -- Spawns Nguruvilu -- !pos 311 23 -524 132 ----------------------------------- +local ID = require('scripts/zones/Abyssea-La_Theine/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.NGURUVILU, { xi.items.WINTER_PUK_EGG }) end diff --git a/scripts/zones/Abyssea-La_Theine/npcs/qm_pantagruel.lua b/scripts/zones/Abyssea-La_Theine/npcs/qm_pantagruel.lua index 19bb3c2f4e8..e3895aade05 100644 --- a/scripts/zones/Abyssea-La_Theine/npcs/qm_pantagruel.lua +++ b/scripts/zones/Abyssea-La_Theine/npcs/qm_pantagruel.lua @@ -4,13 +4,13 @@ -- Spawns Pantagruel -- !pos -356 8 163 132 ----------------------------------- +local ID = require('scripts/zones/Abyssea-La_Theine/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.PANTAGRUEL, { xi.items.OVERSIZED_SOCK }) end diff --git a/scripts/zones/Abyssea-La_Theine/npcs/qm_poroggo_dom_juan.lua b/scripts/zones/Abyssea-La_Theine/npcs/qm_poroggo_dom_juan.lua index 11f88aea867..75f77771490 100644 --- a/scripts/zones/Abyssea-La_Theine/npcs/qm_poroggo_dom_juan.lua +++ b/scripts/zones/Abyssea-La_Theine/npcs/qm_poroggo_dom_juan.lua @@ -4,13 +4,13 @@ -- Spawns Poroggo Dom Juan -- !pos 405.785 26.404 -543.056 132 ----------------------------------- +local ID = require('scripts/zones/Abyssea-La_Theine/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.POROGGO_DOM_JUAN, { xi.items.BUG_EATEN_HAT }) end diff --git a/scripts/zones/Abyssea-La_Theine/npcs/qm_toppling_tuber.lua b/scripts/zones/Abyssea-La_Theine/npcs/qm_toppling_tuber.lua index 107fa80bb8c..ac071d883c2 100644 --- a/scripts/zones/Abyssea-La_Theine/npcs/qm_toppling_tuber.lua +++ b/scripts/zones/Abyssea-La_Theine/npcs/qm_toppling_tuber.lua @@ -4,13 +4,13 @@ -- Spawns Toppling Tuber -- !pos -325 38 201 132 ----------------------------------- +local ID = require('scripts/zones/Abyssea-La_Theine/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.TOPPLING_TUBER, { xi.items.GIANT_AGARICUS_MUSHROOM }) end diff --git a/scripts/zones/Abyssea-La_Theine/npcs/qm_trudging_thomas.lua b/scripts/zones/Abyssea-La_Theine/npcs/qm_trudging_thomas.lua index e54ee5f2ab6..249d7b00158 100644 --- a/scripts/zones/Abyssea-La_Theine/npcs/qm_trudging_thomas.lua +++ b/scripts/zones/Abyssea-La_Theine/npcs/qm_trudging_thomas.lua @@ -4,13 +4,13 @@ -- Spawns Trudging Thomas -- !pos 278 24 -82 132 ----------------------------------- +local ID = require('scripts/zones/Abyssea-La_Theine/IDs') require('scripts/globals/abyssea') require('scripts/globals/items') ----------------------------------- local entity = {} entity.onTrade = function(player, npc, trade) - local ID = zones[player:getZoneID()] xi.abyssea.qmOnTrade(player, npc, trade, ID.mob.TRUDGING_THOMAS, { xi.items.RAW_MUTTON_CHOP }) end diff --git a/scripts/zones/Abyssea-Misareaux/IDs.lua b/scripts/zones/Abyssea-Misareaux/IDs.lua index 9d38221c9f6..0213eaefea1 100644 --- a/scripts/zones/Abyssea-Misareaux/IDs.lua +++ b/scripts/zones/Abyssea-Misareaux/IDs.lua @@ -99,7 +99,6 @@ zones[xi.zone.ABYSSEA_MISAREAUX] = -- [17662578] = {'qm23', {}, {xi.ki.BLOODSTAINED_BUGARD_FANG, xi.ki.GNARLED_LIZARD_NAIL, xi.ki.MOLTED_PEISTE_SKIN}, 17662488}, -- Sobek -- [17662579] = {'qm24', {}, {xi.ki.BLAZING_CLUSTER_SOUL, xi.ki.SCALDING_IRONCLAD_SPIKE}, 17662489}, -- Ironclad Pulverizor }, - STURDY_PYXIS_BASE = 17662595, }, } diff --git a/scripts/zones/Abyssea-Tahrongi/IDs.lua b/scripts/zones/Abyssea-Tahrongi/IDs.lua index edc0e6c663f..12749ab45ba 100644 --- a/scripts/zones/Abyssea-Tahrongi/IDs.lua +++ b/scripts/zones/Abyssea-Tahrongi/IDs.lua @@ -96,7 +96,6 @@ zones[xi.zone.ABYSSEA_TAHRONGI] = -- [16961973] = {'qm20', {}, {xi.ki.FAT_LINED_COCKATRICE_SKIN, xi.ki.SODDEN_SANDWORM_HUSK, xi.ki.LUXURIANT_MANTICORE_MANE, xi.ki.STICKY_GNAT_WING}, 16961950}, -- Glavoid -- [16961974] = {'qm21', {}, {xi.ki.OVERGROWN_MANDRAGORA_FLOWER, xi.ki.CHIPPED_SANDWORM_TOOTH}, 16961951}, -- Lacovie }, - STURDY_PYXIS_BASE = 16961991, }, } diff --git a/scripts/zones/Abyssea-Tahrongi/npcs/Cruor_Prospector.lua b/scripts/zones/Abyssea-Tahrongi/npcs/Cruor_Prospector.lua index 01ae48ddca7..e2100793484 100644 --- a/scripts/zones/Abyssea-Tahrongi/npcs/Cruor_Prospector.lua +++ b/scripts/zones/Abyssea-Tahrongi/npcs/Cruor_Prospector.lua @@ -7,60 +7,17 @@ require("scripts/globals/abyssea") require("scripts/globals/keyitems") require("scripts/globals/status") +require("scripts/globals/settings") ----------------------------------- local entity = {} -local itemType = -{ - ITEM = 1, - TEMP = 2, - KEYITEM = 3, - ENHANCEMENT = 4, -} +local itemType = xi.abyssea.itemType -local prospectorItems = +local localProspectorItems = { - [itemType.ITEM] = - {-- Sel Item Cost, Qty - [ 1] = { xi.items.PERLE_SALADE, 4000 }, - [ 2] = { xi.items.PERLE_HAUBERK, 5000 }, - [ 3] = { xi.items.PERLE_MOUFLES, 3000 }, - [ 4] = { xi.items.PERLE_BRAYETTES, 3000 }, - [ 5] = { xi.items.PERLE_SOLLERETS, 3000 }, - [ 6] = { xi.items.AURORE_BERET, 4000 }, - [ 7] = { xi.items.AURORE_DOUBLET, 5000 }, - [ 8] = { xi.items.AURORE_GLOVES, 3000 }, - [ 9] = { xi.items.AURORE_BRAIS, 3000 }, - [10] = { xi.items.AURORE_GAITERS, 3000 }, - [11] = { xi.items.TEAL_CHAPEAU, 4000 }, - [12] = { xi.items.TEAL_SAIO, 5000 }, - [13] = { xi.items.TEAL_CUFFS, 3000 }, - [14] = { xi.items.TEAL_SLOPS, 3000 }, - [15] = { xi.items.TEAL_PIGACHES, 3000 }, - [16] = { xi.items.FORBIDDEN_KEY, 500 }, - [17] = { xi.items.SHADOW_THRONE, 2000000 }, - }, + [itemType.ITEM] = xi.abyssea.visionsCruorProspectorItems, - [itemType.TEMP] = - {-- Sel Item Cost, Qty - [ 1] = { xi.items.LUCID_POTION_I, 80 }, - [ 2] = { xi.items.LUCID_ETHER_I, 80 }, - [ 3] = { xi.items.BOTTLE_OF_CATHOLICON, 80 }, - [ 4] = { xi.items.DUSTY_ELIXIR, 120 }, - [ 5] = { xi.items.TUBE_OF_CLEAR_SALVE_I, 120 }, - [ 6] = { xi.items.BOTTLE_OF_STALWARTS_TONIC, 150 }, - [ 7] = { xi.items.BOTTLE_OF_ASCETICS_TONIC, 150 }, - [ 8] = { xi.items.BOTTLE_OF_CHAMPIONS_TONIC, 150 }, - [ 9] = { xi.items.LUCID_POTION_II, 200 }, - [10] = { xi.items.LUCID_ETHER_II, 200 }, - [11] = { xi.items.LUCID_ELIXIR_I, 300 }, - [12] = { xi.items.FLASK_OF_HEALING_POWDER, 300 }, - [13] = { xi.items.PINCH_OF_MANA_POWDER, 300 }, - [14] = { xi.items.TUBE_OF_HEALING_SALVE_I, 300 }, - [15] = { xi.items.BOTTLE_OF_VICARS_DRINK, 300 }, - [16] = { xi.items.TUBE_OF_CLEAR_SALVE_II, 300 }, - [17] = { xi.items.PRIMEVAL_BREW, 2000000 }, - }, + [itemType.TEMP] = xi.abyssea.visionsCruorProspectorTemps, [itemType.KEYITEM] = {-- Sel Item Cost @@ -71,94 +28,21 @@ local prospectorItems = [5] = { xi.ki.CLEAR_DEMILUNE_ABYSSITE, 300 }, }, - [itemType.ENHANCEMENT] = - {-- Sel Effect (Abyssea) Actual Effect Amt, KeyItem for Bonus, Bonus Mult Cost - [ 6] = { { { xi.effect.ABYSSEA_HP, xi.effect.MAX_HP_BOOST, 20, xi.abyssea.abyssiteType.MERIT, 10 }, }, 50 }, - [ 7] = { { { xi.effect.ABYSSEA_MP, xi.effect.MAX_MP_BOOST, 10, xi.abyssea.abyssiteType.MERIT, 5 }, }, 120 }, - [ 8] = { { { xi.effect.ABYSSEA_STR, xi.effect.STR_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_DEX, xi.effect.DEX_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, }, 120 }, - [ 9] = { { { xi.effect.ABYSSEA_VIT, xi.effect.VIT_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_AGI, xi.effect.AGI_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, }, 100 }, - [10] = { { { xi.effect.ABYSSEA_INT, xi.effect.INT_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_CHR, xi.effect.CHR_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_MND, xi.effect.MND_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, }, 100 }, - [11] = { { { xi.effect.ABYSSEA_HP, xi.effect.MAX_HP_BOOST, 20, xi.abyssea.abyssiteType.MERIT, 10 }, - { xi.effect.ABYSSEA_MP, xi.effect.MAX_MP_BOOST, 10, xi.abyssea.abyssiteType.MERIT, 5 }, - { xi.effect.ABYSSEA_STR, xi.effect.STR_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_DEX, xi.effect.DEX_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_VIT, xi.effect.VIT_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_AGI, xi.effect.AGI_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_INT, xi.effect.INT_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_CHR, xi.effect.CHR_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, - { xi.effect.ABYSSEA_MND, xi.effect.MND_BOOST, 10, xi.abyssea.abyssiteType.FURTHERANCE, 10 }, }, 470 }, - }, + [itemType.ENHANCEMENT] = xi.abyssea.visionsCruorProspectorBuffs, } entity.onTrade = function(player, npc, trade) end entity.onTrigger = function(player, npc) - local cruor = player:getCurrency("cruor") - local demilune = xi.abyssea.getDemiluneAbyssite(player) - - player:startEvent(2002, cruor, demilune) + xi.abyssea.visionsCruorProspectorOnTrigger(player,npc) end entity.onEventUpdate = function(player, csid, option) end entity.onEventFinish = function(player, csid, option) - local itemCategory = bit.band(option, 0x07) - local itemSelected = bit.band(bit.rshift(option, 16), 0x1F) - local cruorTotal = player:getCurrency("cruor") - - if itemCategory == itemType.ITEM then - local itemData = prospectorItems[itemCategory][itemSelected] - local itemQty = itemData[1] ~= xi.items.FORBIDDEN_KEY and 1 or bit.rshift(option, 24) - local itemCost = itemData[2] * itemQty - - if - itemCost <= cruorTotal and - npcUtil.giveItem(player, {{ itemData[1], itemQty }}) - then - player:delCurrency("cruor", itemCost) - end - elseif itemCategory == itemType.TEMP then - local itemData = prospectorItems[itemCategory][itemSelected] - local itemCost = itemData[2] - - if - itemCost <= cruorTotal and - npcUtil.giveTempItem(player, {{ itemData[1], 1 }}) - then - player:delCurrency("cruor", itemCost) - end - elseif itemCategory == itemType.KEYITEM then - local itemData = prospectorItems[itemCategory][itemSelected] - - if - itemData[2] <= cruorTotal and - npcUtil.giveKeyItem(player, itemData[1]) - then - player:delCurrency("cruor", itemData[2]) - end - elseif itemCategory == itemType.ENHANCEMENT then - local enhanceData = prospectorItems[itemCategory][itemSelected] - - if enhanceData <= cruorTotal then - for _, v in ipairs(enhanceData[1]) do - player:addStatusEffectEx(v[1], v[2], v[3] + xi.abyssea.getAbyssiteTotal(player, v[4]) * v[5]) - - if v[1] == xi.effect.ABYSSEA_HP then - player:addHP(v[3] + xi.abyssea.getAbyssiteTotal(player, v[4]) * v[5]) - elseif v[1] == xi.effect.ABYSSEA_MP then - player:addMP(v[3] + xi.abyssea.getAbyssiteTotal(player, v[4]) * v[5]) - end - end - - player:delCurrency("cruor", enhanceData[2]) - end - end + xi.abyssea.visionsCruorProspectorOnEventFinish(player, csid, option, localProspectorItems) end return entity diff --git a/scripts/zones/Abyssea-Uleguerand/IDs.lua b/scripts/zones/Abyssea-Uleguerand/IDs.lua index 261bd7bba7c..42c5b794ea7 100644 --- a/scripts/zones/Abyssea-Uleguerand/IDs.lua +++ b/scripts/zones/Abyssea-Uleguerand/IDs.lua @@ -97,7 +97,6 @@ zones[xi.zone.ABYSSEA_ULEGUERAND] = -- [17813969] = {'qm21', {}, {xi.ki.BEGRIMED_DRAGON_HIDE}, 17813920}, -- Isgebind -- [17813970] = {'qm22', {}, {xi.ki.DECAYING_DIREMITE_FANG}, 17813921}, -- Resheph }, - STURDY_PYXIS_BASE = 17813987, }, } diff --git a/scripts/zones/Abyssea-Vunkerl/IDs.lua b/scripts/zones/Abyssea-Vunkerl/IDs.lua index 0d0be13631f..a46549985cd 100644 --- a/scripts/zones/Abyssea-Vunkerl/IDs.lua +++ b/scripts/zones/Abyssea-Vunkerl/IDs.lua @@ -99,7 +99,6 @@ zones[xi.zone.ABYSSEA_VUNKERL] = -- [17666598] = {'qm23', {}, {xi.ki.DECAYED_DVERGR_TOOTH, xi.ki.PULSATING_SOULFLAYER_BEARD, xi.ki.CHIPPED_IMPS_OLIFANT}, 17666509}, -- Durinn -- [17666599] = {'qm24', {}, {xi.ki.MALODOROUS_MARID_FUR, xi.ki.WARPED_SMILODON_CHOKER}, 17666510}, -- Karkadann }, - STURDY_PYXIS_BASE = 17666615, }, } diff --git a/scripts/zones/Aht_Urhgan_Whitegate/npcs/Bhoy_Yhupplo.lua b/scripts/zones/Aht_Urhgan_Whitegate/npcs/Bhoy_Yhupplo.lua index 2bb2cba7404..1080d65de1c 100644 --- a/scripts/zones/Aht_Urhgan_Whitegate/npcs/Bhoy_Yhupplo.lua +++ b/scripts/zones/Aht_Urhgan_Whitegate/npcs/Bhoy_Yhupplo.lua @@ -10,22 +10,25 @@ require("scripts/globals/besieged") require("scripts/globals/items") require("scripts/globals/keyitems") require("scripts/globals/npc_util") +require("scripts/globals/extravaganza") ----------------------------------- local entity = {} local items = { - [1] = {itemid = xi.items.VELOCITY_EARRING, price = 3000}, - [2] = {itemid = xi.items.GARRULOUS_RING, price = 5000}, - [3] = {itemid = xi.items.GRANDIOSE_CHAIN, price = 8000}, - [4] = {itemid = xi.items.HURLING_BELT, price = 10000}, - [5] = {itemid = xi.items.INVIGORATING_CAPE, price = 10000}, - [6] = {itemid = xi.items.IMPERIAL_KAMAN, price = 15000}, - [7] = {itemid = xi.items.STORM_ZAGHNAL, price = 15000}, - [8] = {itemid = xi.items.STORM_FIFE, price = 15000}, - [9] = {itemid = xi.items.YIGIT_TURBAN, price = 20000}, - [10] = {itemid = xi.items.AMIR_DIRS, price = 20000}, - [11] = {itemid = xi.items.PAHLUWAN_KHAZAGAND, price = 20000}, + [1] = {itemid = xi.items.VELOCITY_EARRING, price = 3000}, + [2] = {itemid = xi.items.GARRULOUS_RING, price = 5000}, + [3] = {itemid = xi.items.GRANDIOSE_CHAIN, price = 8000}, + [4] = {itemid = xi.items.HURLING_BELT, price = 10000}, + [5] = {itemid = xi.items.INVIGORATING_CAPE, price = 10000}, + [6] = {itemid = xi.items.IMPERIAL_KAMAN, price = 15000}, + [7] = {itemid = xi.items.STORM_ZAGHNAL, price = 15000}, + [8] = {itemid = xi.items.STORM_FIFE, price = 15000}, + [9] = {itemid = xi.items.YIGIT_TURBAN, price = 20000}, + [10] = {itemid = xi.items.AMIR_DIRS, price = 20000}, + [11] = {itemid = xi.items.PAHLUWAN_KHAZAGAND, price = 20000}, + [12] = {itemid = xi.items.CIPHER_OF_OVJANGS_ALTER_EGO, price = 3000}, + [13] = {itemid = xi.items.CIPHER_OF_MNEJINGS_ALTER_EGO, price = 3000}, } entity.onTrade = function(player, npc, trade) @@ -35,9 +38,15 @@ entity.onTrigger = function(player, npc) local rank = xi.besieged.getMercenaryRank(player) local haveimperialIDtag = player:hasKeyItem(xi.ki.IMPERIAL_ARMY_ID_TAG) and 1 or 0 local assaultPoints = player:getAssaultPoint(xi.assaultUtil.assaultArea.ILRUSI_ATOLL) + local cipher = 0 + local active = xi.extravaganza.campaignActive() + + if active == xi.extravaganza.campaign.SPRING_FALL or active == xi.extravaganza.campaign.BOTH then + cipher = 1 + end if rank > 0 then - player:startEvent(277, rank, haveimperialIDtag, assaultPoints, player:getCurrentAssault()) + player:startEvent(277, rank, haveimperialIDtag, assaultPoints, player:getCurrentAssault(), cipher) else player:startEvent(283) end diff --git a/scripts/zones/Aht_Urhgan_Whitegate/npcs/Famad.lua b/scripts/zones/Aht_Urhgan_Whitegate/npcs/Famad.lua index b44a6186601..a11efba6ea1 100644 --- a/scripts/zones/Aht_Urhgan_Whitegate/npcs/Famad.lua +++ b/scripts/zones/Aht_Urhgan_Whitegate/npcs/Famad.lua @@ -10,22 +10,25 @@ require("scripts/globals/besieged") require("scripts/globals/items") require("scripts/globals/keyitems") require("scripts/globals/npc_util") +require("scripts/globals/extravaganza") ----------------------------------- local entity = {} local items = { - [1] = {itemid = xi.items.INSOMNIA_EARRING, price = 3000}, - [2] = {itemid = xi.items.HALE_RING, price = 5000}, - [3] = {itemid = xi.items.CHIVALROUS_CHAIN, price = 8000}, - [4] = {itemid = xi.items.PRECISE_BELT, price = 10000}, - [5] = {itemid = xi.items.INTENSIFYING_CAPE, price = 10000}, - [6] = {itemid = xi.items.IMPERIAL_POLE, price = 15000}, - [7] = {itemid = xi.items.DOOMBRINGER, price = 15000}, - [8] = {itemid = xi.items.SAYOSAMONJI, price = 15000}, - [9] = {itemid = xi.items.PAHLUWAN_DASTANAS, price = 20000}, - [10] = {itemid = xi.items.YIGIT_CRACKOWS, price = 20000}, - [11] = {itemid = xi.items.AMIR_KORAZIN, price = 20000}, + [1] = {itemid = xi.items.INSOMNIA_EARRING, price = 3000}, + [2] = {itemid = xi.items.HALE_RING, price = 5000}, + [3] = {itemid = xi.items.CHIVALROUS_CHAIN, price = 8000}, + [4] = {itemid = xi.items.PRECISE_BELT, price = 10000}, + [5] = {itemid = xi.items.INTENSIFYING_CAPE, price = 10000}, + [6] = {itemid = xi.items.IMPERIAL_POLE, price = 15000}, + [7] = {itemid = xi.items.DOOMBRINGER, price = 15000}, + [8] = {itemid = xi.items.SAYOSAMONJI, price = 15000}, + [9] = {itemid = xi.items.PAHLUWAN_DASTANAS, price = 20000}, + [10] = {itemid = xi.items.YIGIT_CRACKOWS, price = 20000}, + [11] = {itemid = xi.items.AMIR_KORAZIN, price = 20000}, + [12] = {itemid = xi.items.CIPHER_OF_OVJANGS_ALTER_EGO, price = 3000}, + [13] = {itemid = xi.items.CIPHER_OF_MNEJINGS_ALTER_EGO, price = 3000}, } entity.onTrade = function(player, npc, trade) @@ -35,9 +38,15 @@ entity.onTrigger = function(player, npc) local rank = xi.besieged.getMercenaryRank(player) local haveimperialIDtag = player:hasKeyItem(xi.ki.IMPERIAL_ARMY_ID_TAG) and 1 or 0 local assaultPoints = player:getAssaultPoint(xi.assaultUtil.assaultArea.LEBROS_CAVERN) + local cipher = 0 + local active = xi.extravaganza.campaignActive() + + if active == xi.extravaganza.campaign.SPRING_FALL or active == xi.extravaganza.campaign.BOTH then + cipher = 1 + end if rank > 0 then - player:startEvent(275, rank, haveimperialIDtag, assaultPoints, player:getCurrentAssault()) + player:startEvent(275, rank, haveimperialIDtag, assaultPoints, player:getCurrentAssault(), cipher) else player:startEvent(281) end diff --git a/scripts/zones/Aht_Urhgan_Whitegate/npcs/Isdebaaq.lua b/scripts/zones/Aht_Urhgan_Whitegate/npcs/Isdebaaq.lua index 81641e791c9..d4967c7d4dc 100644 --- a/scripts/zones/Aht_Urhgan_Whitegate/npcs/Isdebaaq.lua +++ b/scripts/zones/Aht_Urhgan_Whitegate/npcs/Isdebaaq.lua @@ -10,22 +10,25 @@ require("scripts/globals/besieged") require("scripts/globals/items") require("scripts/globals/keyitems") require("scripts/globals/npc_util") +require("scripts/globals/extravaganza") ----------------------------------- local entity = {} local items = { - [1] = {itemid = xi.items.ANTIVENOM_EARRING, price = 3000}, - [2] = {itemid = xi.items.EBULLIENT_RING, price = 5000}, - [3] = {itemid = xi.items.ENLIGHTENED_CHAIN, price = 8000}, - [4] = {itemid = xi.items.SPECTRAL_BELT, price = 10000}, - [5] = {itemid = xi.items.BULLSEYE_CAPE, price = 10000}, - [6] = {itemid = xi.items.STORM_TULWAR, price = 15000}, - [7] = {itemid = xi.items.IMPERIAL_NEZA, price = 15000}, - [8] = {itemid = xi.items.STORM_TABAR, price = 15000}, - [9] = {itemid = xi.items.YIGIT_GAGES, price = 20000}, - [10] = {itemid = xi.items.AMIR_BOOTS, price = 20000}, - [11] = {itemid = xi.items.PAHLUWAN_SERAWEELS, price = 20000}, + [1] = {itemid = xi.items.ANTIVENOM_EARRING, price = 3000}, + [2] = {itemid = xi.items.EBULLIENT_RING, price = 5000}, + [3] = {itemid = xi.items.ENLIGHTENED_CHAIN, price = 8000}, + [4] = {itemid = xi.items.SPECTRAL_BELT, price = 10000}, + [5] = {itemid = xi.items.BULLSEYE_CAPE, price = 10000}, + [6] = {itemid = xi.items.STORM_TULWAR, price = 15000}, + [7] = {itemid = xi.items.IMPERIAL_NEZA, price = 15000}, + [8] = {itemid = xi.items.STORM_TABAR, price = 15000}, + [9] = {itemid = xi.items.YIGIT_GAGES, price = 20000}, + [10] = {itemid = xi.items.AMIR_BOOTS, price = 20000}, + [11] = {itemid = xi.items.PAHLUWAN_SERAWEELS, price = 20000}, + [12] = {itemid = xi.items.CIPHER_OF_OVJANGS_ALTER_EGO, price = 3000}, + [13] = {itemid = xi.items.CIPHER_OF_MNEJINGS_ALTER_EGO, price = 3000}, } entity.onTrade = function(player, npc, trade) @@ -35,9 +38,15 @@ entity.onTrigger = function(player, npc) local rank = xi.besieged.getMercenaryRank(player) local haveimperialIDtag = player:hasKeyItem(xi.ki.IMPERIAL_ARMY_ID_TAG) and 1 or 0 local assaultPoints = player:getAssaultPoint(xi.assaultUtil.assaultArea.MAMOOL_JA_TRAINING_GROUNDS) + local cipher = 0 + local active = xi.extravaganza.campaignActive() + + if active == xi.extravaganza.campaign.SPRING_FALL or active == xi.extravaganza.campaign.BOTH then + cipher = 1 + end if rank > 0 then - player:startEvent(274, rank, haveimperialIDtag, assaultPoints, player:getCurrentAssault()) + player:startEvent(274, rank, haveimperialIDtag, assaultPoints, player:getCurrentAssault(), cipher) else player:startEvent(280) end diff --git a/scripts/zones/Aht_Urhgan_Whitegate/npcs/Lageegee.lua b/scripts/zones/Aht_Urhgan_Whitegate/npcs/Lageegee.lua index 023799990d4..50ffa10a7e4 100644 --- a/scripts/zones/Aht_Urhgan_Whitegate/npcs/Lageegee.lua +++ b/scripts/zones/Aht_Urhgan_Whitegate/npcs/Lageegee.lua @@ -10,22 +10,25 @@ require("scripts/globals/besieged") require("scripts/globals/items") require("scripts/globals/keyitems") require("scripts/globals/npc_util") +require("scripts/globals/extravaganza") ----------------------------------- local entity = {} local items = { - [1] = {itemid = xi.items.VISION_EARRING, price = 3000}, - [2] = {itemid = xi.items.UNYIELDING_RING, price = 5000}, - [3] = {itemid = xi.items.FORTIFIED_CHAIN, price = 8000}, - [4] = {itemid = xi.items.RESOLUTE_BELT, price = 10000}, - [5] = {itemid = xi.items.BUSHIDO_CAPE, price = 10000}, - [6] = {itemid = xi.items.KHANJAR, price = 15000}, - [7] = {itemid = xi.items.HOTARUMARU, price = 15000}, - [8] = {itemid = xi.items.IMPERIAL_GUN, price = 15000}, - [9] = {itemid = xi.items.AMIR_PUGGAREE, price = 20000}, - [10] = {itemid = xi.items.PAHLUWAN_CRACKOWS, price = 20000}, - [11] = {itemid = xi.items.YIGIT_GOMLEK, price = 20000}, + [1] = {itemid = xi.items.VISION_EARRING, price = 3000}, + [2] = {itemid = xi.items.UNYIELDING_RING, price = 5000}, + [3] = {itemid = xi.items.FORTIFIED_CHAIN, price = 8000}, + [4] = {itemid = xi.items.RESOLUTE_BELT, price = 10000}, + [5] = {itemid = xi.items.BUSHIDO_CAPE, price = 10000}, + [6] = {itemid = xi.items.KHANJAR, price = 15000}, + [7] = {itemid = xi.items.HOTARUMARU, price = 15000}, + [8] = {itemid = xi.items.IMPERIAL_GUN, price = 15000}, + [9] = {itemid = xi.items.AMIR_PUGGAREE, price = 20000}, + [10] = {itemid = xi.items.PAHLUWAN_CRACKOWS, price = 20000}, + [11] = {itemid = xi.items.YIGIT_GOMLEK, price = 20000}, + [12] = {itemid = xi.items.CIPHER_OF_OVJANGS_ALTER_EGO, price = 3000}, + [13] = {itemid = xi.items.CIPHER_OF_MNEJINGS_ALTER_EGO, price = 3000}, } entity.onTrade = function(player, npc, trade) @@ -35,9 +38,15 @@ entity.onTrigger = function(player, npc) local rank = xi.besieged.getMercenaryRank(player) local haveimperialIDtag = player:hasKeyItem(xi.ki.IMPERIAL_ARMY_ID_TAG) and 1 or 0 local assaultPoints = player:getAssaultPoint(xi.assaultUtil.assaultArea.PERIQIA) + local cipher = 0 + local active = xi.extravaganza.campaignActive() + + if active == xi.extravaganza.campaign.SPRING_FALL or active == xi.extravaganza.campaign.BOTH then + cipher = 1 + end if rank > 0 then - player:startEvent(276, rank, haveimperialIDtag, assaultPoints, player:getCurrentAssault()) + player:startEvent(276, rank, haveimperialIDtag, assaultPoints, player:getCurrentAssault(), cipher) else player:startEvent(282) end diff --git a/scripts/zones/Aht_Urhgan_Whitegate/npcs/Yahsra.lua b/scripts/zones/Aht_Urhgan_Whitegate/npcs/Yahsra.lua index 3fafe15fc6a..96f12d58d26 100644 --- a/scripts/zones/Aht_Urhgan_Whitegate/npcs/Yahsra.lua +++ b/scripts/zones/Aht_Urhgan_Whitegate/npcs/Yahsra.lua @@ -10,22 +10,25 @@ require("scripts/globals/besieged") require("scripts/globals/items") require("scripts/globals/keyitems") require("scripts/globals/npc_util") +require("scripts/globals/extravaganza") ----------------------------------- local entity = {} local items = { - [1] = {itemid = xi.items.STOIC_EARRING, price = 3000}, - [2] = {itemid = xi.items.UNFETTERED_RING, price = 5000}, - [3] = {itemid = xi.items.TEMPERED_CHAIN, price = 8000}, - [4] = {itemid = xi.items.POTENT_BELT, price = 10000}, - [5] = {itemid = xi.items.MIRACULOUS_CAPE, price = 10000}, - [6] = {itemid = xi.items.YIGIT_BULAWA, price = 10000}, - [7] = {itemid = xi.items.IMPERIAL_BHUJ, price = 15000}, - [8] = {itemid = xi.items.PAHLUWAN_PATAS, price = 15000}, - [9] = {itemid = xi.items.AMIR_KOLLUKS, price = 15000}, - [10] = {itemid = xi.items.PAHLUWAN_QALANSUWA, price = 20000}, - [11] = {itemid = xi.items.YIGIT_SERAWEELS, price = 20000}, + [1] = {itemid = xi.items.STOIC_EARRING, price = 3000}, + [2] = {itemid = xi.items.UNFETTERED_RING, price = 5000}, + [3] = {itemid = xi.items.TEMPERED_CHAIN, price = 8000}, + [4] = {itemid = xi.items.POTENT_BELT, price = 10000}, + [5] = {itemid = xi.items.MIRACULOUS_CAPE, price = 10000}, + [6] = {itemid = xi.items.YIGIT_BULAWA, price = 10000}, + [7] = {itemid = xi.items.IMPERIAL_BHUJ, price = 15000}, + [8] = {itemid = xi.items.PAHLUWAN_PATAS, price = 15000}, + [9] = {itemid = xi.items.AMIR_KOLLUKS, price = 15000}, + [10] = {itemid = xi.items.PAHLUWAN_QALANSUWA, price = 20000}, + [11] = {itemid = xi.items.YIGIT_SERAWEELS, price = 20000}, + [12] = {itemid = xi.items.CIPHER_OF_OVJANGS_ALTER_EGO, price = 3000}, + [13] = {itemid = xi.items.CIPHER_OF_MNEJINGS_ALTER_EGO, price = 3000}, } entity.onTrade = function(player, npc, trade) @@ -35,9 +38,15 @@ entity.onTrigger = function(player, npc) local rank = xi.besieged.getMercenaryRank(player) local haveimperialIDtag = player:hasKeyItem(xi.ki.IMPERIAL_ARMY_ID_TAG) and 1 or 0 local assaultPoints = player:getAssaultPoint(xi.assaultUtil.assaultArea.LEUJAOAM_SANCTUM) + local cipher = 0 + local active = xi.extravaganza.campaignActive() + + if active == xi.extravaganza.campaign.SPRING_FALL or active == xi.extravaganza.campaign.BOTH then + cipher = 1 + end if rank > 0 then - player:startEvent(273, rank, haveimperialIDtag, assaultPoints, player:getCurrentAssault()) + player:startEvent(273, rank, haveimperialIDtag, assaultPoints, player:getCurrentAssault(), cipher) else player:startEvent(279) end diff --git a/scripts/zones/Arrapago_Reef/IDs.lua b/scripts/zones/Arrapago_Reef/IDs.lua index 5e0bbec23a7..fb4996d26a7 100644 --- a/scripts/zones/Arrapago_Reef/IDs.lua +++ b/scripts/zones/Arrapago_Reef/IDs.lua @@ -51,15 +51,15 @@ zones[xi.zone.ARRAPAGO_REEF] = }, mob = { - BLOODY_BONES_PH = + BLOODY_BONES_PH = { [16998653] = 16998655, -- 136.234 -6.831 468.779 }, - MEDUSA = 16998862, - LIL_APKALLU = 16998871, - VELIONIS = 16998872, - ZAREEHKL_THE_JUBILANT = 16998873, - NUHN = 16998874, + MEDUSA = DYNAMIC_LOOKUP, + LIL_APKALLU = DYNAMIC_LOOKUP, + VELIONIS = DYNAMIC_LOOKUP, + ZAREEHKL_THE_JUBILANT = DYNAMIC_LOOKUP, + NUHN = DYNAMIC_LOOKUP, }, npc = { diff --git a/scripts/zones/Bastok_Markets_[S]/IDs.lua b/scripts/zones/Bastok_Markets_[S]/IDs.lua index 3739eddecc3..1e41b4f2b98 100644 --- a/scripts/zones/Bastok_Markets_[S]/IDs.lua +++ b/scripts/zones/Bastok_Markets_[S]/IDs.lua @@ -32,6 +32,7 @@ zones[xi.zone.BASTOK_MARKETS_S] = ALLIED_SIGIL = 12363, -- You have received the Allied Sigil! SILKE_SHOP_DIALOG = 12815, -- You wouldn't happen to be a fellow scholar, by any chance? The contents of these pages are beyond me, but perhaps you might glean something from them. They could be yours...for a nominal fee. RETRIEVE_DIALOG_ID = 14727, -- You retrieve from the porter moogle's care. + NOT_ENOUGH_NOTES = 14752, -- You tryin' to cheat me? That's not nearly enough notes! COMMON_SENSE_SURVIVAL = 14796, -- It appears that you have arrived at a new survival guide provided by the Servicemen's Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, mob = diff --git a/scripts/zones/Bastok_Markets_[S]/npcs/Millard_IM.lua b/scripts/zones/Bastok_Markets_[S]/npcs/Millard_IM.lua index b1cdb97dc98..9aaa2b3c696 100644 --- a/scripts/zones/Bastok_Markets_[S]/npcs/Millard_IM.lua +++ b/scripts/zones/Bastok_Markets_[S]/npcs/Millard_IM.lua @@ -8,6 +8,7 @@ local ID = require("scripts/zones/Bastok_Markets_[S]/IDs") require("scripts/globals/campaign") require("scripts/globals/status") require("scripts/globals/utils") +require("scripts/globals/extravaganza") ----------------------------------- local entity = {} @@ -17,7 +18,7 @@ end entity.onTrigger = function(player, npc) local notes = player:getCurrency("allied_notes") local freelances = 99 -- Faking it for now - local ciphers = 0 + local cipher = xi.extravaganza.campaignActive() * 4 -- 0 for not displaying ciphers -- 4 for Valaneiral (New Year's & Summer Alter Ego Extravaganzas) -- 8 for Adelheid (Spring & Autumn Alter Ego Extravaganzas) @@ -35,7 +36,7 @@ entity.onTrigger = function(player, npc) if medalRank == 0 then player:startEvent(14) else - player:startEvent(13, allegiance, notes, freelances, ciphers, medalRank, bonusEffects, timeStamp, 0) + player:startEvent(13, allegiance, notes, freelances, cipher, medalRank, bonusEffects, timeStamp, 0) end end diff --git a/scripts/zones/Bastok_Markets_[S]/npcs/Shenni.lua b/scripts/zones/Bastok_Markets_[S]/npcs/Shenni.lua new file mode 100644 index 00000000000..ad827f4c259 --- /dev/null +++ b/scripts/zones/Bastok_Markets_[S]/npcs/Shenni.lua @@ -0,0 +1,22 @@ +----------------------------------- +-- Area: Bastok Markets [S] +-- NPC: Shenni +-- Type: Alter Ego Extravaganza +-- !gotoid 17134281 +----------------------------------- +local ID = require('scripts/zones/Southern_San_dOria_[S]/IDs') +require('scripts/globals/extravaganza') + +local entity = {} + +entity.onTrigger = function(player, npc) + local notes = player:getCurrency("allied_notes") + + xi.extravaganza.shadowEraTrigger(player, npc, notes) +end + +entity.onEventFinish = function(player, csid, option) + xi.extravaganza.shadowEraFinish(player, csid, option) +end + +return entity diff --git a/scripts/zones/Batallia_Downs/DefaultActions.lua b/scripts/zones/Batallia_Downs/DefaultActions.lua index 577211a39b0..10ab0e795bd 100644 --- a/scripts/zones/Batallia_Downs/DefaultActions.lua +++ b/scripts/zones/Batallia_Downs/DefaultActions.lua @@ -1,6 +1,7 @@ local ID = require("scripts/zones/Batallia_Downs/IDs") return { - ['qm3'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, - ['qm4'] = { messageSpecial = ID.text.NO_GRASS_GROWING_HERE }, + ['qm3'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, + ['qm4'] = { messageSpecial = ID.text.NO_GRASS_GROWING_HERE }, + ['Weathered_Gravestone'] = { messageSpecial = ID.text.SEE_WEATHERED_GRAVESTONE }, } diff --git a/scripts/zones/Batallia_Downs/IDs.lua b/scripts/zones/Batallia_Downs/IDs.lua index cad11cdefdb..7585a543f76 100644 --- a/scripts/zones/Batallia_Downs/IDs.lua +++ b/scripts/zones/Batallia_Downs/IDs.lua @@ -34,6 +34,7 @@ zones[xi.zone.BATALLIA_DOWNS] = NO_COMBINATION = 7717, -- You were unable to enter a combination. VOIDWALKER_DESPAWN = 7748, -- The monster fades before your eyes, a look of disappointment on its face. REGIME_REGISTERED = 9995, -- New training regime registered! + SEE_WEATHERED_GRAVESTONE = 11335, -- You see a weathered gravestone. VOIDWALKER_NO_MOB = 11336, -- The quivers ever so slightly, but emits no light. There seem to be no monsters in the area. VOIDWALKER_MOB_TOO_FAR = 11337, -- The quivers ever so slightly and emits a faint light. There seem to be no monsters in the immediate vicinity. VOIDWALKER_MOB_HINT = 11338, -- The resonates [feebly/softly/solidly/strongly/very strongly/furiously], sending a radiant beam of light lancing towards a spot roughly [yalm/yalms] [east/southeast/south/southwest/west/northwest/north/northeast] of here. @@ -42,6 +43,8 @@ zones[xi.zone.BATALLIA_DOWNS] = VOIDWALKER_UPGRADE_KI_2 = 11342, -- The takes on a deeper, richer hue and becomes ! VOIDWALKER_BREAK_KI = 11343, -- The shatters into tiny fragments. VOIDWALKER_OBTAIN_KI = 11344, -- Obtained key item: ! + LEARNS_SPELL = 12842, -- learns ! + UNCANNY_SENSATION = 12844, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 12851, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. RAPTOR_OVERCOME_MUNCHIES = 13004, -- The raptor has overcome the munchies! (/) RAPTOR_SECOND_WIND = 13005, -- The raptor has gained a second wind! @@ -100,7 +103,6 @@ zones[xi.zone.BATALLIA_DOWNS] = npc = { - CASKET_BASE = 17207794, }, } diff --git a/scripts/zones/Batallia_Downs/npcs/Geomantic_Reservoir.lua b/scripts/zones/Batallia_Downs/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..2f5c94bd674 --- /dev/null +++ b/scripts/zones/Batallia_Downs/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Batallia Downs +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Barrier +-- !pos -677.645 -32.000 157.981 105 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_BARRIER) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_BARRIER) +end + +return entity diff --git a/scripts/zones/Batallia_Downs_[S]/DefaultActions.lua b/scripts/zones/Batallia_Downs_[S]/DefaultActions.lua index d8aa6498759..683edca0107 100644 --- a/scripts/zones/Batallia_Downs_[S]/DefaultActions.lua +++ b/scripts/zones/Batallia_Downs_[S]/DefaultActions.lua @@ -4,5 +4,6 @@ return { ['_qm5'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, ['Eberhard'] = { event = 113 }, ['Romualdo'] = { event = 102 }, + ['Thorben'] = { event = 108 }, ['Underpass_Hatch'] = { messageSpecial = ID.text.NO_RESPONSE }, } diff --git a/scripts/zones/Batallia_Downs_[S]/npcs/Thorben.lua b/scripts/zones/Batallia_Downs_[S]/npcs/Thorben.lua index 973e666c326..0da6e70fc8a 100644 --- a/scripts/zones/Batallia_Downs_[S]/npcs/Thorben.lua +++ b/scripts/zones/Batallia_Downs_[S]/npcs/Thorben.lua @@ -4,63 +4,18 @@ -- Type: Quest NPC -- !pos 175.346 8.038 -419.244 84 ----------------------------------- -require("scripts/globals/keyitems") -require("scripts/globals/settings") -require("scripts/globals/quests") -require("scripts/globals/npc_util") ------------------------------------ local entity = {} entity.onTrade = function(player, npc, trade) end entity.onTrigger = function(player, npc) - local lostInTranslocation = player:getQuestStatus(xi.quest.log_id.CRYSTAL_WAR, xi.quest.id.crystalWar.LOST_IN_TRANSLOCATION) - local leftMapPiece = player:hasKeyItem(xi.ki.LEFT_MAP_PIECE) - local middleMapPiece = player:hasKeyItem(xi.ki.MIDDLE_MAP_PIECE) - local rightMapPiece = player:hasKeyItem(xi.ki.RIGHT_MAP_PIECE) - local anyMapPiece = leftMapPiece or middleMapPiece or rightMapPiece - - if lostInTranslocation == QUEST_COMPLETED then - player:startEvent(108) - elseif lostInTranslocation == QUEST_ACCEPTED and leftMapPiece and middleMapPiece and rightMapPiece then - player:startEvent(107) - elseif player:getCharVar("lostInTranslocationCS") == 1 then - player:startEvent(106) - elseif lostInTranslocation == QUEST_ACCEPTED and anyMapPiece then - player:startEvent(105) - elseif lostInTranslocation == QUEST_ACCEPTED and not anyMapPiece then - player:startEvent(104) - else - player:startEvent(103) - end end entity.onEventUpdate = function(player, csid, option) end entity.onEventFinish = function(player, csid, option) - if csid == 107 then - if player:hasKeyItem(xi.ki.MAP_OF_GRAUBERG) then - npcUtil.completeQuest(player, xi.quest.log_id.CRYSTAL_WAR, xi.quest.id.crystalWar.LOST_IN_TRANSLOCATION, { - gil = 2000, - xp = 2000, - var = "lostInTranslocationCS" - }) - else - npcUtil.completeQuest(player, xi.quest.log_id.CRYSTAL_WAR, xi.quest.id.crystalWar.LOST_IN_TRANSLOCATION, { - ki = xi.ki.MAP_OF_GRAUBERG, - var = "lostInTranslocationCS" - }) - end - player:delKeyItem(xi.ki.LEFT_MAP_PIECE) - player:delKeyItem(xi.ki.MIDDLE_MAP_PIECE) - player:delKeyItem(xi.ki.RIGHT_MAP_PIECE) - elseif csid == 105 then - player:setCharVar("lostInTranslocationCS", 1) - elseif csid == 103 then - player:addQuest(xi.quest.log_id.CRYSTAL_WAR, xi.quest.id.crystalWar.LOST_IN_TRANSLOCATION) - end end return entity diff --git a/scripts/zones/Beadeaux/IDs.lua b/scripts/zones/Beadeaux/IDs.lua index 46b3a27e162..f4ea769018d 100644 --- a/scripts/zones/Beadeaux/IDs.lua +++ b/scripts/zones/Beadeaux/IDs.lua @@ -31,6 +31,8 @@ zones[xi.zone.BEADEAUX] = YOU_CAN_NOW_BECOME_A_DARK_KNIGHT = 7357, -- You can now become a dark knight! FOUL_SMELLING_SOIL_IS_SPILLING_OUT = 7358, -- Foul-smelling soil is spilling out. CHEST_UNLOCKED = 7368, -- You unlock the chest! + LEARNS_SPELL = 7786, -- learns ! + UNCANNY_SENSATION = 7788, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 7795, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, mob = diff --git a/scripts/zones/Beadeaux/npcs/Geomantic_Reservoir.lua b/scripts/zones/Beadeaux/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..6a66d687d43 --- /dev/null +++ b/scripts/zones/Beadeaux/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Beadeaux +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Slow +-- !pos 162.194 -3.250 38.661 147 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_SLOW) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_SLOW) +end + +return entity diff --git a/scripts/zones/Beaucedine_Glacier/IDs.lua b/scripts/zones/Beaucedine_Glacier/IDs.lua index 3d69dc873b1..12d068f5736 100644 --- a/scripts/zones/Beaucedine_Glacier/IDs.lua +++ b/scripts/zones/Beaucedine_Glacier/IDs.lua @@ -44,9 +44,10 @@ zones[xi.zone.BEAUCEDINE_GLACIER] = VOIDWALKER_UPGRADE_KI_2 = 11888, -- The takes on a deeper, richer hue and becomes ! VOIDWALKER_BREAK_KI = 11889, -- The shatters into tiny fragments. VOIDWALKER_OBTAIN_KI = 11890, -- Obtained key item: ! + LEARNS_SPELL = 12780, -- learns ! + UNCANNY_SENSATION = 12782, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 12789, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, - mob = { GARGANTUA_PH = @@ -102,7 +103,6 @@ zones[xi.zone.BEAUCEDINE_GLACIER] = npc = { - CASKET_BASE = 17232181, MIRROR_POND_J8 = 17232206, OVERSEER_BASE = 17232217, -- Parledaire_RK in npc_list }, diff --git a/scripts/zones/Beaucedine_Glacier/npcs/Geomantic_Reservoir.lua b/scripts/zones/Beaucedine_Glacier/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..3bc9ad1ac21 --- /dev/null +++ b/scripts/zones/Beaucedine_Glacier/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Beaucedine Glacier +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-INT +-- !pos 8.527 -59.729 -104.909 111 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_INT) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_INT) +end + +return entity diff --git a/scripts/zones/Beaucedine_Glacier/npcs/Geomantic_Reservoir_2.lua b/scripts/zones/Beaucedine_Glacier/npcs/Geomantic_Reservoir_2.lua new file mode 100644 index 00000000000..acedcdb0640 --- /dev/null +++ b/scripts/zones/Beaucedine_Glacier/npcs/Geomantic_Reservoir_2.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Beaucedine Glacier +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Acumen +-- !pos 275.620 -0.137 247.116 111 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_ACUMEN) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_ACUMEN) +end + +return entity diff --git a/scripts/zones/Beaucedine_Glacier_[S]/DefaultActions.lua b/scripts/zones/Beaucedine_Glacier_[S]/DefaultActions.lua index c012afb711f..b3789b554d9 100644 --- a/scripts/zones/Beaucedine_Glacier_[S]/DefaultActions.lua +++ b/scripts/zones/Beaucedine_Glacier_[S]/DefaultActions.lua @@ -1,10 +1,15 @@ local ID = require('scripts/zones/Beaucedine_Glacier_[S]/IDs') return { - ['Regal_Pawprints_1'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, - ['Regal_Pawprints_3'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, - ['Regal_Pawprints_4'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, - ['Regal_Pawprints_5'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, - ['Regal_Pawprints_6'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, - ['Regal_Pawprints_7'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, + ['Charred_Firewood'] = { messageSpecial = ID.text.REMAINS_OF_COOKFIRE }, + ['Colossal_Footprint'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, + ['Compressed_Snow'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, + ['Regal_Pawprints_1'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, + ['Regal_Pawprints_3'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, + ['Regal_Pawprints_4'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, + ['Regal_Pawprints_5'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, + ['Regal_Pawprints_6'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, + ['Regal_Pawprints_7'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, + ['Regal_Pawprints_8'] = { messageSpecial = ID.text.NO_RESPONSE }, + ['Watchful_Pixie'] = { messageSpecial = ID.text.GREETINGS_TRAVELER }, } diff --git a/scripts/zones/Beaucedine_Glacier_[S]/IDs.lua b/scripts/zones/Beaucedine_Glacier_[S]/IDs.lua index b42e2abb359..ad69df2bcac 100644 --- a/scripts/zones/Beaucedine_Glacier_[S]/IDs.lua +++ b/scripts/zones/Beaucedine_Glacier_[S]/IDs.lua @@ -19,8 +19,12 @@ zones[xi.zone.BEAUCEDINE_GLACIER_S] = CARRIED_OVER_POINTS = 7001, -- You have carried over login point[/s]. LOGIN_CAMPAIGN_UNDERWAY = 7002, -- The [/January/February/March/April/May/June/July/August/September/October/November/December] Login Campaign is currently underway! LOGIN_NUMBER = 7003, -- In celebration of your most recent login (login no. ), we have provided you with points! You currently have a total of points. + NONDESCRIPT_MASS = 7759, -- A nondescript mass squirms hypnotically beneath the rock. + REMAINS_OF_COOKFIRE = 7783, -- You see the charred remains of a cookfire. UNWANTED_ATTENTION = 8584, -- Your presence has drawn unwanted attention! UNUSUAL_PRESENCE = 8586, -- You sense an unusual presence in the area... + NO_RESPONSE = 8588, -- There is no response... + GREETINGS_TRAVELER = 8615, -- Greetings, fair traveler. My people would entreat thy assistance, and offer rich reward in return. Thou shouldst speak with my sister Callisto, who abides in Grauberg's Witchfire Glen. VOIDWALKER_DESPAWN = 8611, -- The monster fades before your eyes, a look of disappointment on its face. VOIDWALKER_NO_MOB = 8662, -- The quivers ever so slightly, but emits no light. There seem to be no monsters in the area. VOIDWALKER_MOB_TOO_FAR = 8663, -- The quivers ever so slightly and emits a faint light. There seem to be no monsters in the immediate vicinity. @@ -35,6 +39,8 @@ zones[xi.zone.BEAUCEDINE_GLACIER_S] = mob = { + ORCISH_BLOODLETTER = DYNAMIC_LOOKUP, + GRANDGOULE_PH = { [17334475] = 17334482, diff --git a/scripts/zones/Behemoths_Dominion/IDs.lua b/scripts/zones/Behemoths_Dominion/IDs.lua index 18f65c51206..7bf30bcd13c 100644 --- a/scripts/zones/Behemoths_Dominion/IDs.lua +++ b/scripts/zones/Behemoths_Dominion/IDs.lua @@ -33,6 +33,8 @@ zones[xi.zone.BEHEMOTHS_DOMINION] = ALREADY_POSSESS_TEMP = 7354, -- You already possess that temporary item. NO_COMBINATION = 7359, -- You were unable to enter a combination. REGIME_REGISTERED = 9537, -- New training regime registered! + LEARNS_SPELL = 11526, -- learns ! + UNCANNY_SENSATION = 11528, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 11535, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, mob = @@ -46,7 +48,6 @@ zones[xi.zone.BEHEMOTHS_DOMINION] = npc = { BEHEMOTH_QM = 17297459, - CASKET_BASE = 17297460, CERMET_HEADSTONE = 17297493, }, } diff --git a/scripts/zones/Behemoths_Dominion/npcs/Geomantic_Reservoir.lua b/scripts/zones/Behemoths_Dominion/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..3a986dc28c4 --- /dev/null +++ b/scripts/zones/Behemoths_Dominion/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Behemoth's Dominion +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-DEX +-- !pos -232.162 -20.199 4.927 127 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_DEX) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_DEX) +end + +return entity diff --git a/scripts/zones/Bostaunieux_Oubliette/IDs.lua b/scripts/zones/Bostaunieux_Oubliette/IDs.lua index 3ca612d28e1..fbfd926133c 100644 --- a/scripts/zones/Bostaunieux_Oubliette/IDs.lua +++ b/scripts/zones/Bostaunieux_Oubliette/IDs.lua @@ -33,6 +33,8 @@ zones[xi.zone.BOSTAUNIEUX_OUBLIETTE] = PLAYER_OBTAINS_TEMP_ITEM = 10594, -- obtains the temporary item: ! ALREADY_POSSESS_TEMP = 10595, -- You already possess that temporary item. NO_COMBINATION = 10600, -- You were unable to enter a combination. + LEARNS_SPELL = 10624, -- learns ! + UNCANNY_SENSATION = 10626, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 10633, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, mob = @@ -69,7 +71,6 @@ zones[xi.zone.BOSTAUNIEUX_OUBLIETTE] = }, npc = { - CASKET_BASE = 17461488, }, } diff --git a/scripts/zones/Bostaunieux_Oubliette/npcs/Geomantic_Reservoir.lua b/scripts/zones/Bostaunieux_Oubliette/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..bfd0bbfb6d6 --- /dev/null +++ b/scripts/zones/Bostaunieux_Oubliette/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Bostaunieux Oubliette +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Languor +-- !pos -13.337 0.009 -333.022 167 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_LANGUOR) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_LANGUOR) +end + +return entity diff --git a/scripts/zones/Buburimu_Peninsula/IDs.lua b/scripts/zones/Buburimu_Peninsula/IDs.lua index 47a6867e566..8b817f8e81f 100644 --- a/scripts/zones/Buburimu_Peninsula/IDs.lua +++ b/scripts/zones/Buburimu_Peninsula/IDs.lua @@ -69,7 +69,6 @@ zones[xi.zone.BUBURIMU_PENINSULA] = }, npc = { - CASKET_BASE = 17261113, OVERSEER_BASE = 17261150, -- Bonbavour_RK in npc_list SIGNPOST_OFFSET = 17261165, LOGGING = diff --git a/scripts/zones/Caedarva_Mire/mobs/Caedarva_Toad.lua b/scripts/zones/Caedarva_Mire/mobs/Caedarva_Toad.lua index 2fa4c950634..c15e99a8718 100644 --- a/scripts/zones/Caedarva_Mire/mobs/Caedarva_Toad.lua +++ b/scripts/zones/Caedarva_Mire/mobs/Caedarva_Toad.lua @@ -8,11 +8,11 @@ require("scripts/globals/quests") local entity = {} entity.onMobDeath = function(mob, player, isKiller) - local theWaywardAutomation = player:getQuestStatus(xi.quest.log_id.AHT_URHGAN, xi.quest.id.ahtUrhgan.THE_WAYWARD_AUTOMATON) - local theWaywardAutomationProgress = player:getCharVar("TheWaywardAutomationProgress") + local theWaywardAutomaton = player:getQuestStatus(xi.quest.log_id.AHT_URHGAN, xi.quest.id.ahtUrhgan.THE_WAYWARD_AUTOMATON) + local theWaywardAutomatonProgress = player:getCharVar("TheWaywardAutomatonProgress") - if (theWaywardAutomation == QUEST_ACCEPTED and theWaywardAutomationProgress == 2 and player:getCharVar("TheWaywardAutomationNM") == 0) then - player:setCharVar("TheWaywardAutomationNM", 1) + if theWaywardAutomaton == QUEST_ACCEPTED and theWaywardAutomatonProgress == 2 and player:getCharVar("TheWaywardAutomatonNM") == 0 then + player:setCharVar("TheWaywardAutomatonNM", 1) end end diff --git a/scripts/zones/Cape_Teriggan/IDs.lua b/scripts/zones/Cape_Teriggan/IDs.lua index 2b9625a075e..18a173dbc2c 100644 --- a/scripts/zones/Cape_Teriggan/IDs.lua +++ b/scripts/zones/Cape_Teriggan/IDs.lua @@ -57,7 +57,6 @@ zones[xi.zone.CAPE_TERIGGAN] = }, npc = { - CASKET_BASE = 17240445, OVERSEER_BASE = 17240472, CERMET_HEADSTONE = 17240497, }, diff --git a/scripts/zones/Castle_Oztroja/IDs.lua b/scripts/zones/Castle_Oztroja/IDs.lua index 030597c5c2d..39fc7cd9bb4 100644 --- a/scripts/zones/Castle_Oztroja/IDs.lua +++ b/scripts/zones/Castle_Oztroja/IDs.lua @@ -38,6 +38,8 @@ zones[xi.zone.CASTLE_OZTROJA] = YAGUDO_AVATAR_DEATH = 7454, -- Our lord, Tzee Xicu the Manifest! Even should our bodies be crushed and broken, may our souls endure into eternity... YAGUDO_KING_ENGAGE = 7455, -- You are not here as sacrifices, are you? Could you possibly be committing this affront in the face of a deity? Very well, I will personally mete out your divine punishment, kyah! YAGUDO_KING_DEATH = 7456, -- You have...bested me... However, I...am...a god... I will never die...never rot...never fade...never... + LEARNS_SPELL = 8295, -- learns ! + UNCANNY_SENSATION = 8297, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 8304, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, mob = diff --git a/scripts/zones/Castle_Oztroja/npcs/Geomantic_Reservoir.lua b/scripts/zones/Castle_Oztroja/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..63376b07e3f --- /dev/null +++ b/scripts/zones/Castle_Oztroja/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Castle Oztroja +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-AGI +-- !pos -210.032 -16.000 95.255 151 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_AGI) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_AGI) +end + +return entity diff --git a/scripts/zones/Ceizak_Battlegrounds/IDs.lua b/scripts/zones/Ceizak_Battlegrounds/IDs.lua index 4a46a11e460..dadac1d393c 100644 --- a/scripts/zones/Ceizak_Battlegrounds/IDs.lua +++ b/scripts/zones/Ceizak_Battlegrounds/IDs.lua @@ -27,6 +27,7 @@ zones[xi.zone.CEIZAK_BATTLEGROUNDS] = ARTIFACT_TERMINAL_VOLUME = 7608, -- Your artifact has been charged to its terminal volume of kinetic units. SURPLUS_LOST_TO_AETHER = 7609, -- A surplus of kinetic unit[/s] has been lost to the aether. HOMEPOINT_SET = 7791, -- Home point set! + LEARNS_SPELL = 8031, -- learns ! UNCANNY_SENSATION = 8033, -- You are assaulted by an uncanny sensation. ENERGIES_COURSE = 8034, -- The arcane energies begin to course within your veins. MYSTICAL_WARMTH = 8035, -- You feel a mystical warmth welling up inside you! diff --git a/scripts/zones/Ceizak_Battlegrounds/npcs/Geomantic_Reservoir.lua b/scripts/zones/Ceizak_Battlegrounds/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..44b3f176f38 --- /dev/null +++ b/scripts/zones/Ceizak_Battlegrounds/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Ceizak Battlegrounds +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Frailty +-- !pos -450.391 0.001 -0.491 261 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_FRAILTY) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_FRAILTY) +end + +return entity diff --git a/scripts/zones/Crawlers_Nest/IDs.lua b/scripts/zones/Crawlers_Nest/IDs.lua index 29e5700e0e0..0a8af832b5c 100644 --- a/scripts/zones/Crawlers_Nest/IDs.lua +++ b/scripts/zones/Crawlers_Nest/IDs.lua @@ -37,6 +37,8 @@ zones[xi.zone.CRAWLERS_NEST] = ALREADY_POSSESS_TEMP = 7353, -- You already possess that temporary item. NO_COMBINATION = 7358, -- You were unable to enter a combination. REGIME_REGISTERED = 9436, -- New training regime registered! + LEARNS_SPELL = 11354, -- learns ! + UNCANNY_SENSATION = 11356, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 11388, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, mob = @@ -56,7 +58,6 @@ zones[xi.zone.CRAWLERS_NEST] = }, npc = { - CASKET_BASE = 17584433, TREASURE_CHEST = 17584475, TREASURE_COFFER = 17584476, }, diff --git a/scripts/zones/Crawlers_Nest/npcs/Geomantic_Reservoir.lua b/scripts/zones/Crawlers_Nest/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..0a0281f1cf4 --- /dev/null +++ b/scripts/zones/Crawlers_Nest/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Crawler's Nest +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-STR +-- !pos -170.623 -1.376 347.089 197 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_STR) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_STR) +end + +return entity diff --git a/scripts/zones/Dangruf_Wadi/IDs.lua b/scripts/zones/Dangruf_Wadi/IDs.lua index d1ddaeec5f2..143eda086fd 100644 --- a/scripts/zones/Dangruf_Wadi/IDs.lua +++ b/scripts/zones/Dangruf_Wadi/IDs.lua @@ -58,7 +58,6 @@ zones[xi.zone.DANGRUF_WADI] = }, npc = { - CASKET_BASE = 17559877, GEYSER_OFFSET = 17559899, AN_EMPTY_VESSEL_QM = 17559911, TREASURE_CHEST = 17559924, diff --git a/scripts/zones/Davoi/IDs.lua b/scripts/zones/Davoi/IDs.lua index d6da62c190b..ca454e7f358 100644 --- a/scripts/zones/Davoi/IDs.lua +++ b/scripts/zones/Davoi/IDs.lua @@ -36,6 +36,8 @@ zones[xi.zone.DAVOI] = WHERE_THE_TONBERRY_TOLD_YOU = 7928, -- This is where the Tonberry from Carpenters' Landing told you to bring the ... NOTHING_TO_DO = 7929, -- You have nothing left to do here. UNDER_ATTACK = 7931, -- You are under attack! + LEARNS_SPELL = 7971, -- learns ! + UNCANNY_SENSATION = 7973, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 7980, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, mob = diff --git a/scripts/zones/Davoi/npcs/Geomantic_Reservoir.lua b/scripts/zones/Davoi/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..2a12ac824b0 --- /dev/null +++ b/scripts/zones/Davoi/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Davoi +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Fend +-- !pos 173.098 3.643 -386.962 149 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_FEND) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_FEND) +end + +return entity diff --git a/scripts/zones/Den_of_Rancor/IDs.lua b/scripts/zones/Den_of_Rancor/IDs.lua index 79dd0c1028a..936a59e6419 100644 --- a/scripts/zones/Den_of_Rancor/IDs.lua +++ b/scripts/zones/Den_of_Rancor/IDs.lua @@ -72,7 +72,6 @@ zones[xi.zone.DEN_OF_RANCOR] = }, npc = { - CASKET_BASE = 17433024, LANTERN_OFFSET = 17433047, DROP_GATE = 17433051, TREASURE_COFFER = 17433077, diff --git a/scripts/zones/East_Ronfaure/IDs.lua b/scripts/zones/East_Ronfaure/IDs.lua index f68be004bd0..8cc2303844c 100644 --- a/scripts/zones/East_Ronfaure/IDs.lua +++ b/scripts/zones/East_Ronfaure/IDs.lua @@ -103,7 +103,6 @@ zones[xi.zone.EAST_RONFAURE] = npc = { - CASKET_BASE = 17191482, LOGGING = { 17191530, diff --git a/scripts/zones/East_Ronfaure/npcs/Geomantic_Reservoir.lua b/scripts/zones/East_Ronfaure/npcs/Geomantic_Reservoir.lua index 909bad1a0a2..18564f03837 100644 --- a/scripts/zones/East_Ronfaure/npcs/Geomantic_Reservoir.lua +++ b/scripts/zones/East_Ronfaure/npcs/Geomantic_Reservoir.lua @@ -2,7 +2,7 @@ -- Area: East Ronfaure -- NPC: Geomantic Reservoir -- Unlocks: Geo-Poison --- !pos 379.572 -39.057 57.502 +-- !pos 379.572 -39.057 57.502 101 ----------------------------------- require("scripts/globals/geomantic_reservoir") require("scripts/globals/spell_data") diff --git a/scripts/zones/East_Sarutabaruta/IDs.lua b/scripts/zones/East_Sarutabaruta/IDs.lua index e79c0529626..1d667ef7a8c 100644 --- a/scripts/zones/East_Sarutabaruta/IDs.lua +++ b/scripts/zones/East_Sarutabaruta/IDs.lua @@ -54,7 +54,6 @@ zones[xi.zone.EAST_SARUTABARUTA] = }, npc = { - CASKET_BASE = 17253006, }, } diff --git a/scripts/zones/East_Sarutabaruta/mobs/Crawler.lua b/scripts/zones/East_Sarutabaruta/mobs/Crawler.lua index e9211f9a886..29e3e3bafbe 100644 --- a/scripts/zones/East_Sarutabaruta/mobs/Crawler.lua +++ b/scripts/zones/East_Sarutabaruta/mobs/Crawler.lua @@ -15,7 +15,7 @@ entity.onMobDeath = function(mob, player, isKiller) end entity.onMobDespawn = function(mob) - xi.mob.phOnDespawn(mob, ID.mob.SPINY_SPIPI_PH, 10, math.random(2700, 7200)) -- 45 to 120 minutes + xi.mob.phOnDespawn(mob, ID.mob.SPINY_SPIPI_PH, 10, 2700) -- 45 minute minimum end return entity diff --git a/scripts/zones/East_Sarutabaruta/mobs/Duke_Decapod.lua b/scripts/zones/East_Sarutabaruta/mobs/Duke_Decapod.lua index eae4a3e7282..0d71155bdae 100644 --- a/scripts/zones/East_Sarutabaruta/mobs/Duke_Decapod.lua +++ b/scripts/zones/East_Sarutabaruta/mobs/Duke_Decapod.lua @@ -6,6 +6,19 @@ require("scripts/globals/hunts") ----------------------------------- local entity = {} +entity.onMobSpawn = function(mob) + mob:setMobMod(xi.mobMod.NO_STANDBACK, 1) +end + +entity.onMobFight = function(mob, target) + local castTime = mob:getLocalVar("dukeWater") + + if os.time() > castTime then + mob:castSpell(169, target) + mob:setLocalVar("dukeWater", os.time() + 10) + end +end + entity.onMobDeath = function(mob, player, isKiller) xi.hunts.checkHunt(mob, player, 255) end diff --git a/scripts/zones/Eastern_Adoulin/npcs/Ujlei_Zelekko.lua b/scripts/zones/Eastern_Adoulin/npcs/Ujlei_Zelekko.lua new file mode 100644 index 00000000000..1e14c1b1d40 --- /dev/null +++ b/scripts/zones/Eastern_Adoulin/npcs/Ujlei_Zelekko.lua @@ -0,0 +1,69 @@ +----------------------------------- +-- Area: Eastern Adoulin (257) +-- NPC: Ujlei Zelekk +-- Type: Peacekeepers Coalition Guard +-- !pos -102.754 -0.65 16.161 257 +-- !gotoid 17830177 +----------------------------------- +require('scripts/globals/items') +require('scripts/globals/npc_util') +require('scripts/globals/settings') +require('scripts/globals/extravaganza') +----------------------------------- +local entity = {} + +local items = +{ + [ 4] = { cost = 2500, id = xi.items.COALITION_POTION }, + [ 260] = { cost = 2500, id = xi.items.COALITION_ETHER }, + [ 516] = { cost = 10, id = xi.items.SCROLL_OF_INSTANT_WARP }, + [ 772] = { cost = 10, id = xi.items.SCROLL_OF_INSTANT_RERAISE }, + [1028] = { cost = 1000, id = xi.items.SCROLL_OF_INSTANT_PROTECT }, + [1284] = { cost = 1000, id = xi.items.SCROLL_OF_INSTANT_SHELL }, + [1540] = { cost = 1000, id = xi.items.SCROLL_OF_INSTANT_STONESKIN }, + [1796] = { cost = 2000, id = xi.items.CIPHER_OF_MARGRETS_ALTER_EGO }, + [2052] = { cost = 2000, id = xi.items.CIPHER_OF_AMCHUCHUS_ALTER_EGO }, + [2308] = { cost = 2000, id = xi.items.CIPHER_OF_MORIMARS_ALTER_EGO }, +} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + local active = xi.extravaganza.campaignActive() + local bayld = player:getCurrency('bayld') + local edification = 0 -- TODO: Link Coalition Status to edification + local ciphers = + { + [0] = 0, -- no campaign + [1] = 20, -- Summer/NY campaign + [2] = 96, -- Spring/Fall campaign + [3] = 116, -- Both campaigns + } + + if active > 0 then -- TODO: implement logic to know when to display full Coalition Menu + player:startEvent(7513, 0, ciphers[active], edification, bayld) + else + -- Stare blankly For now + end +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + local bayld = player:getCurrency('bayld') + local ID = zones[player:getZoneID()] + + if csid == 7513 and option < 2309 then + if bayld >= items[option].cost then + if npcUtil.giveItem(player, items[option].id) then + player:delCurrency('bayld', items[option].cost) + end + elseif bayld < items[option].cost then + player:messageSpecial(ID.text.NOT_ENOUGH_BAYLD) + end + end +end + +return entity diff --git a/scripts/zones/Eastern_Altepa_Desert/IDs.lua b/scripts/zones/Eastern_Altepa_Desert/IDs.lua index acbb6ded3ec..a7425db2932 100644 --- a/scripts/zones/Eastern_Altepa_Desert/IDs.lua +++ b/scripts/zones/Eastern_Altepa_Desert/IDs.lua @@ -56,7 +56,6 @@ zones[xi.zone.EASTERN_ALTEPA_DESERT] = }, npc = { - CASKET_BASE = 17244596, OVERSEER_BASE = 17244627, -- Eaulevisat_RK in npc_list }, } diff --git a/scripts/zones/FeiYin/IDs.lua b/scripts/zones/FeiYin/IDs.lua index d80f743408e..90e10f86dba 100644 --- a/scripts/zones/FeiYin/IDs.lua +++ b/scripts/zones/FeiYin/IDs.lua @@ -39,6 +39,8 @@ zones[xi.zone.FEIYIN] = ALREADY_POSSESS_TEMP = 7518, -- You already possess that temporary item. NO_COMBINATION = 7523, -- You were unable to enter a combination. REGIME_REGISTERED = 9601, -- New training regime registered! + LEARNS_SPELL = 10649, -- learns ! + UNCANNY_SENSATION = 10651, -- You are assaulted by an uncanny sensation. HOMEPOINT_SET = 10700, -- Home point set! }, mob = @@ -77,7 +79,6 @@ zones[xi.zone.FEIYIN] = npc = { AFTERGRLOW_OFFSET = 17613147, - CASKET_BASE = 17613156, TREASURE_CHEST = 17613241, UNDERGROUND_POOL_OFFSET = 17613246, }, diff --git a/scripts/zones/FeiYin/npcs/Geomantic_Reservoir.lua b/scripts/zones/FeiYin/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..b2407d24122 --- /dev/null +++ b/scripts/zones/FeiYin/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Fei'Yin +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Paralysis +-- !pos 4.239 -0.009 255.206 204 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_PARALYSIS) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_PARALYSIS) +end + +return entity diff --git a/scripts/zones/Foret_de_Hennetiel/IDs.lua b/scripts/zones/Foret_de_Hennetiel/IDs.lua index 7e9d9ad4df7..5ce3f92a98e 100644 --- a/scripts/zones/Foret_de_Hennetiel/IDs.lua +++ b/scripts/zones/Foret_de_Hennetiel/IDs.lua @@ -29,6 +29,8 @@ zones[xi.zone.FORET_DE_HENNETIEL] = ARTIFACT_HAS_BEEN_CHARGED = 7692, -- Your artifact has been charged with kinetic unit[/s]. Your current stock of kinetic units totals . ARTIFACT_TERMINAL_VOLUME = 7693, -- Your artifact has been charged to its terminal volume of kinetic units. SURPLUS_LOST_TO_AETHER = 7694, -- A surplus of kinetic unit[/s] has been lost to the aether. + LEARNS_SPELL = 7928, -- learns ! + UNCANNY_SENSATION = 7930, -- You are assaulted by an uncanny sensation. HOMEPOINT_SET = 8002, -- Home point set! }, mob = diff --git a/scripts/zones/Foret_de_Hennetiel/npcs/Geomantic_Reservoir.lua b/scripts/zones/Foret_de_Hennetiel/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..9f725c15718 --- /dev/null +++ b/scripts/zones/Foret_de_Hennetiel/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Foret de Hennetiel +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Gravity +-- !pos 232.687 -0.500 152.658 262 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_GRAVITY) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_GRAVITY) +end + +return entity diff --git a/scripts/zones/Garlaige_Citadel/IDs.lua b/scripts/zones/Garlaige_Citadel/IDs.lua index d6a5d3d00c8..bdd8e7e45d3 100644 --- a/scripts/zones/Garlaige_Citadel/IDs.lua +++ b/scripts/zones/Garlaige_Citadel/IDs.lua @@ -47,6 +47,8 @@ zones[xi.zone.GARLAIGE_CITADEL] = ALREADY_POSSESS_TEMP = 7530, -- You already possess that temporary item. NO_COMBINATION = 7535, -- You were unable to enter a combination. REGIME_REGISTERED = 9613, -- New training regime registered! + LEARNS_SPELL = 11531, -- learns ! + UNCANNY_SENSATION = 11533, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 11564, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, mob = @@ -70,7 +72,6 @@ zones[xi.zone.GARLAIGE_CITADEL] = }, npc = { - CASKET_BASE = 17596738, BANISHING_GATE_OFFSET = 17596761, TREASURE_CHEST = 17596812, TREASURE_COFFER = 17596813, diff --git a/scripts/zones/Garlaige_Citadel/npcs/Geomantic_Reservoir.lua b/scripts/zones/Garlaige_Citadel/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..c4d58974f6d --- /dev/null +++ b/scripts/zones/Garlaige_Citadel/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Garlaige Citadel +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-VIT +-- !pos -83.898 5.568 139.600 200 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_VIT) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_VIT) +end + +return entity diff --git a/scripts/zones/Giddeus/IDs.lua b/scripts/zones/Giddeus/IDs.lua index b9972814037..e0748c5c2a4 100644 --- a/scripts/zones/Giddeus/IDs.lua +++ b/scripts/zones/Giddeus/IDs.lua @@ -33,11 +33,6 @@ zones[xi.zone.GIDDEUS] = { HOO_MJUU_THE_TORRENT_PH = { - [17371490] = 17371515, -- -63.000 -0.860 -91.000 - [17371498] = 17371515, -- -32.000 0.740 -105.000 - [17371486] = 17371515, -- -37.100 0.582 -127.259 - [17371504] = 17371515, -- -42.389 0.315 -130.930 - [17371508] = 17371515, -- -57.000 -2.000 -119.000 [17371513] = 17371515, -- -39.073 0.597 -115.279 }, JUU_DUZU_THE_WHIRLWIND_PH = diff --git a/scripts/zones/Giddeus/mobs/Yagudo_Mendicant.lua b/scripts/zones/Giddeus/mobs/Yagudo_Mendicant.lua index 619036278b1..a15914e4fe6 100644 --- a/scripts/zones/Giddeus/mobs/Yagudo_Mendicant.lua +++ b/scripts/zones/Giddeus/mobs/Yagudo_Mendicant.lua @@ -11,7 +11,7 @@ entity.onMobDeath = function(mob, player, isKiller) end entity.onMobDespawn = function(mob) - xi.mob.phOnDespawn(mob, ID.mob.HOO_MJUU_THE_TORRENT_PH, 5, 3600) -- 1 hour + xi.mob.phOnDespawn(mob, ID.mob.HOO_MJUU_THE_TORRENT_PH, 12, 3600) -- 1 hour end return entity diff --git a/scripts/zones/Giddeus/mobs/Yagudo_Persecutor.lua b/scripts/zones/Giddeus/mobs/Yagudo_Persecutor.lua index 56dbbcd78b9..f7545bac8d3 100644 --- a/scripts/zones/Giddeus/mobs/Yagudo_Persecutor.lua +++ b/scripts/zones/Giddeus/mobs/Yagudo_Persecutor.lua @@ -11,7 +11,7 @@ entity.onMobDeath = function(mob, player, isKiller) end entity.onMobDespawn = function(mob) - xi.mob.phOnDespawn(mob, ID.mob.JUU_DUZU_THE_WHIRLWIND_PH, 5, math.random(3600, 7200)) -- 1 to 2 hours + xi.mob.phOnDespawn(mob, ID.mob.JUU_DUZU_THE_WHIRLWIND_PH, 5, 3600) -- 1 to 2 hours end return entity diff --git a/scripts/zones/Giddeus/mobs/Yagudo_Piper.lua b/scripts/zones/Giddeus/mobs/Yagudo_Piper.lua index 193f5d60b55..1ffd0351ca8 100644 --- a/scripts/zones/Giddeus/mobs/Yagudo_Piper.lua +++ b/scripts/zones/Giddeus/mobs/Yagudo_Piper.lua @@ -12,7 +12,7 @@ entity.onMobDeath = function(mob, player, isKiller) end entity.onMobDespawn = function(mob) - xi.mob.phOnDespawn(mob, ID.mob.VUU_PUQU_THE_BEGUILER_PH, 5, 900) -- 15 minutes + xi.mob.phOnDespawn(mob, ID.mob.VUU_PUQU_THE_BEGUILER_PH, 15, 900) -- 15 minutes end return entity diff --git a/scripts/zones/Grand_Palace_of_HuXzoi/mobs/Ixghrah.lua b/scripts/zones/Grand_Palace_of_HuXzoi/mobs/Ixghrah.lua index 8773dc915f0..f4fda9b7e75 100644 --- a/scripts/zones/Grand_Palace_of_HuXzoi/mobs/Ixghrah.lua +++ b/scripts/zones/Grand_Palace_of_HuXzoi/mobs/Ixghrah.lua @@ -131,7 +131,7 @@ entity.onMobFight = function(mob, target) end entity.onMobDeath = function(mob, player, isKiller) - if (player:getCurrentMission(xi.mission.log_id.cop) == xi.mission.id.cop.A_FATE_DECIDED and player:getCharVar("PromathiaStatus")==1) then + if player:getCurrentMission(xi.mission.log_id.COP) == xi.mission.id.cop.A_FATE_DECIDED and player:getCharVar("PromathiaStatus") == 1 then player:setCharVar("PromathiaStatus", 2) end end diff --git a/scripts/zones/Gusgen_Mines/IDs.lua b/scripts/zones/Gusgen_Mines/IDs.lua index 6db38ab499a..51ca8ffc32d 100644 --- a/scripts/zones/Gusgen_Mines/IDs.lua +++ b/scripts/zones/Gusgen_Mines/IDs.lua @@ -41,6 +41,8 @@ zones[xi.zone.GUSGEN_MINES] = ALREADY_POSSESS_TEMP = 8308, -- You already possess that temporary item. NO_COMBINATION = 8313, -- You were unable to enter a combination. REGIME_REGISTERED = 10391, -- New training regime registered! + LEARNS_SPELL = 11439, -- learns ! + UNCANNY_SENSATION = 11441, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 11476, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, mob = @@ -59,7 +61,6 @@ zones[xi.zone.GUSGEN_MINES] = }, npc = { - CASKET_BASE = 17580348, TREASURE_CHEST = 17580403, MINING = { diff --git a/scripts/zones/Gusgen_Mines/npcs/Geomantic_Reservoir.lua b/scripts/zones/Gusgen_Mines/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..ee70f1299af --- /dev/null +++ b/scripts/zones/Gusgen_Mines/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Gusgen Mines +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Focus +-- !pos -20.869 -59.736 -180.233 196 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_FOCUS) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_FOCUS) +end + +return entity diff --git a/scripts/zones/Gustav_Tunnel/IDs.lua b/scripts/zones/Gustav_Tunnel/IDs.lua index cf14aee2c64..25c032e65cd 100644 --- a/scripts/zones/Gustav_Tunnel/IDs.lua +++ b/scripts/zones/Gustav_Tunnel/IDs.lua @@ -79,7 +79,6 @@ zones[xi.zone.GUSTAV_TUNNEL] = }, npc = { - CASKET_BASE = 17645851, }, } diff --git a/scripts/zones/Ifrits_Cauldron/IDs.lua b/scripts/zones/Ifrits_Cauldron/IDs.lua index 56b2b463992..421acd241bf 100644 --- a/scripts/zones/Ifrits_Cauldron/IDs.lua +++ b/scripts/zones/Ifrits_Cauldron/IDs.lua @@ -82,7 +82,6 @@ zones[xi.zone.IFRITS_CAULDRON] = }, npc = { - CASKET_BASE = 17617182, FLAME_SPOUT_OFFSET = 17617204, TREASURE_COFFER = 17617224, MINING = diff --git a/scripts/zones/Inner_Horutoto_Ruins/IDs.lua b/scripts/zones/Inner_Horutoto_Ruins/IDs.lua index fc0684f5294..e2894177e9a 100644 --- a/scripts/zones/Inner_Horutoto_Ruins/IDs.lua +++ b/scripts/zones/Inner_Horutoto_Ruins/IDs.lua @@ -50,7 +50,6 @@ zones[xi.zone.INNER_HORUTOTO_RUINS] = }, npc = { - CASKET_BASE = 17563838, PORTAL_CIRCLE_BASE = 17563861, TREASURE_CHEST = 17563914, }, diff --git a/scripts/zones/Jugner_Forest/IDs.lua b/scripts/zones/Jugner_Forest/IDs.lua index d89c51fc2bf..f3e59a800a1 100644 --- a/scripts/zones/Jugner_Forest/IDs.lua +++ b/scripts/zones/Jugner_Forest/IDs.lua @@ -108,7 +108,6 @@ zones[xi.zone.JUGNER_FOREST] = npc = { - CASKET_BASE = 17203786, OVERSEER_BASE = 17203848, -- Chaplion_RK in npc_list LOGGING = { diff --git a/scripts/zones/King_Ranperres_Tomb/IDs.lua b/scripts/zones/King_Ranperres_Tomb/IDs.lua index ba81ba82d36..e82c33dd719 100644 --- a/scripts/zones/King_Ranperres_Tomb/IDs.lua +++ b/scripts/zones/King_Ranperres_Tomb/IDs.lua @@ -52,7 +52,6 @@ zones[xi.zone.KING_RANPERRES_TOMB] = }, npc = { - CASKET_BASE = 17555907, TREASURE_CHEST = 17555955, }, } diff --git a/scripts/zones/Konschtat_Highlands/IDs.lua b/scripts/zones/Konschtat_Highlands/IDs.lua index cd60f9ec42f..e860bf1f8cd 100644 --- a/scripts/zones/Konschtat_Highlands/IDs.lua +++ b/scripts/zones/Konschtat_Highlands/IDs.lua @@ -53,9 +53,10 @@ zones[xi.zone.KONSCHTAT_HIGHLANDS] = VOIDWALKER_UPGRADE_KI_2 = 10978, -- The takes on a deeper, richer hue and becomes ! VOIDWALKER_BREAK_KI = 10979, -- The shatters into tiny fragments. VOIDWALKER_OBTAIN_KI = 10980, -- Obtained key item: ! + LEARNS_SPELL = 11916, -- learns ! + UNCANNY_SENSATION = 11918, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 11925, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, - mob = { STRAY_MARY_PH = @@ -117,7 +118,6 @@ zones[xi.zone.KONSCHTAT_HIGHLANDS] = npc = { - CASKET_BASE = 17220111, }, } diff --git a/scripts/zones/Konschtat_Highlands/npcs/Geomantic_Reservoir.lua b/scripts/zones/Konschtat_Highlands/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..d117ca3c1cd --- /dev/null +++ b/scripts/zones/Konschtat_Highlands/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Konschtat Highlands +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Precision +-- !pos -246.883 40.168 301.159 108 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_PRECISION) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_PRECISION) +end + +return entity diff --git a/scripts/zones/Korroloka_Tunnel/IDs.lua b/scripts/zones/Korroloka_Tunnel/IDs.lua index 4359e956760..a8bd87596c9 100644 --- a/scripts/zones/Korroloka_Tunnel/IDs.lua +++ b/scripts/zones/Korroloka_Tunnel/IDs.lua @@ -69,7 +69,6 @@ zones[xi.zone.KORROLOKA_TUNNEL] = npc = { MORION_WORM_QM = 17486216, - CASKET_BASE = 17486218, EXCAVATION = { 17486256, diff --git a/scripts/zones/Kuftal_Tunnel/IDs.lua b/scripts/zones/Kuftal_Tunnel/IDs.lua index abc11ee8042..1f476b08485 100644 --- a/scripts/zones/Kuftal_Tunnel/IDs.lua +++ b/scripts/zones/Kuftal_Tunnel/IDs.lua @@ -110,7 +110,6 @@ zones[xi.zone.KUFTAL_TUNNEL] = npc = { PHANTOM_WORM_QM = 17490253, - CASKET_BASE = 17490257, DOOR_ROCK = 17490280, TREASURE_COFFER = 17490304, }, diff --git a/scripts/zones/La_Theine_Plateau/IDs.lua b/scripts/zones/La_Theine_Plateau/IDs.lua index 19bdc608c54..75cc75f3020 100644 --- a/scripts/zones/La_Theine_Plateau/IDs.lua +++ b/scripts/zones/La_Theine_Plateau/IDs.lua @@ -57,9 +57,10 @@ zones[xi.zone.LA_THEINE_PLATEAU] = VOIDWALKER_UPGRADE_KI_2 = 11316, -- The takes on a deeper, richer hue and becomes ! VOIDWALKER_BREAK_KI = 11317, -- The shatters into tiny fragments. VOIDWALKER_OBTAIN_KI = 11318, -- Obtained key item: ! + LEARNS_SPELL = 12336, -- learns ! + UNCANNY_SENSATION = 12338, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 12345, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, - mob = { TUMBLING_TRUFFLE_PH = @@ -119,7 +120,6 @@ zones[xi.zone.LA_THEINE_PLATEAU] = npc = { FALLEN_EGG = 17195583, - CASKET_BASE = 17195584, RAINBOW = 17195607, }, } diff --git a/scripts/zones/La_Theine_Plateau/npcs/Geomantic_Reservoir.lua b/scripts/zones/La_Theine_Plateau/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..f6b08a631ed --- /dev/null +++ b/scripts/zones/La_Theine_Plateau/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: La Theine Plateau +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Refresh +-- !pos 400.026 70.700 365.002 102 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_REGEN) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_REGEN) +end + +return entity diff --git a/scripts/zones/La_Theine_Plateau/npcs/Geomantic_Reservoir_2.lua b/scripts/zones/La_Theine_Plateau/npcs/Geomantic_Reservoir_2.lua new file mode 100644 index 00000000000..da1737be538 --- /dev/null +++ b/scripts/zones/La_Theine_Plateau/npcs/Geomantic_Reservoir_2.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: La Theine Plateau +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Regen +-- !pos -5.052 54.625 -405.673 102 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_REFRESH) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_REFRESH) +end + +return entity diff --git a/scripts/zones/Labyrinth_of_Onzozo/IDs.lua b/scripts/zones/Labyrinth_of_Onzozo/IDs.lua index 6b12d44429c..d3763a716d7 100644 --- a/scripts/zones/Labyrinth_of_Onzozo/IDs.lua +++ b/scripts/zones/Labyrinth_of_Onzozo/IDs.lua @@ -89,7 +89,6 @@ zones[xi.zone.LABYRINTH_OF_ONZOZO] = }, npc = { - CASKET_BASE = 17649867, TREASURE_CHEST = 17649900, }, } diff --git a/scripts/zones/Lower_Delkfutts_Tower/IDs.lua b/scripts/zones/Lower_Delkfutts_Tower/IDs.lua index 37b3e2c1804..05d48ceddc2 100644 --- a/scripts/zones/Lower_Delkfutts_Tower/IDs.lua +++ b/scripts/zones/Lower_Delkfutts_Tower/IDs.lua @@ -29,6 +29,8 @@ zones[xi.zone.LOWER_DELKFUTTS_TOWER] = ALREADY_POSSESS_TEMP = 8632, -- You already possess that temporary item. NO_COMBINATION = 8637, -- You were unable to enter a combination. REGIME_REGISTERED = 10715, -- New training regime registered! + LEARNS_SPELL = 11763, -- learns ! + UNCANNY_SENSATION = 11765, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 11772, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, mob = @@ -51,7 +53,6 @@ zones[xi.zone.LOWER_DELKFUTTS_TOWER] = }, npc = { - CASKET_BASE = 17531134, }, } diff --git a/scripts/zones/Lower_Delkfutts_Tower/npcs/Geomantic_Reservoir.lua b/scripts/zones/Lower_Delkfutts_Tower/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..60f662be699 --- /dev/null +++ b/scripts/zones/Lower_Delkfutts_Tower/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Lower Delkfutt's Tower +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-CHR +-- !pos 340.285 -15.601 19.968 184 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_CHR) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_CHR) +end + +return entity diff --git a/scripts/zones/Marjami_Ravine/IDs.lua b/scripts/zones/Marjami_Ravine/IDs.lua index 054ccdee408..9183dd2ecb6 100644 --- a/scripts/zones/Marjami_Ravine/IDs.lua +++ b/scripts/zones/Marjami_Ravine/IDs.lua @@ -30,6 +30,8 @@ zones[xi.zone.MARJAMI_RAVINE] = SURPLUS_LOST_TO_AETHER = 7711, -- A surplus of kinetic unit[/s] has been lost to the aether. LEATHER_SCRAPS_STREWN = 7733, -- Leather scraps are strewn about the ground. HOMEPOINT_SET = 7876, -- Home point set! + LEARNS_SPELL = 8174, -- learns ! + UNCANNY_SENSATION = 8176, -- You are assaulted by an uncanny sensation. }, mob = { diff --git a/scripts/zones/Marjami_Ravine/npcs/Geomantic_Reservoir.lua b/scripts/zones/Marjami_Ravine/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..4b169e0b153 --- /dev/null +++ b/scripts/zones/Marjami_Ravine/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Marjami Ravine +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Haste +-- !pos 189.015 -40.000 241.025 266 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_HASTE) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_HASTE) +end + +return entity diff --git a/scripts/zones/Maze_of_Shakhrami/IDs.lua b/scripts/zones/Maze_of_Shakhrami/IDs.lua index 46b82e44747..5dfedffa588 100644 --- a/scripts/zones/Maze_of_Shakhrami/IDs.lua +++ b/scripts/zones/Maze_of_Shakhrami/IDs.lua @@ -57,7 +57,6 @@ zones[xi.zone.MAZE_OF_SHAKHRAMI] = }, npc = { - CASKET_BASE = 17588712, FOSSIL_ROCK_OFFSET = 17588737, TREASURE_CHEST = 17588773, EXCAVATION = diff --git a/scripts/zones/Meriphataud_Mountains/IDs.lua b/scripts/zones/Meriphataud_Mountains/IDs.lua index c34607d046a..d43efceb9e5 100644 --- a/scripts/zones/Meriphataud_Mountains/IDs.lua +++ b/scripts/zones/Meriphataud_Mountains/IDs.lua @@ -104,7 +104,6 @@ zones[xi.zone.MERIPHATAUD_MOUNTAINS] = npc = { - CASKET_BASE = 17265219, OVERSEER_BASE = 17265271, -- Chegourt_RK in npc_list }, } diff --git a/scripts/zones/Middle_Delkfutts_Tower/IDs.lua b/scripts/zones/Middle_Delkfutts_Tower/IDs.lua index b0c79ea8165..272e6c65588 100644 --- a/scripts/zones/Middle_Delkfutts_Tower/IDs.lua +++ b/scripts/zones/Middle_Delkfutts_Tower/IDs.lua @@ -70,7 +70,6 @@ zones[xi.zone.MIDDLE_DELKFUTTS_TOWER] = }, npc = { - CASKET_BASE = 17420640, TREASURE_CHEST = 17420676, }, } diff --git a/scripts/zones/Morimar_Basalt_Fields/IDs.lua b/scripts/zones/Morimar_Basalt_Fields/IDs.lua index 7b307dacd12..2a072d6887c 100644 --- a/scripts/zones/Morimar_Basalt_Fields/IDs.lua +++ b/scripts/zones/Morimar_Basalt_Fields/IDs.lua @@ -27,6 +27,8 @@ zones[xi.zone.MORIMAR_BASALT_FIELDS] = ARTIFACT_HAS_BEEN_CHARGED = 7608, -- Your artifact has been charged with kinetic unit[/s]. Your current stock of kinetic units totals . ARTIFACT_TERMINAL_VOLUME = 7609, -- Your artifact has been charged to its terminal volume of kinetic units. SURPLUS_LOST_TO_AETHER = 7610, -- A surplus of kinetic unit[/s] has been lost to the aether. + LEARNS_SPELL = 7855, -- learns ! + UNCANNY_SENSATION = 7857, -- You are assaulted by an uncanny sensation. HOMEPOINT_SET = 8171, -- Home point set! }, mob = diff --git a/scripts/zones/Morimar_Basalt_Fields/npcs/Geomantic_Reservoir.lua b/scripts/zones/Morimar_Basalt_Fields/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..09ceb838bea --- /dev/null +++ b/scripts/zones/Morimar_Basalt_Fields/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Morimar Basalt Fields +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Malaise +-- !pos -166.764 -1.377 -49.194 265 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_MALAISE) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_MALAISE) +end + +return entity diff --git a/scripts/zones/Morimar_Basalt_Fields/npcs/Geomantic_Reservoir_2.lua b/scripts/zones/Morimar_Basalt_Fields/npcs/Geomantic_Reservoir_2.lua new file mode 100644 index 00000000000..c306e6bdd34 --- /dev/null +++ b/scripts/zones/Morimar_Basalt_Fields/npcs/Geomantic_Reservoir_2.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Morimar Basalt Fields +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Fade +-- !pos 337.643 -16.745 305.544 265 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_FADE) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_FADE) +end + +return entity diff --git a/scripts/zones/North_Gustaberg/IDs.lua b/scripts/zones/North_Gustaberg/IDs.lua index 89ff79db093..890e2360b4d 100644 --- a/scripts/zones/North_Gustaberg/IDs.lua +++ b/scripts/zones/North_Gustaberg/IDs.lua @@ -133,7 +133,6 @@ zones[xi.zone.NORTH_GUSTABERG] = npc = { - CASKET_BASE = 17212023, OVERSEER_BASE = 17212060, -- Ennigreaud_RK in npc_list }, } diff --git a/scripts/zones/Ordelles_Caves/IDs.lua b/scripts/zones/Ordelles_Caves/IDs.lua index 1cd5b87cd46..99bde6f4a97 100644 --- a/scripts/zones/Ordelles_Caves/IDs.lua +++ b/scripts/zones/Ordelles_Caves/IDs.lua @@ -64,7 +64,6 @@ zones[xi.zone.ORDELLES_CAVES] = }, npc = { - CASKET_BASE = 17568148, TREASURE_CHEST = 17568192, }, } diff --git a/scripts/zones/Outer_Horutoto_Ruins/IDs.lua b/scripts/zones/Outer_Horutoto_Ruins/IDs.lua index 56c89349b4a..53cc867116f 100644 --- a/scripts/zones/Outer_Horutoto_Ruins/IDs.lua +++ b/scripts/zones/Outer_Horutoto_Ruins/IDs.lua @@ -61,7 +61,6 @@ zones[xi.zone.OUTER_HORUTOTO_RUINS] = }, npc = { - CASKET_BASE = 17572223, GATE_MAGICAL_GIZMO = 17572248, TREASURE_CHEST = 17572290, }, diff --git a/scripts/zones/Outer_Horutoto_Ruins/mobs/Ghoul.lua b/scripts/zones/Outer_Horutoto_Ruins/mobs/Ghoul.lua index 1405e8332cc..aa6c60aad34 100644 --- a/scripts/zones/Outer_Horutoto_Ruins/mobs/Ghoul.lua +++ b/scripts/zones/Outer_Horutoto_Ruins/mobs/Ghoul.lua @@ -12,7 +12,7 @@ entity.onMobDeath = function(mob, player, isKiller) end entity.onMobDespawn = function(mob) - xi.mob.phOnDespawn(mob, ID.mob.AH_PUCH_PH, 20, math.random(3600, 10800)) -- 1 to 3 hours + xi.mob.phOnDespawn(mob, ID.mob.AH_PUCH_PH, 20, 3600) -- 1 to 3 hours end return entity diff --git a/scripts/zones/Pashhow_Marshlands/IDs.lua b/scripts/zones/Pashhow_Marshlands/IDs.lua index d4af8fd9a6d..388475e55b0 100644 --- a/scripts/zones/Pashhow_Marshlands/IDs.lua +++ b/scripts/zones/Pashhow_Marshlands/IDs.lua @@ -113,7 +113,6 @@ zones[xi.zone.PASHHOW_MARSHLANDS] = npc = { - CASKET_BASE = 17224275, OVERSEER_BASE = 17224326, -- Mesachedeau_RK in npc_list }, } diff --git a/scripts/zones/Qufim_Island/IDs.lua b/scripts/zones/Qufim_Island/IDs.lua index f3c396c176a..597e62ce135 100644 --- a/scripts/zones/Qufim_Island/IDs.lua +++ b/scripts/zones/Qufim_Island/IDs.lua @@ -40,6 +40,8 @@ zones[xi.zone.QUFIM_ISLAND] = ALREADY_POSSESS_TEMP = 8066, -- You already possess that temporary item. NO_COMBINATION = 8071, -- You were unable to enter a combination. REGIME_REGISTERED = 10347, -- New training regime registered! + LEARNS_SPELL = 12663, -- learns ! + UNCANNY_SENSATION = 12665, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 12672, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. HOMEPOINT_SET = 12714, -- Home point set! }, @@ -63,8 +65,6 @@ zones[xi.zone.QUFIM_ISLAND] = }, npc = { - CASKET_BASE = 17293678, - OVERSEER_BASE = 17293716, -- Pitoire_RK in npc_list }, } diff --git a/scripts/zones/Qufim_Island/npcs/Geomantic_Reservoir.lua b/scripts/zones/Qufim_Island/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..710f57640e2 --- /dev/null +++ b/scripts/zones/Qufim_Island/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Qufim Island +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Attunement +-- !pos 185.136 20.528 -208.424 126 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_ATTUNEMENT) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_ATTUNEMENT) +end + +return entity diff --git a/scripts/zones/Quicksand_Caves/IDs.lua b/scripts/zones/Quicksand_Caves/IDs.lua index a9a87dfe48e..0ed9af1c502 100644 --- a/scripts/zones/Quicksand_Caves/IDs.lua +++ b/scripts/zones/Quicksand_Caves/IDs.lua @@ -112,7 +112,6 @@ zones[xi.zone.QUICKSAND_CAVES] = [3] = {479.000, -14.000, -815.000}, [4] = {814.000, -14.000, -761.000} }, - CASKET_BASE = 17629671, ORNATE_DOOR_OFFSET = 17629693, CHAINS_THAT_BIND_US_QM = 17629746, TREASURE_COFFER = 17629747, diff --git a/scripts/zones/Ranguemont_Pass/IDs.lua b/scripts/zones/Ranguemont_Pass/IDs.lua index ffa291acaa7..a32e222b38a 100644 --- a/scripts/zones/Ranguemont_Pass/IDs.lua +++ b/scripts/zones/Ranguemont_Pass/IDs.lua @@ -48,7 +48,6 @@ zones[xi.zone.RANGUEMONT_PASS] = }, npc = { - CASKET_BASE = 17457315, }, } diff --git a/scripts/zones/RoMaeve/IDs.lua b/scripts/zones/RoMaeve/IDs.lua index 58d4fa91e08..8c3a467dfc7 100644 --- a/scripts/zones/RoMaeve/IDs.lua +++ b/scripts/zones/RoMaeve/IDs.lua @@ -65,7 +65,6 @@ zones[xi.zone.ROMAEVE] = [9] = { -105.000, -3.000, -36.000}, -- E-9 [10] = { -160.000, -6.000, -107.000} -- D-10 }, - CASKET_BASE = 17277171, MOONGATE_OFFSET = 17277195, BASTOK_7_1_QM = 17277207, }, diff --git a/scripts/zones/Rolanberry_Fields/IDs.lua b/scripts/zones/Rolanberry_Fields/IDs.lua index 87bebd547b5..b0697a92ee6 100644 --- a/scripts/zones/Rolanberry_Fields/IDs.lua +++ b/scripts/zones/Rolanberry_Fields/IDs.lua @@ -42,6 +42,8 @@ zones[xi.zone.ROLANBERRY_FIELDS] = VOIDWALKER_OBTAIN_KI = 10967, -- Obtained key item: ! AWAIT_YOUR_CHALLENGE = 12184, -- We await your challenge, traveler. LACK_LEGION_POINTS = 12221, -- It would seem that you lack the necessary amount of Legion points. + LEARNS_SPELL = 12269, -- learns ! + UNCANNY_SENSATION = 12271, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 12278, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, @@ -103,7 +105,6 @@ zones[xi.zone.ROLANBERRY_FIELDS] = npc = { - CASKET_BASE = 17228319, }, } diff --git a/scripts/zones/Rolanberry_Fields/npcs/Geomantic_Reservoir.lua b/scripts/zones/Rolanberry_Fields/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..e6d25eb70b1 --- /dev/null +++ b/scripts/zones/Rolanberry_Fields/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Rolanberry Fields +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-MND +-- !pos 243.900 -31.194 -255.254 110 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_MND) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_MND) +end + +return entity diff --git a/scripts/zones/RuAun_Gardens/IDs.lua b/scripts/zones/RuAun_Gardens/IDs.lua index 7190fa0dbca..5afc7664043 100644 --- a/scripts/zones/RuAun_Gardens/IDs.lua +++ b/scripts/zones/RuAun_Gardens/IDs.lua @@ -65,7 +65,6 @@ zones[xi.zone.RUAUN_GARDENS] = npc = { - CASKET_BASE = 17310003, TREASURE_COFFER = 17310019, PORTAL_TO_SEIRYU = 17310056, PORTAL_TO_GENBU = 17310059, diff --git a/scripts/zones/Sauromugue_Champaign/IDs.lua b/scripts/zones/Sauromugue_Champaign/IDs.lua index 1550331e905..9e6bc173b39 100644 --- a/scripts/zones/Sauromugue_Champaign/IDs.lua +++ b/scripts/zones/Sauromugue_Champaign/IDs.lua @@ -44,9 +44,10 @@ zones[xi.zone.SAUROMUGUE_CHAMPAIGN] = VOIDWALKER_UPGRADE_KI_2 = 11004, -- The takes on a deeper, richer hue and becomes ! VOIDWALKER_BREAK_KI = 11005, -- The shatters into tiny fragments. VOIDWALKER_OBTAIN_KI = 11006, -- Obtained key item: ! + LEARNS_SPELL = 12504, -- learns ! + UNCANNY_SENSATION = 12506, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 12513, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, - mob = { DEADLY_DODO_PH = @@ -104,7 +105,6 @@ zones[xi.zone.SAUROMUGUE_CHAMPAIGN] = npc = { - CASKET_BASE = 17269190, QM2 = 17269228, }, } diff --git a/scripts/zones/Sauromugue_Champaign/npcs/Geomantic_Reservoir.lua b/scripts/zones/Sauromugue_Champaign/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..59c3003624a --- /dev/null +++ b/scripts/zones/Sauromugue_Champaign/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Sauromugue Champaign +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Fury +-- !pos 384.047 45.466 384.224 120 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_FURY) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_FURY) +end + +return entity diff --git a/scripts/zones/Sea_Serpent_Grotto/IDs.lua b/scripts/zones/Sea_Serpent_Grotto/IDs.lua index dc4c019f83d..17ae9e764bc 100644 --- a/scripts/zones/Sea_Serpent_Grotto/IDs.lua +++ b/scripts/zones/Sea_Serpent_Grotto/IDs.lua @@ -123,7 +123,6 @@ zones[xi.zone.SEA_SERPENT_GROTTO] = }, npc = { - CASKET_BASE = 17498579, TREASURE_CHEST = 17498625, TREASURE_COFFER = 17498626, }, diff --git a/scripts/zones/South_Gustaberg/IDs.lua b/scripts/zones/South_Gustaberg/IDs.lua index 9d61ddd89f7..129bb0b820a 100644 --- a/scripts/zones/South_Gustaberg/IDs.lua +++ b/scripts/zones/South_Gustaberg/IDs.lua @@ -63,7 +63,6 @@ zones[xi.zone.SOUTH_GUSTABERG] = }, npc = { - CASKET_BASE = 17216140, }, } diff --git a/scripts/zones/Southern_San_dOria_[S]/IDs.lua b/scripts/zones/Southern_San_dOria_[S]/IDs.lua index da7f1eefae6..266553b05ed 100644 --- a/scripts/zones/Southern_San_dOria_[S]/IDs.lua +++ b/scripts/zones/Southern_San_dOria_[S]/IDs.lua @@ -46,7 +46,11 @@ zones[xi.zone.SOUTHERN_SAN_DORIA_S] = ALLIED_SIGIL = 12924, -- You have received the Allied Sigil! DOOR_IS_FIRMLY_LOCKED = 13550, -- The door is firmly locked... CONCERNED_FOR_WOUNDED = 13679, -- Concerned for the wounded Sir Gaelise, Lilisette and Portia have been paying him regular visits as of late. Alexei Mayakov suggests that the Chateau d'Oraguille is where the two of them are likely to be. + MUST_GATHER_SIGNATURES = 14009, -- You must gather signatures from at least knights of the Kingdom. + CURRENT_PETITIONS = 14010, -- Current : . + HAVE_GATHERED_SIGNATURE = 14281, -- You have gathered [signature/signatures] for the ! RETRIEVE_DIALOG_ID = 15587, -- You retrieve from the porter moogle's care. + NOT_ENOUGH_NOTES = 15612, -- You tryin' to cheat me? That's not nearly enough notes! COMMON_SENSE_SURVIVAL = 15661, -- It appears that you have arrived at a new survival guide provided by the Servicemen's Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, mob = diff --git a/scripts/zones/Southern_San_dOria_[S]/npcs/Miliart_TK.lua b/scripts/zones/Southern_San_dOria_[S]/npcs/Miliart_TK.lua index cb6ed2cc56b..fa90e5d5484 100644 --- a/scripts/zones/Southern_San_dOria_[S]/npcs/Miliart_TK.lua +++ b/scripts/zones/Southern_San_dOria_[S]/npcs/Miliart_TK.lua @@ -8,6 +8,7 @@ local ID = require("scripts/zones/Southern_San_dOria_[S]/IDs") require("scripts/globals/status") require("scripts/globals/campaign") require("scripts/globals/utils") +require("scripts/globals/extravaganza") ----------------------------------- local entity = {} @@ -17,7 +18,7 @@ end entity.onTrigger = function(player, npc) local notes = player:getCurrency("allied_notes") local freelances = 99 -- Faking it for now - local ciphers = 0 + local cipher = xi.extravaganza.campaignActive() * 4 -- 0 for not displaying ciphers -- 4 for Valaneiral (New Year's & Summer Alter Ego Extravaganzas) -- 8 for Adelheid (Spring & Autumn Alter Ego Extravaganzas) @@ -35,7 +36,7 @@ entity.onTrigger = function(player, npc) if medalRank == 0 then player:startEvent(111) else - player:startEvent(110, allegiance, notes, freelances, ciphers, medalRank, bonusEffects, timeStamp, 0) + player:startEvent(110, allegiance, notes, freelances, cipher, medalRank, bonusEffects, timeStamp, 0) end end diff --git a/scripts/zones/Southern_San_dOria_[S]/npcs/Shixo.lua b/scripts/zones/Southern_San_dOria_[S]/npcs/Shixo.lua new file mode 100644 index 00000000000..461aa506594 --- /dev/null +++ b/scripts/zones/Southern_San_dOria_[S]/npcs/Shixo.lua @@ -0,0 +1,21 @@ +----------------------------------- +-- Area: Southern San d'Oria [S] +-- NPC: Shixo +-- Type: Alter Ego Extravaganza +-- !gotoid 17105699 +----------------------------------- +require('scripts/globals/extravaganza') + +local entity = {} + +entity.onTrigger = function(player, npc) + local notes = player:getCurrency("allied_notes") + + xi.extravaganza.shadowEraTrigger(player, npc, notes) +end + +entity.onEventFinish = function(player, csid, option) + xi.extravaganza.shadowEraFinish(player, csid, option) +end + +return entity diff --git a/scripts/zones/Tahrongi_Canyon/IDs.lua b/scripts/zones/Tahrongi_Canyon/IDs.lua index 6154f422df1..bb75dd1bb74 100644 --- a/scripts/zones/Tahrongi_Canyon/IDs.lua +++ b/scripts/zones/Tahrongi_Canyon/IDs.lua @@ -56,9 +56,10 @@ zones[xi.zone.TAHRONGI_CANYON] = VOIDWALKER_UPGRADE_KI_2 = 11016, -- The takes on a deeper, richer hue and becomes ! VOIDWALKER_BREAK_KI = 11017, -- The shatters into tiny fragments. VOIDWALKER_OBTAIN_KI = 11018, -- Obtained key item: ! + LEARNS_SPELL = 11945, -- learns ! + UNCANNY_SENSATION = 11947, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 11954, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, - mob = { SERPOPARD_ISHTAR_PH = @@ -109,7 +110,6 @@ zones[xi.zone.TAHRONGI_CANYON] = npc = { - CASKET_BASE = 17257008, SIGNPOST_OFFSET = 17257033, EXCAVATION = diff --git a/scripts/zones/Tahrongi_Canyon/npcs/Geomantic_Reservoir.lua b/scripts/zones/Tahrongi_Canyon/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..fad43895a29 --- /dev/null +++ b/scripts/zones/Tahrongi_Canyon/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Tahrongi Canyon +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Voidance +-- !pos 78.056 15.998 117.224 117 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_VOIDANCE) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_VOIDANCE) +end + +return entity diff --git a/scripts/zones/Temple_of_Uggalepih/IDs.lua b/scripts/zones/Temple_of_Uggalepih/IDs.lua index be31fbc5400..672b9cbe934 100644 --- a/scripts/zones/Temple_of_Uggalepih/IDs.lua +++ b/scripts/zones/Temple_of_Uggalepih/IDs.lua @@ -83,7 +83,6 @@ zones[xi.zone.TEMPLE_OF_UGGALEPIH] = }, npc = { - CASKET_BASE = 17428875, PLONGEUR_MONBERRY = 17428933, BOOK_OFFSET = 17428973, TEMPLE_GUARDIAN_DOOR = 17428978, diff --git a/scripts/zones/The_Boyahda_Tree/IDs.lua b/scripts/zones/The_Boyahda_Tree/IDs.lua index 3ec8b54e318..65625e7c1a5 100644 --- a/scripts/zones/The_Boyahda_Tree/IDs.lua +++ b/scripts/zones/The_Boyahda_Tree/IDs.lua @@ -87,7 +87,6 @@ zones[xi.zone.THE_BOYAHDA_TREE] = }, npc = { - CASKET_BASE = 17404358, TREASURE_COFFER = 17404395, }, } diff --git a/scripts/zones/The_Eldieme_Necropolis/IDs.lua b/scripts/zones/The_Eldieme_Necropolis/IDs.lua index 04ca0ef3260..f1f7e9f6135 100644 --- a/scripts/zones/The_Eldieme_Necropolis/IDs.lua +++ b/scripts/zones/The_Eldieme_Necropolis/IDs.lua @@ -57,6 +57,8 @@ zones[xi.zone.THE_ELDIEME_NECROPOLIS] = ALREADY_POSSESS_TEMP = 7599, -- You already possess that temporary item. NO_COMBINATION = 7604, -- You were unable to enter a combination. REGIME_REGISTERED = 9682, -- New training regime registered! + LEARNS_SPELL = 11600, -- learns ! + UNCANNY_SENSATION = 11602, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 11636, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, mob = @@ -80,7 +82,6 @@ zones[xi.zone.THE_ELDIEME_NECROPOLIS] = }, npc = { - CASKET_BASE = 17576280, GATE_OFFSET = 17576306, BRAZIER_OFFSET = 17576343, TREASURE_CHEST = 17576356, diff --git a/scripts/zones/The_Eldieme_Necropolis/npcs/Geomantic_Reservoir.lua b/scripts/zones/The_Eldieme_Necropolis/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..526060ac049 --- /dev/null +++ b/scripts/zones/The_Eldieme_Necropolis/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: The Eldieme Necropolis +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Slip +-- !pos 10.804 -0.031 -18.927 195 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_SLIP) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_SLIP) +end + +return entity diff --git a/scripts/zones/The_Eldieme_Necropolis_[S]/DefaultActions.lua b/scripts/zones/The_Eldieme_Necropolis_[S]/DefaultActions.lua new file mode 100644 index 00000000000..2f9228232d9 --- /dev/null +++ b/scripts/zones/The_Eldieme_Necropolis_[S]/DefaultActions.lua @@ -0,0 +1,7 @@ +local ID = require('scripts/zones/The_Eldieme_Necropolis_[S]/IDs') + +return { + ['Erik'] = { event = 1 }, + ['Gravestone'] = { messageSpecial = ID.text.NAMES_CARVED_ON_STONE }, + ['Sarcophagus_map_quest'] = { messageSpecial = ID.text.SARCOPHAGUS_SEALED }, +} diff --git a/scripts/zones/The_Eldieme_Necropolis_[S]/Zone.lua b/scripts/zones/The_Eldieme_Necropolis_[S]/Zone.lua index 6e133dfe89c..e2017e5c0ca 100644 --- a/scripts/zones/The_Eldieme_Necropolis_[S]/Zone.lua +++ b/scripts/zones/The_Eldieme_Necropolis_[S]/Zone.lua @@ -1,9 +1,5 @@ ----------------------------------- --- -- Zone: The_Eldieme_Necropolis_[S] (175) --- ------------------------------------ -local ID = require("scripts/zones/The_Eldieme_Necropolis_[S]/IDs") ----------------------------------- local zone_object = {} @@ -12,9 +8,11 @@ end zone_object.onZoneIn = function(player, prevZone) local cs = -1 - if (player:getXPos() == 0 and player:getYPos() == 0 and player:getZPos() == 0) then + + if player:getXPos() == 0 and player:getYPos() == 0 and player:getZPos() == 0 then player:setPos(420.035, -58.114, -119.51, 191) end + return cs end diff --git a/scripts/zones/The_Eldieme_Necropolis_[S]/npcs/Erik.lua b/scripts/zones/The_Eldieme_Necropolis_[S]/npcs/Erik.lua index 77152ed9ddc..32edbb6e505 100644 --- a/scripts/zones/The_Eldieme_Necropolis_[S]/npcs/Erik.lua +++ b/scripts/zones/The_Eldieme_Necropolis_[S]/npcs/Erik.lua @@ -4,35 +4,18 @@ -- Type: Quest NPC -- !pos 258.643, -33.249, 99.901 175 ----------------------------------- -local ID = require("scripts/zones/The_Eldieme_Necropolis_[S]/IDs") -require("scripts/globals/keyitems") -require("scripts/globals/settings") -require("scripts/globals/quests") -require("scripts/globals/npc_util") ------------------------------------ local entity = {} entity.onTrade = function(player, npc, trade) end entity.onTrigger = function(player, npc) - if - player:getQuestStatus(xi.quest.log_id.CRYSTAL_WAR, xi.quest.id.crystalWar.LOST_IN_TRANSLOCATION) == QUEST_ACCEPTED - and not player:hasKeyItem(xi.ki.LEFT_MAP_PIECE) - then - player:startEvent(3) - else - player:startEvent(1) - end end entity.onEventUpdate = function(player, csid, option) end entity.onEventFinish = function(player, csid, option) - if csid == 3 then - npcUtil.giveKeyItem(player, xi.ki.LEFT_MAP_PIECE) - end end return entity diff --git a/scripts/zones/The_Eldieme_Necropolis_[S]/npcs/Gravestone.lua b/scripts/zones/The_Eldieme_Necropolis_[S]/npcs/Gravestone.lua index 9c45dcca63a..7cbf4dab2fe 100644 --- a/scripts/zones/The_Eldieme_Necropolis_[S]/npcs/Gravestone.lua +++ b/scripts/zones/The_Eldieme_Necropolis_[S]/npcs/Gravestone.lua @@ -4,35 +4,18 @@ -- Type: Quest NPC -- !pos 254.428, -32.999, 20.001 175 ----------------------------------- -local ID = require("scripts/zones/The_Eldieme_Necropolis_[S]/IDs") -require("scripts/globals/keyitems") -require("scripts/globals/settings") -require("scripts/globals/quests") -require("scripts/globals/npc_util") ------------------------------------ local entity = {} entity.onTrade = function(player, npc, trade) end entity.onTrigger = function(player, npc) - if - player:getQuestStatus(xi.quest.log_id.CRYSTAL_WAR, xi.quest.id.crystalWar.LOST_IN_TRANSLOCATION) == QUEST_ACCEPTED - and not player:hasKeyItem(xi.ki.MIDDLE_MAP_PIECE) - then - player:startEvent(4) - else - player:messageSpecial(ID.text.NAMES_CARVED_ON_STONE) - end end entity.onEventUpdate = function(player, csid, option) end entity.onEventFinish = function(player, csid, option) - if csid == 4 then - npcUtil.giveKeyItem(player, xi.ki.MIDDLE_MAP_PIECE) - end end return entity diff --git a/scripts/zones/The_Eldieme_Necropolis_[S]/npcs/Sarcophagus_map_quest.lua b/scripts/zones/The_Eldieme_Necropolis_[S]/npcs/Sarcophagus_map_quest.lua index 9fa18edf1f2..b8503b34088 100644 --- a/scripts/zones/The_Eldieme_Necropolis_[S]/npcs/Sarcophagus_map_quest.lua +++ b/scripts/zones/The_Eldieme_Necropolis_[S]/npcs/Sarcophagus_map_quest.lua @@ -4,35 +4,18 @@ -- Type: Quest NPC -- !pos 336.594, -33.500, -56.728 175 ----------------------------------- -local ID = require("scripts/zones/The_Eldieme_Necropolis_[S]/IDs") -require("scripts/globals/keyitems") -require("scripts/globals/settings") -require("scripts/globals/quests") -require("scripts/globals/npc_util") ------------------------------------ local entity = {} entity.onTrade = function(player, npc, trade) end entity.onTrigger = function(player, npc) - if - player:getQuestStatus(xi.quest.log_id.CRYSTAL_WAR, xi.quest.id.crystalWar.LOST_IN_TRANSLOCATION) == QUEST_ACCEPTED - and not player:hasKeyItem(xi.ki.RIGHT_MAP_PIECE) - then - player:startEvent(5) - else - player:messageSpecial(ID.text.SARCOPHAGUS_SEALED) - end end entity.onEventUpdate = function(player, csid, option) end entity.onEventFinish = function(player, csid, option) - if csid == 5 then - npcUtil.giveKeyItem(player, xi.ki.RIGHT_MAP_PIECE) - end end return entity diff --git a/scripts/zones/The_Sanctuary_of_ZiTah/IDs.lua b/scripts/zones/The_Sanctuary_of_ZiTah/IDs.lua index adb1addfc2e..529e2553751 100644 --- a/scripts/zones/The_Sanctuary_of_ZiTah/IDs.lua +++ b/scripts/zones/The_Sanctuary_of_ZiTah/IDs.lua @@ -71,7 +71,6 @@ zones[xi.zone.THE_SANCTUARY_OF_ZITAH] = }, npc = { - CASKET_BASE = 17273338, OVERSEER_BASE = 17273365, -- Credaurion_RK in npc_list CERMET_HEADSTONE = 17273390, }, diff --git a/scripts/zones/The_Shrine_of_RuAvitau/IDs.lua b/scripts/zones/The_Shrine_of_RuAvitau/IDs.lua index 84285c49afc..0bc2eeb8391 100644 --- a/scripts/zones/The_Shrine_of_RuAvitau/IDs.lua +++ b/scripts/zones/The_Shrine_of_RuAvitau/IDs.lua @@ -67,7 +67,6 @@ zones[xi.zone.THE_SHRINE_OF_RUAVITAU] = [18] = "y", [19] = "b", }, OLLAS_QM = 17506692, - CASKET_BASE = 17506695, DOOR_OFFSET = 17506718, MONOLITH_OFFSET = 17506741, }, diff --git a/scripts/zones/Toraimarai_Canal/IDs.lua b/scripts/zones/Toraimarai_Canal/IDs.lua index 561e7b8fa2c..46805db9381 100644 --- a/scripts/zones/Toraimarai_Canal/IDs.lua +++ b/scripts/zones/Toraimarai_Canal/IDs.lua @@ -54,7 +54,6 @@ zones[xi.zone.TORAIMARAI_CANAL] = { TOME_OF_MAGIC_OFFSET = 17469828, TREASURE_COFFER = 17469835, - CASKET_BASE = 17469772, }, } diff --git a/scripts/zones/Toraimarai_Canal/mobs/Brazen_Bones.lua b/scripts/zones/Toraimarai_Canal/mobs/Brazen_Bones.lua index 6c41967cc6f..d9559571440 100644 --- a/scripts/zones/Toraimarai_Canal/mobs/Brazen_Bones.lua +++ b/scripts/zones/Toraimarai_Canal/mobs/Brazen_Bones.lua @@ -6,6 +6,50 @@ require("scripts/globals/hunts") ----------------------------------- local entity = {} +entity.onMobSpawn = function(mob) + mob:setMobMod(xi.mobMod.AUTO_SPIKES, 1) + mob:addStatusEffect(xi.effect.ICE_SPIKES, 45, 0, 0) + mob:getStatusEffect(xi.effect.ICE_SPIKES):setFlag(xi.effectFlag.DEATH) + mob:setMobMod(xi.mobMod.ADD_EFFECT, 1) + mob:setMod(xi.mod.ICE_MEVA, 100) +end + +-- TODO: Fix onSpikesDamage bug causing spikes to apply damage twice. Commented out until it is resolved. +-- entity.onSpikesDamage = function(mob, target, damage) +-- local INT_diff = mob:getStat(xi.mod.INT) - target:getStat(xi.mod.INT) + +-- if INT_diff > 20 then +-- INT_diff = 20 + (INT_diff - 20) * 0.5 -- INT above 20 is half as effective. +-- end + +-- local dmg = (damage + INT_diff) * 1.3 -- INT adjustment and base damage averaged together. +-- local params = {} +-- params.bonusmab = 0 +-- params.includemab = false +-- dmg = addBonusesAbility(mob, xi.magic.ele.ICE, target, dmg, params) +-- dmg = dmg * applyResistanceAddEffect(mob, target, xi.magic.ele.ICE, 0) +-- dmg = adjustForTarget(target, dmg, xi.magic.ele.ICE) +-- dmg = finalMagicNonSpellAdjustments(mob, target, xi.magic.ele.ICE, dmg) + +-- if dmg < 0 then +-- dmg = 0 +-- end + +-- return xi.subEffect.ICE_SPIKES, xi.msg.basic.SPIKES_EFFECT_DMG, dmg +-- end + +entity.onAdditionalEffect = function(mob, target, damage) + return xi.mob.onAddEffect(mob, target, damage, xi.mob.ae.ENBLIZZARD) +end + +entity.onMobFight = function(mob, target) + -- Double Attack rate increases as HP decreases + local doubleAttack = (100 - mob:getHPP()) * 0.5 + if mob:getMod(xi.mod.DOUBLE_ATTACK) ~= utils.clamp(doubleAttack, 1, 100) then + mob:setMod(xi.mod.DOUBLE_ATTACK, utils.clamp(doubleAttack, 1, 100)) + end +end + entity.onMobDeath = function(mob, player, isKiller) xi.hunts.checkHunt(mob, player, 286) end diff --git a/scripts/zones/Toraimarai_Canal/mobs/Oni_Carcass.lua b/scripts/zones/Toraimarai_Canal/mobs/Oni_Carcass.lua index 2d649882624..f2b9715ab83 100644 --- a/scripts/zones/Toraimarai_Canal/mobs/Oni_Carcass.lua +++ b/scripts/zones/Toraimarai_Canal/mobs/Oni_Carcass.lua @@ -2,6 +2,8 @@ -- Area: Toraimarai Canal -- NM: Oni Carcass ----------------------------------- +mixins = {require("scripts/mixins/job_special")} +----------------------------------- local entity = {} entity.onMobDeath = function(mob, player, isKiller) diff --git a/scripts/zones/Upper_Delkfutts_Tower/IDs.lua b/scripts/zones/Upper_Delkfutts_Tower/IDs.lua index 2ad8373b9ae..c391f4c7dc3 100644 --- a/scripts/zones/Upper_Delkfutts_Tower/IDs.lua +++ b/scripts/zones/Upper_Delkfutts_Tower/IDs.lua @@ -28,6 +28,8 @@ zones[xi.zone.UPPER_DELKFUTTS_TOWER] = ALREADY_POSSESS_TEMP = 7385, -- You already possess that temporary item. NO_COMBINATION = 7390, -- You were unable to enter a combination. REGIME_REGISTERED = 9468, -- New training regime registered! + LEARNS_SPELL = 10516, -- learns ! + UNCANNY_SENSATION = 10518, -- You are assaulted by an uncanny sensation. HOMEPOINT_SET = 10527, -- Home point set! }, mob = @@ -52,7 +54,6 @@ zones[xi.zone.UPPER_DELKFUTTS_TOWER] = npc = { TREASURE_CHEST = 17424564, - CASKET_BASE = 17424525, }, } diff --git a/scripts/zones/Upper_Delkfutts_Tower/npcs/Geomantic_Reservoir.lua b/scripts/zones/Upper_Delkfutts_Tower/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..0ca46321605 --- /dev/null +++ b/scripts/zones/Upper_Delkfutts_Tower/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Upper Delkfutt's Tower +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Vex +-- !pos -358.799 -175.425 82.985 158 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_VEX) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_VEX) +end + +return entity diff --git a/scripts/zones/Valkurm_Dunes/IDs.lua b/scripts/zones/Valkurm_Dunes/IDs.lua index 7023253d3c7..afa88b045d1 100644 --- a/scripts/zones/Valkurm_Dunes/IDs.lua +++ b/scripts/zones/Valkurm_Dunes/IDs.lua @@ -64,7 +64,6 @@ zones[xi.zone.VALKURM_DUNES] = }, npc = { - CASKET_BASE = 17199672, SUNSAND_QM = 17199699, -- qm1 in npc_list OVERSEER_BASE = 17199709, -- Quanteilleron_RK in npc_list }, diff --git a/scripts/zones/Valley_of_Sorrows/IDs.lua b/scripts/zones/Valley_of_Sorrows/IDs.lua index df1b4ec0ba0..79a10976391 100644 --- a/scripts/zones/Valley_of_Sorrows/IDs.lua +++ b/scripts/zones/Valley_of_Sorrows/IDs.lua @@ -39,7 +39,6 @@ zones[xi.zone.VALLEY_OF_SORROWS] = }, npc = { - CASKET_BASE = 17301544, ADAMANTOISE_QM = 17301567, }, } diff --git a/scripts/zones/VeLugannon_Palace/IDs.lua b/scripts/zones/VeLugannon_Palace/IDs.lua index eb1b3af77e0..0605ab74c76 100644 --- a/scripts/zones/VeLugannon_Palace/IDs.lua +++ b/scripts/zones/VeLugannon_Palace/IDs.lua @@ -54,7 +54,6 @@ zones[xi.zone.VELUGANNON_PALACE] = npc = { QM3 = 17502583, - CASKET_BASE = 17502585, Y_DOOR_OFFSET = 17502608, B_DOOR_OFFSET = 17502616, Y_LITH_OFFSET = 17502624, diff --git a/scripts/zones/West_Ronfaure/IDs.lua b/scripts/zones/West_Ronfaure/IDs.lua index ab9f05bf559..cf5b5f2128c 100644 --- a/scripts/zones/West_Ronfaure/IDs.lua +++ b/scripts/zones/West_Ronfaure/IDs.lua @@ -71,7 +71,6 @@ zones[xi.zone.WEST_RONFAURE] = }, npc = { - CASKET_BASE = 17187467, SIGNPOST_OFFSET = 17187505, OVERSEER_BASE = 17187525, -- Doladepaiton_RK in npc_list }, diff --git a/scripts/zones/West_Sarutabaruta/IDs.lua b/scripts/zones/West_Sarutabaruta/IDs.lua index 02aa3fdcd00..be8e2a28248 100644 --- a/scripts/zones/West_Sarutabaruta/IDs.lua +++ b/scripts/zones/West_Sarutabaruta/IDs.lua @@ -118,7 +118,6 @@ zones[xi.zone.WEST_SARUTABARUTA] = npc = { - CASKET_BASE = 17248770, SIGNPOST_OFFSET = 17248797, OVERSEER_BASE = 17248830, -- Naguipeillont_RK in npc_list diff --git a/scripts/zones/West_Sarutabaruta/mobs/Carrion_Crow.lua b/scripts/zones/West_Sarutabaruta/mobs/Carrion_Crow.lua index 1f1a6ef52ec..1f92243e0d6 100644 --- a/scripts/zones/West_Sarutabaruta/mobs/Carrion_Crow.lua +++ b/scripts/zones/West_Sarutabaruta/mobs/Carrion_Crow.lua @@ -14,7 +14,7 @@ entity.onMobDeath = function(mob, player, isKiller) end entity.onMobDespawn = function(mob) - xi.mob.phOnDespawn(mob, ID.mob.NUNYENUNC_PH, 10, math.random(7200, 10800)) -- 2 to 3 hours + xi.mob.phOnDespawn(mob, ID.mob.NUNYENUNC_PH, 10, 3600) -- 1 hour minimum end return entity diff --git a/scripts/zones/West_Sarutabaruta/mobs/Nunyenunc.lua b/scripts/zones/West_Sarutabaruta/mobs/Nunyenunc.lua index 8181b843638..57005f76f55 100644 --- a/scripts/zones/West_Sarutabaruta/mobs/Nunyenunc.lua +++ b/scripts/zones/West_Sarutabaruta/mobs/Nunyenunc.lua @@ -6,6 +6,10 @@ require("scripts/globals/hunts") ----------------------------------- local entity = {} +entity.onMobInitialize = function(mob) + mob:setMod(xi.mod.LIGHT_MEVA, 50) +end + entity.onMobDeath = function(mob, player, isKiller) xi.hunts.checkHunt(mob, player, 251) end diff --git a/scripts/zones/Western_Altepa_Desert/IDs.lua b/scripts/zones/Western_Altepa_Desert/IDs.lua index 39057a7732a..501963c3941 100644 --- a/scripts/zones/Western_Altepa_Desert/IDs.lua +++ b/scripts/zones/Western_Altepa_Desert/IDs.lua @@ -82,7 +82,6 @@ zones[xi.zone.WESTERN_ALTEPA_DESERT] = }, npc = { - CASKET_BASE = 17289723, ALTEPA_GATE = 17289747, PEDDLESTOX = 17289772, BEASTMEN_TREASURE = diff --git a/scripts/zones/Windurst_Waters_[S]/IDs.lua b/scripts/zones/Windurst_Waters_[S]/IDs.lua index 0479e379c5d..06510ee6578 100644 --- a/scripts/zones/Windurst_Waters_[S]/IDs.lua +++ b/scripts/zones/Windurst_Waters_[S]/IDs.lua @@ -38,6 +38,7 @@ zones[xi.zone.WINDURST_WATERS_S] = LUTETE_DIALOG = 12476, -- ... Mastering these Near Eastern magics can be quite taxing. If I had a choice, I'd rather be back in bed, relaxing... ALLIED_SIGIL = 12920, -- You have received the Allied Sigil! RETRIEVE_DIALOG_ID = 14987, -- You retrieve from the porter moogle's care. + NOT_ENOUGH_NOTES = 15012, -- You tryin' to cheat me? That's not nearly enough notes! COMMON_SENSE_SURVIVAL = 15048, -- It appears that you have arrived at a new survival guide provided by the Servicemen's Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, mob = diff --git a/scripts/zones/Windurst_Waters_[S]/npcs/Mindala-Andola_CC.lua b/scripts/zones/Windurst_Waters_[S]/npcs/Mindala-Andola_CC.lua index 4de3ed33f9c..5411165d7fb 100644 --- a/scripts/zones/Windurst_Waters_[S]/npcs/Mindala-Andola_CC.lua +++ b/scripts/zones/Windurst_Waters_[S]/npcs/Mindala-Andola_CC.lua @@ -8,6 +8,7 @@ local ID = require("scripts/zones/Windurst_Waters_[S]/IDs") require("scripts/globals/campaign") require("scripts/globals/status") require("scripts/globals/utils") +require("scripts/globals/extravaganza") ----------------------------------- local entity = {} @@ -17,7 +18,7 @@ end entity.onTrigger = function(player, npc) local notes = player:getCurrency("allied_notes") local freelances = 99 -- Faking it for now - local ciphers = 0 + local cipher = xi.extravaganza.campaignActive() * 4 -- 0 for not displaying ciphers -- 4 for Valaneiral (New Year's & Summer Alter Ego Extravaganzas) -- 8 for Adelheid (Spring & Autumn Alter Ego Extravaganzas) @@ -35,7 +36,7 @@ entity.onTrigger = function(player, npc) if medalRank == 0 then player:startEvent(14) else - player:startEvent(13, allegiance, notes, freelances, ciphers, medalRank, bonusEffects, timeStamp, 0) + player:startEvent(13, allegiance, notes, freelances, cipher, medalRank, bonusEffects, timeStamp, 0) end end diff --git a/scripts/zones/Windurst_Waters_[S]/npcs/Shuvo.lua b/scripts/zones/Windurst_Waters_[S]/npcs/Shuvo.lua new file mode 100644 index 00000000000..76929d684d9 --- /dev/null +++ b/scripts/zones/Windurst_Waters_[S]/npcs/Shuvo.lua @@ -0,0 +1,21 @@ +----------------------------------- +-- Area: Windurst Waters [S] +-- NPC: Shuvo +-- Type: Alter Ego Extravaganza +-- !gotoid 17163023 +----------------------------------- +require('scripts/globals/extravaganza') + +local entity = {} + +entity.onTrigger = function(player, npc) + local notes = player:getCurrency("allied_notes") + + xi.extravaganza.shadowEraTrigger(player, npc, notes) +end + +entity.onEventFinish = function(player, csid, option) + xi.extravaganza.shadowEraFinish(player, csid, option) +end + +return entity diff --git a/scripts/zones/Xarcabard/IDs.lua b/scripts/zones/Xarcabard/IDs.lua index 5367bab3070..e782e3fcb0c 100644 --- a/scripts/zones/Xarcabard/IDs.lua +++ b/scripts/zones/Xarcabard/IDs.lua @@ -47,6 +47,8 @@ zones[xi.zone.XARCABARD] = VOIDWALKER_UPGRADE_KI_2 = 11490, -- The takes on a deeper, richer hue and becomes ! VOIDWALKER_BREAK_KI = 11491, -- The shatters into tiny fragments. VOIDWALKER_OBTAIN_KI = 11492, -- Obtained key item: ! + LEARNS_SPELL = 11541, -- learns ! + UNCANNY_SENSATION = 11543, -- You are assaulted by an uncanny sensation. COMMON_SENSE_SURVIVAL = 11550, -- It appears that you have arrived at a new survival guide provided by the Adventurers' Mutual Aid Network. Common sense dictates that you should now be able to teleport here from similar tomes throughout the world. }, mob = @@ -110,7 +112,6 @@ zones[xi.zone.XARCABARD] = }, npc = { - CASKET_BASE = 17236254, OVERSEER_BASE = 17236289, -- Jeantelas_RK in npc_list BOREAL_TIGER_QM = 17236307, -- qm2 in npc_list BOREAL_COEURL_QM = 17236308, -- qm3 in npc_list diff --git a/scripts/zones/Xarcabard/npcs/Geomantic_Reservoir.lua b/scripts/zones/Xarcabard/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..b839828a2ef --- /dev/null +++ b/scripts/zones/Xarcabard/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Xarcabard +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Torpor +-- !pos -141.138 -34.642 127.197 112 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_TORPOR) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_TORPOR) +end + +return entity diff --git a/scripts/zones/Xarcabard_[S]/DefaultActions.lua b/scripts/zones/Xarcabard_[S]/DefaultActions.lua new file mode 100644 index 00000000000..b695cb7611f --- /dev/null +++ b/scripts/zones/Xarcabard_[S]/DefaultActions.lua @@ -0,0 +1,8 @@ +local ID = require('scripts/zones/Xarcabard_[S]/IDs') + +return { + ['Animal_Spoor'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, + ['Forbidden_Portal'] = { messageSpecial = ID.text.NO_RESPONSE }, + ['Spell-worked_Snow'] = { messageSpecial = ID.text.NO_RESPONSE }, + ['Wheel_Rut'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, +} diff --git a/scripts/zones/Xarcabard_[S]/IDs.lua b/scripts/zones/Xarcabard_[S]/IDs.lua index 99bde826017..c58c70d5136 100644 --- a/scripts/zones/Xarcabard_[S]/IDs.lua +++ b/scripts/zones/Xarcabard_[S]/IDs.lua @@ -14,10 +14,14 @@ zones[xi.zone.XARCABARD_S] = ITEM_OBTAINED = 6390, -- Obtained: . GIL_OBTAINED = 6391, -- Obtained gil. KEYITEM_OBTAINED = 6393, -- Obtained key item: . + NOTHING_OUT_OF_ORDINARY = 6404, -- There is nothing out of the ordinary here. CARRIED_OVER_POINTS = 7001, -- You have carried over login point[/s]. LOGIN_CAMPAIGN_UNDERWAY = 7002, -- The [/January/February/March/April/May/June/July/August/September/October/November/December] Login Campaign is currently underway! LOGIN_NUMBER = 7003, -- In celebration of your most recent login (login no. ), we have provided you with points! You currently have a total of points. VOIDWALKER_DESPAWN = 8172, -- The monster fades before your eyes, a look of disappointment on its face. + NO_RESPONSE = 8219, -- There is no response... + REQUIRED_TO_DELIVER = 8255, -- You are required to deliver word of Operation Snowstorm's commencement to the Windurstian and Bastokan forces. First, make your way to the Federation encampment. + HELP_FEDERATION_PREPARE = 8256, -- You must help the Federation prepare for the operation. Head to the underground passage without delay! VOIDWALKER_NO_MOB = 8576, -- The quivers ever so slightly, but emits no light. There seem to be no monsters in the area. VOIDWALKER_MOB_TOO_FAR = 8577, -- The quivers ever so slightly and emits a faint light. There seem to be no monsters in the immediate vicinity. VOIDWALKER_MOB_HINT = 8578, -- The resonates [feebly/softly/solidly/strongly/very strongly/furiously], sending a radiant beam of light lancing towards a spot roughly [yalm/yalms] [east/southeast/south/southwest/west/northwest/north/northeast] of here. diff --git a/scripts/zones/Xarcabard_[S]/Zone.lua b/scripts/zones/Xarcabard_[S]/Zone.lua index 0e6d5035874..efd74680b1f 100644 --- a/scripts/zones/Xarcabard_[S]/Zone.lua +++ b/scripts/zones/Xarcabard_[S]/Zone.lua @@ -1,9 +1,7 @@ ----------------------------------- --- -- Zone: Xarcabard_[S] (137) --- ----------------------------------- -local ID = require("scripts/zones/Xarcabard_[S]/IDs") +local ID = require('scripts/zones/Xarcabard_[S]/IDs') ----------------------------------- local zone_object = {} diff --git a/scripts/zones/Yahse_Hunting_Grounds/IDs.lua b/scripts/zones/Yahse_Hunting_Grounds/IDs.lua index 7bf66ff940c..8204e7dc7ec 100644 --- a/scripts/zones/Yahse_Hunting_Grounds/IDs.lua +++ b/scripts/zones/Yahse_Hunting_Grounds/IDs.lua @@ -25,6 +25,7 @@ zones[xi.zone.YAHSE_HUNTING_GROUNDS] = ARTIFACT_HAS_BEEN_CHARGED = 7627, -- Your artifact has been charged with kinetic unit[/s]. Your current stock of kinetic units totals . ARTIFACT_TERMINAL_VOLUME = 7628, -- Your artifact has been charged to its terminal volume of kinetic units. SURPLUS_LOST_TO_AETHER = 7629, -- A surplus of kinetic unit[/s] has been lost to the aether. + LEARNS_SPELL = 7864, -- learns ! UNCANNY_SENSATION = 7866, -- You are assaulted by an uncanny sensation. ENERGIES_COURSE = 7867, -- The arcane energies begin to course within your veins. MYSTICAL_WARMTH = 7868, -- You feel a mystical warmth welling up inside you! diff --git a/scripts/zones/Yahse_Hunting_Grounds/npcs/Geomantic_Reservoir.lua b/scripts/zones/Yahse_Hunting_Grounds/npcs/Geomantic_Reservoir.lua new file mode 100644 index 00000000000..8df1e156067 --- /dev/null +++ b/scripts/zones/Yahse_Hunting_Grounds/npcs/Geomantic_Reservoir.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Area: Yahse Hunting Grounds +-- NPC: Geomantic Reservoir +-- Unlocks: Geo-Wilt +-- !pos 412.263 4.161 111.199 260 +----------------------------------- +require("scripts/globals/geomantic_reservoir") +require("scripts/globals/spell_data") +----------------------------------- +local entity = {} + +entity.onTrade = function(player, npc, trade) +end + +entity.onTrigger = function(player, npc) + xi.geomanticReservoir.onTrigger(player, npc, xi.magic.spell.GEO_WILT) +end + +entity.onEventUpdate = function(player, csid, option) +end + +entity.onEventFinish = function(player, csid, option) + xi.geomanticReservoir.onEventFinish(player, csid, xi.magic.spell.GEO_WILT) +end + +return entity diff --git a/scripts/zones/Yhoator_Jungle/IDs.lua b/scripts/zones/Yhoator_Jungle/IDs.lua index 4e325adf22a..ffae909d6cc 100644 --- a/scripts/zones/Yhoator_Jungle/IDs.lua +++ b/scripts/zones/Yhoator_Jungle/IDs.lua @@ -62,7 +62,6 @@ zones[xi.zone.YHOATOR_JUNGLE] = }, npc = { - CASKET_BASE = 17285619, OVERSEER_BASE = 17285650, -- Ilieumort_RK in npc_list PEDDLESTOX = 17285686, BEASTMEN_TREASURE = diff --git a/scripts/zones/Yuhtunga_Jungle/IDs.lua b/scripts/zones/Yuhtunga_Jungle/IDs.lua index 8fee7fe1780..93401170c0f 100644 --- a/scripts/zones/Yuhtunga_Jungle/IDs.lua +++ b/scripts/zones/Yuhtunga_Jungle/IDs.lua @@ -67,7 +67,6 @@ zones[xi.zone.YUHTUNGA_JUNGLE] = }, npc = { - CASKET_BASE = 17281559, BLUE_RAFFLESIA_OFFSET = 17281586, TUNING_OUT_QM = 17281590, -- qm2 in npc_list OVERSEER_BASE = 17281600, -- Zorchorevi_RK in npc_list diff --git a/scripts/zones/Zeruhn_Mines/IDs.lua b/scripts/zones/Zeruhn_Mines/IDs.lua index 89c1827f5d2..05c8317c340 100644 --- a/scripts/zones/Zeruhn_Mines/IDs.lua +++ b/scripts/zones/Zeruhn_Mines/IDs.lua @@ -36,7 +36,6 @@ zones[xi.zone.ZERUHN_MINES] = }, npc = { - CASKET_BASE = 17481795, MINING = { 17481844, diff --git a/settings/default/logging.lua b/settings/default/logging.lua index 49abbadd986..a6bbe1a4d1c 100644 --- a/settings/default/logging.lua +++ b/settings/default/logging.lua @@ -11,8 +11,9 @@ xi.settings = xi.settings or {} xi.settings.logging = { - DEBUG_NAVMESH = false, - DEBUG_PACKETS = false, - DEBUG_ACTIONS = false, - DEBUG_SQL = false, + DEBUG_NAVMESH = false, + DEBUG_PACKETS = false, + DEBUG_ACTIONS = false, + DEBUG_SQL = false, + DEBUG_ID_LOOKUP = false, } diff --git a/settings/default/main.lua b/settings/default/main.lua index 8ab52851a88..a40754d0a61 100644 --- a/settings/default/main.lua +++ b/settings/default/main.lua @@ -117,6 +117,22 @@ xi.settings.main = ENABLE_TRUST_CASTING = 1, ENABLE_TRUST_QUESTS = 1, ENABLE_TRUST_CUSTOM_ENGAGEMENT = 0, + ENABLE_TRUST_CASTING = 1, + ENABLE_TRUST_QUESTS = 1, + ENABLE_TRUST_ALTER_EGO_EXTRAVAGANZA = 0, -- 0 = disabled, 1 = summer/ny, 2 = spring/autumn, 3 = both + ENABLE_TRUST_ALTER_EGO_EXTRAVAGANZA_ANNOUNCE = 0, -- 0 = disabled, 1 = add announcement to player login + ENABLE_TRUST_ALTER_EGO_EXPO = 0, -- 0 = disabled, 1 = expo - HPP/MPP/Status Resistance, 2 = expo plus (not implemented) + ENABLE_TRUST_ALTER_EGO_EXPO_ANNOUNCE = 0, -- 0 = disabled, 1 = add announcement to player login + + TRUST_ALTER_EGO_EXTRAVAGANZA_MESSAGE = + "\n \n" .. + "\129\153\129\154 The Alter Ego Extravaganza Campaign is active! \129\154\129\153\n" .. + "This is an excellent time to fill out your roster of Trusts!", + + TRUST_ALTER_EGO_EXPO_MESSAGE = + "\n \n" .. + "\129\153\129\154 The Alter Ego Expo Campaign is active! \129\154\129\153\n" .. + "Trusts gain the benefits of Increased HP, MP, and Status Resistances!", HARVESTING_BREAK_CHANCE = 33, -- % chance for the sickle to break during harvesting. Set between 0 and 100. EXCAVATION_BREAK_CHANCE = 33, -- % chance for the pickaxe to break during excavation. Set between 0 and 100. diff --git a/settings/default/map.lua b/settings/default/map.lua index 7bed8c77b1d..c18628b992c 100644 --- a/settings/default/map.lua +++ b/settings/default/map.lua @@ -17,6 +17,14 @@ xi.settings.map = MAX_TIME_LASTUPDATE = 60, + -- -------------------------------- + -- SQL settings + -- -------------------------------- + + -- Used by serverutils::PersistServerVar() for the maximum attempts to retry verification + -- of a written Server Variable. + SETVAR_RETRY_MAX = 3, + -- -------------------------------- -- Game settings -- -------------------------------- diff --git a/settings/default/network.lua b/settings/default/network.lua index 64c6accd2d4..cf1ab8223ff 100644 --- a/settings/default/network.lua +++ b/settings/default/network.lua @@ -31,4 +31,87 @@ xi.settings.network = -- Central message server settings (ensure these are the same on both all map servers and the central (lobby) server ZMQ_IP = "127.0.0.1", ZMQ_PORT = 54003, + + -- =========================== + -- NOTE: The settings that follow will not necessarily need to be modified + -- in any way for the server to work out of the box. This should only + -- be modified by those who understand networking. Modifying these + -- values could potentially make it so that you can not log in to your + -- server. + -- =========================== + + -- =========================== + -- UDP Sockets Configuration + -- =========================== + + -- Display debug reports (When something goes wrong during the report, the report is saved.) + UDP_DEBUG = false, + + -- =========================== + -- TCP Sockets Configuration + -- =========================== + + -- Display debug reports (When something goes wrong during the report, the report is saved.) + TCP_DEBUG = false, + + -- How long can a socket stall before closing the connection (in seconds) + TCP_STALL_TIME = 60, + + -- =========================== + -- IP Rules Settings + -- =========================== + + -- If IP's are checked when connecting. This also enables DDoS protection. + TCP_ENABLE_IP_RULES = true, + + -- Order of the checks + -- deny,allow : Checks deny rules, then allow rules. Allows if no rules match. + -- allow,deny : Checks allow rules, then deny rules. Allows if no rules match. + -- mutual-failure : Allows only if an allow rule matches and no deny rules match. + -- (default is deny,allow) + TCP_ORDER = "deny,allow", + --TCP_ORDER = "allow,deny", + --TCP_ORDER = "mutual-failure", + + -- =========================== + -- IP rules + -- =========================== + -- allow : Accepts connections from the ip range (even if flagged as DDoS) + -- deny : Rejects connections from the ip range + -- The rules are processed in order, the first matching rule of each list + -- (allow and deny) is used + + TCP_ALLOW = "", + --TCP_ALLOW = "127.0.0.1,192.168.0.0/16", + --TCP_ALLOW = "127.0.0.1" + --TCP_ALLOW = "192.168.0.0/16" + --TCP_ALLOW = "10.0.0.0/255.0.0.0" + --TCP_ALLOW = "all" + + TCP_DENY = "", + --TCP_DENY = "10.0.0.0/8,192.168.0.0/16", + --TCP_DENY = "127.0.0.1", + --TCP_DENY = "10.0.0.0/255.0.0.0", + + -- =========================== + -- Connection Limit Settings + -- =========================== + + -- If connect_count connection request are made within connect_interval + -- msec, it blocks it + + -- Consecutive attempts interval (msec) + -- (default is 3000 msecs, 3 seconds) + TCP_CONNECT_INTERVAL = 3000, + + -- Consecutive attempts trigger + -- (default is 10 attempts) + TCP_CONNECT_COUNT = 10, + + -- The time interval after which the connection lockout is lifted. (msec) + -- After this amount of time, the connection restrictions are lifted. + -- (default is 600000 msecs, 10 minutes) + TCP_CONNECT_LOCKOUT = 600000 } + +-- EOF diff --git a/sql/abilities.sql b/sql/abilities.sql index 834a018c05a..8692d8311b7 100644 --- a/sql/abilities.sql +++ b/sql/abilities.sql @@ -63,10 +63,10 @@ INSERT INTO `abilities` VALUES (43,'hide',6,45,1,300,63,0,0,10,2000,0,6,20.0,0,0 INSERT INTO `abilities` VALUES (44,'sneak_attack',6,15,1,60,64,0,0,17,2000,0,6,20.0,0,1,0,708,0,NULL); INSERT INTO `abilities` VALUES (45,'mug',6,35,4,300,65,129,0,183,2000,0,3,4.4,0,1,300,0,0,NULL); INSERT INTO `abilities` VALUES (46,'shield_bash',7,15,4,60,73,0,0,185,2000,0,3,4.4,0,450,900,768,0,NULL); -INSERT INTO `abilities` VALUES (47,'holy_circle',7,5,1,600,74,0,0,29,2000,0,6,20.0,1,1,20,770,0,NULL); +INSERT INTO `abilities` VALUES (47,'holy_circle',7,5,1,300,74,0,0,29,2000,0,6,20.0,1,1,20,770,0,NULL); INSERT INTO `abilities` VALUES (48,'sentinel',7,30,1,300,75,0,0,11,2000,0,6,20.0,0,1,900,772,0,NULL); INSERT INTO `abilities` VALUES (49,'souleater',8,30,1,360,85,0,0,20,2000,0,6,20.0,0,1,1300,832,0,NULL); -INSERT INTO `abilities` VALUES (50,'arcane_circle',8,5,1,600,86,0,0,30,2000,0,6,20.0,1,1,20,834,0,NULL); +INSERT INTO `abilities` VALUES (50,'arcane_circle',8,5,1,300,86,0,0,30,2000,0,6,20.0,1,1,20,834,0,NULL); INSERT INTO `abilities` VALUES (51,'last_resort',8,15,1,300,87,0,0,12,2000,0,6,20.0,0,1,1300,836,0,NULL); INSERT INTO `abilities` VALUES (52,'charm',9,1,4,15,97,0,0,13,2000,0,6,18.0,0,320,0,0,0,NULL); INSERT INTO `abilities` VALUES (53,'gauge',9,10,4,30,98,0,0,14,2000,0,6,23.0,0,0,0,0,0,NULL); @@ -261,12 +261,12 @@ INSERT INTO `abilities` VALUES (243,'equanimity',20,75,1,1,231,0,0,213,2000,0,6, INSERT INTO `abilities` VALUES (244,'enlightenment',20,75,1,300,235,0,0,214,2000,0,6,20.0,0,1,80,3272,1,'WOTG'); INSERT INTO `abilities` VALUES (245,'afflatus_solace',3,40,1,60,29,0,0,216,2000,0,6,20.0,0,1,80,0,4,'WOTG'); INSERT INTO `abilities` VALUES (246,'afflatus_misery',3,40,1,60,30,0,0,217,2000,0,6,20.0,0,1,80,0,4,'WOTG'); -INSERT INTO `abilities` VALUES (247,'composure',5,50,1,300,50,0,0,215,2000,0,6,20.0,0,1,80,0,0,'WOTG'); +INSERT INTO `abilities` VALUES (247,'composure',5,50,1,300,50,0,0,215,2000,0,6,20.0,0,1,80,0,4,'WOTG'); INSERT INTO `abilities` VALUES (248,'yonin',13,40,1,180,146,0,0,218,2000,0,6,20.0,0,1,600,0,4,'WOTG'); INSERT INTO `abilities` VALUES (249,'innin',13,40,1,180,147,0,0,219,2000,0,6,20.0,0,1,60,0,4,'WOTG'); INSERT INTO `abilities` VALUES (250,'avatars_favor',15,55,1,300,176,100,0,94,2000,0,6,10.0,1,1,80,0,0,'WOTG'); INSERT INTO `abilities` VALUES (251,'ready',9,25,1,0,102,0,0,83,2000,0,6,18.0,0,0,0,902,64,NULL); --- INSERT INTO `abilities` VALUES (252,'restraint',1,77,1,600,9,100,0,220,2000,0,6,20.0,0,450,900,0,0,NULL); +INSERT INTO `abilities` VALUES (252,'restraint',1,77,1,600,9,100,0,220,2000,0,6,20.0,0,1,300,0,0,'WOTG'); INSERT INTO `abilities` VALUES (253,'perfect_counter',2,79,1,60,22,100,0,221,2000,0,6,20.0,0,1,80,0,0,NULL); INSERT INTO `abilities` VALUES (254,'mana_wall',4,76,1,600,39,0,0,222,2000,0,6,20.0,0,1,0,0,0,NULL); INSERT INTO `abilities` VALUES (255,'divine_emblem',7,78,1,180,80,100,0,222,2000,0,6,20.0,0,1,3600,0,0,NULL); @@ -345,7 +345,7 @@ INSERT INTO `abilities` VALUES (337,'astral_conduit',15,96,1,3600,254,0,0,285,20 INSERT INTO `abilities` VALUES (338,'unbridled_wisdom',16,96,1,3600,254,100,0,286,2000,0,6,0.0,0,0,0,0,0,NULL); -- check animation INSERT INTO `abilities` VALUES (339,'cutting_cards',17,96,2,3600,254,0,0,287,2000,0,6,8.0,0,0,0,0,0,NULL); -- check animation INSERT INTO `abilities` VALUES (340,'heady_artifice',18,96,1,3600,254,0,0,288,2000,0,6,0.0,0,0,0,0,0,NULL); -- check animation -INSERT INTO `abilities` VALUES (341,'gran_pas',19,96,1,3600,254,0,0,289,2000,0,6,0.0,0,0,0,0,0,NULL); -- check animation +INSERT INTO `abilities` VALUES (341,'grand_pas',19,96,1,3600,254,0,0,289,2000,0,6,0.0,0,0,0,0,4,NULL); -- check animation INSERT INTO `abilities` VALUES (342,'caper_emissarius',20,96,2,3600,254,0,0,290,2000,0,6,8.0,0,0,0,0,0,NULL); -- check animation INSERT INTO `abilities` VALUES (343,'bolster',21,1,1,3600,0,0,0,303,2000,0,6,0.0,0,1,300,0,0,'SOA'); -- check animation INSERT INTO `abilities` VALUES (344,'swipe',22,25,4,90,241,110,0,0,2000,0,15,4.5,0,80,320,0,0,'SOA'); @@ -636,7 +636,7 @@ INSERT INTO `abilities` VALUES (779,'spider_web',9,25,257,255,102,0,0,0,2000,0,6 -- INSERT INTO `abilities` VALUES (786,'disembowel',22,1,1,0,300,0,0,???,2000,0,6,20.0,0,450,900,0,0,NULL); -- INSERT INTO `abilities` VALUES (787,'extirpating_salvo',22,1,1,0,300,0,0,???,2000,0,6,20.0,0,450,900,0,0,NULL); -- INSERT INTO `abilities` VALUES (960,'clarsach_call',22,1,1,0,300,0,0,???,2000,0,6,20.0,0,450,900,0,0,NULL); --- INSERT INTO `abilities` VALUES (961,'welt',22,1,1,0,300,0,0,???,2000,0,6,20.0,0,450,900,0,0,NULL); +INSERT INTO `abilities` VALUES (961,'welt',15,1,4,60,173,326,317,176,2000,0,6,30.0,0,0,60,0,0,NULL); -- INSERT INTO `abilities` VALUES (962,'katabatic_blades',22,1,1,0,300,0,0,???,2000,0,6,20.0,0,450,900,0,0,NULL); -- INSERT INTO `abilities` VALUES (963,'lunatic_voice',22,1,1,0,300,0,0,???,2000,0,6,20.0,0,450,900,0,0,NULL); -- INSERT INTO `abilities` VALUES (964,'roundhouse',22,1,1,0,300,0,0,???,2000,0,6,20.0,0,450,900,0,0,NULL); diff --git a/sql/item_basic.sql b/sql/item_basic.sql index bc326bf55b7..7ad6299522c 100644 --- a/sql/item_basic.sql +++ b/sql/item_basic.sql @@ -3982,17 +3982,17 @@ INSERT INTO `item_basic` VALUES (4215,0,'popstar','popstar',99,1548,63,0,10); INSERT INTO `item_basic` VALUES (4216,0,'brilliant_snow','brilliant_snow',99,1548,63,0,18); INSERT INTO `item_basic` VALUES (4217,0,'sparkling_hand','sparkling_hand',99,1548,63,0,5); INSERT INTO `item_basic` VALUES (4218,0,'air_rider','air_rider',99,1548,63,0,42); -INSERT INTO `item_basic` VALUES (4219,0,'stone_quiver','stone_quiver',12,1540,15,0,5); +INSERT INTO `item_basic` VALUES (4219,0,'stone_quiver','stone_quiver',12,1540,15,0,25); INSERT INTO `item_basic` VALUES (4220,0,'bone_quiver','bone_quiver',12,1540,15,0,24); INSERT INTO `item_basic` VALUES (4221,0,'beetle_quiver','beetle_quiver',12,1540,15,0,100); INSERT INTO `item_basic` VALUES (4222,0,'horn_quiver','horn_quiver',12,1540,15,0,893); INSERT INTO `item_basic` VALUES (4223,0,'scorpion_quiver','scorpion_quiver',12,1540,15,0,25); INSERT INTO `item_basic` VALUES (4224,0,'demon_quiver','demon_quiver',12,1540,15,0,700); -INSERT INTO `item_basic` VALUES (4225,0,'iron_quiver','iron_quiver',12,1540,15,0,194); -INSERT INTO `item_basic` VALUES (4226,0,'silver_quiver','silver_quiver',12,1540,15,0,5); -INSERT INTO `item_basic` VALUES (4227,0,'bronze_bolt_quiver','b._bolt_quiver',12,1540,15,0,24); -INSERT INTO `item_basic` VALUES (4228,0,'mythril_bolt_quiver','m._bolt_quiver',12,1540,15,0,11820); -INSERT INTO `item_basic` VALUES (4229,0,'darksteel_bolt_quiver','d._bolt_quiver',12,1540,15,0,15370); +INSERT INTO `item_basic` VALUES (4225,0,'iron_quiver','iron_quiver',12,1540,15,0,200); +INSERT INTO `item_basic` VALUES (4226,0,'silver_quiver','silver_quiver',12,1540,15,0,300); +INSERT INTO `item_basic` VALUES (4227,0,'bronze_bolt_quiver','b._bolt_quiver',12,1540,15,0,25); +INSERT INTO `item_basic` VALUES (4228,0,'mythril_bolt_quiver','m._bolt_quiver',12,1540,15,0,600); +INSERT INTO `item_basic` VALUES (4229,0,'darksteel_bolt_quiver','d._bolt_quiver',12,1540,15,0,900); INSERT INTO `item_basic` VALUES (4230,0,'new_years_gift','new_years_gift',1,63056,0,1,0); INSERT INTO `item_basic` VALUES (4231,0,'new_years_gift','new_years_gift',1,63056,0,1,0); INSERT INTO `item_basic` VALUES (4232,0,'new_years_gift','new_years_gift',1,63056,0,1,0); @@ -4292,9 +4292,9 @@ INSERT INTO `item_basic` VALUES (4525,0,'pumpkin_pie_+1','pumpkin_pie_+1',12,154 INSERT INTO `item_basic` VALUES (4526,0,'silkworm_egg','silkworm_egg',12,26204,0,0,250); INSERT INTO `item_basic` VALUES (4527,0,'jug_of_marys_milk','marys_milk',12,1548,59,0,131); INSERT INTO `item_basic` VALUES (4528,0,'crystal_bass','crystal_bass',12,5644,51,1,0); -INSERT INTO `item_basic` VALUES (4529,0,'rolanberry_(881_ce)','rolanberry_881',12,1548,59,0,24); -INSERT INTO `item_basic` VALUES (4530,0,'rolanberry_(874_ce)','rolanberry_874',12,1548,59,0,24); -INSERT INTO `item_basic` VALUES (4531,0,'rolanberry_(864_ce)','rolanberry_864',12,1548,59,0,24); +INSERT INTO `item_basic` VALUES (4529,0,'rolanberry_881_ce','rolanberry_881',12,1548,59,0,24); +INSERT INTO `item_basic` VALUES (4530,0,'rolanberry_874_ce','rolanberry_874',12,1548,59,0,24); +INSERT INTO `item_basic` VALUES (4531,0,'rolanberry_864_ce','rolanberry_864',12,1548,59,0,24); INSERT INTO `item_basic` VALUES (4532,0,'soft-boiled_egg','soft-boiled_egg',12,1548,52,0,40); INSERT INTO `item_basic` VALUES (4533,0,'bowl_of_delicious_puls','delicious_puls',1,1580,55,0,300); INSERT INTO `item_basic` VALUES (4534,0,'bowl_of_medicinal_gruel','medicinal_gruel',1,1580,56,0,408); @@ -5000,18 +5000,18 @@ INSERT INTO `item_basic` VALUES (5304,0,'demoralizer','demoralizer',1,63040,0,1, INSERT INTO `item_basic` VALUES (5305,0,'demoralizer_+1','demoralizer_+1',1,63040,0,1,0); INSERT INTO `item_basic` VALUES (5306,0,'bottle_of_hallowed_water','hallowed_water',12,1540,33,0,350); INSERT INTO `item_basic` VALUES (5307,0,'flask_of_invitriol','invitriol',12,1540,33,0,357); -INSERT INTO `item_basic` VALUES (5308,0,'toolbag_(uchitake)','toolbag_(uchi)',12,1540,49,0,920); -INSERT INTO `item_basic` VALUES (5309,0,'toolbag_(tsurara)','toolbag_(tsura)',12,1540,49,0,920); -INSERT INTO `item_basic` VALUES (5310,0,'toolbag_(kawahori-ogi)','toolbag_(kawa)',12,1540,49,0,920); -INSERT INTO `item_basic` VALUES (5311,0,'toolbag_(makibishi)','toolbag_(maki)',12,1540,49,0,920); -INSERT INTO `item_basic` VALUES (5312,0,'toolbag_(hiraishin)','toolbag_(hira)',12,1540,49,0,900); -INSERT INTO `item_basic` VALUES (5313,0,'toolbag_(mizu-deppo)','toolbag_(mizu)',12,1540,49,0,920); -INSERT INTO `item_basic` VALUES (5314,0,'toolbag_(shihei)','toolbag_(shihe)',12,1540,49,0,1920); -INSERT INTO `item_basic` VALUES (5315,0,'toolbag_(jusatsu)','toolbag_(jusa)',12,1540,49,0,1920); -INSERT INTO `item_basic` VALUES (5316,0,'toolbag_(kaginawa)','toolbag_(kagi)',12,1540,49,0,1920); -INSERT INTO `item_basic` VALUES (5317,0,'toolbag_(sairui-ran)','toolbag_(sai)',12,1540,49,0,1920); -INSERT INTO `item_basic` VALUES (5318,0,'toolbag_(kodoku)','toolbag_(kodo)',12,1540,49,0,1920); -INSERT INTO `item_basic` VALUES (5319,0,'toolbag_(shinobi-tabi)','toolbag_(shino)',12,1540,49,0,1920); +INSERT INTO `item_basic` VALUES (5308,0,'toolbag_uchitake','toolbag_(uchi)',12,1540,49,0,900); +INSERT INTO `item_basic` VALUES (5309,0,'toolbag_tsurara','toolbag_(tsura)',12,1540,49,0,900); +INSERT INTO `item_basic` VALUES (5310,0,'toolbag_kawahori-ogi','toolbag_(kawa)',12,1540,49,0,900); +INSERT INTO `item_basic` VALUES (5311,0,'toolbag_makibishi','toolbag_(maki)',12,1540,49,0,900); +INSERT INTO `item_basic` VALUES (5312,0,'toolbag_hiraishin','toolbag_(hira)',12,1540,49,0,900); +INSERT INTO `item_basic` VALUES (5313,0,'toolbag_mizu-deppo','toolbag_(mizu)',12,1540,49,0,900); +INSERT INTO `item_basic` VALUES (5314,0,'toolbag_shihei','toolbag_(shihe)',12,1540,49,0,1920); +INSERT INTO `item_basic` VALUES (5315,0,'toolbag_jusatsu','toolbag_(jusa)',12,1540,49,0,1920); +INSERT INTO `item_basic` VALUES (5316,0,'toolbag_kaginawa','toolbag_(kagi)',12,1540,49,0,1920); +INSERT INTO `item_basic` VALUES (5317,0,'toolbag_sairui-ran','toolbag_(sai)',12,1540,49,0,1920); +INSERT INTO `item_basic` VALUES (5318,0,'toolbag_kodoku','toolbag_(kodo)',12,1540,49,0,1920); +INSERT INTO `item_basic` VALUES (5319,0,'toolbag_shinobi-tabi','toolbag_(shino)',12,1540,49,0,1920); INSERT INTO `item_basic` VALUES (5320,0,'chunk_of_smelling_salts','smelling_salts',1,63040,0,1,0); INSERT INTO `item_basic` VALUES (5321,0,'bottle_of_romance_potion','romance_potion',1,30288,0,1,0); INSERT INTO `item_basic` VALUES (5322,0,'flask_of_healing_powder','healing_powder',1,63040,0,1,0); @@ -5025,16 +5025,16 @@ INSERT INTO `item_basic` VALUES (5329,0,'tarutaru_snare','tarutaru_snare',1,6306 INSERT INTO `item_basic` VALUES (5330,0,'mithra_snare','mithra_snare',1,63060,0,1,0); INSERT INTO `item_basic` VALUES (5331,0,'qiqirn_mine','qiqirn_mine',1,1536,15,1,0); INSERT INTO `item_basic` VALUES (5332,0,'kabura_quiver','kabura_quiver',12,1540,15,0,700); -INSERT INTO `item_basic` VALUES (5333,0,'sleep_quiver','sleep_quiver',12,1540,15,0,957); -INSERT INTO `item_basic` VALUES (5334,0,'blind_bolt_quiver','bln._bolt_quiver',12,1540,15,0,25); +INSERT INTO `item_basic` VALUES (5333,0,'sleep_quiver','sleep_quiver',12,1540,15,0,700); +INSERT INTO `item_basic` VALUES (5334,0,'blind_bolt_quiver','bln._bolt_quiver',12,1540,15,0,600); INSERT INTO `item_basic` VALUES (5335,0,'acid_bolt_quiver','ac._bolt_quiver',12,1540,15,0,600); -INSERT INTO `item_basic` VALUES (5336,0,'holy_bolt_quiver','hol._bolt_quiver',12,1540,15,0,25); +INSERT INTO `item_basic` VALUES (5336,0,'holy_bolt_quiver','hol._bolt_quiver',12,1540,15,0,600); INSERT INTO `item_basic` VALUES (5337,0,'sleep_bolt_quiver','slp._bolt_quiver',12,1540,15,0,600); -INSERT INTO `item_basic` VALUES (5338,0,'venom_bolt_quiver','vn._bolt_quiver',12,1540,15,0,613); +INSERT INTO `item_basic` VALUES (5338,0,'venom_bolt_quiver','vn._bolt_quiver',12,1540,15,0,600); INSERT INTO `item_basic` VALUES (5339,0,'bloody_bolt_quiver','bld._bolt_quiver',12,1540,15,0,600); INSERT INTO `item_basic` VALUES (5340,0,'silver_bullet_pouch','silv._bul._pouch',12,1540,15,0,900); -INSERT INTO `item_basic` VALUES (5341,0,'spartan_bullet_pouch','spar._bul._pouch',12,1540,15,0,75); -INSERT INTO `item_basic` VALUES (5342,0,'corsair_bullet_pouch','cor._bull._pouch',12,1540,15,0,922); +INSERT INTO `item_basic` VALUES (5341,0,'spartan_bullet_pouch','spar._bul._pouch',12,1540,15,0,900); +INSERT INTO `item_basic` VALUES (5342,0,'corsair_bullet_pouch','cor._bull._pouch',12,1540,15,0,900); INSERT INTO `item_basic` VALUES (5343,0,'cage_of_azouph_fireflies','azouph_fireflies',1,30400,0,1,0); INSERT INTO `item_basic` VALUES (5344,0,'cage_of_bhaflau_fireflies','bhaflau_fireflies',1,30400,0,1,0); INSERT INTO `item_basic` VALUES (5345,0,'cage_of_zhayolm_fireflies','zhayolm_fireflies',1,30400,0,1,0); @@ -5045,7 +5045,7 @@ INSERT INTO `item_basic` VALUES (5349,0,'cage_of_cutter_fireflies','cutter_firef INSERT INTO `item_basic` VALUES (5350,0,'phial_of_volant_serum','volant_serum',12,1548,63,0,78); INSERT INTO `item_basic` VALUES (5351,0,'phial_of_osseous_serum','osseous_serum',12,1548,63,0,102); INSERT INTO `item_basic` VALUES (5352,0,'phial_of_spectral_serum','spectral_serum',12,1548,63,0,112); -INSERT INTO `item_basic` VALUES (5353,0,'iron_bullet_pouch','iron_bull._pouch',12,1540,15,0,922); +INSERT INTO `item_basic` VALUES (5353,0,'iron_bullet_pouch','iron_bull._pouch',12,1540,15,0,900); INSERT INTO `item_basic` VALUES (5354,0,'flask_of_walahra_water','walahra_water',1,30288,0,1,0); INSERT INTO `item_basic` VALUES (5355,0,'elixir_vitae','elixir_vitae',1,1540,33,0,737); INSERT INTO `item_basic` VALUES (5356,0,'jar_of_remedy_ointment','rmdy._ointment',12,1540,33,0,60); @@ -5108,8 +5108,8 @@ INSERT INTO `item_basic` VALUES (5412,0,'scapegoat','scapegoat',1,1540,42,0,1918 INSERT INTO `item_basic` VALUES (5413,0,'smouldering_lamp','smouldering_lamp',1,32832,0,0,25); INSERT INTO `item_basic` VALUES (5414,0,'glowing_lamp','glowing_lamp',1,13376,0,1,0); INSERT INTO `item_basic` VALUES (5415,0,'page_from_balrahns_reflections','heros_reflections',1,63044,0,1,0); -INSERT INTO `item_basic` VALUES (5416,0,'steel_bullet_pouch','stl._bull._pouch',12,1540,15,0,922); -INSERT INTO `item_basic` VALUES (5417,0,'toolbag_(sanjaku-tenugui)','toolbag_(sanja)',12,1540,49,0,1920); +INSERT INTO `item_basic` VALUES (5416,0,'steel_bullet_pouch','stl._bull._pouch',12,1540,15,0,900); +INSERT INTO `item_basic` VALUES (5417,0,'toolbag_sanjaku-tenugui','toolbag_(sanja)',12,1540,49,0,1920); INSERT INTO `item_basic` VALUES (5418,0,'vial_of_tincture','tincture',12,1540,33,0,476); INSERT INTO `item_basic` VALUES (5419,0,'black_mine','black_mine',1,63040,0,1,0); INSERT INTO `item_basic` VALUES (5420,0,'paralyzing_tube','paralyzing_tube',1,63040,0,1,0); @@ -5424,7 +5424,7 @@ INSERT INTO `item_basic` VALUES (5730,0,'serving_of_bavarois_+1','bavarois_+1',1 INSERT INTO `item_basic` VALUES (5731,0,'plate_of_ratatouille','ratatouille',1,1580,54,0,910); INSERT INTO `item_basic` VALUES (5732,0,'plate_of_ratatouille_+1','ratatouille_+1',1,1580,54,0,1137); INSERT INTO `item_basic` VALUES (5733,0,'jug_of_miracle_milk','miracle_milk',12,5708,0,1,0); -INSERT INTO `item_basic` VALUES (5734,0,'toolbag_(soshi)','toolbag_(soshi)',12,1540,49,0,590); +INSERT INTO `item_basic` VALUES (5734,0,'toolbag_soshi','toolbag_(soshi)',12,1540,49,0,1920); INSERT INTO `item_basic` VALUES (5735,0,'cotton_coin_purse','ctn._purse_(alx.)',99,13916,0,1,0); INSERT INTO `item_basic` VALUES (5736,0,'linen_coin_purse','lin._purse_(alx.)',99,13912,0,1,0); INSERT INTO `item_basic` VALUES (5737,0,'slice_of_salted_hare','salted_hare',1,1580,52,0,1); @@ -5509,11 +5509,11 @@ INSERT INTO `item_basic` VALUES (5815,0,'pelazoea','pelazoea',1,1544,51,0,734); INSERT INTO `item_basic` VALUES (5816,0,'king_perch','king_perch',1,1544,51,0,877); INSERT INTO `item_basic` VALUES (5817,0,'tiger_shark','tiger_shark',1,1544,51,0,0); INSERT INTO `item_basic` VALUES (5818,0,'aurora_bass','aurora_bass',12,1548,51,0,0); -INSERT INTO `item_basic` VALUES (5819,0,'antlion_quiver','antlion_quiver',12,1540,15,0,714); +INSERT INTO `item_basic` VALUES (5819,0,'antlion_quiver','antlion_quiver',12,1540,15,0,700); INSERT INTO `item_basic` VALUES (5820,0,'darkling_bolt_quiver','dkl._bolt_quiver',12,1540,15,0,600); INSERT INTO `item_basic` VALUES (5821,0,'fusion_bolt_quiver','fsn._bolt_quiver',12,1540,15,0,221); -INSERT INTO `item_basic` VALUES (5822,0,'dweomer_bullet_pouch','dwm._bul._pouch',12,1540,15,0,895); -INSERT INTO `item_basic` VALUES (5823,0,'oberon_bullet_pouch','obr._bull._pouch',12,1540,15,0,684); +INSERT INTO `item_basic` VALUES (5822,0,'dweomer_bullet_pouch','dwm._bul._pouch',12,1540,15,0,900); +INSERT INTO `item_basic` VALUES (5823,0,'oberon_bullet_pouch','obr._bull._pouch',12,1540,15,0,900); INSERT INTO `item_basic` VALUES (5824,0,'lucid_potion_i','lucid_potion_i',1,63040,0,1,0); INSERT INTO `item_basic` VALUES (5825,0,'lucid_potion_ii','lucid_potion_ii',1,63040,0,1,0); INSERT INTO `item_basic` VALUES (5826,0,'lucid_potion_iii','lucid_potion_iii',1,63040,0,1,0); @@ -5553,17 +5553,17 @@ INSERT INTO `item_basic` VALUES (5859,0,'galkan_sausage_+1','glk._sausage_+1',12 INSERT INTO `item_basic` VALUES (5860,0,'galkan_sausage_+2','glk._sausage_+2',12,1548,52,0,12); INSERT INTO `item_basic` VALUES (5861,0,'galkan_sausage_+3','glk._sausage_+3',12,1548,52,0,14); INSERT INTO `item_basic` VALUES (5862,0,'galkan_sausage_-1','glk._sausage_-1',12,1548,52,0,1); -INSERT INTO `item_basic` VALUES (5863,0,'toolbag_(kabenro)','toolbg._(kaben)',12,1540,49,0,782); -INSERT INTO `item_basic` VALUES (5864,0,'toolbag_(jinko)','toolbag_(jinko)',12,1540,49,0,632); -INSERT INTO `item_basic` VALUES (5865,0,'toolbag_(ryuno)','toolbag_(ryuno)',12,1540,49,0,1862); -INSERT INTO `item_basic` VALUES (5866,0,'toolbag_(mokujin)','toolbag_(moku)',12,1540,49,0,1920); -INSERT INTO `item_basic` VALUES (5867,0,'toolbag_(inoshishinofuda)','toolbag_(ino)',12,1540,49,0,1875); -INSERT INTO `item_basic` VALUES (5868,0,'toolbag_(shikanofuda)','toolbag_(shika)',12,1540,49,0,2500); -INSERT INTO `item_basic` VALUES (5869,0,'toolbag_(chonofuda)','toolbag_(cho)',12,1540,49,0,2500); +INSERT INTO `item_basic` VALUES (5863,0,'toolbag_kabenro','toolbg._(kaben)',12,1540,49,0,1920); +INSERT INTO `item_basic` VALUES (5864,0,'toolbag_jinko','toolbag_(jinko)',12,1540,49,0,1920); +INSERT INTO `item_basic` VALUES (5865,0,'toolbag_ryuno','toolbag_(ryuno)',12,1540,49,0,1920); +INSERT INTO `item_basic` VALUES (5866,0,'toolbag_mokujin','toolbag_(moku)',12,1540,49,0,1920); +INSERT INTO `item_basic` VALUES (5867,0,'toolbag_inoshishinofuda','toolbag_(ino)',12,1540,49,0,1875); +INSERT INTO `item_basic` VALUES (5868,0,'toolbag_shikanofuda','toolbag_(shika)',12,1540,49,0,2500); +INSERT INTO `item_basic` VALUES (5869,0,'toolbag_chonofuda','toolbag_(cho)',12,1540,49,0,2500); INSERT INTO `item_basic` VALUES (5870,0,'trump_card_case','trump_card_case',12,1540,36,0,2000); -INSERT INTO `item_basic` VALUES (5871,0,'ruszor_quiver','ruszor_quiver',12,1540,15,0,1450); -INSERT INTO `item_basic` VALUES (5872,0,'dark_adaman_bolt_quiver','d.a._bolt_quiver',12,1540,15,0,964); -INSERT INTO `item_basic` VALUES (5873,0,'dark_adaman_bullet_pouch','d.a._bull._pouch',12,1540,15,0,835); +INSERT INTO `item_basic` VALUES (5871,0,'ruszor_quiver','ruszor_quiver',12,1540,15,0,1050); +INSERT INTO `item_basic` VALUES (5872,0,'dark_adaman_bolt_quiver','d.a._bolt_quiver',12,1540,15,0,960); +INSERT INTO `item_basic` VALUES (5873,0,'dark_adaman_bullet_pouch','d.a._bull._pouch',12,1540,15,0,950); INSERT INTO `item_basic` VALUES (5875,0,'galette_des_rois','galette_des_rois',1,63056,0,1,0); INSERT INTO `item_basic` VALUES (5876,0,'phial_of_petrify_screen','petrify_screen',1,63040,0,1,0); INSERT INTO `item_basic` VALUES (5877,0,'phial_of_terror_screen','terror_screen',1,63040,0,1,0); @@ -5601,10 +5601,10 @@ INSERT INTO `item_basic` VALUES (5908,0,'butterpear','butterpear',12,1548,59,0,0 INSERT INTO `item_basic` VALUES (5909,0,'pickled_rarab_tail','pickled_r._tail',12,1548,0,0,0); INSERT INTO `item_basic` VALUES (5910,0,'heavy_metal_pouch','hvy._metal_pouch',99,13916,0,1,0); INSERT INTO `item_basic` VALUES (5911,0,'olde_rarab_tail','olde_rarab_tail',12,30272,0,1,0); -INSERT INTO `item_basic` VALUES (5912,0,'gargouille_quiver','gargou._quiver',12,1540,15,0,0); -INSERT INTO `item_basic` VALUES (5913,0,'adaman_bolt_quiver','a._bolt_quiver',12,1540,15,0,0); +INSERT INTO `item_basic` VALUES (5912,0,'gargouille_quiver','gargou._quiver',12,1540,15,0,1050); +INSERT INTO `item_basic` VALUES (5913,0,'adaman_bolt_quiver','a._bolt_quiver',12,1540,15,0,900); INSERT INTO `item_basic` VALUES (5914,0,'orichalcum_bullet_pouch','o._bull._pouch',12,1540,15,0,950); -INSERT INTO `item_basic` VALUES (5915,0,'adaman_bullet_pouch','a._bull._pouch',12,1540,15,0,0); +INSERT INTO `item_basic` VALUES (5915,0,'adaman_bullet_pouch','a._bull._pouch',12,1540,15,0,950); INSERT INTO `item_basic` VALUES (5916,0,'temple_truffle','temple_truffle',12,1608,0,0,0); INSERT INTO `item_basic` VALUES (5917,0,'choco-scroll','choco-scroll',12,1608,0,0,0); INSERT INTO `item_basic` VALUES (5918,0,'choco-katana','choco-katana',12,1608,0,0,0); @@ -5815,13 +5815,13 @@ INSERT INTO `item_basic` VALUES (6129,0,'geo-paralysis','geo-paralysis',1,34432, INSERT INTO `item_basic` VALUES (6130,0,'geo-gravity','geo-gravity',1,34432,0,1,0); INSERT INTO `item_basic` VALUES (6131,771,'plate_of_indi-haste','indi-haste',1,34444,45,0,9940); INSERT INTO `item_basic` VALUES (6132,0,'geo-haste','geo-haste',1,34432,0,0,0); -INSERT INTO `item_basic` VALUES (6137,0,'chapuli_quiver','chapuli_quiver',12,1540,15,0,0); -INSERT INTO `item_basic` VALUES (6138,0,'mantid_quiver','mantid_quiver',12,1540,15,0,1222); -INSERT INTO `item_basic` VALUES (6139,0,'midrium_bolt_quiver','mid._bolt_quiver',12,1540,15,0,0); -INSERT INTO `item_basic` VALUES (6140,0,'damascus_bolt_quiver','dm._bolt_quiver',12,1540,15,0,0); +INSERT INTO `item_basic` VALUES (6137,0,'chapuli_quiver','chapuli_quiver',12,1540,15,0,1050); +INSERT INTO `item_basic` VALUES (6138,0,'mantid_quiver','mantid_quiver',12,1540,15,0,1260); +INSERT INTO `item_basic` VALUES (6139,0,'midrium_bolt_quiver','mid._bolt_quiver',12,1540,15,0,900); +INSERT INTO `item_basic` VALUES (6140,0,'damascus_bolt_quiver','dm._bolt_quiver',12,1540,15,0,1080); INSERT INTO `item_basic` VALUES (6141,0,'oxidant_bolt_quiver','o._bolt_quiver',12,1540,15,0,720); -INSERT INTO `item_basic` VALUES (6142,0,'midrium_bullet_pouch','mid._bul._pouch',12,1540,15,0,0); -INSERT INTO `item_basic` VALUES (6143,0,'damascus_bullet_pouch','dm._bul._pouch',12,1540,15,0,0); +INSERT INTO `item_basic` VALUES (6142,0,'midrium_bullet_pouch','mid._bul._pouch',12,1540,15,0,950); +INSERT INTO `item_basic` VALUES (6143,0,'damascus_bullet_pouch','dm._bul._pouch',12,1540,15,0,980); INSERT INTO `item_basic` VALUES (6144,0,'frigorifish','frigorifish',12,1548,51,0,100); INSERT INTO `item_basic` VALUES (6145,0,'dwarf_remora','dwarf_remora',12,1548,51,0,100); INSERT INTO `item_basic` VALUES (6146,0,'remora','remora',1,1544,51,0,100); @@ -5879,16 +5879,16 @@ INSERT INTO `item_basic` VALUES (6197,0,'rime_prominence_tincture','e._tincture_ INSERT INTO `item_basic` VALUES (6198,0,'crystalline_claw_tincture','e._tincture_(cc)',1,58964,0,1,0); INSERT INTO `item_basic` VALUES (6199,0,'achiyalabopa_quiver','achiyal._quiver',12,30292,0,0,0); INSERT INTO `item_basic` VALUES (6200,0,'adlivun_quiver','adlivun_quiver',12,30292,0,0,0); -INSERT INTO `item_basic` VALUES (6201,0,'tulfaire_quiver','tulfaire_quiver',12,1540,15,0,0); -INSERT INTO `item_basic` VALUES (6202,0,'raaz_quiver','raaz_quiver',12,1540,15,0,0); +INSERT INTO `item_basic` VALUES (6201,0,'tulfaire_quiver','tulfaire_quiver',12,1540,15,0,1470); +INSERT INTO `item_basic` VALUES (6202,0,'raaz_quiver','raaz_quiver',12,1540,15,0,1540); INSERT INTO `item_basic` VALUES (6203,0,'achiyalabopa_bolt_quiver','al._bolt_quiver',12,30292,0,0,0); INSERT INTO `item_basic` VALUES (6204,0,'adlivun_bolt_quiver','ad._bolt_quiver',12,30292,0,0,0); -INSERT INTO `item_basic` VALUES (6205,0,'titanium_bolt_quiver','t._bolt_quiver',12,1540,15,0,0); -INSERT INTO `item_basic` VALUES (6206,0,'bismuth_bolt_quiver','bi._bolt_quiver',12,1540,15,0,0); +INSERT INTO `item_basic` VALUES (6205,0,'titanium_bolt_quiver','t._bolt_quiver',12,1540,15,0,1260); +INSERT INTO `item_basic` VALUES (6206,0,'bismuth_bolt_quiver','bi._bolt_quiver',12,1540,15,0,1320); INSERT INTO `item_basic` VALUES (6207,0,'achiyalabopa_bullet_pouch','al._bull._pouch',12,30292,0,0,0); INSERT INTO `item_basic` VALUES (6208,0,'adlivun_bullet_pouch','ad._bull._pouch',12,30292,0,0,0); -INSERT INTO `item_basic` VALUES (6209,0,'titanium_bullet_pouch','ti._bull._pouch',12,1540,15,0,0); -INSERT INTO `item_basic` VALUES (6210,0,'bismuth_bullet_pouch','bi._bull._pouch',12,1540,15,0,989); +INSERT INTO `item_basic` VALUES (6209,0,'titanium_bullet_pouch','ti._bull._pouch',12,1540,15,0,1010); +INSERT INTO `item_basic` VALUES (6210,0,'bismuth_bullet_pouch','bi._bull._pouch',12,1540,15,0,1020); INSERT INTO `item_basic` VALUES (6211,0,'slice_of_marinara_pizza','marinara_slice',12,1548,56,0,77); INSERT INTO `item_basic` VALUES (6212,0,'slice_of_marinara_pizza_+1','marinara_slice_+1',12,1548,56,0,0); INSERT INTO `item_basic` VALUES (6213,0,'slice_of_margherita_pizza','margherita_slice',12,1548,56,0,0); @@ -5943,9 +5943,9 @@ INSERT INTO `item_basic` VALUES (6261,0,'piece_of_akamochi_+1','akamochi_+1',12, INSERT INTO `item_basic` VALUES (6262,0,'piece_of_kusamochi','kusamochi',12,1548,56,0,140); INSERT INTO `item_basic` VALUES (6263,0,'piece_of_kusamochi_+1','kusamochi_+1',12,1548,56,0,175); INSERT INTO `item_basic` VALUES (6264,0,'frayed_sack_of_horror_+1','frayed_sack_(h1)',99,30296,0,0,0); -INSERT INTO `item_basic` VALUES (6265,0,'toolbag_(ranka)','toolbag_(ranka)',12,1540,49,0,0); -INSERT INTO `item_basic` VALUES (6266,0,'toolbag_(furu)','toolbag_(furu)',12,1540,49,0,0); -INSERT INTO `item_basic` VALUES (6267,0,'aged_box_(bayld)','aged_box_(bayld)',99,13912,0,0,0); +INSERT INTO `item_basic` VALUES (6265,0,'toolbag_ranka','toolbag_(ranka)',12,1540,49,0,2600); +INSERT INTO `item_basic` VALUES (6266,0,'toolbag_furu','toolbag_(furu)',12,1540,49,0,2600); +INSERT INTO `item_basic` VALUES (6267,0,'aged_box_bayld','aged_box_(bayld)',99,13912,0,0,0); INSERT INTO `item_basic` VALUES (6268,0,'komanezumi','komanezumi',99,1548,63,0,35); INSERT INTO `item_basic` VALUES (6269,0,'eminent_quiver','eminent_quiver',12,30292,0,0,0); INSERT INTO `item_basic` VALUES (6270,0,'eminent_bolt_quiver','em._bolt_quiver',12,30292,0,0,0); @@ -5957,10 +5957,10 @@ INSERT INTO `item_basic` VALUES (6275,0,'pukatrice_egg_+1','pukatrice_egg_+1',12 INSERT INTO `item_basic` VALUES (6276,0,'deep-fried_shrimp','d.-fried_shrimp',12,1548,53,0,0); INSERT INTO `item_basic` VALUES (6277,0,'deep-fried_shrimp_+1','d.-fr._shrimp_+1',12,1548,53,0,0); INSERT INTO `item_basic` VALUES (6278,0,'abrasion_bolt_quiver','abr._bolt_quiver',12,1540,15,0,1380); -INSERT INTO `item_basic` VALUES (6279,0,'righteous_bolt_quiver','rig._bolt_quiver',12,1540,15,0,0); -INSERT INTO `item_basic` VALUES (6280,0,'rakaznar_quiver','rakaznar_quiver',12,1540,15,0,0); -INSERT INTO `item_basic` VALUES (6281,0,'rakaznar_bolt_quiver','ra._bolt_quiver',12,1540,15,0,0); -INSERT INTO `item_basic` VALUES (6282,0,'rakaznar_bullet_pouch','ra._bul._pouch',12,1540,15,0,0); +INSERT INTO `item_basic` VALUES (6279,0,'righteous_bolt_quiver','rig._bolt_quiver',12,1540,15,0,1380); +INSERT INTO `item_basic` VALUES (6280,0,'rakaznar_quiver','rakaznar_quiver',12,1540,15,0,1350); +INSERT INTO `item_basic` VALUES (6281,0,'rakaznar_bolt_quiver','ra._bolt_quiver',12,1540,15,0,1350); +INSERT INTO `item_basic` VALUES (6282,0,'rakaznar_bullet_pouch','ra._bul._pouch',12,1540,15,0,1350); INSERT INTO `item_basic` VALUES (6283,0,'velkk_coffer','velkk_coffer',99,30288,0,0,0); INSERT INTO `item_basic` VALUES (6284,0,'grand_velkk_coffer','gr._velkk_coffer',99,30288,0,0,0); INSERT INTO `item_basic` VALUES (6285,0,'ymmr-ulvids_coffer','ymmr-ul._co.',99,30288,0,0,0); @@ -5988,8 +5988,8 @@ INSERT INTO `item_basic` VALUES (6306,0,'happo_shuriken_pouch','hap._sh._pouch', INSERT INTO `item_basic` VALUES (6307,0,'happo_shuriken_+1_pouch','ha._sh._+1_pouch',12,1536,15,0,0); INSERT INTO `item_basic` VALUES (6308,0,'hachiya_shuriken_pouch','hac._sh._pouch',12,30292,0,0,0); INSERT INTO `item_basic` VALUES (6309,0,'suppa_shuriken_pouch','sup._sh._pouch',12,30292,0,0,0); -INSERT INTO `item_basic` VALUES (6310,0,'gashing_bolt_quiver','gash._bolt_quiver',12,1540,15,0,0); -INSERT INTO `item_basic` VALUES (6311,0,'decimating_bullet_pouch','dec._bul._pouch',12,1540,15,0,0); +INSERT INTO `item_basic` VALUES (6310,0,'gashing_bolt_quiver','gash._bolt_quiver',12,1540,15,0,1320); +INSERT INTO `item_basic` VALUES (6311,0,'decimating_bullet_pouch','dec._bul._pouch',12,1540,15,0,1320); INSERT INTO `item_basic` VALUES (6312,0,'hugemaw_harolds_coffer','harolds_coffer',99,30288,0,1,0); INSERT INTO `item_basic` VALUES (6313,0,'bounding_belindas_coffer','belindas_coffer',99,30288,0,1,0); INSERT INTO `item_basic` VALUES (6314,0,'prickly_pitrivs_coffer','pitrivs_coffer',99,30288,0,1,0); @@ -6422,7 +6422,7 @@ INSERT INTO `item_basic` VALUES (8746,0,'suit_of_dullahan_armor','dullahan_armor INSERT INTO `item_basic` VALUES (8747,0,'chunk_of_rakaznar_ore','rakaznar_ore',12,4,38,0,0); INSERT INTO `item_basic` VALUES (8748,0,'rakaznar_ingot','rakaznar_ingot',12,4,38,0,0); INSERT INTO `item_basic` VALUES (8749,0,'handful_of_rakaznar_bolt_heads','ra._bolt_heads',99,4,43,0,0); -INSERT INTO `item_basic` VALUES (8750,0,'handful_of_rakaznar_arrowheads','ra._arrwhd.',99,4,43,0,0); +INSERT INTO `item_basic` VALUES (8750,0,'handful_of_rakaznar_arrowheads','ra._arrwhd.',99,4,43,0,9); INSERT INTO `item_basic` VALUES (8751,0,'square_of_ancestral_cloth','ancestral_cloth',12,4100,40,0,0); INSERT INTO `item_basic` VALUES (8752,0,'cehuetzi_claw','cehuetzi_claw',12,4,42,0,6885); INSERT INTO `item_basic` VALUES (8753,0,'cehuetzi_ice_shard','c._ice_shard',12,4,59,0,6240); @@ -6473,8 +6473,8 @@ INSERT INTO `item_basic` VALUES (8798,0,'pinch_of_high-purity_bayld','h-p_bayld' INSERT INTO `item_basic` VALUES (8799,0,'bayld_crystal','bayld_crystal',1,61504,0,0,0); INSERT INTO `item_basic` VALUES (8800,0,'azuki_bean','azuki_bean',12,4,59,0,40); INSERT INTO `item_basic` VALUES (8801,0,'vial_of_moblin_oil','moblin_oil',1,61508,0,0,0); -INSERT INTO `item_basic` VALUES (8803,0,'ranka','ranka',99,4,49,0,0); -INSERT INTO `item_basic` VALUES (8804,0,'furusumi','furusumi',99,4,49,0,0); +INSERT INTO `item_basic` VALUES (8803,0,'ranka','ranka',99,4,49,0,12); +INSERT INTO `item_basic` VALUES (8804,0,'furusumi','furusumi',99,4,49,0,12); INSERT INTO `item_basic` VALUES (8805,0,'woodworking_kit_5','wood._kit_5',12,4,43,0,6); INSERT INTO `item_basic` VALUES (8806,0,'woodworking_kit_10','wood._kit_10',12,4,43,0,19); INSERT INTO `item_basic` VALUES (8807,0,'woodworking_kit_15','wood._kit_15',12,4,43,0,49); @@ -7568,7 +7568,7 @@ INSERT INTO `item_basic` VALUES (10146,961,'cipher_of_kukkis_alter_ego','cipher_ INSERT INTO `item_basic` VALUES (10147,962,'cipher_of_margrets_alter_ego','cipher_margret',1,61504,0,0,0); INSERT INTO `item_basic` VALUES (10148,938,'cipher_of_gilgameshs_alter_ego','cipher_gilgamesh',1,61504,0,0,0); INSERT INTO `item_basic` VALUES (10149,939,'cipher_of_areuhats_alter_ego','cipher_areuhat',1,61504,0,0,0); -INSERT INTO `item_basic` VALUES (10150,943,'cipher_of_lhes_alter_ego','cipher_lhe',1,61504,0,0,0); +INSERT INTO `item_basic` VALUES (10150,964,'cipher_of_lhes_alter_ego','cipher_lhe',1,61504,0,0,0); INSERT INTO `item_basic` VALUES (10151,966,'cipher_of_mayakovs_alter_ego','cipher_mayakov',1,61504,0,0,0); INSERT INTO `item_basic` VALUES (10152,967,'cipher_of_qultadas_alter_ego','cipher_qultada',1,61504,0,0,0); INSERT INTO `item_basic` VALUES (10153,968,'cipher_of_adelheids_alter_ego','cipher_adelheid',1,61504,0,0,0); @@ -14609,7 +14609,7 @@ INSERT INTO `item_basic` VALUES (17308,0,'hawkeye','hawkeye',99,2052,15,0,9); INSERT INTO `item_basic` VALUES (17309,0,'pinwheel','pinwheel',99,2052,15,0,30); INSERT INTO `item_basic` VALUES (17310,0,'hyo','hyo',99,2052,15,0,51); INSERT INTO `item_basic` VALUES (17311,0,'dart_+1','dart_+1',99,2052,15,0,2); -INSERT INTO `item_basic` VALUES (17312,0,'iron_bullet','iron_bullet',99,2052,15,0,34); +INSERT INTO `item_basic` VALUES (17312,0,'iron_bullet','iron_bullet',99,2052,15,0,36); INSERT INTO `item_basic` VALUES (17313,0,'grenade','grenade',12,2052,15,0,165); INSERT INTO `item_basic` VALUES (17314,0,'quake_grenade','quake_grenade',12,2052,15,0,410); INSERT INTO `item_basic` VALUES (17315,0,'riot_grenade','riot_grenade',12,2052,15,0,600); @@ -14622,7 +14622,7 @@ INSERT INTO `item_basic` VALUES (17321,0,'silver_arrow','silver_arrow',99,2052,1 INSERT INTO `item_basic` VALUES (17322,0,'fire_arrow','fire_arrow',99,2052,15,0,21); INSERT INTO `item_basic` VALUES (17323,0,'ice_arrow','ice_arrow',99,2052,15,0,14); INSERT INTO `item_basic` VALUES (17324,0,'lightning_arrow','lightning_arrow',99,2052,15,0,14); -INSERT INTO `item_basic` VALUES (17325,0,'kabura_arrow','kabura_arrow',99,2052,15,0,9); +INSERT INTO `item_basic` VALUES (17325,0,'kabura_arrow','kabura_arrow',99,2052,15,0,15); INSERT INTO `item_basic` VALUES (17326,0,'judges_arrow','judges_arrow',99,30786,0,1,0); INSERT INTO `item_basic` VALUES (17327,0,'grand_knights_arrow','gnd.kgt._arrow',12,30800,0,1,0); INSERT INTO `item_basic` VALUES (17328,0,'gold_musketeers_bolt','gld.msk._bolt',12,30800,0,1,0); @@ -14638,7 +14638,7 @@ INSERT INTO `item_basic` VALUES (17337,0,'mythril_bolt','mythril_bolt',99,2052,1 INSERT INTO `item_basic` VALUES (17338,0,'darksteel_bolt','darksteel_bolt',99,2052,15,0,9); INSERT INTO `item_basic` VALUES (17339,0,'bronze_bolt','bronze_bolt',99,2052,15,0,1); INSERT INTO `item_basic` VALUES (17340,0,'bullet','bullet',99,2052,15,0,10); -INSERT INTO `item_basic` VALUES (17341,0,'silver_bullet','silver_bullet',99,2052,15,0,50); +INSERT INTO `item_basic` VALUES (17341,0,'silver_bullet','silver_bullet',99,2052,15,0,31); INSERT INTO `item_basic` VALUES (17342,0,'cannon_shell','cannon_shell',12,2052,15,0,100); INSERT INTO `item_basic` VALUES (17343,0,'bronze_bullet','bronze_bullet',99,2052,15,0,3); INSERT INTO `item_basic` VALUES (17344,0,'cornette','cornette',1,2084,14,0,59); @@ -16448,8 +16448,8 @@ INSERT INTO `item_basic` VALUES (19179,0,'dervish_sword','dervish_sword',1,63572 INSERT INTO `item_basic` VALUES (19180,0,'omphalos_bullet','omphalos_bullet',1,63572,0,1,0); INSERT INTO `item_basic` VALUES (19181,0,'moogles_largesse','moogles_largesse',1,64584,0,1,0); INSERT INTO `item_basic` VALUES (19182,0,'ruszor_arrow','ruszor_arrow',99,2052,15,0,34); -INSERT INTO `item_basic` VALUES (19183,0,'dark_adaman_bolt','drk._adm._bolt',99,2052,15,0,30); -INSERT INTO `item_basic` VALUES (19184,0,'dark_adaman_bullet','drk._adm._bullet',99,2052,15,0,50); +INSERT INTO `item_basic` VALUES (19183,0,'dark_adaman_bolt','drk._adm._bolt',99,2052,15,0,5); +INSERT INTO `item_basic` VALUES (19184,0,'dark_adaman_bullet','drk._adm._bullet',99,2052,15,0,8); INSERT INTO `item_basic` VALUES (19185,0,'can_of_automaton_oil_+3','automat._oil_+3',12,2052,61,0,0); INSERT INTO `item_basic` VALUES (19186,0,'tiny_tathlum','tiny_tathlum',1,34820,15,0,389); INSERT INTO `item_basic` VALUES (19187,0,'murti_bow','murti_bow',1,63568,0,1,0); @@ -16460,11 +16460,11 @@ INSERT INTO `item_basic` VALUES (19191,0,'exequy_gun','exequy_gun',1,63568,0,1,0 INSERT INTO `item_basic` VALUES (19192,0,'awildas_gun','awildas_gun',1,63572,0,1,0); INSERT INTO `item_basic` VALUES (19193,0,'aeolus_arrow','aeolus_arrow',1,63572,0,1,0); INSERT INTO `item_basic` VALUES (19194,0,'vertex_bolt','vertex_bolt',1,63572,0,1,0); -INSERT INTO `item_basic` VALUES (19195,0,'antlion_arrow','antlion_arrow',99,2052,15,0,40); -INSERT INTO `item_basic` VALUES (19196,0,'darkling_bolt','darkling_bolt',99,2052,15,0,6); -INSERT INTO `item_basic` VALUES (19197,0,'fusion_bolt','fusion_bolt',99,2052,15,0,9); -INSERT INTO `item_basic` VALUES (19198,0,'dweomer_bullet','dweomer_bullet',99,2052,15,0,46); -INSERT INTO `item_basic` VALUES (19199,0,'oberons_bullet','oberons_bullet',99,2052,15,0,7); +INSERT INTO `item_basic` VALUES (19195,0,'antlion_arrow','antlion_arrow',99,2052,15,0,2); +INSERT INTO `item_basic` VALUES (19196,0,'darkling_bolt','darkling_bolt',99,2052,15,0,2); +INSERT INTO `item_basic` VALUES (19197,0,'fusion_bolt','fusion_bolt',99,2052,15,0,2); +INSERT INTO `item_basic` VALUES (19198,0,'dweomer_bullet','dweomer_bullet',99,2052,15,0,2); +INSERT INTO `item_basic` VALUES (19199,0,'oberons_bullet','oberons_bullet',99,2052,15,0,2); INSERT INTO `item_basic` VALUES (19200,0,'black_bolt','black_bolt',99,2052,15,0,10); INSERT INTO `item_basic` VALUES (19201,0,'electrum_bullet','electrum_bullet',99,2052,15,0,25); INSERT INTO `item_basic` VALUES (19202,0,'smart_grenade','smart_grenade',1,34820,15,0,9500); @@ -17045,7 +17045,7 @@ INSERT INTO `item_basic` VALUES (19779,0,'potestas_bomblet','potestas_bomblet',1 INSERT INTO `item_basic` VALUES (19780,0,'mana_ampulla','mana_ampulla',1,34820,15,0,0); INSERT INTO `item_basic` VALUES (19781,0,'eluders_sachet','eluders_sachet',1,34820,0,0,0); INSERT INTO `item_basic` VALUES (19782,0,'iron_gobbet','iron_gobbet',1,63572,0,1,0); -INSERT INTO `item_basic` VALUES (19783,0,'iga_shuriken','iga_shuriken',99,2052,0,0,0); +INSERT INTO `item_basic` VALUES (19783,0,'iga_shuriken','iga_shuriken',99,2052,0,0,61); INSERT INTO `item_basic` VALUES (19784,0,'lanner_bow','lanner_bow',1,2084,13,0,0); INSERT INTO `item_basic` VALUES (19785,0,'lanner_bow_+1','lanner_bow_+1',1,2080,13,0,0); INSERT INTO `item_basic` VALUES (19786,0,'nurigomeyumi','nurigomeyumi',1,2084,13,0,0); @@ -17062,8 +17062,8 @@ INSERT INTO `item_basic` VALUES (19796,0,'rosschinder','rosschinder',1,2084,8,0, INSERT INTO `item_basic` VALUES (19797,0,'rosschinder_+1','rosschinder_+1',1,2080,8,0,0); INSERT INTO `item_basic` VALUES (19798,0,'drakaina_lance','drakaina_lance',1,63572,0,1,0); INSERT INTO `item_basic` VALUES (19799,0,'herjas_fork','herjas_fork',1,63572,0,1,0); -INSERT INTO `item_basic` VALUES (19800,0,'gargouille_arrow','gargouille_arrow',99,2052,15,0,30); -INSERT INTO `item_basic` VALUES (19801,0,'adaman_bolt','adaman_bolt',99,2052,15,0,25); +INSERT INTO `item_basic` VALUES (19800,0,'gargouille_arrow','gargouille_arrow',99,2052,15,0,3); +INSERT INTO `item_basic` VALUES (19801,0,'adaman_bolt','adaman_bolt',99,2052,15,0,5); INSERT INTO `item_basic` VALUES (19802,0,'orichalcum_bullet','orichalc._bullet',99,2052,15,0,86); INSERT INTO `item_basic` VALUES (19803,0,'adaman_bullet','adaman_bullet',99,2052,15,0,23); INSERT INTO `item_basic` VALUES (19805,0,'verethragna','verethragna',1,63552,0,1,0); @@ -17988,42 +17988,42 @@ INSERT INTO `item_basic` VALUES (21300,0,'divine_arrow','divine_arrow',99,2052,1 INSERT INTO `item_basic` VALUES (21301,0,'porxie_arrow','porxie_arrow',99,2052,15,0,0); INSERT INTO `item_basic` VALUES (21302,0,'eminent_arrow','eminent_arrow',99,30804,0,0,0); INSERT INTO `item_basic` VALUES (21303,0,'rakaznar_arrow','rakaznar_arrow',99,2052,15,0,0); -INSERT INTO `item_basic` VALUES (21304,0,'raaz_arrow','raaz_arrow',99,2052,15,0,10); -INSERT INTO `item_basic` VALUES (21305,0,'tulfaire_arrow','tulfaire_arrow',99,2052,15,0,10); +INSERT INTO `item_basic` VALUES (21304,0,'raaz_arrow','raaz_arrow',99,2052,15,0,17); +INSERT INTO `item_basic` VALUES (21305,0,'tulfaire_arrow','tulfaire_arrow',99,2052,15,0,7); INSERT INTO `item_basic` VALUES (21306,0,'adlivun_arrow','adlivun_arrow',99,30804,0,1,0); INSERT INTO `item_basic` VALUES (21307,0,'achiyalabopa_arrow','achiyal._arrow',99,30804,0,1,0); INSERT INTO `item_basic` VALUES (21308,0,'mantid_arrow','mantid_arrow',99,2052,15,1,5); -INSERT INTO `item_basic` VALUES (21309,0,'chapuli_arrow','chapuli_arrow',99,2052,15,1,0); +INSERT INTO `item_basic` VALUES (21309,0,'chapuli_arrow','chapuli_arrow',99,2052,15,1,5); INSERT INTO `item_basic` VALUES (21310,0,'raetic_arrow','raetic_arrow',99,2048,0,0,0); INSERT INTO `item_basic` VALUES (21311,0,'quelling_bolt','quelling_bolt',99,30784,0,0,0); INSERT INTO `item_basic` VALUES (21312,0,'divine_bolt','divine_bolt',99,2052,15,0,0); -INSERT INTO `item_basic` VALUES (21313,0,'gashing_bolt','gashing_bolt',99,2052,15,0,0); -INSERT INTO `item_basic` VALUES (21314,0,'abrasion_bolt','abrasion_bolt',99,2052,15,0,0); +INSERT INTO `item_basic` VALUES (21313,0,'gashing_bolt','gashing_bolt',99,2052,15,0,7); +INSERT INTO `item_basic` VALUES (21314,0,'abrasion_bolt','abrasion_bolt',99,2052,15,0,40); INSERT INTO `item_basic` VALUES (21315,0,'righteous_bolt','righteous_bolt',99,2052,15,0,0); INSERT INTO `item_basic` VALUES (21316,0,'eminent_bolt','eminent_bolt',99,30804,0,0,0); -INSERT INTO `item_basic` VALUES (21317,0,'rakaznar_bolt','rakaznar_bolt',99,2052,15,0,0); -INSERT INTO `item_basic` VALUES (21318,0,'bismuth_bolt','bismuth_bolt',99,2052,15,0,10); -INSERT INTO `item_basic` VALUES (21319,0,'titanium_bolt','titanium_bolt',99,2052,15,0,10); +INSERT INTO `item_basic` VALUES (21317,0,'rakaznar_bolt','rakaznar_bolt',99,2052,15,0,38); +INSERT INTO `item_basic` VALUES (21318,0,'bismuth_bolt','bismuth_bolt',99,2052,15,0,36); +INSERT INTO `item_basic` VALUES (21319,0,'titanium_bolt','titanium_bolt',99,2052,15,0,34); INSERT INTO `item_basic` VALUES (21320,0,'adlivun_bolt','adlivun_bolt',99,30804,0,1,0); INSERT INTO `item_basic` VALUES (21321,0,'achiyalabopa_bolt','achiyal._bolt',99,30804,0,1,0); -INSERT INTO `item_basic` VALUES (21322,0,'damascus_bolt','damascus_bolt',99,2052,15,1,0); +INSERT INTO `item_basic` VALUES (21322,0,'damascus_bolt','damascus_bolt',99,2052,15,1,38); INSERT INTO `item_basic` VALUES (21323,0,'oxidant_bolt','oxidant_bolt',99,2052,15,1,19); -INSERT INTO `item_basic` VALUES (21324,0,'midrium_bolt','midrium_bolt',99,2052,15,1,0); +INSERT INTO `item_basic` VALUES (21324,0,'midrium_bolt','midrium_bolt',99,2052,15,1,32); INSERT INTO `item_basic` VALUES (21325,0,'devastating_bullet','devastating_bullet',99,30784,0,0,0); INSERT INTO `item_basic` VALUES (21326,0,'living_bullet','living_bullet',99,30784,0,0,0); INSERT INTO `item_basic` VALUES (21327,0,'eradicating_bullet','eradicating_bullet',99,30784,0,0,0); INSERT INTO `item_basic` VALUES (21328,0,'divine_bullet','divine_bullet',99,2052,15,0,0); INSERT INTO `item_basic` VALUES (21329,0,'stinger_bullet','stinger_bullet',99,30804,0,0,0); -INSERT INTO `item_basic` VALUES (21330,0,'decimating_bullet','decimating_bullet',99,2052,15,0,0); +INSERT INTO `item_basic` VALUES (21330,0,'decimating_bullet','decimating_bullet',99,2052,15,0,28); INSERT INTO `item_basic` VALUES (21331,0,'eminent_bullet','eminent_bullet',99,30804,0,0,0); -INSERT INTO `item_basic` VALUES (21332,0,'rakaznar_bullet','rakaznar_bullet',99,2052,15,0,0); -INSERT INTO `item_basic` VALUES (21333,0,'bismuth_bullet','bismuth_bullet',99,2052,15,0,10); +INSERT INTO `item_basic` VALUES (21332,0,'rakaznar_bullet','rakaznar_bullet',99,2052,15,0,30); +INSERT INTO `item_basic` VALUES (21333,0,'bismuth_bullet','bismuth_bullet',99,2052,15,0,28); INSERT INTO `item_basic` VALUES (21334,0,'animikii_bullet','animikii_bullet',1,63572,0,1,0); -INSERT INTO `item_basic` VALUES (21335,0,'titanium_bullet','titanium_bullet',99,2052,15,0,10); +INSERT INTO `item_basic` VALUES (21335,0,'titanium_bullet','titanium_bullet',99,2052,15,0,26); INSERT INTO `item_basic` VALUES (21336,0,'adlivun_bullet','adlivun_bullet',99,30804,0,1,0); INSERT INTO `item_basic` VALUES (21337,0,'achiyalabopa_bullet','achiyal._bullet',99,30804,0,1,0); -INSERT INTO `item_basic` VALUES (21338,0,'damascus_bullet','damascus_bullet',99,2052,15,1,0); -INSERT INTO `item_basic` VALUES (21339,0,'midrium_bullet','midrium_bullet',99,2052,15,1,0); +INSERT INTO `item_basic` VALUES (21338,0,'damascus_bullet','damascus_bullet',99,2052,15,1,38); +INSERT INTO `item_basic` VALUES (21339,0,'midrium_bullet','midrium_bullet',99,2052,15,1,25); INSERT INTO `item_basic` VALUES (21340,0,'halakaala','halakaala',1,38916,13,0,0); INSERT INTO `item_basic` VALUES (21341,0,'oreiads_tathlum','oreiads_tathlum',1,38916,15,0,0); INSERT INTO `item_basic` VALUES (21342,0,'erlenes_notebook','erlenes_notebook',1,63572,0,1,0); @@ -18035,7 +18035,7 @@ INSERT INTO `item_basic` VALUES (21347,0,'charitoni_sling','charitoni_sling',1,3 INSERT INTO `item_basic` VALUES (21348,0,'narmar_boomerang','narmar_boomerang',1,63572,0,0,0); INSERT INTO `item_basic` VALUES (21349,0,'wingcutter','wingcutter',1,63572,0,0,0); INSERT INTO `item_basic` VALUES (21350,0,'wingcutter_+1','wingcutter_+1',1,63569,0,1,0); -INSERT INTO `item_basic` VALUES (21351,0,'roppo_shuriken','roppo_shuriken',99,2052,15,0,0); +INSERT INTO `item_basic` VALUES (21351,0,'roppo_shuriken','roppo_shuriken',99,2052,15,0,57); INSERT INTO `item_basic` VALUES (21352,0,'roppo_shuriken_+1','roppo_shuriken_+1',99,2048,15,0,0); INSERT INTO `item_basic` VALUES (21353,0,'happo_shuriken','happo_shuriken',99,2052,15,0,115); INSERT INTO `item_basic` VALUES (21354,0,'happo_shuriken_+1','happo_shuriken_+1',99,2048,15,0,0); diff --git a/sql/item_equipment.sql b/sql/item_equipment.sql index 04888e9ac9e..2362574015c 100644 --- a/sql/item_equipment.sql +++ b/sql/item_equipment.sql @@ -9806,7 +9806,7 @@ INSERT INTO `item_equipment` VALUES (20666,'blizzard_brand',1,0,4194303,782,0,0, INSERT INTO `item_equipment` VALUES (20667,'blizzard_brand_+1',1,0,4194303,782,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (20668,'firetongue',1,0,4194303,783,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (20669,'firetongue_+1',1,0,4194303,783,0,0,3,0,0); -INSERT INTO `item_equipment` VALUES (20672,'ice_brand',99,119,32848,265,0,0,3,0,0); -- TODO: capture model from retail (using Onion Sword model) +INSERT INTO `item_equipment` VALUES (20672,'ice_brand',99,119,32848,782,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (20674,'aern_sword',1,0,4194303,825,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (20675,'aern_sword_ii',1,0,4194303,891,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (20677,'colada',99,119,32848,390,0,0,3,0,0); @@ -10187,7 +10187,7 @@ INSERT INTO `item_equipment` VALUES (21067,'nodal_wand',99,119,1048576,633,0,0,3 INSERT INTO `item_equipment` VALUES (21068,'nodal_wand',99,119,1048576,633,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21069,'nodal_wand',99,119,1048576,633,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21070,'idris',99,119,1048576,707,0,0,3,0,0); -INSERT INTO `item_equipment` VALUES (21071,'cath_palug_hammer',99,119,1048580,113,0,0,3,0,0); -- TODO: capture model from retail (using bronze hammer model) +INSERT INTO `item_equipment` VALUES (21071,'cath_palug_hammer',99,119,1048580,860,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21072,'gada',99,119,1589260,437,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21073,'izcalli',99,119,4,115,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21074,'kupo_rod',1,0,4194303,374,0,0,3,0,0); @@ -10617,8 +10617,8 @@ INSERT INTO `item_equipment` VALUES (21524,'pantin_fists',99,119,131072,121,0,0, INSERT INTO `item_equipment` VALUES (21525,'pitre_fists',99,119,131072,121,0,0,1,0,4); INSERT INTO `item_equipment` VALUES (21526,'xiucoatl',99,119,131072,480,0,0,1,0,5); INSERT INTO `item_equipment` VALUES (21527,'sakpatas_fists',99,119,131074,508,0,0,1,0,0); -- TODO: capture model from retail (using Oberon's Sainti model) -INSERT INTO `item_equipment` VALUES (21528,'dragon_fangs',99,119,131074,126,0,0,1,0,0); -- TODO: capture model from retail (using Cesti model) -INSERT INTO `item_equipment` VALUES (21529,'premium_heart',99,119,131074,127,0,0,1,0,0); -- TODO: capture model from retail (using Smash Cesti model) +INSERT INTO `item_equipment` VALUES (21528,'dragon_fangs',99,119,131074,482,0,0,1,0,0); +INSERT INTO `item_equipment` VALUES (21529,'premium_heart',99,119,131074,481,0,0,1,0,0); INSERT INTO `item_equipment` VALUES (21554,'arasy_knife',99,119,474849,157,0,0,3,0,1); INSERT INTO `item_equipment` VALUES (21555,'arasy_knife_+1',99,119,474849,157,0,0,3,0,1); INSERT INTO `item_equipment` VALUES (21556,'beryllium_kris',99,119,1589256,346,0,0,3,0,2); @@ -10632,7 +10632,7 @@ INSERT INTO `item_equipment` VALUES (21563,'eletta_knife',99,119,464688,724,0,0, INSERT INTO `item_equipment` VALUES (21564,'kaja_knife',99,119,464688,836,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21565,'tauret',99,119,464688,847,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21566,'voluspa_knife',99,119,474849,158,0,0,3,0,0); -INSERT INTO `item_equipment` VALUES (21570,'air_knife',99,119,262176,159,0,0,3,0,0); -- TODO: capture model from retail (using Onion Knife model) +INSERT INTO `item_equipment` VALUES (21570,'air_knife',99,119,262176,785,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21573,'assassins_knife',99,119,32,157,0,0,3,0,4); INSERT INTO `item_equipment` VALUES (21574,'plun._knife',99,119,32,157,0,0,3,0,4); INSERT INTO `item_equipment` VALUES (21575,'gandring',99,119,32,814,0,0,3,0,5); @@ -10663,7 +10663,7 @@ INSERT INTO `item_equipment` VALUES (21619,'eletta_sword',99,119,2209777,288,0,0 INSERT INTO `item_equipment` VALUES (21620,'kaja_sword',99,119,2209777,837,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21621,'naegling',99,119,2209777,848,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21622,'voluspa_sword',99,119,2195665,275,0,0,3,0,0); -INSERT INTO `item_equipment` VALUES (21623,'twinned_blade',1,0,4194303,265,0,0,3,0,0); -- TODO: capture model from retail (using Onion Sword model) +INSERT INTO `item_equipment` VALUES (21623,'twinned_blade',1,0,4194303,873,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21625,'duelists_sword',99,119,16,278,0,0,3,0,4); INSERT INTO `item_equipment` VALUES (21626,'vitiation_sword',99,119,16,278,0,0,3,0,4); INSERT INTO `item_equipment` VALUES (21627,'crocea_mors',99,119,16,819,0,0,3,0,5); @@ -10695,7 +10695,7 @@ INSERT INTO `item_equipment` VALUES (21671,'ajja_claymore',99,119,2097345,69,0,0 INSERT INTO `item_equipment` VALUES (21672,'eletta_claymore',99,119,2097345,542,0,0,1,0,0); INSERT INTO `item_equipment` VALUES (21673,'kaja_claymore',99,119,2097345,838,0,0,1,0,0); INSERT INTO `item_equipment` VALUES (21674,'nandaka',99,119,2097345,849,0,0,1,0,0); -INSERT INTO `item_equipment` VALUES (21681,'ophidian_sword',1,0,4194303,808,0,0,1,0,0); -- TODO: capture model from retail (using lament sword model) +INSERT INTO `item_equipment` VALUES (21681,'ophidian_sword',1,0,4194303,863,0,0,1,0,0); INSERT INTO `item_equipment` VALUES (21682,'lament',1,0,4194303,808,0,0,1,0,0); INSERT INTO `item_equipment` VALUES (21683,'ragnarok',99,119,193,546,0,1,1,0,0); INSERT INTO `item_equipment` VALUES (21684,'caladbolg',99,119,192,573,0,1,1,0,0); @@ -10734,7 +10734,7 @@ INSERT INTO `item_equipment` VALUES (21719,'ajja_axe',99,119,2098561,81,0,0,3,0, INSERT INTO `item_equipment` VALUES (21720,'eletta_axe',99,119,2098561,591,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21721,'kaja_axe',99,119,2098561,850,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21722,'dolichenus',99,119,2098561,850,0,0,3,0,0); -INSERT INTO `item_equipment` VALUES (21725,'malefic_axe',99,119,256,76,0,0,3,0,0); -- TODO: capture model from retail (using Bronze Axe model) +INSERT INTO `item_equipment` VALUES (21725,'malefic_axe',99,119,256,793,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21741,'demonic_axe',1,0,4194303,793,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21742,'aern_axe',1,0,4194303,827,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21743,'aern_axe_ii',1,0,4194303,893,0,0,3,0,0); @@ -10757,7 +10757,7 @@ INSERT INTO `item_equipment` VALUES (21759,'autarchs_axe',1,0,4194303,95,0,0,1,0 INSERT INTO `item_equipment` VALUES (21761,'zadha_chopper',1,0,4194303,99,0,0,1,0,0); INSERT INTO `item_equipment` VALUES (21762,'arasy_axe',99,119,2097281,92,0,0,1,0,1); INSERT INTO `item_equipment` VALUES (21763,'arasy_axe_+1',99,119,2097281,92,0,0,1,0,1); -INSERT INTO `item_equipment` VALUES (21764,'drastic_axe',99,119,1,95,0,0,1,0,0); -- TODO: capture model from retail (using Greataxe model) +INSERT INTO `item_equipment` VALUES (21764,'drastic_axe',99,119,1,794,0,0,1,0,0); INSERT INTO `item_equipment` VALUES (21765,'hepatizon_axe',99,119,2097281,93,0,0,1,0,2); INSERT INTO `item_equipment` VALUES (21766,'hepatizon_axe_+1',99,119,2097281,93,0,0,1,0,2); INSERT INTO `item_equipment` VALUES (21767,'raetic_chopper',99,119,2638473,335,0,0,1,0,3); @@ -10779,7 +10779,7 @@ INSERT INTO `item_equipment` VALUES (21809,'liberator',99,119,128,561,0,1,1,0,0) INSERT INTO `item_equipment` VALUES (21810,'redemption',99,119,128,576,0,1,1,0,0); INSERT INTO `item_equipment` VALUES (21812,'arasy_scythe',99,119,128,194,0,0,1,0,1); INSERT INTO `item_equipment` VALUES (21813,'arasy_scythe_+1',99,119,128,194,0,0,1,0,1); -INSERT INTO `item_equipment` VALUES (21814,'final_sickle',99,119,128,195,0,0,1,0,0); -- TODO: capture model from retail (using Scythe model) +INSERT INTO `item_equipment` VALUES (21814,'final_sickle',99,119,128,795,0,0,1,0,0); INSERT INTO `item_equipment` VALUES (21815,'maliya_sickle',99,119,393,393,0,0,1,0,2); INSERT INTO `item_equipment` VALUES (21816,'maliya_sickle_+1',99,119,393,393,0,0,1,0,2); INSERT INTO `item_equipment` VALUES (21817,'rune_scythe',70,0,393,521,0,0,1,0,0); @@ -10820,7 +10820,7 @@ INSERT INTO `item_equipment` VALUES (21880,'ajja_lance',99,119,10305,391,0,0,1,0 INSERT INTO `item_equipment` VALUES (21881,'eletta_lance',99,119,10305,453,0,0,1,0,0); INSERT INTO `item_equipment` VALUES (21882,'kaja_lance',99,119,10305,841,0,0,1,0,0); INSERT INTO `item_equipment` VALUES (21883,'shining_one',99,119,10305,841,0,0,1,0,0); -INSERT INTO `item_equipment` VALUES (21886,'iapetus',1,0,4194303,205,0,0,1,0,0); -- TODO: capture model from retail (using bronze spear model) +INSERT INTO `item_equipment` VALUES (21886,'iapetus',1,0,4194303,890,0,0,1,0,0); INSERT INTO `item_equipment` VALUES (21904,'kanaria',99,119,4096,371,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21905,'taka',99,119,4096,605,0,0,3,0,0); INSERT INTO `item_equipment` VALUES (21906,'kikoku',99,119,4096,551,0,1,3,0,0); @@ -10900,7 +10900,7 @@ INSERT INTO `item_equipment` VALUES (22063,'nirvana',99,119,16384,567,0,1,1,0,0) INSERT INTO `item_equipment` VALUES (22064,'hvergelmir',99,119,540680,581,0,1,1,0,0); INSERT INTO `item_equipment` VALUES (22065,'aern_staff',1,0,4194303,829,0,0,1,0,0); INSERT INTO `item_equipment` VALUES (22066,'aern_staff_ii',1,0,4194303,895,0,0,1,0,0); -INSERT INTO `item_equipment` VALUES (22068,'savage._pole',1,0,4194303,829,0,0,1,0,0); -- TODO: capture model from retail (using Aern Staff model) +INSERT INTO `item_equipment` VALUES (22068,'savage._pole',1,0,4194303,870,0,0,1,0,0); INSERT INTO `item_equipment` VALUES (22069,'hapy_staff',1,0,4194303,806,0,0,1,0,0); INSERT INTO `item_equipment` VALUES (22072,'lamia_staff',1,0,4194303,832,0,0,1,0,0); INSERT INTO `item_equipment` VALUES (22074,'arasy_staff',99,119,1590047,292,0,0,1,0,1); @@ -10918,7 +10918,7 @@ INSERT INTO `item_equipment` VALUES (22085,'kaja_staff',99,119,1590047,846,0,0,1 INSERT INTO `item_equipment` VALUES (22086,'xoanon',99,119,1590047,846,0,0,1,0,0); INSERT INTO `item_equipment` VALUES (22087,'malignance_pole',99,119,1597518,291,0,0,1,0,0); -- TODO: capture model from retail (using Onion Staff model) INSERT INTO `item_equipment` VALUES (22088,'voluspa_pole',99,119,1589262,298,0,0,1,0,0); -INSERT INTO `item_equipment` VALUES (22089,'sophistry',1,0,4194303,291,0,0,1,0,0); -- TODO: capture model from retail (using Onion Staff model) +INSERT INTO `item_equipment` VALUES (22089,'sophistry',1,0,4194303,871,0,0,1,0,0); INSERT INTO `item_equipment` VALUES (22091,'sorcerers_staff',99,119,8,326,0,0,1,0,4); INSERT INTO `item_equipment` VALUES (22092,'archmages_staff',99,119,8,326,0,0,1,0,4); INSERT INTO `item_equipment` VALUES (22093,'kaumodaki',99,119,8,820,0,0,1,0,5); @@ -11575,8 +11575,8 @@ INSERT INTO `item_equipment` VALUES (23786,'mpacas_boots',99,119,137218,467,0,0, INSERT INTO `item_equipment` VALUES (23787,'agwus_pigaches',99,119,3670024,468,0,0,256,0,0); INSERT INTO `item_equipment` VALUES (23788,'bunzis_sabots',99,119,16916,469,0,0,256,0,0); INSERT INTO `item_equipment` VALUES (23789,'nyame_sollerets',99,119,4194303,470,0,0,256,0,0); -INSERT INTO `item_equipment` VALUES (23790,'adenium_masque',1,0,4194303,172,0,0,16,0,0); -- TODO: capture model from retail -INSERT INTO `item_equipment` VALUES (23791,'adenium_suit',1,0,4194303,172,0,0,32,448,0); -- TODO: capture model from retail +INSERT INTO `item_equipment` VALUES (23790,'adenium_masque',1,0,4194303,471,0,0,16,0,0); +INSERT INTO `item_equipment` VALUES (23791,'adenium_suit',1,0,4194303,471,0,0,32,448,0); INSERT INTO `item_equipment` VALUES (23792,'ziamet_khud',1,0,4194303,172,0,0,16,0,0); INSERT INTO `item_equipment` VALUES (23793,'ziamet_peti',1,0,4194303,172,0,0,32,0,0); INSERT INTO `item_equipment` VALUES (23794,'ziamet_bazubands',1,0,4194303,172,0,0,64,0,0); @@ -11811,7 +11811,7 @@ INSERT INTO `item_equipment` VALUES (25719,'merlinic_jubbah',99,119,1589272,415, INSERT INTO `item_equipment` VALUES (25720,'chironic_doublet',99,119,524820,416,0,0,32,0,0); INSERT INTO `item_equipment` VALUES (25721,'vedic_coat',99,119,1622044,261,0,0,32,0,0); INSERT INTO `item_equipment` VALUES (25722,'jubilee_shirt',1,0,4194303,583,0,0,32,0,0); -INSERT INTO `item_equipment` VALUES (25726,'kupo_suit',1,0,4194303,307,0,0,32,0,0); +INSERT INTO `item_equipment` VALUES (25726,'kupo_suit',1,0,4194303,307,0,0,32,128,0); INSERT INTO `item_equipment` VALUES (25727,'passion_jacket',99,119,2593826,134,0,0,32,0,0); INSERT INTO `item_equipment` VALUES (25728,'zendik_robe',99,119,1720860,213,0,0,32,0,0); INSERT INTO `item_equipment` VALUES (25729,'vatic_byrnie',99,119,14785,41,0,0,32,0,0); @@ -12227,8 +12227,9 @@ INSERT INTO `item_equipment` VALUES (26402,'forfend_+1',99,119,2385,45,1,0,2,0,0 INSERT INTO `item_equipment` VALUES (26403,'srivatsa',99,119,64,658,5,0,2,0,0); INSERT INTO `item_equipment` VALUES (26406,'kupo_shield',1,0,4194303,56,3,0,2,0,0); INSERT INTO `item_equipment` VALUES (26409,'dullahan_shield',1,0,4194303,669,3,0,2,0,0); +INSERT INTO `item_equipment` VALUES (26410,'diamond_buckler',1,0,4194303,659,1,0,2,0,0); INSERT INTO `item_equipment` VALUES (26413,'voluspa_shield',99,119,193,30,3,0,2,0,0); -INSERT INTO `item_equipment` VALUES (26414,'twinned_shield',1,0,4194303,36,2,0,2,0,0); -- TODO: capture model from retail (using Maple Shield model) +INSERT INTO `item_equipment` VALUES (26414,'twinned_shield',1,0,4194303,672,2,0,2,0,0); INSERT INTO `item_equipment` VALUES (26419,'ammurapi_shield',99,119,1589788,42,1,0,2,0,0); INSERT INTO `item_equipment` VALUES (26420,'adapa_shield',99,119,385,29,3,0,2,0,0); INSERT INTO `item_equipment` VALUES (26421,'nusku_shield',99,119,66560,46,2,0,2,0,0); diff --git a/sql/item_mods.sql b/sql/item_mods.sql index 4d1e7a13273..c05e7c207d0 100644 --- a/sql/item_mods.sql +++ b/sql/item_mods.sql @@ -4744,11 +4744,12 @@ INSERT INTO `item_mods` VALUES (11083,569,10); -- EBULLIENCE_AMOUNT: 10 INSERT INTO `item_mods` VALUES (11083,838,10); -- REGEN_MULTIPLIER: 10 -- Ravagers Lorica +2 -INSERT INTO `item_mods` VALUES (11084,1,68); -- DEF: 68 -INSERT INTO `item_mods` VALUES (11084,23,20); -- ATT: 20 -INSERT INTO `item_mods` VALUES (11084,25,20); -- ACC: 20 -INSERT INTO `item_mods` VALUES (11084,73,8); -- STORETP: 8 -INSERT INTO `item_mods` VALUES (11084,85,7); -- GAXE: 7 +INSERT INTO `item_mods` VALUES (11084,1,68); -- DEF: 68 +INSERT INTO `item_mods` VALUES (11084,23,20); -- ATT: 20 +INSERT INTO `item_mods` VALUES (11084,25,20); -- ACC: 20 +INSERT INTO `item_mods` VALUES (11084,73,8); -- STORETP: 8 +INSERT INTO `item_mods` VALUES (11084,85,7); -- GAXE: 7 +INSERT INTO `item_mods` VALUES (11084,1046,30); -- ENHANCES_BLOOD_RAGE: 30 -- Tantra Cyclas +2 INSERT INTO `item_mods` VALUES (11085,1,64); -- DEF: 64 @@ -4895,11 +4896,12 @@ INSERT INTO `item_mods` VALUES (11103,337,20); -- DARK_ARTS_SKILL: 20 INSERT INTO `item_mods` VALUES (11103,369,1); -- REFRESH: 1 -- Ravagers Mufflers +2 -INSERT INTO `item_mods` VALUES (11104,1,32); -- DEF: 32 -INSERT INTO `item_mods` VALUES (11104,8,9); -- STR: 9 -INSERT INTO `item_mods` VALUES (11104,9,9); -- DEX: 9 -INSERT INTO `item_mods` VALUES (11104,25,12); -- ACC: 12 -INSERT INTO `item_mods` VALUES (11104,84,5); -- AXE: 5 +INSERT INTO `item_mods` VALUES (11104,1,32); -- DEF: 32 +INSERT INTO `item_mods` VALUES (11104,8,9); -- STR: 9 +INSERT INTO `item_mods` VALUES (11104,9,9); -- DEX: 9 +INSERT INTO `item_mods` VALUES (11104,25,12); -- ACC: 12 +INSERT INTO `item_mods` VALUES (11104,84,5); -- AXE: 5 +INSERT INTO `item_mods` VALUES (11104,1045,100); -- ENHANCES_RESTRAINT: 100 -- Tantra Gloves +2 INSERT INTO `item_mods` VALUES (11105,1,27); -- DEF: 27 @@ -5439,11 +5441,12 @@ INSERT INTO `item_mods` VALUES (11183,568,5); -- RAPTURE_AMOUNT: 5 INSERT INTO `item_mods` VALUES (11183,569,5); -- EBULLIENCE_AMOUNT: 5 -- Ravagers Lorica +1 -INSERT INTO `item_mods` VALUES (11184,1,65); -- DEF: 65 -INSERT INTO `item_mods` VALUES (11184,23,15); -- ATT: 15 -INSERT INTO `item_mods` VALUES (11184,25,15); -- ACC: 15 -INSERT INTO `item_mods` VALUES (11184,73,5); -- STORETP: 5 -INSERT INTO `item_mods` VALUES (11184,85,5); -- GAXE: 5 +INSERT INTO `item_mods` VALUES (11184,1,65); -- DEF: 65 +INSERT INTO `item_mods` VALUES (11184,23,15); -- ATT: 15 +INSERT INTO `item_mods` VALUES (11184,25,15); -- ACC: 15 +INSERT INTO `item_mods` VALUES (11184,73,5); -- STORETP: 5 +INSERT INTO `item_mods` VALUES (11184,85,5); -- GAXE: 5 +INSERT INTO `item_mods` VALUES (11184,1046,15); -- ENHANCES_BLOOD_RAGE: 15 -- Tantra Cyclas +1 INSERT INTO `item_mods` VALUES (11185,1,61); -- DEF: 61 @@ -5582,11 +5585,12 @@ INSERT INTO `item_mods` VALUES (11203,336,15); -- LIGHT_ARTS_SKILL: 15 INSERT INTO `item_mods` VALUES (11203,337,15); -- DARK_ARTS_SKILL: 15 -- Ravagers Mufflers +1 -INSERT INTO `item_mods` VALUES (11204,1,30); -- DEF: 30 -INSERT INTO `item_mods` VALUES (11204,8,7); -- STR: 7 -INSERT INTO `item_mods` VALUES (11204,9,7); -- DEX: 7 -INSERT INTO `item_mods` VALUES (11204,25,9); -- ACC: 9 -INSERT INTO `item_mods` VALUES (11204,84,3); -- AXE: 3 +INSERT INTO `item_mods` VALUES (11204,1,30); -- DEF: 30 +INSERT INTO `item_mods` VALUES (11204,8,7); -- STR: 7 +INSERT INTO `item_mods` VALUES (11204,9,7); -- DEX: 7 +INSERT INTO `item_mods` VALUES (11204,25,9); -- ACC: 9 +INSERT INTO `item_mods` VALUES (11204,84,3); -- AXE: 3 +INSERT INTO `item_mods` VALUES (11204,1045,50); -- ENHANCES_RESTRAINT: 50 -- Tantra Gloves +1 INSERT INTO `item_mods` VALUES (11205,1,25); -- DEF: 25 @@ -43615,6 +43619,22 @@ INSERT INTO `item_mods` VALUES (21528,25,40); -- ACC: 40 INSERT INTO `item_mods` VALUES (21529,8,30); -- STR: 30 INSERT INTO `item_mods` VALUES (21529,25,40); -- ACC: 40 +-- Arasy Knife +INSERT INTO `item_mods` VALUES (21554,9,6); -- DEX: 6 +INSERT INTO `item_mods` VALUES (21554,11,6); -- AGI: 6 +INSERT INTO `item_mods` VALUES (21554,14,6); -- CHR: 6 +INSERT INTO `item_mods` VALUES (21554,25,10); -- ACC: 10 +INSERT INTO `item_mods` VALUES (21554,31,22); -- EVA: 22 +INSERT INTO `item_mods` VALUES (21554,165,2); -- CRITHITRATE: 2 + +-- Arasy Knife +1 +INSERT INTO `item_mods` VALUES (21555,9,11); -- DEX: 11 +INSERT INTO `item_mods` VALUES (21555,11,11); -- AGI: 11 +INSERT INTO `item_mods` VALUES (21555,14,11); -- CHR: 11 +INSERT INTO `item_mods` VALUES (21555,25,15); -- ACC: 15 +INSERT INTO `item_mods` VALUES (21555,31,27); -- EVA: 27 +INSERT INTO `item_mods` VALUES (21555,165,3); -- CRITHITRATE: 3 + -- Ajja Knife INSERT INTO `item_mods` VALUES (21562,25,20); -- ACC: 20 INSERT INTO `item_mods` VALUES (21562,30,20); -- MACC: 20 @@ -43742,6 +43762,20 @@ INSERT INTO `item_mods` VALUES (21584,26,50); -- RACC: 50 INSERT INTO `item_mods` VALUES (21584,30,50); -- MACC: 50 INSERT INTO `item_mods` VALUES (21584,311,217); -- MAGIC_DAMAGE: 217 +-- Arasy Sword +INSERT INTO `item_mods` VALUES (21604,9,6); -- DEX: 6 +INSERT INTO `item_mods` VALUES (21604,10,6); -- VIT: 6 +INSERT INTO `item_mods` VALUES (21604,13,6); -- MND: 6 +INSERT INTO `item_mods` VALUES (21604,25,10); -- ACC: 10 +INSERT INTO `item_mods` VALUES (21604,291,3); -- COUNTER: 3 + +-- Arasy Sword +1 +INSERT INTO `item_mods` VALUES (21605,9,11); -- DEX: 11 +INSERT INTO `item_mods` VALUES (21605,10,11); -- VIT: 11 +INSERT INTO `item_mods` VALUES (21605,13,11); -- MND: 11 +INSERT INTO `item_mods` VALUES (21605,25,15); -- ACC: 15 +INSERT INTO `item_mods` VALUES (21605,291,5); -- COUNTER: 5 + -- Enriching Sword INSERT INTO `item_mods` VALUES (21606,28,14); -- MATT: 14 INSERT INTO `item_mods` VALUES (21606,311,108); -- MAGIC_DAMAGE: 108 @@ -43865,6 +43899,20 @@ INSERT INTO `item_mods` VALUES (21633,30,50); -- MACC: 50 INSERT INTO `item_mods` VALUES (21633,122,20); -- BLUE: 20 INSERT INTO `item_mods` VALUES (21633,311,217); -- MAGIC_DAMAGE: 217 +-- Arasy Claymore +INSERT INTO `item_mods` VALUES (21654,8,12); -- STR: 12 +INSERT INTO `item_mods` VALUES (21654,9,12); -- DEX: 12 +INSERT INTO `item_mods` VALUES (21654,23,15); -- ATT: 15 +INSERT INTO `item_mods` VALUES (21654,73,3); -- STORETP: 3 +INSERT INTO `item_mods` VALUES (21654,841,2); -- ALL_WSDMG_FIRST_HIT: 2 + +-- Arasy Claymore +1 +INSERT INTO `item_mods` VALUES (21655,8,17); -- STR: 17 +INSERT INTO `item_mods` VALUES (21655,9,17); -- DEX: 17 +INSERT INTO `item_mods` VALUES (21655,23,20); -- ATT: 20 +INSERT INTO `item_mods` VALUES (21655,73,5); -- STORETP: 5 +INSERT INTO `item_mods` VALUES (21655,841,3); -- ALL_WSDMG_FIRST_HIT: 3 + -- Dyrnwyn INSERT INTO `item_mods` VALUES (21656,23,43); -- ATT: 43 INSERT INTO `item_mods` VALUES (21656,25,25); -- ACC: 25 @@ -43998,6 +44046,20 @@ INSERT INTO `item_mods` VALUES (21700,25,20); -- ACC: 20 -- Blurred Claymore +1 INSERT INTO `item_mods` VALUES (21701,25,25); -- ACC: 25 +-- Arasy Tabar +INSERT INTO `item_mods` VALUES (21704,8,6); -- STR: 6 +INSERT INTO `item_mods` VALUES (21704,9,6); -- DEX: 6 +INSERT INTO `item_mods` VALUES (21704,11,6); -- AGI: 6 +INSERT INTO `item_mods` VALUES (21704,25,10); -- ACC: 10 +INSERT INTO `item_mods` VALUES (21704,345,100); -- TP_BONUS: 100 + +-- Arasy Tabar +1 +INSERT INTO `item_mods` VALUES (21705,8,11); -- STR: 11 +INSERT INTO `item_mods` VALUES (21705,9,11); -- DEX: 11 +INSERT INTO `item_mods` VALUES (21705,11,11); -- AGI: 11 +INSERT INTO `item_mods` VALUES (21705,25,15); -- ACC: 15 +INSERT INTO `item_mods` VALUES (21705,345,150); -- TP_BONUS: 150 + -- Barbarity INSERT INTO `item_mods` VALUES (21706,2,68); -- HP: 68 INSERT INTO `item_mods` VALUES (21706,8,23); -- STR: 23 @@ -52120,7 +52182,6 @@ INSERT INTO `item_mods` VALUES (23795,1,1); -- DEF: 1 INSERT INTO `item_mods` VALUES (23796,1,1); -- DEF: 1 -- Poroggo Cass. +1 --- Todo get exact occ_null percent from retail INSERT INTO `item_mods` VALUES (23804,958,20); -- STATUSRES: 20 INSERT INTO `item_mods` VALUES (23804,416,150); -- NULL_PHYSICAL_DAMAGE: 15 INSERT INTO `item_mods` VALUES (23804,476,150); -- NULL_MAGIC_DAMAGE: 15 @@ -53917,7 +53978,11 @@ INSERT INTO `item_mods` VALUES (25718,165,3); -- CRITHITRATE: 3 INSERT INTO `item_mods` VALUES (25718,384,400); -- HASTE_GEAR: 400 -- Jubilee Shirt -INSERT INTO `item_mods` VALUES (25722,1,1); -- DEF: 1 +INSERT INTO `item_mods` VALUES (25722,1,1); -- DEF: 1 + +-- Kupo Suit +INSERT INTO `item_mods` VALUES (25726,169,18); -- MOVE: +18% +INSERT INTO `item_mods` VALUES (25726,1,1); -- DEF: 1 -- Meghanada Cuirie INSERT INTO `item_mods` VALUES (25747,1,123); -- DEF: 123 @@ -56090,6 +56155,9 @@ INSERT INTO `item_mods` VALUES (26406,133,3); -- BONE: 3 INSERT INTO `item_mods` VALUES (26406,134,3); -- ALCHEMY: 3 INSERT INTO `item_mods` VALUES (26406,135,3); -- COOK: 3 +-- Diamond buckler +INSERT INTO `item_mods` VALUES (26410,1,1); -- DEF: 1 + -- Ammurapi Shield INSERT INTO `item_mods` VALUES (26419,1,47); -- DEF: 47 INSERT INTO `item_mods` VALUES (26419,2,22); -- HP: 22 @@ -59632,6 +59700,7 @@ INSERT INTO `item_mods` VALUES (26898,68,20); -- EVA: 20 INSERT INTO `item_mods` VALUES (26898,73,8); -- STORETP: 8 INSERT INTO `item_mods` VALUES (26898,85,9); -- GAXE: 9 INSERT INTO `item_mods` VALUES (26898,384,300); -- HASTE_GEAR: 300 +INSERT INTO `item_mods` VALUES (26898,1046,32); -- ENHANCES_BLOOD_RAGE: 32 -- Boii Lorica +1 INSERT INTO `item_mods` VALUES (26899,1,144); -- DEF: 144 @@ -59651,6 +59720,7 @@ INSERT INTO `item_mods` VALUES (26899,68,44); -- EVA: 44 INSERT INTO `item_mods` VALUES (26899,73,9); -- STORETP: 9 INSERT INTO `item_mods` VALUES (26899,85,11); -- GAXE: 11 INSERT INTO `item_mods` VALUES (26899,384,300); -- HASTE_GEAR: 300 +INSERT INTO `item_mods` VALUES (26899,1046,34); -- ENHANCES_BLOOD_RAGE: 34 -- Bhikku Cyclas INSERT INTO `item_mods` VALUES (26900,1,90); -- DEF: 90 @@ -61561,36 +61631,38 @@ INSERT INTO `item_mods` VALUES (27051,68,22); -- EVA: 22 INSERT INTO `item_mods` VALUES (27051,384,500); -- HASTE_GEAR: 500 -- Boii Mufflers -INSERT INTO `item_mods` VALUES (27052,1,71); -- DEF: 71 -INSERT INTO `item_mods` VALUES (27052,2,12); -- HP: 12 -INSERT INTO `item_mods` VALUES (27052,8,9); -- STR: 9 -INSERT INTO `item_mods` VALUES (27052,9,24); -- DEX: 24 -INSERT INTO `item_mods` VALUES (27052,10,20); -- VIT: 20 -INSERT INTO `item_mods` VALUES (27052,11,4); -- AGI: 4 -INSERT INTO `item_mods` VALUES (27052,12,4); -- INT: 4 -INSERT INTO `item_mods` VALUES (27052,13,14); -- MND: 14 -INSERT INTO `item_mods` VALUES (27052,14,10); -- CHR: 10 -INSERT INTO `item_mods` VALUES (27052,25,12); -- ACC: 12 -INSERT INTO `item_mods` VALUES (27052,31,21); -- MEVA: 21 -INSERT INTO `item_mods` VALUES (27052,68,11); -- EVA: 11 -INSERT INTO `item_mods` VALUES (27052,84,18); -- AXE: 18 -INSERT INTO `item_mods` VALUES (27052,384,300); -- HASTE_GEAR: 300 +INSERT INTO `item_mods` VALUES (27052,1,71); -- DEF: 71 +INSERT INTO `item_mods` VALUES (27052,2,12); -- HP: 12 +INSERT INTO `item_mods` VALUES (27052,8,9); -- STR: 9 +INSERT INTO `item_mods` VALUES (27052,9,24); -- DEX: 24 +INSERT INTO `item_mods` VALUES (27052,10,20); -- VIT: 20 +INSERT INTO `item_mods` VALUES (27052,11,4); -- AGI: 4 +INSERT INTO `item_mods` VALUES (27052,12,4); -- INT: 4 +INSERT INTO `item_mods` VALUES (27052,13,14); -- MND: 14 +INSERT INTO `item_mods` VALUES (27052,14,10); -- CHR: 10 +INSERT INTO `item_mods` VALUES (27052,25,12); -- ACC: 12 +INSERT INTO `item_mods` VALUES (27052,31,21); -- MEVA: 21 +INSERT INTO `item_mods` VALUES (27052,68,11); -- EVA: 11 +INSERT INTO `item_mods` VALUES (27052,84,18); -- AXE: 18 +INSERT INTO `item_mods` VALUES (27052,384,300); -- HASTE_GEAR: 300 +INSERT INTO `item_mods` VALUES (27052,1045,100); -- ENHANCES_RESTRAINT: 100 -- Boii Mufflers +1 -INSERT INTO `item_mods` VALUES (27053,1,100); -- DEF: 100 -INSERT INTO `item_mods` VALUES (27053,2,27); -- HP: 27 -INSERT INTO `item_mods` VALUES (27053,8,12); -- STR: 12 -INSERT INTO `item_mods` VALUES (27053,9,36); -- DEX: 36 -INSERT INTO `item_mods` VALUES (27053,10,32); -- VIT: 32 -INSERT INTO `item_mods` VALUES (27053,11,7); -- AGI: 7 -INSERT INTO `item_mods` VALUES (27053,12,6); -- INT: 6 -INSERT INTO `item_mods` VALUES (27053,13,23); -- MND: 23 -INSERT INTO `item_mods` VALUES (27053,14,16); -- CHR: 16 -INSERT INTO `item_mods` VALUES (27053,25,20); -- ACC: 20 -INSERT INTO `item_mods` VALUES (27053,31,32); -- MEVA: 32 -INSERT INTO `item_mods` VALUES (27053,68,24); -- EVA: 24 -INSERT INTO `item_mods` VALUES (27053,84,21); -- AXE: 21 -INSERT INTO `item_mods` VALUES (27053,384,400); -- HASTE_GEAR: 400 +INSERT INTO `item_mods` VALUES (27053,1,100); -- DEF: 100 +INSERT INTO `item_mods` VALUES (27053,2,27); -- HP: 27 +INSERT INTO `item_mods` VALUES (27053,8,12); -- STR: 12 +INSERT INTO `item_mods` VALUES (27053,9,36); -- DEX: 36 +INSERT INTO `item_mods` VALUES (27053,10,32); -- VIT: 32 +INSERT INTO `item_mods` VALUES (27053,11,7); -- AGI: 7 +INSERT INTO `item_mods` VALUES (27053,12,6); -- INT: 6 +INSERT INTO `item_mods` VALUES (27053,13,23); -- MND: 23 +INSERT INTO `item_mods` VALUES (27053,14,16); -- CHR: 16 +INSERT INTO `item_mods` VALUES (27053,25,20); -- ACC: 20 +INSERT INTO `item_mods` VALUES (27053,31,32); -- MEVA: 32 +INSERT INTO `item_mods` VALUES (27053,68,24); -- EVA: 24 +INSERT INTO `item_mods` VALUES (27053,84,21); -- AXE: 21 +INSERT INTO `item_mods` VALUES (27053,384,400); -- HASTE_GEAR: 400 +INSERT INTO `item_mods` VALUES (27053,1045,110); -- ENHANCES_RESTRAINT: 110 -- Bhikku Gloves INSERT INTO `item_mods` VALUES (27054,1,63); -- DEF: 63 diff --git a/sql/item_mods_pet.sql b/sql/item_mods_pet.sql index 78e7e406d85..caaad4fd481 100644 --- a/sql/item_mods_pet.sql +++ b/sql/item_mods_pet.sql @@ -639,6 +639,12 @@ INSERT INTO `item_mods_pet` VALUES (21529,25,40,0); -- All Pets - ACC: 40 INSERT INTO `item_mods_pet` VALUES (21529,26,40,0); -- All Pets - RACC: 40 INSERT INTO `item_mods_pet` VALUES (21529,30,40,0); -- All Pets - MACC: 40 +-- Arasy Tabar +INSERT INTO `item_mods_pet` VALUES (21704,25,10,0); -- All Pets - ACC: 10 + +-- Arasy Tabar +1 +INSERT INTO `item_mods_pet` VALUES (21705,25,15,0); -- All Pets - ACC: 15 + -- Monster Axe INSERT INTO `item_mods_pet` VALUES (21715,25,30,0); -- All Pets - ACC: 30 INSERT INTO `item_mods_pet` VALUES (21715,26,30,0); -- All Pets - RACC: 30 diff --git a/sql/item_usable.sql b/sql/item_usable.sql index a6e0c845a3b..9568492218b 100644 --- a/sql/item_usable.sql +++ b/sql/item_usable.sql @@ -466,9 +466,9 @@ INSERT INTO `item_usable` VALUES (4525,'pumpkin_pie_+1',1,1,26,0,0,0,0,0); INSERT INTO `item_usable` VALUES (4526,'silkworm_egg',1,1,0,28,0,0,0,0); INSERT INTO `item_usable` VALUES (4527,'jug_of_marys_milk',1,1,26,0,0,0,0,0); INSERT INTO `item_usable` VALUES (4528,'crystal_bass',1,1,28,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (4529,'rolanberry_(881_ce)',1,1,26,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (4530,'rolanberry_(874_ce)',1,1,26,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (4531,'rolanberry_(864_ce)',1,1,26,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (4529,'rolanberry_881_ce',1,1,26,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (4530,'rolanberry_874_ce',1,1,26,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (4531,'rolanberry_864_ce',1,1,26,0,0,0,0,0); INSERT INTO `item_usable` VALUES (4532,'soft-boiled_egg',1,1,28,0,0,0,0,0); INSERT INTO `item_usable` VALUES (4533,'bowl_of_delicious_puls',1,1,25,0,0,0,0,0); INSERT INTO `item_usable` VALUES (4534,'bowl_of_medicinal_gruel',1,1,24,0,0,0,0,0); @@ -1152,18 +1152,18 @@ INSERT INTO `item_usable` VALUES (5304,'demoralizer',4,2,67,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5305,'demoralizer_+1',4,2,67,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5306,'bottle_of_hallowed_water',1,1,7,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5307,'flask_of_invitriol',1,1,0,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5308,'toolbag_(uchitake)',1,1,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5309,'toolbag_(tsurara)',1,1,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5310,'toolbag_(kawahori-ogi)',1,1,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5311,'toolbag_(makibishi)',1,1,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5312,'toolbag_(hiraishin)',1,1,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5313,'toolbag_(mizu-deppo)',1,1,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5314,'toolbag_(shihei)',1,1,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5315,'toolbag_(jusatsu)',1,1,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5316,'toolbag_(kaginawa)',1,1,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5317,'toolbag_(sairui-ran)',1,1,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5318,'toolbag_(kodoku)',1,1,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5319,'toolbag_(shinobi-tabi)',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5308,'toolbag_uchitake',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5309,'toolbag_tsurara',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5310,'toolbag_kawahori-ogi',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5311,'toolbag_makibishi',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5312,'toolbag_hiraishin',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5313,'toolbag_mizu-deppo',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5314,'toolbag_shihei',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5315,'toolbag_jusatsu',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5316,'toolbag_kaginawa',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5317,'toolbag_sairui-ran',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5318,'toolbag_kodoku',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5319,'toolbag_shinobi-tabi',1,1,55,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5320,'chunk_of_smelling_salts',1,1,24,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5321,'bottle_of_romance_potion',1,3,24,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5322,'flask_of_healing_powder',1,1,30,0,0,0,0,0); @@ -1261,7 +1261,7 @@ INSERT INTO `item_usable` VALUES (5413,'smouldering_lamp',0,0,0,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5414,'glowing_lamp',1,0,0,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5415,'page_from_balrahns_reflections',1,5,34,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5416,'steel_bullet_pouch',1,1,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5417,'toolbag_(sanjaku-tenugui)',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5417,'toolbag_sanjaku-tenugui',1,1,55,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5418,'vial_of_tincture',1,1,6,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5419,'black_mine',1,1,0,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5420,'paralyzing_tube',1,1,0,0,0,0,0,0); @@ -1546,7 +1546,7 @@ INSERT INTO `item_usable` VALUES (5730,'serving_of_bavarois_+1',1,1,24,0,0,0,0,0 INSERT INTO `item_usable` VALUES (5731,'plate_of_ratatouille',1,1,24,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5732,'plate_of_ratatouille_+1',1,1,24,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5733,'jug_of_miracle_milk',1,1,26,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5734,'toolbag_(soshi)',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5734,'toolbag_soshi',1,1,55,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5735,'cotton_coin_purse',1,1,0,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5736,'linen_coin_purse',1,1,0,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5737,'slice_of_salted_hare',1,1,28,0,0,0,0,0); @@ -1673,13 +1673,13 @@ INSERT INTO `item_usable` VALUES (5859,'galkan_sausage_+1',1,4,28,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5860,'galkan_sausage_+2',1,4,28,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5861,'galkan_sausage_+3',1,4,28,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5862,'galkan_sausage_-1',1,4,28,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5863,'toolbag_(kabenro)',1,1,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5864,'toolbag_(jinko)',1,1,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5865,'toolbag_(ryuno)',1,1,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5866,'toolbag_(mokujin)',1,1,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5867,'toolbag_(inoshishinofuda)',1,4,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5868,'toolbag_(shikanofuda)',1,4,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (5869,'toolbag_(chonofuda)',1,4,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5863,'toolbag_kabenro',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5864,'toolbag_jinko',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5865,'toolbag_ryuno',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5866,'toolbag_mokujin',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5867,'toolbag_inoshishinofuda',1,4,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5868,'toolbag_shikanofuda',1,4,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (5869,'toolbag_chonofuda',1,4,55,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5870,'trump_card_case',1,4,0,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5871,'ruszor_quiver',1,4,55,0,0,0,0,0); INSERT INTO `item_usable` VALUES (5872,'dark_adaman_bolt_quiver',1,4,55,0,0,0,0,0); @@ -1872,8 +1872,8 @@ INSERT INTO `item_usable` VALUES (6260,'piece_of_akamochi',1,1,28,0,0,0,0,0); INSERT INTO `item_usable` VALUES (6261,'piece_of_akamochi_+1',1,1,28,0,0,0,0,0); INSERT INTO `item_usable` VALUES (6262,'piece_of_kusamochi',1,1,28,0,0,0,0,0); INSERT INTO `item_usable` VALUES (6263,'piece_of_kusamochi_+1',1,1,28,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (6265,'toolbag_(ranka)',1,1,55,0,0,0,0,0); -INSERT INTO `item_usable` VALUES (6266,'toolbag_(furu)',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (6265,'toolbag_ranka',1,1,55,0,0,0,0,0); +INSERT INTO `item_usable` VALUES (6266,'toolbag_furu',1,1,55,0,0,0,0,0); INSERT INTO `item_usable` VALUES (6268,'komanezumi',1,1,118,0,0,0,0,0); INSERT INTO `item_usable` VALUES (6272,'fried_popoto',1,1,28,0,0,0,0,0); INSERT INTO `item_usable` VALUES (6273,'fried_popoto_+1',1,1,28,0,0,0,0,0); diff --git a/sql/mob_droplist.sql b/sql/mob_droplist.sql index 9c195793a97..736872c576b 100644 --- a/sql/mob_droplist.sql +++ b/sql/mob_droplist.sql @@ -3236,10 +3236,10 @@ INSERT INTO `mob_droplist` VALUES (332,0,0,1000,928,270); -- Pinch Of Bom INSERT INTO `mob_droplist` VALUES (332,0,0,1000,2278,@UNCOMMON); -- ??? Ring (Uncommon, 10%) -- ZoneID: 194 - Bomb King -INSERT INTO `mob_droplist` VALUES (333,0,0,1000,928,820); -- Pinch Of Bomb Ash (82.0%) -INSERT INTO `mob_droplist` VALUES (333,0,0,1000,13506,280); -- Bomb Ring (28.0%) -INSERT INTO `mob_droplist` VALUES (333,0,0,1000,17316,200); -- Bomb Arm (20.0%) -INSERT INTO `mob_droplist` VALUES (333,2,0,1000,17316,0); -- Bomb Arm (Steal) +INSERT INTO `mob_droplist` VALUES (333,0,0,1000,928,@ALWAYS); -- Pinch Of Bomb Ash (Always, 100%) +INSERT INTO `mob_droplist` VALUES (333,0,0,1000,13506,@COMMON); -- Bomb Ring (Common, 15%) +INSERT INTO `mob_droplist` VALUES (333,0,0,1000,17316,@VCOMMON); -- Bomb Arm (Very Common, 24%) +INSERT INTO `mob_droplist` VALUES (333,2,0,1000,17316,0); -- Bomb Arm (Steal) -- ZoneID: 205 - Bomb Queen INSERT INTO `mob_droplist` VALUES (334,0,0,1000,13567,@ALWAYS); -- Bomb Queen Ring (Always, 100%) @@ -5548,7 +5548,7 @@ INSERT INTO `mob_droplist` VALUES (636,0,0,1000,642,@VRARE); -- Chunk Of Zinc Or INSERT INTO `mob_droplist` VALUES (636,2,0,1000,768,0); -- Flint Stone (Steal) -- ZoneID: 194 - Desmodont -INSERT INTO `mob_droplist` VALUES (637,0,0,1000,11531,164); -- Fidelity Mantle (16.4%) +INSERT INTO `mob_droplist` VALUES (637,0,0,1000,11531,@COMMON); -- Fidelity Mantle (Common, 15%) -- ZoneID: 130 - Despot INSERT INTO `mob_droplist` VALUES (638,0,0,1000,1422,@ALWAYS); -- Gem Of The West (Always, 100%) @@ -5895,11 +5895,11 @@ INSERT INTO `mob_droplist` VALUES (689,2,0,1000,1449,0); -- Tukuku Whites -- ZoneID: 194 - Doppelganger Dio INSERT INTO `mob_droplist` VALUES (690,0,0,1000,940,@ALWAYS); -- Revival Tree Root (Always, 100%) -INSERT INTO `mob_droplist` VALUES (690,0,0,1000,16773,230); -- Cruel Scythe (23.0%) +INSERT INTO `mob_droplist` VALUES (690,0,0,1000,16773,@VCOMMON); -- Cruel Scythe (Very Common, 24%) -- ZoneID: 194 - Doppelganger Gog INSERT INTO `mob_droplist` VALUES (691,0,0,1000,940,@ALWAYS); -- Revival Tree Root (Always, 100%) -INSERT INTO `mob_droplist` VALUES (691,0,0,1000,16863,270); -- Cruel Spear (27.0%) +INSERT INTO `mob_droplist` VALUES (691,0,0,1000,16863,@VCOMMON); -- Cruel Spear (Very Common, 24%) -- ZoneID: 62 - Dorgerwor The Astute INSERT INTO `mob_droplist` VALUES (692,0,0,1000,16222,@UNCOMMON); -- Mercenarys Mantle (Uncommon, 10%) @@ -10921,9 +10921,9 @@ INSERT INTO `mob_droplist` VALUES (1328,0,0,1000,2777,@UNCOMMON); -- Vial Of Mag INSERT INTO `mob_droplist` VALUES (1328,0,0,1000,924,@RARE); -- Vial Of Fiend Blood (Rare, 5%) -- ZoneID: 145 - Hoo Mjuu The Torrent -INSERT INTO `mob_droplist` VALUES (1329,0,0,1000,12798,660); -- Zealots Mitts (66.0%) -INSERT INTO `mob_droplist` VALUES (1329,0,0,1000,4746,190); -- Scroll Of Deodorize (19.0%) -INSERT INTO `mob_droplist` VALUES (1329,0,0,1000,17132,70); -- Monster Signa (7.0%) +INSERT INTO `mob_droplist` VALUES (1329,0,0,1000,12798,@VCOMMON); -- Zealots Mitts (Very Common, 24%) +INSERT INTO `mob_droplist` VALUES (1329,0,0,1000,4746,@VCOMMON); -- Scroll Of Deodorize (Very Common, 24%) +INSERT INTO `mob_droplist` VALUES (1329,0,0,1000,17132,@RARE); -- Monster Signa (Rare, 5%) -- ZoneID: 197 - Hornfly -- ZoneID: 197 - Dancing Jewel @@ -12375,7 +12375,7 @@ INSERT INTO `mob_droplist` VALUES (1495,0,0,1000,18688,30); -- Lamian Kama INSERT INTO `mob_droplist` VALUES (1496,0,0,1000,15851,40); -- Kushas Ring (4.0%) -- ZoneID: 192 - Nocuous Weapon -INSERT INTO `mob_droplist` VALUES (1497,0,0,1000,19044,440); -- Disciple Grip (44.0%) +INSERT INTO `mob_droplist` VALUES (1497,0,0,1000,19044,@VCOMMON); -- Disciple Grip (Very Common, 24%) -- ZoneID: 61 - Zazalda Jagil -- ZoneID: 85 - La Vaule Pugil @@ -12953,8 +12953,8 @@ INSERT INTO `mob_droplist` VALUES (1583,0,0,1000,954,70); -- Magic Pot Shard (7 INSERT INTO `mob_droplist` VALUES (1583,0,0,1000,914,20); -- Vial Of Mercury (2.0%) -- ZoneID: 192 - Maltha -INSERT INTO `mob_droplist` VALUES (1584,0,0,1000,14464,330); -- Trailers Tunica (33.0%) -INSERT INTO `mob_droplist` VALUES (1584,0,0,1000,637,220); -- Vial Of Slime Oil (22.0%) +INSERT INTO `mob_droplist` VALUES (1584,0,0,1000,14464,@VCOMMON); -- Trailers Tunica (Very Common, 24%) +INSERT INTO `mob_droplist` VALUES (1584,0,0,1000,637,@VCOMMON); -- Vial Of Slime Oil (Very Common, 24%) -- ZoneID: 31 - Mammet-19 Epsilon -- ZoneID: 31 - Mammet-800 @@ -15267,10 +15267,10 @@ INSERT INTO `mob_droplist` VALUES (1859,0,0,1000,1095,@ALWAYS); -- Well Weight ( INSERT INTO `mob_droplist` VALUES (1859,2,0,1000,656,0); -- Beastcoin (Steal) -- ZoneID: 169 - Oni Carcass -INSERT INTO `mob_droplist` VALUES (1860,0,0,1000,849,190); -- Undead Skin (19.0%) -INSERT INTO `mob_droplist` VALUES (1860,0,0,1000,849,@UNCOMMON); -- Undead Skin (Uncommon, 10%) -INSERT INTO `mob_droplist` VALUES (1860,0,0,1000,16969,@UNCOMMON); -- Onikiri (Uncommon, 10%) -INSERT INTO `mob_droplist` VALUES (1860,0,0,1000,940,@VRARE); -- Revival Tree Root (Very Rare, 1%) +INSERT INTO `mob_droplist` VALUES (1860,0,0,1000,849,@ALWAYS); -- Undead Skin (Always, 100%) +INSERT INTO `mob_droplist` VALUES (1860,0,0,1000,849,@VCOMMON); -- Undead Skin (Very Common, 24%) +INSERT INTO `mob_droplist` VALUES (1860,0,0,1000,16969,@VCOMMON); -- Onikiri (Very Common, 24%) +INSERT INTO `mob_droplist` VALUES (1860,0,0,1000,940,@VRARE); -- Revival Tree Root (Very Rare, 1%) -- ZoneID: 88 - Onyx Quadav INSERT INTO `mob_droplist` VALUES (1861,0,0,1000,4723,190); -- Scroll Of Enblizzard Ii (19.0%) @@ -18254,8 +18254,8 @@ INSERT INTO `mob_droplist` VALUES (2271,4,0,1000,5668,0); -- Smilodon Liver (D INSERT INTO `mob_droplist` VALUES (2272,0,0,1000,724,@VRARE); -- Piece Of Magnolia Lumber (Very Rare, 1%) -- ZoneID: 192 - Slendlix Spindlethumb -INSERT INTO `mob_droplist` VALUES (2273,0,0,1000,11494,@COMMON); -- Circes Hat (Common, 15%) -INSERT INTO `mob_droplist` VALUES (2273,2,0,1000,750,0); -- Silver Beastcoin (Steal) +INSERT INTO `mob_droplist` VALUES (2273,0,0,1000,11494,@VCOMMON); -- Circes Hat (Very Common, 24%) +INSERT INTO `mob_droplist` VALUES (2273,2,0,1000,750,0); -- Silver Beastcoin (Steal) -- ZoneID: 217 - Slough Bats INSERT INTO `mob_droplist` VALUES (2274,0,0,1000,922,250); -- Bat Wing (25.0%) @@ -18495,13 +18495,13 @@ INSERT INTO `mob_droplist` VALUES (2307,0,0,1000,868,130); -- Handful Of Pugil S INSERT INTO `mob_droplist` VALUES (2307,2,0,1000,864,0); -- Handful Of Fish Scales (Steal) -- ZoneID: 116 - Spiny Spipi -INSERT INTO `mob_droplist` VALUES (2308,0,0,1000,816,600); -- Spool Of Silk Thread (60.0%) -INSERT INTO `mob_droplist` VALUES (2308,0,0,1000,13607,330); -- Mist Silk Cape (33.0%) -INSERT INTO `mob_droplist` VALUES (2308,0,0,1000,816,300); -- Spool Of Silk Thread (30.0%) -INSERT INTO `mob_droplist` VALUES (2308,0,0,1000,816,200); -- Spool Of Silk Thread (20.0%) -INSERT INTO `mob_droplist` VALUES (2308,0,0,1000,1156,130); -- Crawler Calculus (13.0%) -INSERT INTO `mob_droplist` VALUES (2308,0,0,1000,583,90); -- Smooth Stone (9.0%) -INSERT INTO `mob_droplist` VALUES (2308,2,0,1000,816,0); -- Spool Of Silk Thread (Steal) +INSERT INTO `mob_droplist` VALUES (2308,0,0,1000,13607,@VCOMMON); -- Mist Silk Cape (Very Common, 24%) +INSERT INTO `mob_droplist` VALUES (2308,0,0,1000,1156,@UNCOMMON); -- Crawler Calculus (Uncommon, 10%) +INSERT INTO `mob_droplist` VALUES (2308,0,0,1000,583,@RARE); -- Smooth Stone (Rare, 5%) +INSERT INTO `mob_droplist` VALUES (2308,0,0,1000,816,@VCOMMON); -- Spool Of Silk Thread (Very Common, 24%) +INSERT INTO `mob_droplist` VALUES (2308,0,0,1000,816,@VCOMMON); -- Spool Of Silk Thread (Very Common, 24%) +INSERT INTO `mob_droplist` VALUES (2308,0,0,1000,816,@VCOMMON); -- Spool Of Silk Thread (Very Common, 24%) +INSERT INTO `mob_droplist` VALUES (2308,2,0,1000,816,0); -- Spool Of Silk Thread (Steal) -- ZoneID: 217 - Spitting Spider INSERT INTO `mob_droplist` VALUES (2309,0,0,1000,838,170); -- Spider Web (17.0%) @@ -19341,11 +19341,11 @@ INSERT INTO `mob_droplist` VALUES (2426,0,0,1000,19102,20); -- Main Gauche (2.0% INSERT INTO `mob_droplist` VALUES (2426,2,0,1000,4369,0); -- Four-Leaf Mandragora Bud (Steal) -- ZoneID: 115 - Tom Tit Tat -INSERT INTO `mob_droplist` VALUES (2427,0,0,1000,4368,710); -- Two-Leaf Mandragora Bud (71.0%) -INSERT INTO `mob_droplist` VALUES (2427,0,0,1000,834,260); -- Ball Of Saruta Cotton (26.0%) -INSERT INTO `mob_droplist` VALUES (2427,0,0,1000,16443,@VCOMMON); -- Fruit Punches (Very Common, 24%) -INSERT INTO `mob_droplist` VALUES (2427,0,0,1000,4369,60); -- Four-Leaf Mandragora Bud (6.0%) -INSERT INTO `mob_droplist` VALUES (2427,2,0,1000,4369,0); -- Four-Leaf Mandragora Bud (Steal) +INSERT INTO `mob_droplist` VALUES (2427,0,0,1000,4368,@ALWAYS); -- Two-Leaf Mandragora Bud (Always, 100%) +INSERT INTO `mob_droplist` VALUES (2427,0,0,1000,834,@VCOMMON); -- Ball Of Saruta Cotton (Very Common, 24%) +INSERT INTO `mob_droplist` VALUES (2427,0,0,1000,16443,@COMMON); -- Fruit Punches (Common, 15%) +INSERT INTO `mob_droplist` VALUES (2427,0,0,1000,4369,@RARE); -- Four-Leaf Mandragora Bud (Rare, 5%) +INSERT INTO `mob_droplist` VALUES (2427,2,0,1000,4369,0); -- Four-Leaf Mandragora Bud (Steal) -- ZoneID: 15 - Tonberry Bedeviler INSERT INTO `mob_droplist` VALUES (2428,0,0,1000,1119,360); -- Tonberry Coat (36.0%) @@ -21601,8 +21601,9 @@ INSERT INTO `mob_droplist` VALUES (2595,2,0,1000,847,0); -- Bird Feather (Ste -- ZoneID: 99 - Vuu Puqu The Beguiler -- ZoneID: 145 - Vuu Puqu The Beguiler -INSERT INTO `mob_droplist` VALUES (2596,0,0,1000,13072,840); -- Bird Whistle (84.0%) -INSERT INTO `mob_droplist` VALUES (2596,0,0,1000,13837,70); -- Bonzes Circlet (7.0%) +INSERT INTO `mob_droplist` VALUES (2596,1,1,1000,13072,900); -- Bird Whistle (Group 1 - 90%) +INSERT INTO `mob_droplist` VALUES (2596,1,1,1000,13837,@UNCOMMON); -- Bonzes Circlet (Group 1 - Uncommon, 10%) +INSERT INTO `mob_droplist` VALUES (2596,1,1,1000,4994,@COMMON); -- Scroll of Mage's Ballad (Common, 15%) -- ZoneID: 191 - Wadi Crab INSERT INTO `mob_droplist` VALUES (2597,0,0,1000,936,200); -- Chunk Of Rock Salt (20.0%) @@ -23638,7 +23639,7 @@ INSERT INTO `mob_droplist` VALUES (2834,0,0,1000,5073,@VRARE); -- Scroll Of C INSERT INTO `mob_droplist` VALUES (2835,0,0,1000,14469,@ALWAYS); -- Reverend Mail (Always, 100%) -- ZoneID: 194 - Ah Puch -INSERT INTO `mob_droplist` VALUES (2836,0,0,1000,18610,250); -- Spiro Staff (25.0%) +INSERT INTO `mob_droplist` VALUES (2836,0,0,1000,18610,@VCOMMON); -- Spiro Staff (Very Common, 24%) -- ZoneID: 143 - Bughi Howlblade INSERT INTO `mob_droplist` VALUES (2837,0,0,1000,501,@UNCOMMON); -- Quadav Helm (Uncommon, 10%) @@ -23980,7 +23981,7 @@ INSERT INTO `mob_droplist` VALUES (2867,0,0,1000,16753,40); -- Ceremonial Dagger INSERT INTO `mob_droplist` VALUES (2867,2,0,1000,880,0); -- Bone Chip (Steal) -- ZoneID: 169 - Brazen Bones -INSERT INTO `mob_droplist` VALUES (2868,0,0,1000,16303,167); -- Larans Pendant (16.7%) +INSERT INTO `mob_droplist` VALUES (2868,0,0,1000,16303,@VCOMMON); -- Larans Pendant (Very Common, 24%) -- ZoneID: 195 - Lich C Magnus INSERT INTO `mob_droplist` VALUES (2869,0,0,1000,880,@ALWAYS); -- Bone Chip (Always, 100%) @@ -24623,7 +24624,7 @@ INSERT INTO `mob_droplist` VALUES (2986,0,0,1000,18767,97); -- Birdbanes (9.7%) INSERT INTO `mob_droplist` VALUES (2987,0,0,1000,15942,128); -- Summoning Belt (12.8%) -- ZoneID: 116 - Duke Decapod -INSERT INTO `mob_droplist` VALUES (2988,0,0,1000,16185,220); -- Pelte (22.0%) +INSERT INTO `mob_droplist` VALUES (2988,0,0,1000,16185,@VCOMMON); -- Pelte (Very Common, 24%) -- ZoneID: 190 - Ankou INSERT INTO `mob_droplist` VALUES (2989,0,0,1000,18604,426); -- Astaroth Cane (42.6%) @@ -24660,7 +24661,7 @@ INSERT INTO `mob_droplist` VALUES (2998,0,0,1000,11339,340); -- Channeling Robe INSERT INTO `mob_droplist` VALUES (2999,0,0,1000,11338,111); -- Aegas Doublet (11.1%) -- ZoneID: 115 - Numbing Norman -INSERT INTO `mob_droplist` VALUES (3000,0,0,1000,19305,111); -- Pike (11.1%) +INSERT INTO `mob_droplist` VALUES (3000,0,0,1000,19305,@VCOMMON); -- Pike (Very Common, 24%) -- ZoneID: 103 - Metal Shears INSERT INTO `mob_droplist` VALUES (3001,0,0,1000,2854,307); -- Stately Crab Shell (30.7%) @@ -24815,8 +24816,8 @@ INSERT INTO `mob_droplist` VALUES (3039,0,0,1000,1236,400); -- Bag Of Cactu INSERT INTO `mob_droplist` VALUES (3039,0,0,1000,953,@UNCOMMON); -- Treant Bulb (Uncommon, 10%) -- ZoneID: 169 - Konjac -INSERT INTO `mob_droplist` VALUES (3040,0,0,1000,2812,200); -- Aptant Of Aecus (20.0%) -INSERT INTO `mob_droplist` VALUES (3040,0,0,1000,2813,200); -- Aptant Of Durus (20.0%) +INSERT INTO `mob_droplist` VALUES (3040,0,0,1000,2812,@COMMON); -- Aptant Of Aecus (Common, 10%) +INSERT INTO `mob_droplist` VALUES (3040,0,0,1000,2813,@COMMON); -- Aptant Of Durus (Common, 10%) -- ZoneID: 51 - Chelicerata INSERT INTO `mob_droplist` VALUES (3041,0,0,1000,2815,417); -- Aptant Of Arkhe (41.7%) @@ -24881,7 +24882,7 @@ INSERT INTO `mob_droplist` VALUES (3059,0,0,1000,16023,185); -- Mystique Earring INSERT INTO `mob_droplist` VALUES (3060,0,0,1000,16300,333); -- Wit Pendant (33.3%) -- ZoneID: 145 - Quu Xijo The Illusory -INSERT INTO `mob_droplist` VALUES (3061,0,0,1000,2838,321); -- Square Of Ephemeral Cloth (32.1%) +INSERT INTO `mob_droplist` VALUES (3061,0,0,1000,2838,@VCOMMON); -- Square Of Ephemeral Cloth (Very Common, 24%) -- ZoneID: 112 - Timeworn Warrior INSERT INTO `mob_droplist` VALUES (3062,0,0,1000,19238,154); -- Jasper Tathlum (15.4%) @@ -24912,8 +24913,8 @@ INSERT INTO `mob_droplist` VALUES (3069,0,0,1000,16034,81); -- Sarabande Earring INSERT INTO `mob_droplist` VALUES (3070,0,0,1000,11534,81); -- Echo Cape (8.1%) -- ZoneID: 169 - Canal Moocher -INSERT INTO `mob_droplist` VALUES (3071,0,0,1000,2817,200); -- Aptant Of Pera (20.0%) -INSERT INTO `mob_droplist` VALUES (3071,0,0,1000,2820,200); -- Aptant Of Geoc (20.0%) +INSERT INTO `mob_droplist` VALUES (3071,0,0,1000,2817,@VCOMMON); -- Aptant Of Pera (Very Common, 24%) +INSERT INTO `mob_droplist` VALUES (3071,0,0,1000,2820,@UNCOMMON); -- Aptant Of Geoc (Uncommon, 10%) -- ZoneID: 5 - Skvader INSERT INTO `mob_droplist` VALUES (3072,0,0,1000,2820,200); -- Aptant Of Geoc (20.0%) @@ -24947,7 +24948,7 @@ INSERT INTO `mob_droplist` VALUES (3078,0,0,1000,1631,@VRARE); -- Moblin Armor ( INSERT INTO `mob_droplist` VALUES (3079,0,0,1000,16028,136); -- Psyche Earring (13.6%) -- ZoneID: 194 - Legalox Heftyhind -INSERT INTO `mob_droplist` VALUES (3080,0,0,1000,2846,310); -- Piece Of Hefty Oak Lumber (31.0%) +INSERT INTO `mob_droplist` VALUES (3080,0,0,1000,2846,@VCOMMON); -- Piece Of Hefty Oak Lumber (Very Common, 24%) -- ZoneID: 4 - Shankha INSERT INTO `mob_droplist` VALUES (3081,0,0,1000,16187,122); -- Adoubeurs Pavise (12.2%) diff --git a/sql/mob_family_system.sql b/sql/mob_family_system.sql index 68c0ec77bb0..830aa8b7ad3 100644 --- a/sql/mob_family_system.sql +++ b/sql/mob_family_system.sql @@ -530,7 +530,9 @@ INSERT INTO `mob_family_system` VALUES (504,'Luopan',0,'undefined',0,'Unclassifi INSERT INTO `mob_family_system` VALUES (505,'Fungi',0,'undefined',0,'Unclassified',0,0,130,180,1,3,4,3,6,6,5,1,3,1,3,4,2,0); INSERT INTO `mob_family_system` VALUES (506,'Meeble',189,'Meeble',7,'Beastmen',0,40,125,90,3,2,5,2,6,4,5,1,2,1,3,5,1,0); --- Family IDs 10,22,50,96,111,317-318,405,411-434,439-443 available for use +INSERT INTO `mob_family_system` VALUES (411,'Pet-Siren',16,'Siren',5,'Avatar',0,40,100,120,3,3,3,3,3,3,3,1,3,1,3,0,41,0); + +-- Family IDs 10,22,50,96,111,317-318,405,412-434,439-443 available for use /*!40000 ALTER TABLE `mob_family_system` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/mob_groups.sql b/sql/mob_groups.sql index b2f070d80b7..7412334bd00 100644 --- a/sql/mob_groups.sql +++ b/sql/mob_groups.sql @@ -8201,9 +8201,9 @@ INSERT INTO `mob_groups` VALUES (21,2475,115,'Magicked_Bones_war',330,1,769,0,0, INSERT INTO `mob_groups` VALUES (22,831,115,'Crawler',330,0,3227,0,0,3,8,0); INSERT INTO `mob_groups` VALUES (23,1524,115,'Giant_Bee',330,0,965,0,0,5,8,0); INSERT INTO `mob_groups` VALUES (24,6562,115,'Magicked_Bones_blm',330,1,769,0,0,4,8,0); -INSERT INTO `mob_groups` VALUES (25,3947,115,'Tom_Tit_Tat',0,32,2427,0,0,10,10,0); -INSERT INTO `mob_groups` VALUES (26,2921,115,'Nunyenunc',0,32,1829,0,0,12,12,0); -INSERT INTO `mob_groups` VALUES (27,5737,115,'Numbing_Norman',3600,0,3000,440,0,12,13,0); +INSERT INTO `mob_groups` VALUES (25,3947,115,'Tom_Tit_Tat',0,32,2427,513,0,9,10,0); +INSERT INTO `mob_groups` VALUES (26,2921,115,'Nunyenunc',0,32,1829,400,0,12,12,0); +INSERT INTO `mob_groups` VALUES (27,5737,115,'Numbing_Norman',1200,0,3000,440,0,12,13,0); INSERT INTO `mob_groups` VALUES (28,1648,115,'Goblin_Digger',330,0,1039,0,0,5,8,0); -- garrison @@ -8273,7 +8273,7 @@ INSERT INTO `mob_groups` VALUES (12,4405,116,'Yagudo_Acolyte',330,0,2692,0,0,1,8 INSERT INTO `mob_groups` VALUES (13,4448,116,'Yagudo_Scribe',330,0,2761,0,0,1,8,0); INSERT INTO `mob_groups` VALUES (14,2472,116,'Mad_Fox',330,1,1562,0,0,3,8,0); INSERT INTO `mob_groups` VALUES (15,2475,116,'Magicked_Bones_war',330,1,769,0,0,3,8,0); -INSERT INTO `mob_groups` VALUES (16,3587,116,'Sharp-Eared_Ropipi',0,32,2231,0,0,10,11,0); +INSERT INTO `mob_groups` VALUES (16,3587,116,'Sharp-Eared_Ropipi',0,32,2231,300,0,10,11,0); INSERT INTO `mob_groups` VALUES (17,1737,116,'Goblin_Thug',330,0,1170,0,0,3,8,0); INSERT INTO `mob_groups` VALUES (18,1744,116,'Goblin_Weaver',330,0,1182,0,0,3,8,0); INSERT INTO `mob_groups` VALUES (19,3371,116,'River_Crab',330,0,2102,0,0,2,6,0); @@ -9518,7 +9518,7 @@ INSERT INTO `mob_groups` VALUES (27,6567,136,'Thawed_Bones_blm',300,0,2125,0,0,7 INSERT INTO `mob_groups` VALUES (28,6857,136,'Scylla',0,128,0,0,0,85,85,0); INSERT INTO `mob_groups` VALUES (29,6858,136,'Came-cruse',0,128,0,10000,0,82,82,0); INSERT INTO `mob_groups` VALUES (30,0,136,'Becut',0,128,0,0,0,0,0,0); -INSERT INTO `mob_groups` VALUES (31,6859,136,'Orcish_Bloodletter',0,128,0,11500,0,0,0,0); +INSERT INTO `mob_groups` VALUES (31,6859,136,'Orcish_Bloodletter',0,128,0,11500,0,150,150,0); -- TODO: Level overtuned until accurate data obtained -- Voidwalker INSERT INTO `mob_groups` VALUES (32,6999,136,'Yilbegan',86400,0,3185,90000,5000,90,92,0); @@ -10215,7 +10215,7 @@ INSERT INTO `mob_groups` VALUES (3,3220,145,'Puffer_Pugil',0,128,975,0,0,13,15,0 INSERT INTO `mob_groups` VALUES (4,6764,145,'Land_Pugil_fished',0,128,975,0,0,18,20,0); INSERT INTO `mob_groups` VALUES (5,1277,145,'Eyy_Mon_the_Ironbreaker',900,0,803,0,0,16,16,0); -INSERT INTO `mob_groups` VALUES (6,4502,145,'Zhuu_Buxu_the_Silent',300,0,2855,0,0,16,16,0); +INSERT INTO `mob_groups` VALUES (6,4502,145,'Zhuu_Buxu_the_Silent',300,0,2855,300,0,16,16,0); INSERT INTO `mob_groups` VALUES (7,4426,145,'Yagudo_Initiate',330,0,2718,0,0,3,10,0); INSERT INTO `mob_groups` VALUES (8,4405,145,'Yagudo_Acolyte',330,0,2694,0,0,3,10,0); INSERT INTO `mob_groups` VALUES (9,4448,145,'Yagudo_Scribe',330,0,2763,0,0,3,10,0); @@ -11408,7 +11408,7 @@ INSERT INTO `mob_groups` VALUES (19,2491,169,'Makara',960,0,279,0,0,49,52,0); INSERT INTO `mob_groups` VALUES (20,514,169,'Bouncing_Ball',960,0,344,0,0,64,67,0); INSERT INTO `mob_groups` VALUES (21,5859,169,'Canal_Moocher',0,32,3071,9500,0,73,74,0); INSERT INTO `mob_groups` VALUES (22,3803,169,'Stygian_Pugil',960,0,0,0,0,63,65,0); -INSERT INTO `mob_groups` VALUES (23,2982,169,'Oni_Carcass',86400,0,1860,0,0,68,70,0); +INSERT INTO `mob_groups` VALUES (23,2982,169,'Oni_Carcass',86400,0,1860,30000,0,68,70,0); INSERT INTO `mob_groups` VALUES (24,619,169,'Blackwater_Pugil',330,0,3204,0,0,96,98,0); INSERT INTO `mob_groups` VALUES (25,6366,169,'Plunderer_Crab',330,0,3200,0,0,95,98,0); INSERT INTO `mob_groups` VALUES (26,2764,169,'Mousse',960,0,1751,0,0,63,65,0); @@ -11425,7 +11425,7 @@ INSERT INTO `mob_groups` VALUES (36,6378,169,'Flume_Toad',330,0,3205,0,0,94,96,0 INSERT INTO `mob_groups` VALUES (37,6456,169,'Dire_Bat',960,0,663,0,0,62,64,0); INSERT INTO `mob_groups` VALUES (38,6539,169,'Doom_Mage',960,0,679,0,0,65,67,0); INSERT INTO `mob_groups` VALUES (39,6540,169,'Doom_Soldier',960,0,685,0,0,65,67,0); -INSERT INTO `mob_groups` VALUES (40,5757,169,'Brazen_Bones',0,128,2868,0,0,82,82,0); +INSERT INTO `mob_groups` VALUES (40,5757,169,'Brazen_Bones',28800,0,2868,20000,0,85,85,0); INSERT INTO `mob_groups` VALUES (41,3755,169,'Starmite',960,0,2325,0,0,65,67,0); INSERT INTO `mob_groups` VALUES (42,2664,169,'Mimic',0,128,1684,0,0,65,67,0); @@ -12562,16 +12562,16 @@ INSERT INTO `mob_groups` VALUES (12,6535,192,'Skinnymajinx',330,0,0,0,0,81,84,0) INSERT INTO `mob_groups` VALUES (13,6461,192,'Covin_Bat',330,0,0,0,0,81,83,0); INSERT INTO `mob_groups` VALUES (14,6656,192,'Goblin_Trailblazer',330,0,0,0,0,78,82,0); INSERT INTO `mob_groups` VALUES (15,455,192,'Blob',480,0,297,0,0,15,18,0); -INSERT INTO `mob_groups` VALUES (16,2498,192,'Maltha',3600,0,1584,0,0,22,23,0); +INSERT INTO `mob_groups` VALUES (16,2498,192,'Maltha',3600,0,1584,850,0,22,23,0); INSERT INTO `mob_groups` VALUES (17,332,192,'Balloon',480,0,217,0,0,8,10,0); INSERT INTO `mob_groups` VALUES (18,1690,192,'Goblin_Mugger',900,0,1120,0,0,20,23,0); INSERT INTO `mob_groups` VALUES (19,1683,192,'Goblin_Leecher',900,0,1108,0,0,20,23,0); INSERT INTO `mob_groups` VALUES (20,1666,192,'Goblin_Gambler',900,0,1082,0,0,20,23,0); INSERT INTO `mob_groups` VALUES (21,369,192,'Battle_Bat',480,0,241,0,0,17,20,0); -INSERT INTO `mob_groups` VALUES (22,3669,192,'Slendlix_Spindlethumb',0,32,2273,0,0,33,34,0); +INSERT INTO `mob_groups` VALUES (22,3669,192,'Slendlix_Spindlethumb',0,32,2273,900,0,33,34,0); INSERT INTO `mob_groups` VALUES (23,4345,192,'Will-o-the-Wisp',330,0,0,0,0,22,25,0); INSERT INTO `mob_groups` VALUES (24,483,192,'Boggart',300,0,319,0,0,22,26,0); -INSERT INTO `mob_groups` VALUES (25,4567,192,'Nocuous_Weapon',0,32,1497,0,0,25,27,0); +INSERT INTO `mob_groups` VALUES (25,4567,192,'Nocuous_Weapon',0,32,1497,550,0,25,27,0); INSERT INTO `mob_groups` VALUES (26,4319,192,'Wendigo_war',300,0,2638,0,0,25,28,0); INSERT INTO `mob_groups` VALUES (27,4320,192,'Wendigo_blm',300,0,2640,0,0,25,28,0); @@ -12693,9 +12693,9 @@ INSERT INTO `mob_groups` VALUES (49,3876,194,'Ten_of_Batons',960,0,2390,0,0,40,4 INSERT INTO `mob_groups` VALUES (50,3879,194,'Ten_of_Swords',960,0,2393,0,0,40,44,0); INSERT INTO `mob_groups` VALUES (51,3877,194,'Ten_of_Coins',960,0,2391,0,0,40,44,0); INSERT INTO `mob_groups` VALUES (52,6584,194,'Balloon',300,0,217,0,0,8,10,0); -INSERT INTO `mob_groups` VALUES (53,495,194,'Bomb_King',0,128,333,0,0,16,18,0); -INSERT INTO `mob_groups` VALUES (54,1090,194,'Doppelganger_Gog',0,128,691,0,0,23,25,0); -INSERT INTO `mob_groups` VALUES (55,1089,194,'Doppelganger_Dio',0,128,690,0,0,23,25,0); +INSERT INTO `mob_groups` VALUES (53,495,194,'Bomb_King',0,128,333,1100,0,16,18,0); +INSERT INTO `mob_groups` VALUES (54,1090,194,'Doppelganger_Gog',0,128,691,800,0,23,25,0); +INSERT INTO `mob_groups` VALUES (55,1089,194,'Doppelganger_Dio',0,128,690,800,0,23,25,0); INSERT INTO `mob_groups` VALUES (56,372,194,'Battue_Bats',480,0,244,0,0,1,5,0); INSERT INTO `mob_groups` VALUES (57,1737,194,'Goblin_Thug',900,0,1174,0,0,1,7,0); INSERT INTO `mob_groups` VALUES (58,1744,194,'Goblin_Weaver',900,0,1187,0,0,1,7,0); diff --git a/sql/mob_pools.sql b/sql/mob_pools.sql index aa936916086..3d224a7445c 100644 --- a/sql/mob_pools.sql +++ b/sql/mob_pools.sql @@ -2550,7 +2550,7 @@ INSERT INTO `mob_pools` VALUES (2494,'Maldaramet_B_DAurphe','Maldaramet_B_DAurph INSERT INTO `mob_pools` VALUES (2495,'Maledict_Millstone','Maledict_Millstone',175,0x00009D0100000000000000000000000000000000,5,1,7,240,100,0,1,0,0,0,0,0,311,131,0,0,36,0,0,175,175); INSERT INTO `mob_pools` VALUES (2496,'Malefic_Fencer','Malefic_Fencer',110,0x0000C30100000000000000000000000000000000,5,5,3,240,100,0,1,0,0,2,0,0,1819,133,0,0,3,0,0,110,110); INSERT INTO `mob_pools` VALUES (2497,'Malicearm_Razbhobb','Malicearm_Razbhobb',334,0x0000020800000000000000000000000000000000,1,1,7,240,100,0,1,0,1,0,0,32,2460,155,0,0,0,0,0,334,334); -INSERT INTO `mob_pools` VALUES (2498,'Maltha','Maltha',228,0x0000240100000000000000000000000000000000,8,8,7,240,100,0,1,0,1,2,0,0,257,133,0,0,5,0,0,228,228); +INSERT INTO `mob_pools` VALUES (2498,'Maltha','Maltha',228,0x0000240100000000000000000000000000000000,8,8,7,150,100,0,1,0,1,2,1,0,257,133,0,0,5,0,0,228,228); INSERT INTO `mob_pools` VALUES (2499,'Mammet-19_Epsilon','Mammet-19_Epsilon',503,0x0600ED0300000000000000000000000000000000,5,5,4,240,100,0,1,1,1,18,1,0,6065,131,0,0,29,0,0,503,503); INSERT INTO `mob_pools` VALUES (2500,'Mammet-22_Zeta','Mammet-22_Zeta',503,0x0600EE0300000000000000000000000000000000,5,5,4,240,100,0,1,1,1,34,0,0,6382,131,4,0,29,0,0,503,503); INSERT INTO `mob_pools` VALUES (2501,'Mammet-800','Mammet-800',503,0x0600EE0300000000000000000000000000000000,5,5,4,240,100,0,1,1,1,16,1,0,8170,131,4,0,29,0,0,503,503); @@ -2973,7 +2973,7 @@ INSERT INTO `mob_pools` VALUES (2917,'NoMhos_Elite_Guard','NoMhos_Elite_Guard',2 INSERT INTO `mob_pools` VALUES (2918,'Npfundlwa','Npfundlwa',206,0x00000D0100000000000000000000000000000000,1,1,6,240,100,0,0,0,0,2,0,32,0,157,0,0,0,0,0,904,206); INSERT INTO `mob_pools` VALUES (2919,'Nue','Nue',242,0x0000340100000000000000000000000000000000,1,1,7,240,100,0,1,0,1,2,0,0,5514,133,0,0,0,0,0,242,242); INSERT INTO `mob_pools` VALUES (2920,'Nuhn','Nuhn',312,0x0000C10600000000000000000000000000000000,1,1,7,240,100,0,1,0,0,2,0,0,0,3,0,0,0,0,0,312,312); -INSERT INTO `mob_pools` VALUES (2921,'Nunyenunc','Nunyenunc',55,0x0000BD0100000000000000000000000000000000,1,1,5,240,100,0,0,0,1,2,0,32,0,157,0,0,0,0,0,55,55); +INSERT INTO `mob_pools` VALUES (2921,'Nunyenunc','Nunyenunc',55,0x0000BD0100000000000000000000000000000000,1,1,5,240,100,0,0,0,1,2,3072,32,0,157,0,0,0,0,0,55,55); INSERT INTO `mob_pools` VALUES (2922,'Nunyunuwi','Nunyunuwi',135,0x0000B00100000000000000000000000000000000,1,1,11,320,100,0,1,0,1,2,0,32,27,159,0,0,105,0,0,135,135); INSERT INTO `mob_pools` VALUES (2923,'Nussknacker','Nussknacker',174,0x0000480100000000000000000000000000000000,1,1,7,240,100,0,1,0,0,2,0,0,0,3,0,0,0,0,0,174,174); INSERT INTO `mob_pools` VALUES (2924,'Nutcracker','Nutcracker',188,0x0000A00100000000000000000000000000000000,1,1,0,0,100,0,0,0,0,0,0,0,1677,133,0,0,0,0,0,188,188); @@ -3639,7 +3639,7 @@ INSERT INTO `mob_pools` VALUES (3583,'Shamblix_Rottenheart','Shamblix_Rottenhear INSERT INTO `mob_pools` VALUES (3584,'Shantotto','Shantotto',153,0x0500470400000000000000000000000000000000,4,4,11,240,100,0,0,0,0,16,0,0,0,3,0,0,2,0,0,153,153); INSERT INTO `mob_pools` VALUES (3585,'Sharabha','Sharabha',179,0x0000930100000000000000000000000000000000,1,4,6,240,100,0,0,0,1,2,0,0,7,159,0,0,267,0,0,948,179); INSERT INTO `mob_pools` VALUES (3586,'Sharayaan','Sharayaan',149,0x05005E0700000000000000000000000000000000,16,16,2,240,100,0,1,1,1,8,0,0,1,155,0,0,8,0,0,149,149); -INSERT INTO `mob_pools` VALUES (3587,'Sharp-Eared_Ropipi','Sharp-Eared_Ropipi',206,0x00000D0100000000000000000000000000000000,6,6,7,240,100,0,0,0,1,2,0,32,0,157,0,0,0,0,0,206,206); +INSERT INTO `mob_pools` VALUES (3587,'Sharp-Eared_Ropipi','Sharp-Eared_Ropipi',206,0x00000D0100000000000000000000000000000000,6,6,7,240,100,0,0,0,1,2,1,32,0,157,0,0,0,0,0,206,206); INSERT INTO `mob_pools` VALUES (3588,'Shatterskull_Mippdapp','Shatterskull_Mippdapp',334,0x0000020800000000000000000000000000000000,2,2,1,480,100,0,1,1,1,2,0,32,3835,157,0,0,0,0,0,334,334); INSERT INTO `mob_pools` VALUES (3589,'Shaula','Shaula',217,0x0000C30800000000000000000000000000000000,1,1,6,240,100,0,0,0,0,2,0,0,7,669,8,0,0,0,0,217,217); INSERT INTO `mob_pools` VALUES (3590,'Shayaam','Shayaam',149,0x05005E0700000000000000000000000000000000,16,16,2,240,100,0,1,1,1,8,0,0,1,155,0,0,8,0,0,149,149); @@ -3721,7 +3721,7 @@ INSERT INTO `mob_pools` VALUES (3665,'Slaughterous_Smilodon','Slaughterous_Smilo INSERT INTO `mob_pools` VALUES (3666,'Slavering_Lizard','Slavering_Lizard',174,0x0000480100000000000000000000000000000000,1,1,7,240,100,0,1,0,1,0,0,0,0,3,0,0,0,0,0,174,174); INSERT INTO `mob_pools` VALUES (3667,'Slave_Globe','Slave_Globe',234,0x00003A0100000000000000000000000000000000,1,1,7,240,100,0,1,0,1,2,0,0,7,131,0,0,0,0,256,235,234); INSERT INTO `mob_pools` VALUES (3668,'Sleet_Gigas','Sleet_Gigas',126,0x0000C70200000000000000000000000000000000,11,1,5,240,100,0,1,0,1,0,0,0,59,131,0,0,0,0,0,126,126); -INSERT INTO `mob_pools` VALUES (3669,'Slendlix_Spindlethumb','Slendlix_Spindlethumb',133,0x0000ED0100000000000000000000000000000000,3,3,12,240,100,0,1,0,1,2,0,32,0,155,0,0,1,0,0,133,133); +INSERT INTO `mob_pools` VALUES (3669,'Slendlix_Spindlethumb','Slendlix_Spindlethumb',133,0x0000ED0100000000000000000000000000000000,3,3,12,240,100,0,1,0,1,2,0,32,0,155,0,0,499,0,0,133,133); INSERT INTO `mob_pools` VALUES (3670,'Slime_Mold','Slime_Mold',229,0x0000240100000000000000000000000000000000,1,1,7,240,100,0,1,0,0,0,0,0,258,131,0,0,0,0,0,229,229); INSERT INTO `mob_pools` VALUES (3671,'Slinkix_Trufflesniff','Slinkix_Trufflesniff',373,0x00003E0400000000000000000000000000000000,11,11,2,240,100,0,1,0,1,2,0,32,431,159,0,0,0,0,0,373,373); INSERT INTO `mob_pools` VALUES (3672,'Slitherword_Razghogg','Slitherword_Razghogg',334,0x0000190400000000000000000000000000000000,1,1,7,240,100,0,1,0,1,0,0,32,1750,155,0,0,0,0,0,334,334); @@ -4581,7 +4581,7 @@ INSERT INTO `mob_pools` VALUES (4525,'Zuug_the_Shoreleaper','Zuug_the_Shoreleape INSERT INTO `mob_pools` VALUES (4526,'Zuu_Xowu_the_Darksmoke','Zuu_Xowu_the_Darksmoke',360,0x0000480200000000000000000000000000000000,4,4,5,240,100,0,1,0,1,16,0,32,0,157,0,0,2,0,0,360,360); INSERT INTO `mob_pools` VALUES (4527,'Livid_Seether','Livid_Seether',220,0x0000620400000000000000000000000000000000,1,1,7,0,100,0,1,1,1,0,0,0,219,131,5,0,0,0,0,220,220); INSERT INTO `mob_pools` VALUES (4528,'Tempest_Tigon','Tempest_Tigon',242,0x0000340100000000000000000000000000000000,1,1,6,200,100,0,1,0,0,2,7,0,0,131,0,0,0,0,0,242,242); -INSERT INTO `mob_pools` VALUES (4529,'Duke_Decapod','Duke_Decapod',77,0x0000640100000000000000000000000000000000,4,4,5,240,100,0,0,0,0,2,16,32,0,153,0,0,146,0,0,0,77); +INSERT INTO `mob_pools` VALUES (4529,'Duke_Decapod','Duke_Decapod',77,0x0000640100000000000000000000000000000000,4,4,5,240,100,0,0,0,0,2,16,32,0,153,0,0,0,0,0,0,77); INSERT INTO `mob_pools` VALUES (4530,'Blazedrake','Blazedrake',266,0x00008E0100000000000000000000000000000000,1,1,3,240,100,0,1,0,0,0,0,0,257,131,0,0,0,0,0,266,266); INSERT INTO `mob_pools` VALUES (4531,'Aqueduct_Spider','Aqueduct_Spider',235,0x0000360100000000000000000000000000000000,1,1,7,240,100,0,0,0,1,0,0,0,125,1665,8,0,0,0,0,236,235); INSERT INTO `mob_pools` VALUES (4532,'Darner','Darner',113,0x0000C00100000000000000000000000000000000,1,1,8,240,100,0,0,0,0,0,0,0,554,131,0,0,0,0,0,113,113); @@ -5790,7 +5790,7 @@ INSERT INTO `mob_pools` VALUES (5733,'Snipper','Snipper',77,0x000064010000000000 INSERT INTO `mob_pools` VALUES (5734,'Rambukk','Rambukk',208,0x0000580100000000000000000000000000000000,1,1,7,320,100,0,0,0,0,2,7,0,821,129,0,0,0,0,0,771,208); INSERT INTO `mob_pools` VALUES (5735,'Hippomaritimus','Hippomaritimus',197,0x00005C0100000000000000000000000000000000,1,1,7,240,100,0,0,0,0,2,7,0,0,1155,0,0,0,0,0,770,197); INSERT INTO `mob_pools` VALUES (5736,'Koropokkur','Koropokkur',178,0x00002C0100000000000000000000000000000000,2,2,1,480,100,0,0,0,1,2,7,32,0,155,0,0,0,0,0,772,178); -INSERT INTO `mob_pools` VALUES (5737,'Numbing_Norman','Numbing_Norman',48,0x0000110100000000000000000000000000000000,1,1,2,240,100,0,0,0,1,2,0,32,0,153,0,0,0,0,0,48,48); +INSERT INTO `mob_pools` VALUES (5737,'Numbing_Norman','Numbing_Norman',48,0x0000110100000000000000000000000000000000,1,1,2,240,100,0,0,0,1,2,32,32,0,153,0,0,0,0,0,48,48); INSERT INTO `mob_pools` VALUES (5738,'Metal_Shears','Metal_Shears',77,0x0000640100000000000000000000000000000000,7,7,4,240,100,0,0,0,0,2,1287,0,0,139,0,0,0,0,0,773,77); INSERT INTO `mob_pools` VALUES (5739,'Sappy_Sycamore','Sappy_Sycamore',216,0x0000880100000000000000000000000000000000,1,1,7,240,100,0,0,0,1,2,7,0,0,131,8,0,0,0,0,0,216); INSERT INTO `mob_pools` VALUES (5740,'Skirling_Liger','Skirling_Liger',242,0x0000340100000000000000000000000000000000,1,1,7,240,100,0,1,0,1,2,0,0,5514,131,0,0,0,0,0,774,242); @@ -5903,7 +5903,7 @@ INSERT INTO `mob_pools` VALUES (5846,'Boll_Weevil','Boll_Weevil',49,0x0000980100 INSERT INTO `mob_pools` VALUES (5847,'Drumskull_Zogdregg','Drumskull_Zogdregg',334,0x0000190400000000000000000000000000000000,4,4,5,240,100,0,1,0,1,2,16,32,290,153,0,0,298,0,0,334,334); INSERT INTO `mob_pools` VALUES (5848,'Slippery_Sucker','Slippery_Sucker',172,0x0000140100000000000000000000000000000000,1,1,7,240,100,0,0,0,1,2,23,0,0,131,0,0,0,0,0,172,172); INSERT INTO `mob_pools` VALUES (5849,'Gloom_Eye','Gloom_Eye',4,0x0000080100000000000000000000000000000000,1,1,11,240,100,0,1,0,0,2,7,0,0,129,16,0,0,0,0,50,4); -INSERT INTO `mob_pools` VALUES (5850,'Quu_Xijo_the_Illusory','Quu_Xijo_the_Illusory',360,0x00004C0200000000000000000000000000000000,13,13,2,240,100,0,1,0,1,2,23,32,0,667,8,0,7,0,0,360,360); +INSERT INTO `mob_pools` VALUES (5850,'Quu_Xijo_the_Illusory','Quu_Xijo_the_Illusory',360,0x00004C0200000000000000000000000000000000,13,13,2,240,100,0,1,0,1,2,17,32,0,667,8,0,7,0,0,360,360); INSERT INTO `mob_pools` VALUES (5851,'Timeworn_Warrior','Timeworn_Warrior',227,0x00003C0200000000000000000000000000000000,1,1,5,240,100,0,1,0,0,2,7,0,0,0,0,0,0,0,0,0,227); INSERT INTO `mob_pools` VALUES (5852,'Eyegouger','Eyegouger',55,0x0000BC0100000000000000000000000000000000,1,1,2,240,100,0,0,0,1,2,7,0,0,1155,0,0,0,0,0,55,55); INSERT INTO `mob_pools` VALUES (5853,'Humbaba','Humbaba',126,0x0000C40200000000000000000000000000000000,1,1,11,240,100,0,1,0,1,2,7,32,0,155,0,0,0,0,0,126,126); @@ -7091,6 +7091,7 @@ INSERT INTO `mob_pools` VALUES (7038,'Excaliace','Excaliace',145,0x01000503AC10A INSERT INTO `mob_pools` VALUES (7039,'Ixzdei_RDM','Ixzdei',272,0x0000860400000000000000000000000000000000,4,4,7,240,100,0,1,1,0,2,16,0,0,1153,6,0,468,0,0,272,272); INSERT INTO `mob_pools` VALUES (7040,'Hastatus_XIII-XXV','Hastatus_XIII-XXV',25,0x0000EF0400000000000000000000000000000000,1,1,5,265,100,0,1,0,1,0,0,0,0,1155,0,0,0,0,0,25,25); +INSERT INTO `mob_pools` VALUES (7041,'Pet_Siren','Pet_Siren',411,0x00001E0000000000000000000000000000000000,4,4,12,320,100,0,0,0,0,0,0,32,0,0,0,0,0,0,0,411,411); -- ------------------------------------------------------------ -- Start of Ambuscade section diff --git a/sql/mob_resistances.sql b/sql/mob_resistances.sql index e1ee2cbbef9..260360118b5 100644 --- a/sql/mob_resistances.sql +++ b/sql/mob_resistances.sql @@ -36,6 +36,7 @@ CREATE TABLE `mob_resistances` ( ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=128; /*!40101 SET character_set_client = @saved_cs_client */; + INSERT INTO `mob_resistances` VALUES (1,'Acrolith',1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); INSERT INTO `mob_resistances` VALUES (2,'Adamantoise',1,1,1,1,5000,2000,5000,7500,7500,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); INSERT INTO `mob_resistances` VALUES (3,'Aern',1,1,1,1,0,0,0,0,0,0,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -436,6 +437,7 @@ INSERT INTO `mob_resistances` VALUES (407,'Orc-Seed',1,1,1,1,0,0,0,0,0,-2500,0,0 INSERT INTO `mob_resistances` VALUES (408,'Quadav-Seed',1,1.25,1,1,-1250,0,0,0,0,0,-1250,1250,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); INSERT INTO `mob_resistances` VALUES (409,'Yagudo-Seed',1,1,1,1,0,-2500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); INSERT INTO `mob_resistances` VALUES (410,'Goblin-Seed',1,1,1,1,0,0,0,0,0,0,-2500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); + INSERT INTO `mob_resistances` VALUES (435,'Giant_Gnat',1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); INSERT INTO `mob_resistances` VALUES (436,'Gnat-Bloodlapper',1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); INSERT INTO `mob_resistances` VALUES (437,'Sapling-Ghillie_Dhu',1,1,1,1,-2500,0,0,0,0,0,1250,-2500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -502,3 +504,5 @@ INSERT INTO `mob_resistances` VALUES (503,'Mammet',1,1,1,1,0,0,0,0,0,0,0,0,0,0,0 INSERT INTO `mob_resistances` VALUES (504,'Luopan',1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); INSERT INTO `mob_resistances` VALUES (505,'Fungi',1,1,1,1,0,0,-2500,1250,0,0,-2500,1250,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); INSERT INTO `mob_resistances` VALUES (506,'Meeble',1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); + +INSERT INTO `mob_resistances` VALUES (411,'Pet-Siren',1,1,1,1,1250,0,1250,1250,1250,1250,1250,1250,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); diff --git a/sql/mob_spell_lists.sql b/sql/mob_spell_lists.sql index e56e5b53e14..eb3b7b5fe9d 100644 --- a/sql/mob_spell_lists.sql +++ b/sql/mob_spell_lists.sql @@ -4997,7 +4997,13 @@ INSERT INTO `mob_spell_lists` VALUES('Silverhook', 492, 250, 1, 255); -- ice spi INSERT INTO `mob_spell_lists` VALUES('Silverhook', 492, 252, 1, 255); -- stun (1~255) INSERT INTO `mob_spell_lists` VALUES('Silverhook', 492, 253, 1, 255); -- sleep (1~255) INSERT INTO `mob_spell_lists` VALUES('Silverhook', 492, 274, 1, 255); -- sleepga ii (1~255) --- Next Avail 493 + +-- Slendlix Spindlethumb (498) +INSERT INTO `mob_spell_lists` VALUES ('Slendlix_Spindlethumb',499,3,1,255); -- cure_iii (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Slendlix_Spindlethumb',499,23,1,255); -- dia (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Slendlix_Spindlethumb',499,33,1,255); -- diaga (1~255) + +-- Next Available: 500 /*!40000 ALTER TABLE `mob_spell_lists` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/nm_spawn_points.sql b/sql/nm_spawn_points.sql index 86ceb960e5b..9cc733cd37f 100644 --- a/sql/nm_spawn_points.sql +++ b/sql/nm_spawn_points.sql @@ -6967,6 +6967,9 @@ INSERT INTO `nm_spawn_points` VALUES (17203216,18,-149.255,4.077,426.342); INSERT INTO `nm_spawn_points` VALUES (17203216,19,-156.276,0.532,434.495); INSERT INTO `nm_spawn_points` VALUES (17203216,20,-156.151,0.633,472.790); INSERT INTO `nm_spawn_points` VALUES (17203216,21,-156.857,0.458,485.462); +INSERT INTO `nm_spawn_points` VALUES (17469747,0,169.270,8.028,-110.580); +INSERT INTO `nm_spawn_points` VALUES (17469747,1,155.792,8.334,-124.494); +INSERT INTO `nm_spawn_points` VALUES (17469747,2,169.525,11.964,-128.288); /*!40000 ALTER TABLE `nm_spawn_points` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/npc_list.sql b/sql/npc_list.sql index 656a921038d..ad4090be6f2 100644 --- a/sql/npc_list.sql +++ b/sql/npc_list.sql @@ -6739,213 +6739,214 @@ INSERT INTO `npc_list` VALUES (17060176,'blank',' ',0,0.000,0.000,0.000,1,50 -- Chocobo Circuit (Zone 70) -- ------------------------------------------------------------ -INSERT INTO `npc_list` VALUES (17063947,' ',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2051,0x0000320000000000000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063948,' ',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2051,0x0000320000000000000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063949,' ',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2051,0x0000320000000000000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063950,' ',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2051,0x0000320000000000000000000000000000000000,0,'TOAU',1); - +INSERT INTO `npc_list` VALUES (17063941,'Alangriche','Alangriche',0,-499.454,0.000,-369.042,7,50,50,0,1,0,0,27,0x0100040300106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063942,'Lafaurelle','Lafaurelle',0,-499.592,0.000,-366.550,7,50,50,0,1,0,0,27,0x01000C0300106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063943,'Jazgeh','Jazgeh',160,-500.267,0.000,-534.373,6,50,50,0,1,0,0,27,0x0100050800106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063944,'Zagied','Zagied',160,-498.746,0.000,-532.790,21,50,50,0,1,0,0,27,0x01000C0800106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063945,'Rungaga','Rungaga',192,-138.091,-0.990,-537.420,7,50,50,0,1,0,0,27,0x0100020600106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063946,'Chualulu','Chualulu',192,-140.286,-0.990,-537.476,7,50,50,0,1,0,0,27,0x0100020600106720673067406750006000700000,32,'TOAU',1); + +INSERT INTO `npc_list` VALUES (17063947,'csnpc',' ',0,0.000,0.000,1.000,1,50,50,0,0,0,2,2075,0x0100000100100020003000400050006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063948,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2051,0x0000320000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063949,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2051,0x0000320000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063950,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2051,0x0000320000000000000000000000000000000000,0,'TOAU',1); INSERT INTO `npc_list` VALUES (17063951,'csnpc',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,27,0x0100000000100020003000400050006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063952,'csnpc',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,27,0x0100000100100020003000400050006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063953,'csnpc',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,27,0x0100000200100020003000400050006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063954,'csnpc',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,27,0x0100000300100020003000400050006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063955,'csnpc',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,27,0x0100000400100020003000400050006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063956,'csnpc',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,27,0x0100000500100020003000400050006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063957,'csnpc',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,27,0x0100000600100020003000400050006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063958,'csnpc',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,27,0x0100000700100020003000400050006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063960,'csnpc',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,27,0x0100000700100020003000400050006000700000,32,NULL,1); -INSERT INTO `npc_list` VALUES (17063961,'Goccilo','Goccilo',191,-58.958,-4.500,-95.392,0,50,50,0,0,0,6,27,0x0100050800103920393040395000600070000000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063962,'Goccilo','Goccilo',191,-58.958,-4.500,-95.392,1,50,50,0,0,0,2,27,0x0100050800103920393039403950006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063952,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2051,0x0000320000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063953,'csnpc',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,27,0x0100000000100020003000400050006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063954,'csnpc',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,27,0x0100000100100020003000400050006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063955,'csnpc',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,27,0x0100000200100020003000400050006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063956,'csnpc',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,27,0x0100000300100020003000400050006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063957,'csnpc',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,27,0x0100000400100020003000400050006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063958,'csnpc',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,27,0x0100000500100020003000400050006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063959,'csnpc',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,27,0x0100000600100020003000400050006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063960,'csnpc',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,27,0x0100000700100020003000400050006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063961,'Goccilo','Goccilo',191,-58.958,-4.500,-95.392,0,50,50,0,0,0,6,27,0x0100050800103920393039403950006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063962,'Goccilo','Goccilo',191,-58.958,-4.500,-95.392,0,50,50,0,0,0,6,27,0x0100050800103920393039403950006000700000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17063963,'Markovich','Markovich',194,-60.491,-4.500,-95.354,0,50,50,0,0,0,6,27,0x00005A0000000000000000000000000000000000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17063964,'Sakura','Sakura',194,-59.900,-5.499,-93.319,0,50,50,0,0,0,6,27,0x0000CD0700000000000000000000000000000000,32,'TOAU',1); --- guests? INSERT INTO `npc_list` VALUES (17063965,'Pieuje','Pieuje',194,-60.491,-4.500,-95.354,0,50,50,0,0,0,6,27,0x0000410000000000000000000000000000000000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063966,'Kupipi','Kupipi',194,-60.491,-4.500,-95.354,0,50,50,0,0,0,6,27,0x0100000610132013301340135000600070000000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063967,' ',' ',199,-69.468,-4.500,-94.703,0,50,50,0,0,0,6,27,0x0000620000000000000000000000000000000000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063968,' ',' ',205,-68.628,-4.500,-97.304,0,50,50,0,0,0,6,27,0x00008A0000000000000000000000000000000000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063969,' ',' ',205,-66.349,-4.499,-95.864,0,50,50,0,0,0,6,27,0x00006A0000000000000000000000000000000000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063970,' ',' ',201,-67.951,-4.500,-96.002,0,50,50,0,0,0,6,27,0x0000AE0000000000000000000000000000000000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063971,'csnpc',' ',205,-66.220,-4.499,-97.209,0,50,50,0,0,0,6,27,0x0100050217101720173017401750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063966,'Kupipi','Kupipi',194,-60.491,-4.500,-95.354,0,50,50,0,0,0,6,27,0x0100000600101320133013401350006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063967,'blank',' ',199,-69.468,-4.500,-94.703,0,50,50,0,0,0,6,27,0x0000620000000000000000000000000000000000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063968,'blank',' ',205,-68.628,-4.500,-97.304,0,50,50,0,0,0,6,27,0x00008A0000000000000000000000000000000000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063969,'blank',' ',205,-66.350,-4.499,-95.864,0,50,50,0,0,0,6,27,0x00006A0000000000000000000000000000000000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063970,'blank',' ',201,-67.951,-4.500,-96.002,0,50,50,0,0,0,6,27,0x0000AE0000000000000000000000000000000000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063971,'csnpc',' ',205,-66.220,-4.499,-97.210,0,50,50,0,0,0,6,27,0x0100050217101720173017401750006000700000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17063972,'cameraA','cameraA',0,144.535,52.451,4.781,32768,50,50,0,0,0,6,3,0x0000340000000000000000000000000000000000,0,'TOAU',1); INSERT INTO `npc_list` VALUES (17063973,'cameraB','cameraB',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000340000000000000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063974,' ',' ',127,-95.637,0.000,-77.846,0,50,50,0,0,0,6,27,0x0000E20500000000000000000000000000000000,34,'TOAU',1); -INSERT INTO `npc_list` VALUES (17063975,' ',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0700200000000100000000000000000000000000,32,'TOAU',1); --- NC: INSERT INTO `npc_list` VALUES (17063976,'NOT_CAPTURED','cameraA',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063977,'NOT_CAPTURED','cameraB',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063978,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063979,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063980,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063981,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063982,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063983,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063984,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063985,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063986,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063987,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063988,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063989,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063990,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063991,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063992,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063993,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063994,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063995,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063996,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063997,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063998,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17063999,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064000,'NOT_CAPTURED','cameraA',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064001,'NOT_CAPTURED','cameraB',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -INSERT INTO `npc_list` VALUES (17064002,' ',' ',127,-95.637,0.000,-77.846,0,50,50,0,0,0,6,27,0x0000E20500000000000000000000000000000000,34,'TOAU',1); --- NC: INSERT INTO `npc_list` VALUES (17064003,'NOT_CAPTURED','Markovich',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064004,'NOT_CAPTURED','Sakura',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064005,'NOT_CAPTURED','Goccilo',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064006,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064007,'NOT_CAPTURED','Shantotto',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064008,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064009,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064010,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -INSERT INTO `npc_list` VALUES (17064011,'Claiborne','Claiborne',199,-322.309,0.000,-486.291,32769,50,50,0,0,0,2,27,0x0100000200100020003000400050006000700000,32,'TOAU',1); - -INSERT INTO `npc_list` VALUES (17064013,'Moogle','Moogle',0,0.000,0.000,0.000,0,50,50,0,0,0,2,3,0x0000520000000000000000000000000000000000,0,'TOAU',0); -INSERT INTO `npc_list` VALUES (17064014,'Moogle','Moogle',0,0.000,0.000,0.000,0,50,50,0,0,0,2,3,0x0000520000000000000000000000000000000000,0,'TOAU',0); -INSERT INTO `npc_list` VALUES (17064015,'Moogle','Moogle',0,0.000,0.000,0.000,0,50,50,0,0,0,2,3,0x0000520000000000000000000000000000000000,0,'TOAU',0); -INSERT INTO `npc_list` VALUES (17064016,'Moogle','Moogle',0,0.000,0.000,0.000,0,50,50,0,0,0,2,3,0x0000520000000000000000000000000000000000,0,'TOAU',0); -INSERT INTO `npc_list` VALUES (17064017,'Moogle','Moogle',0,0.000,0.000,0.000,0,50,50,0,0,0,2,3,0x0000520000000000000000000000000000000000,0,'TOAU',0); -INSERT INTO `npc_list` VALUES (17064018,'Moogle','Moogle',0,0.000,0.000,0.000,0,50,50,0,0,0,2,3,0x0000520000000000000000000000000000000000,0,'TOAU',0); -INSERT INTO `npc_list` VALUES (17064019,'Moogle','Moogle',0,0.000,0.000,0.000,0,50,50,0,0,0,2,3,0x0000520000000000000000000000000000000000,0,'TOAU',0); -INSERT INTO `npc_list` VALUES (17064020,'Moogle','Moogle',0,0.000,0.000,0.000,0,50,50,0,0,0,2,3,0x0000520000000000000000000000000000000000,0,'TOAU',0); -INSERT INTO `npc_list` VALUES (17064021,'_1y0',' ',0,-390.000,-5.500,-490.000,1,40,40,9,0,0,0,6147,0x020000005F317930000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064022,'_1y1',' ',0,-390.000,-5.500,-470.000,1,40,40,9,0,0,0,6147,0x020000005F317931000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064023,'_1y2',' ',0,-330.000,-5.500,-410.000,1,40,40,9,0,0,0,6147,0x020000005F317932000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064024,'_1y3',' ',0,-250.000,-5.500,-470.000,1,40,40,9,0,0,0,6147,0x020000005F317933000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064025,'_1y4',' ',0,-250.000,-5.500,-490.000,1,40,40,9,0,0,0,6147,0x020000005F317934000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064026,'_1y5',' ',0,-108.000,-15.000,-134.800,1,40,40,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,'TOAU',0); -INSERT INTO `npc_list` VALUES (17064027,'_1y6',' ',0,-84.000,-15.000,-134.800,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,'TOAU',0); -INSERT INTO `npc_list` VALUES (17064028,'_1y7',' ',0,-60.000,-15.000,-134.800,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,'TOAU',0); -INSERT INTO `npc_list` VALUES (17064029,'_1y8',' ',0,-36.000,-15.000,-134.800,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,'TOAU',0); -INSERT INTO `npc_list` VALUES (17064030,'_1y9',' ',0,-12.000,-15.000,-134.800,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,'TOAU',0); -INSERT INTO `npc_list` VALUES (17064031,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'TOAU',1); --- NC: INSERT INTO `npc_list` VALUES (17064032,'NOT_CAPTURED','Iluprassa',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064033,'NOT_CAPTURED','TimeKeeper',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064034,'NOT_CAPTURED','Master1',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064035,'NOT_CAPTURED','Master2',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064036,'NOT_CAPTURED','Master3',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064037,'NOT_CAPTURED','Master4',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -INSERT INTO `npc_list` VALUES (17064038,'Curtis','Curtis',192,-276.635,0.004,-533.735,18,40,40,0,0,0,0,27,0x010006013810BB20673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064039,'Manfred','Manfred',192,-271.602,0.004,-533.241,12,40,40,0,0,0,0,27,0x010005013810C220673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064040,'Gustavo','Gustavo',192,-261.842,0.004,-533.666,1,40,40,0,0,0,0,27,0x010001013810C020673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064041,'Russel','Russel',192,-257.257,0.004,-533.690,25,40,40,0,0,0,0,27,0x010003013810BE20673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064042,'Delaulne','Delaulne',192,-382.671,0.004,-533.795,18,40,40,0,0,0,0,27,0x010000023810BB20673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064043,'Fina','Fina',192,-377.999,0.004,-533.549,12,40,40,0,0,0,0,27,0x01000C023810C220673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064044,'Channon','Channon',192,-368.136,0.004,-533.321,1,40,40,0,0,0,0,27,0x01000E023810C020673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064045,'Mercedes','Mercedes',192,-363.256,0.004,-533.551,25,40,40,0,0,0,0,27,0x010003023810BE20673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064046,'Ilsoire','Ilsoire',64,-330.361,-0.005,-410.638,18,40,40,0,0,0,0,27,0x010001030E106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064047,'Foulneporde','Foulneporde',128,-250.715,-0.005,-469.532,12,40,40,0,0,0,0,27,0x010007030E106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064048,'Mulaitrand','Mulaitrand',0,-389.406,-0.005,-468.903,1,40,40,0,0,0,0,27,0x010009030E106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064049,'Saffaullette','Saffaullette',128,-250.669,-0.005,-491.350,25,40,40,0,0,0,0,27,0x01000B040E106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064050,'Boirie','Boirie',0,-389.378,-0.005,-491.435,18,40,40,0,0,0,0,27,0x01000C040E106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063974,'blank',' ',127,-95.637,0.000,-77.846,0,50,50,0,0,0,6,27,0x0000E20500000000000000000000000000000000,34,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063975,'csnpc',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,2,25,0x0700200000000100000000000000000000000000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063976,'cameraA','cameraA',0,144.535,52.451,4.781,32769,50,50,0,0,0,2,3,0x0000340000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063977,'cameraB','cameraB',0,0.000,0.000,0.000,32769,50,50,0,0,0,2,3,0x0000340000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17063978,'csnpc',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,2,25,0x0700200000000100000000000000000000000000,32,'TOAU',1); +-- NC: INSERT INTO `npc_list` VALUES (17063979,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063980,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063981,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063982,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063983,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063984,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063985,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063986,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063987,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063988,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063989,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063990,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063991,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063992,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063993,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063994,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063995,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063996,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063997,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063998,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17063999,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17064000,'NOT_CAPTURED','cameraA',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17064001,'NOT_CAPTURED','cameraB',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +INSERT INTO `npc_list` VALUES (17064002,'blank',' ',127,-95.637,0.000,-77.846,0,50,50,0,0,0,6,27,0x0000E20500000000000000000000000000000000,34,'TOAU',1); +-- NC: INSERT INTO `npc_list` VALUES (17064003,'NOT_CAPTURED','Markovich',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17064004,'NOT_CAPTURED','Sakura',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17064005,'NOT_CAPTURED','Goccilo',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17064006,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17064007,'NOT_CAPTURED','Shantotto',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17064008,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17064009,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17064010,'NOT_CAPTURED','???','map?'0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +INSERT INTO `npc_list` VALUES (17064011,'Claiborne','Claiborne',199,-322.310,0.000,-486.291,32769,50,50,0,0,0,2,27,0x0100000200100020003000400050006000700000,32,'TOAU',1); +-- NC: INSERT INTO `npc_list` VALUES (17064012,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +INSERT INTO `npc_list` VALUES (17064021,'_1y0','',0,-390.000,-5.500,-490.000,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064022,'_1y1','',0,-390.000,-5.500,-470.000,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064023,'_1y2','',0,-330.000,-5.500,-410.000,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064024,'_1y3','',0,-250.000,-5.500,-470.000,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064025,'_1y4','',0,-250.000,-5.500,-490.000,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064026,'_1y5','',0,-108.000,-15.000,-134.800,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064027,'_1y6','',0,-84.000,-15.000,-134.800,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064028,'_1y7','',0,-60.000,-15.000,-134.800,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064029,'_1y8','',0,-36.000,-15.000,-134.800,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064030,'_1y9','',0,-12.000,-15.000,-134.800,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064031,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'TOAU',1); +-- NC: INSERT INTO `npc_list` VALUES (17064032,'NOT_CAPTURED','Iluprassa',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17064033,'NOT_CAPTURED','TimeKeeper',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17064034,'NOT_CAPTURED','Master1',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17064035,'NOT_CAPTURED','Master2',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17064036,'NOT_CAPTURED','Master3',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +-- NC: INSERT INTO `npc_list` VALUES (17064037,'NOT_CAPTURED','Master4',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +INSERT INTO `npc_list` VALUES (17064038,'Curtis','Curtis',192,-276.635,0.004,-533.735,7,50,50,0,0,0,0,27,0x010006013810BB20673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064039,'Manfred','Manfred',192,-271.602,0.004,-533.241,7,50,50,0,0,0,0,27,0x010005013810C220673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064040,'Gustavo','Gustavo',192,-261.842,0.004,-533.666,21,50,50,0,0,0,0,27,0x010001013810C020673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064041,'Russel','Russel',192,-257.257,0.004,-533.690,14,50,50,0,0,0,0,27,0x010003013810BE20673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064042,'Delaulne','Delaulne',192,-382.671,0.004,-533.795,7,50,50,0,0,0,0,27,0x010000023810BB20673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064043,'Fina','Fina',192,-377.999,0.004,-533.550,1,50,50,0,0,0,0,27,0x01000C023810C220673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064044,'Channon','Channon',192,-368.136,0.004,-533.321,21,50,50,0,0,0,0,27,0x01000E023810C020673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064045,'Mercedes','Mercedes',192,-363.256,0.004,-533.551,14,50,50,0,0,0,0,27,0x010003023810BE20673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064046,'Ilsoire','Ilsoire',64,-330.361,-0.005,-410.638,7,50,50,0,0,0,0,27,0x010001030E106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064047,'Foulneporde','Foulneporde',128,-250.715,-0.005,-469.532,1,50,50,0,0,0,0,27,0x010007030E106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064048,'Mulaitrand','Mulaitrand',0,-389.406,-0.005,-468.903,21,50,50,0,0,0,0,27,0x010009030E106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064049,'Saffaullette','Saffaullette',128,-250.670,-0.005,-491.350,14,50,50,0,0,0,0,27,0x01000B040E106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064050,'Boirie','Boirie',0,-389.378,-0.005,-491.435,7,50,50,0,0,0,0,27,0x01000C040E106720673067406750006000700000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17064051,'Azainnie','Azainnie',192,-60.623,-14.500,-133.451,1,50,50,0,0,0,0,27,0x010001040E106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064052,'Flige','Flige',192,-35.647,-14.500,-133.451,1,50,50,0,0,0,0,27,0x01000A040E106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064053,'Perdric','Perdric',192,-84.007,-14.500,-133.451,1,50,50,0,0,0,0,27,0x01000B030E106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064054,'Odersille','Odersille',192,-11.523,-14.500,-133.451,1,50,50,0,0,0,0,27,0x01000C030E106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064052,'Flige','Flige',192,-35.647,-14.500,-133.451,21,50,50,0,0,0,0,27,0x01000A040E106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064053,'Perdric','Perdric',192,-84.007,-14.500,-133.451,14,50,50,0,0,0,0,27,0x01000B030E106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064054,'Odersille','Odersille',192,-11.523,-14.500,-133.451,7,50,50,0,0,0,0,27,0x01000C030E106720673067406750006000700000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17064055,'Couzanne','Couzanne',192,-107.947,-14.500,-133.451,1,50,50,0,0,0,0,27,0x01000E040E106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064056,'Luca','Luca',0,-317.406,0.000,-485.091,1,40,40,0,0,0,0,27,0x01000F0100106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064057,'Khatri','Khatri',128,-322.411,0.000,-484.819,25,40,40,0,0,0,0,27,0x0100050200106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064056,'Luca','Luca',0,-317.406,0.000,-485.091,21,50,50,0,0,0,0,27,0x01000F0100106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064057,'Khatri','Khatri',128,-322.411,0.000,-484.819,14,50,50,0,0,0,0,27,0x0100050200106720673067406750006000700000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17064058,' ',' ',0,0.000,0.000,0.000,1,50,50,0,0,0,2,2075,0x0000340000000000000000000000000000000000,32,'TOAU',1); --- NC: INSERT INTO `npc_list` VALUES (17064059,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -INSERT INTO `npc_list` VALUES (17064060,'Karsten','Karsten',64,-340.559,0.000,-297.529,1,40,40,0,0,0,0,27,0x0100000100106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064061,'Jolande','Jolande',0,-499.440,0.000,-371.312,14,50,50,0,0,0,0,27,0x0100010200106720673067406750006000700000,32,NULL,1); --- NC: INSERT INTO `npc_list` VALUES (17064062,'NOT_CAPTURED','Rodrigo',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064063,'NOT_CAPTURED','Lisette',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064064,'NOT_CAPTURED','Timothy',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -INSERT INTO `npc_list` VALUES (17064065,'Magali','Magali',64,-328.947,0.000,-295.444,25,40,40,0,0,0,0,27,0x0100000200106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064066,'Valerio','Valerio',0,-502.155,0.000,-360.685,7,50,50,0,0,0,0,27,0x0100010100106720673067406750006000700000,32,NULL,1); --- NC: INSERT INTO `npc_list` VALUES (17064067,'NOT_CAPTURED','Maxine',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064068,'NOT_CAPTURED','Ove',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064069,'NOT_CAPTURED','Raquel',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -INSERT INTO `npc_list` VALUES (17064070,'Laujaquetemps','Laujaquetemps',130,-311.232,-4.000,-430.437,32775,40,40,0,1,0,0,27,0x010000031810BB20673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064071,'Cadwyn','Cadwyn',127,-311.772,-4.000,-425.132,32780,40,40,0,1,0,0,27,0x010007021810C220673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064072,'Fhaht_Beablrucch','Fhaht Beablrucch',125,-311.756,-4.000,-419.103,32769,40,40,0,1,0,0,27,0x010000071810C020673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064073,'Failene','Failene',127,-311.079,-4.000,-413.251,32793,40,40,0,1,0,0,27,0x010000041810BE20673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064074,'Giancario','Giancario',66,-253.330,-4.000,-451.167,32786,40,40,0,1,0,0,27,0x010002011810BB20673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064075,'Pretervout','Pretervout',65,-258.830,-4.000,-452.048,32780,40,40,0,1,0,0,27,0x010008031810C220673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064076,'Sudha_Rhilimanyme','Sudha Rhilimanyme',58,-264.944,-4.000,-451.760,32769,40,40,0,1,0,0,27,0x010008071810C020673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064077,'Gozben','Gozben',59,-270.387,-4.000,-451.198,32793,40,40,0,1,0,0,27,0x010001081810BE20673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064078,'Linus','Linus',198,-270.544,-4.000,-508.954,32786,40,40,0,1,0,0,27,0x010000011810BB20673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064079,'Olega','Olega',193,-264.991,-4.000,-508.379,32780,40,40,0,1,0,0,27,0x010002021810C220673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064080,'Lengussant','Lengussant',191,-258.943,-4.000,-508.155,32769,40,40,0,1,0,0,27,0x010003031810C020673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064081,'Cordaurie','Cordaurie',174,-253.318,-4.000,-509.032,32793,40,40,0,1,0,0,27,0x010002041810BE20673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064082,'Roman','Roman',198,-386.263,-4.000,-508.572,32786,40,40,0,1,0,0,27,0x010004011810BB20673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064083,'Maleroune','Maleroune',191,-380.827,-4.000,-508.221,32780,40,40,0,1,0,0,27,0x010004041810C220673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064084,'Rhap_Talashpehn','Rhap Talashpehn',185,-375.043,-4.000,-508.225,32769,40,40,0,1,0,0,27,0x010004071810C020673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064085,'Gerlbotz','Gerlbotz',184,-369.336,-4.000,-508.927,32772,50,50,0,1,0,0,27,0x010002081810BE20673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064086,'Gadimo','Gadimo',68,-369.392,-4.000,-450.880,32786,40,40,0,1,0,0,27,0x010004081810BB20673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064087,'Piana','Piana',62,-374.898,-4.000,-451.831,32780,40,40,0,1,0,0,27,0x010004021810C220673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064088,'Guillaulmilian','Guillaulmilian',60,-380.984,-4.000,-451.755,32769,40,40,0,1,0,0,27,0x01000A031810C020673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064089,'Daipanne','Daipanne',50,-386.511,-4.000,-451.431,32793,40,40,0,1,0,0,27,0x010008041810BE20673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064090,'Olorinda','Olorinda',193,-113.471,-14.500,-136.238,7,40,40,0,1,0,0,27,0x0100080200106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064091,'Uhko_Rolinzoh','Uhko Rolinzoh',189,-89.524,-14.500,-136.175,7,40,40,0,1,0,0,27,0x01000A0700106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064092,'Jadamo','Jadamo',190,-65.812,-14.500,-136.126,21,40,40,0,1,0,0,27,0x0100070800106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064093,'Jaicedion','Jaicedion',192,-41.904,-14.500,-135.923,14,40,40,0,1,0,0,27,0x0100050300106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064094,'Urbano','Urbano',190,-17.515,-14.500,-136.001,7,40,40,0,1,0,0,27,0x01000E0100106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064095,'Reinwald','Reinwald',194,-266.373,3.999,-536.712,6,40,40,0,1,0,0,27,0x01000C0100106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064096,'Palson','Palson',210,-372.807,3.999,-536.904,7,40,40,0,1,0,0,27,0x0100060400106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064097,'Chocobo','Chocobo',192,-277.576,4.199,-536.523,25,40,40,0,1,0,0,1,0x0700200000000000000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064098,'Chocobo','Chocobo',192,-273.023,4.199,-536.561,18,40,40,0,1,0,0,1,0x0700200000000000000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064099,'Chocobo','Chocobo',193,-260.959,4.199,-536.292,12,40,40,0,1,0,0,1,0x0700210000000000000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064100,'Chocobo','Chocobo',192,-256.217,4.199,-536.285,1,40,40,0,1,0,0,1,0x0700220000000000000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064101,'Chocobo','Chocobo',196,-383.640,4.199,-536.223,25,40,40,0,1,0,0,1,0x0700200000000000000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064102,'Chocobo','Chocobo',194,-379.040,4.199,-536.479,18,40,40,0,1,0,0,1,0x0700200000000000000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064103,'Chocobo','Chocobo',191,-366.983,4.199,-536.712,12,40,40,0,1,0,0,1,0x0700230000000000000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064104,'Chocobo','Chocobo',192,-362.259,4.199,-536.584,21,40,40,0,1,0,0,1,0x0700240000000000000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064105,'Joilevin','Joilevin',62,-319.937,0.000,-467.799,25,40,40,0,1,0,0,27,0x0100020338106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064106,'Pollante','Pollante',136,-325.119,-4.000,-430.697,18,40,40,0,1,0,0,27,0x0100030438106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064107,'Chaquoillons','Chaquoillons',60,-270.716,-4.000,-465.199,12,40,40,0,1,0,0,27,0x0100040338106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064108,'Faboise','Faboise',187,-270.953,-4.000,-495.218,1,40,40,0,1,0,0,27,0x0100050438106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064109,'Cyphaireau','Cyphaireau',193,-369.391,-4.000,-495.073,25,40,40,0,1,0,0,27,0x0100060338106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064110,'Amaduralle','Amaduralle',56,-369.286,-4.000,-464.873,18,40,40,0,1,0,0,27,0x0100070438106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064111,'Mediverchanne','Mediverchanne',60,-266.976,3.999,-524.848,1,50,50,0,1,0,0,27,0x0100080338106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064112,'Vaihilique','Vaihilique',75,-372.943,3.999,-524.775,1,40,40,0,1,0,0,27,0x0100090438106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064113,'qm0','???',0,-318.752,-1.075,-488.509,32769,40,40,0,0,0,0,3,0x000034003F3F3F00000000000000000000000000,0,'TOAU',0); -INSERT INTO `npc_list` VALUES (17064114,'qm1','???',0,-321.128,-1.131,-523.518,32769,40,40,0,0,0,0,3,0x000034003F3F3F00000000000000000000000000,0,'TOAU',0); -INSERT INTO `npc_list` VALUES (17064115,'blank',' ',127,-274.319,4.199,-540.936,5359,10,50,0,0,0,0,2075,0x0000CD0700000000000000000000000000000000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064116,'blank',' ',0,-385.359,4.199,-540.966,6850,10,40,0,0,0,0,2075,0x0000CD0700000000000000000000000000000000,32,'TOAU',1); +-- NC: INSERT INTO `npc_list` VALUES (17064059,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +INSERT INTO `npc_list` VALUES (17064060,'Karsten','Karsten',64,-340.560,0.000,-297.529,21,50,50,0,0,0,0,27,0x0100000100106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064061,'Jolande','Jolande',0,-499.440,0.000,-371.312,14,50,50,0,0,0,0,27,0x0100010200106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064062,'Rodrigo','Rodrigo',160,-502.384,0.000,-536.281,7,50,50,0,0,0,0,27,0x0100020100106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064063,'Lisette','Lisette',64,-150.073,0.000,-377.292,1,50,50,0,0,0,0,27,0x0100030200106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064064,'Timothy','Timothy',192,-135.653,0.000,-538.552,21,50,50,0,0,0,0,27,0x0100040100106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064065,'Magali','Magali',64,-328.947,0.000,-295.444,14,50,50,0,0,0,0,27,0x0100000200106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064066,'Valerio','Valerio',0,-502.155,0.000,-360.685,7,50,50,0,0,0,0,27,0x0100010100106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064067,'Maxine','Maxine',160,-492.890,0.000,-530.576,1,50,50,0,0,0,0,27,0x0100020200106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064068,'Ove','Ove',64,-160.484,0.000,-374.533,21,50,50,0,0,0,0,27,0x0100030100106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064069,'Raquel','Raquel',192,-146.168,0.000,-541.022,14,50,50,0,0,0,0,27,0x0100040200106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064070,'Laujaquetemps','Laujaquetemps',130,-311.232,-4.000,-430.437,32775,50,50,0,1,0,0,27,0x010000031810BB20673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064071,'Cadwyn','Cadwyn',127,-311.772,-4.000,-425.132,32769,50,50,0,1,0,0,27,0x010007021810C220673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064072,'Fhaht_Beablrucch','Fhaht Beablrucch',125,-311.756,-4.000,-419.103,32789,50,50,0,1,0,0,27,0x010000071810C020673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064073,'Failene','Failene',127,-311.080,-4.000,-413.251,32782,50,50,0,1,0,0,27,0x010000041810BE20673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064074,'Giancario','Giancario',66,-253.330,-4.000,-451.168,32775,50,50,0,1,0,0,27,0x010002011810BB20673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064075,'Pretervout','Pretervout',65,-258.831,-4.000,-452.048,32769,50,50,0,1,0,0,27,0x010008031810C220673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064076,'Sudha_Rhilimanyme','Sudha Rhilimanyme',58,-264.944,-4.000,-451.760,32789,50,50,0,1,0,0,27,0x010008071810C020673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064077,'Gozben','Gozben',59,-270.387,-4.000,-451.198,32782,50,50,0,1,0,0,27,0x010001081810BE20673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064078,'Linus','Linus',198,-270.544,-4.000,-508.954,32775,50,50,0,1,0,0,27,0x010000011810BB20673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064079,'Olega','Olega',193,-264.991,-4.000,-508.379,32769,50,50,0,1,0,0,27,0x010002021810C220673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064080,'Lengussant','Lengussant',191,-258.943,-4.000,-508.155,32789,50,50,0,1,0,0,27,0x010003031810C020673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064081,'Cordaurie','Cordaurie',174,-253.318,-4.000,-509.032,32782,50,50,0,1,0,0,27,0x010002041810BE20673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064082,'Roman','Roman',198,-386.263,-4.000,-508.572,32775,50,50,0,1,0,0,27,0x010004011810BB20673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064083,'Maleroune','Maleroune',191,-380.827,-4.000,-508.221,32769,50,50,0,1,0,0,27,0x010004041810C220673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064084,'Rhap_Talashpehn','Rhap Talashpehn',185,-375.043,-4.000,-508.225,32789,50,50,0,1,0,0,27,0x010004071810C020673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064085,'Gerlbotz','Gerlbotz',184,-369.336,-4.000,-508.927,32782,50,50,0,1,0,0,27,0x010002081810BE20673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064086,'Gadimo','Gadimo',68,-369.392,-4.000,-450.880,32775,50,50,0,1,0,0,27,0x010004081810BB20673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064087,'Piana','Piana',62,-374.898,-4.000,-451.831,32769,50,50,0,1,0,0,27,0x010004021810C220673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064088,'Guillaulmilian','Guillaulmilian',60,-380.984,-4.000,-451.755,32789,50,50,0,1,0,0,27,0x01000A031810C020673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064089,'Daipanne','Daipanne',50,-386.511,-4.000,-451.431,32782,50,50,0,1,0,0,27,0x010008041810BE20673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064090,'Olorinda','Olorinda',193,-113.471,-14.500,-136.238,7,50,50,0,1,0,0,27,0x0100080200106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064091,'Uhko_Rolinzoh','Uhko Rolinzoh',189,-89.524,-14.500,-136.175,1,50,50,0,1,0,0,27,0x01000A0700106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064092,'Jadamo','Jadamo',190,-65.812,-14.500,-136.126,21,50,50,0,1,0,0,27,0x0100070800106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064093,'Jaicedion','Jaicedion',192,-41.904,-14.500,-135.923,14,50,50,0,1,0,0,27,0x0100050300106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064094,'Urbano','Urbano',190,-17.515,-14.500,-136.001,7,50,50,0,1,0,0,27,0x01000E0100106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064095,'Reinwald','Reinwald',207,-266.373,3.999,-536.712,6,50,50,0,1,0,0,27,0x01000C0100106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064096,'Palson','Palson',200,-372.807,3.999,-536.904,7,50,50,0,1,0,0,27,0x0100060400106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064097,'Chocobo','Chocobo',192,-277.576,4.199,-536.523,14,50,50,0,1,0,0,1,0x0700200000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064098,'Chocobo','Chocobo',192,-273.023,4.199,-536.561,7,50,50,0,1,0,0,1,0x0700200000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064099,'Chocobo','Chocobo',193,-260.959,4.199,-536.292,1,50,50,0,1,0,0,1,0x0700210000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064100,'Chocobo','Chocobo',192,-256.217,4.199,-536.285,21,50,50,0,1,0,0,1,0x0700220000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064101,'Chocobo','Chocobo',196,-383.640,4.199,-536.223,14,50,50,0,1,0,0,1,0x0700200000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064102,'Chocobo','Chocobo',194,-379.040,4.199,-536.479,7,50,50,0,1,0,0,1,0x0700200000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064103,'Chocobo','Chocobo',191,-366.983,4.199,-536.712,1,50,50,0,1,0,0,1,0x0700230000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064104,'Chocobo','Chocobo',192,-362.259,4.199,-536.584,21,50,50,0,1,0,0,1,0x0700240000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064105,'Joilevin','Joilevin',62,-319.937,0.000,-467.799,14,50,50,0,1,0,0,27,0x0100020338106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064106,'Pollante','Pollante',136,-325.119,-4.000,-430.698,7,50,50,0,1,0,0,27,0x0100030438106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064107,'Chaquoillons','Chaquoillons',60,-270.716,-4.000,-465.199,1,50,50,0,1,0,0,27,0x0100040338106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064108,'Faboise','Faboise',187,-270.953,-4.000,-495.218,21,50,50,0,1,0,0,27,0x0100050438106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064109,'Cyphaireau','Cyphaireau',193,-369.391,-4.000,-495.073,14,50,50,0,1,0,0,27,0x0100060338106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064110,'Amaduralle','Amaduralle',56,-369.286,-4.000,-464.873,7,50,50,0,1,0,0,27,0x0100070438106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064111,'Mediverchanne','Mediverchanne',60,-266.977,3.999,-524.848,1,50,50,0,1,0,0,27,0x0100080338106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064112,'Vaihilique','Vaihilique',75,-372.943,3.999,-524.775,21,50,50,0,1,0,0,27,0x0100090438106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064113,'???','???',0,-318.752,-1.075,-488.509,32769,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064114,'???','???',0,-321.128,-1.131,-523.518,32769,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064115,'blank',' ',127,-284.158,4.200,-541.045,7337,10,50,0,0,0,0,2075,0x0000CD0700000000000000000000000000000000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064116,'blank',' ',127,-358.396,4.200,-540.937,917,10,50,0,0,0,0,2075,0x0000CD0700000000000000000000000000000000,32,'TOAU',1); -- spectators have random pos INSERT INTO `npc_list` VALUES (17064117,'Happo','Happo',157,-35.647,-14.500,-125.579,27,42,50,0,0,0,0,27,0x01000F0100100920093009400950006000700000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17064118,'Eugenia','Eugenia',157,-84.007,-14.500,-125.579,27,45,50,0,0,0,2,27,0x01000F0200101820003008408350006000700000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17064119,'Berthold','Berthold',157,-84.007,-14.500,-125.579,6,18,50,0,0,0,0,27,0x0100040100101820003008400850006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064120,'Sigiswald','Sigiswald',199,-112.255,-11.500,-103.019,3260,15,50,0,0,0,0,27,0x00005A0000000000000000000000000000000000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064121,'Rhind_Mhikkrol','Rhind Mhikkrol',199,-11.520,-11.500,-102.751,1109,44,50,0,0,0,0,27,0x0100000700100420113003401150006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064122,'Makrena-Rukrena','Makrena-Rukrena',199,-17.958,-13.000,-115.173,673,44,50,0,0,0,0,27,0x0100000577100720003017401250006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064123,'Denpepe','Denpepe',199,-11.523,-14.500,-125.579,27,44,50,0,0,0,2,27,0x0100000600102C20953003401350006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064124,'Maik','Maik',193,-107.098,-11.500,-102.743,2560,18,50,0,0,0,0,27,0x0000640000000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17064120,'Sigiswald','Sigiswald',199,-112.255,-11.500,-103.020,27,15,50,0,0,0,0,27,0x00005A0000000000000000000000000000000000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064121,'Rhind_Mhikkrol','Rhind Mhikkrol',63,-11.280,-20.000,-131.810,1380,44,50,0,0,0,2,27,0x0100000700100420113003401150006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064122,'Makrena-Rukrena','Makrena-Rukrena',199,-17.958,-13.000,-115.173,674,44,50,47,0,0,0,27,0x0100000577100720003017401250006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064123,'Denpepe','Denpepe',191,-9.570,-11.500,-102.618,1610,44,50,0,0,0,0,27,0x0100000600102C20953003401350006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064124,'Maik','Maik',193,-107.098,-11.500,-102.743,2560,18,50,0,0,0,0,27,0x0000640000000000000000000000000000000000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17064125,'Phemille','Phemille',199,-84.007,-14.500,-125.579,27,21,50,0,0,0,2,27,0x010000047410652065300B406550006000700000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17064126,'Gimaulle','Gimaulle',199,-63.966,-11.500,-102.796,2719,18,50,0,0,0,0,27,0x01000E33771082200030AA401250006000700000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17064127,'Galloping_Chocobo','Galloping Chocobo',192,-107.945,-13.162,-117.387,824,20,50,0,0,0,0,27,0x01000F030010A220003082400A50006000700000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17064128,'blank',' ',192,-107.945,-13.117,-117.111,852,20,50,0,0,0,0,2075,0x0000CD0700000000000000000000000000000000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17064129,'Nheu_Chaftahl','Nheu Chaftahl',199,-84.007,-14.500,-125.579,26,18,50,0,0,0,2,2075,0x01000A0700108220823082408250006000700000,32,'TOAU',1); --- NC: INSERT INTO `npc_list` VALUES (17064130,'NOT_CAPTURED','Mes-Test',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -INSERT INTO `npc_list` VALUES (17064131,'Bonanza_Moogle','Bonanza Moogle',128,-308.160,0.000,-478.863,1,40,40,0,0,0,2,3,0x0000D503426F6E616E7A614D6F6F676C65000000,0,'TOAU',1); --- NC: INSERT INTO `npc_list` VALUES (17064132,'Bonanza_Moogle','Bonanza Moogle',0,0,0,0,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -INSERT INTO `npc_list` VALUES (17064133,'Dealer_Moogle','Dealer Moogle',131,-307.558,0.000,-480.407,1,40,40,0,0,0,2,3,0x0000D5034465616C65724D6F6F676C6500000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064134,'Gate_Chocobo_Circuit','Gate: Chocobo Circuit',0,-340.000,-1.500,-314.299,32769,40,40,0,0,0,0,3,0x00003400476174653A43686F636F626F43000000,0,'WOTG',0); --- NC: INSERT INTO `npc_list` VALUES (17064135,'NOT_CAPTURED','Gate: Chocobo Circuit',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064136,'NOT_CAPTURED','Gate: Chocobo Circuit',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064137,'NOT_CAPTURED','Gate: Chocobo Circuit',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17064138,'NOT_CAPTURED','Gate: Chocobo Circuit',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -INSERT INTO `npc_list` VALUES (17064139,'Michaela','Michaela',192,-319.419,0.000,-524.510,18,40,40,0,1,0,0,27,0x01000C0200106720673067406750006000700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17064140,'Adrian','Adrian',26,-332.564,0.000,-468.638,12,40,40,0,0,0,0,27,0x0100020100100421C930B9400251006000700000,32,'ABYSSEA',1); -INSERT INTO `npc_list` VALUES (17064141,'Cyril','Cyril',24,-331.617,0.000,-467.548,1,40,40,0,0,0,0,27,0x0100060100100421C930B9400251006000700000,32,'ABYSSEA',1); -INSERT INTO `npc_list` VALUES (17064142,'Synergy_Engineer','Synergy Engineer',174,-325.376,0.000,-524.698,7,40,40,0,0,0,0,3,0x01000101771078200A300A400A50006000700000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17064143,'Synergy_Engineer','Synergy Engineer',135,-304.635,0.000,-516.724,6,40,40,0,0,0,0,3,0x01000702771078200A300A400A50006000700000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17064144,'Synergy_Furnace','Synergy Furnace',0,-331.746,0.000,-526.447,1,40,40,0,5,68,0,643,0x00002C0953796E657267794675726E6163650000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17064145,'Synergy_Furnace','Synergy Furnace',0,-308.113,0.000,-526.447,1,40,40,0,5,68,0,643,0x00002C0953796E657267794675726E6163650000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17064146,'Synergy_Furnace','Synergy Furnace',128,-316.828,0.000,-516.239,1,40,40,0,5,68,0,643,0x00002C0953796E657267794675726E6163650000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17064147,'Synergy_Furnace','Synergy Furnace',128,-323.024,0.000,-515.819,1,40,40,0,5,68,0,643,0x00002C0953796E657267794675726E6163650000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17064148,'Synergy_Enthusiast','Synergy Enthusiast',186,-324.546,0.000,-524.753,7,40,40,0,0,0,0,3,0x01000803771078200A300A400A50006000700000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17064149,'Greeter_Moogle','Greeter Moogle',0,-322.000,0.000,-480.000,21,50,50,0,0,0,0,3,0x0000730900000000000000000000000000000000,0,'SOA',1); +-- NC: INSERT INTO `npc_list` VALUES (17064130,'NOT_CAPTURED','Mes-Test',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,'TOAU',0); +INSERT INTO `npc_list` VALUES (17064131,'BonanzaMoogle','Bonanza Moogle',128,-308.160,0.000,-478.863,0,50,50,0,0,0,6,3,0x0000D50300000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064132,'BonanzaMoogle','Bonanza Moogle',128,-308.160,0.000,-478.863,1,50,50,0,0,0,2,3,0x0000D50300000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064133,'DealerMoogle','Dealer Moogle',131,-307.559,0.000,-480.407,14,50,50,0,0,0,0,3,0x0000D50300000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064134,'GateChocoboC','Gate: Chocobo Circuit',0,-482.700,-1.250,-371.000,32769,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064135,'GateChocoboC','Gate: Chocobo Circuit',0,-514.159,-1.350,-524.358,32769,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064136,'GateChocoboC','Gate: Chocobo Circuit',0,-136.000,-1.499,-521.750,32769,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064137,'GateChocoboC','Gate: Chocobo Circuit',0,-340.000,-1.500,-314.299,32769,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064138,'GateChocoboC','Gate: Chocobo Circuit',0,-150.000,-2.000,-392.750,32769,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064139,'Michaela','Michaela',192,-319.419,0.000,-524.510,1,50,50,0,1,0,0,27,0x01000C0200106720673067406750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064140,'Adrian','Adrian',26,-332.564,0.000,-468.638,21,50,50,0,0,0,0,27,0x0100020100100421C930B9400251006000700000,32,'ABYSSEA',1); +INSERT INTO `npc_list` VALUES (17064141,'Cyril','Cyril',24,-331.617,0.000,-467.548,14,50,50,0,0,0,0,27,0x0100060100100421C930B9400251006000700000,32,'ABYSSEA',1); +INSERT INTO `npc_list` VALUES (17064142,'Synergy_Engineer','Synergy Engineer',185,-325.376,0.000,-524.698,7,50,50,0,0,0,0,3,0x01000101771078200A300A400A50006000700000,0,'WOTG',1); +INSERT INTO `npc_list` VALUES (17064143,'Synergy_Engineer','Synergy Engineer',117,-304.635,0.000,-516.724,6,50,50,0,0,0,0,3,0x01000702771078200A300A400A50006000700000,0,'WOTG',1); +INSERT INTO `npc_list` VALUES (17064144,'SynergyFurnace','Synergy Furnace',0,-331.746,0.000,-526.447,1,40,40,0,5,68,0,643,0x00002C0900000000000000000000000000000000,0,'WOTG',1); +INSERT INTO `npc_list` VALUES (17064145,'SynergyFurnace','Synergy Furnace',0,-308.113,0.000,-526.447,1,40,40,0,5,68,0,643,0x00002C0900000000000000000000000000000000,0,'WOTG',1); +INSERT INTO `npc_list` VALUES (17064146,'SynergyFurnace','Synergy Furnace',128,-316.828,0.000,-516.233,1,40,40,0,5,68,0,643,0x00002C0900000000000000000000000000000000,0,'WOTG',1); +INSERT INTO `npc_list` VALUES (17064147,'SynergyFurnace','Synergy Furnace',128,-323.024,0.000,-515.819,1,40,40,0,5,68,0,643,0x00002C0900000000000000000000000000000000,0,'WOTG',1); +INSERT INTO `npc_list` VALUES (17064148,'Synergy_Enthusiast','Synergy Enthusiast',175,-324.546,0.000,-524.753,7,50,50,0,0,0,0,3,0x01000803771078200A300A400A50006000700000,0,'WOTG',1); +INSERT INTO `npc_list` VALUES (17064149,'GreeterMoogle','Greeter Moogle',0,-332.000,0.000,-480.000,14,50,50,0,0,0,2,3,0x0000730900000000000000000000000000000000,0,'SOA',1); INSERT INTO `npc_list` VALUES (17064150,'Achieve_Master','Achieve Master',0,0.000,0.000,0.000,0,50,50,0,0,0,2,3,0x0000320000000000000000000000000000000000,0,'SOA',0); -INSERT INTO `npc_list` VALUES (17064151,'Unity_Master','Unity Master',0,0.000,0.000,0.000,0,50,50,0,0,96,2,2051,0x0000340000000000000000000000000000000000,0,'SOA',0); +INSERT INTO `npc_list` VALUES (17064151,'Unity_Master','Unity Master',0,0.000,0.000,0.000,0,50,50,0,0,96,2,2075,0x0000730900000000000000000000000000000000,0,'SOA',0); +INSERT INTO `npc_list` VALUES (17064152,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,112,2,2075,0x00003D0900000000000000000000000000000000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17064153,'MandragoraAssi','Mandragora Assistant',192,-320.000,-0.850,-493.200,32782,50,50,0,0,32,0,1,0x00008F0B00000000000000000000000000000000,2,NULL,1); +INSERT INTO `npc_list` VALUES (17064154,'blank',' ',200,-320.000,0.000,-493.200,1,50,50,0,0,96,0,2073,0x00001B0900000000000000000000000000000000,34,'TOAU',1); -- ------------------------------------------------------------ -- The Colosseum (Zone 71) @@ -8363,7 +8364,7 @@ INSERT INTO `npc_list` VALUES (17105695,'Voidwatch_Officer','Voidwatch Officer', INSERT INTO `npc_list` VALUES (17105696,'Voidwatch_Purveyor','Voidwatch Purveyor',160,100.000,1.000,-50.000,1,40,40,0,0,0,0,3,0x0100000300100B201A301A401A50FA601C700000,0,'VOIDWATCH',1); INSERT INTO `npc_list` VALUES (17105697,'Porter_Moogle','Porter Moogle',128,171.000,-2.000,134.000,21,50,50,0,0,0,0,3,0x0000520000000000000000000000000000000000,0,'ABYSSEA',1); INSERT INTO `npc_list` VALUES (17105698,'NPC[11d]','',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17105699,'Shixo','Shixo',32,-120.000,1.000,-30.000,8,50,50,0,0,0,2,27,0x0000630000000000000000000000000000000000,32,'WOTG',1); +INSERT INTO `npc_list` VALUES (17105699,'Shixo','Shixo',32,-120.000,1.000,-30.000,8,50,50,0,0,0,0,27,0x0000630000000000000000000000000000000000,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17105700,'Survival_Guide','Survival Guide',64,82.000,1.000,-68.000,21,50,50,0,17,32,0,3,0x0000810900000000000000000000000000000000,0,'SURVIVAL_GUIDE',1); INSERT INTO `npc_list` VALUES (17105701,'Cyranda','Cyranda',151,-74.532,1.999,-55.324,15,50,50,0,1,0,0,27,0x0100020412101520003008401150006000700000,32,NULL,1); INSERT INTO `npc_list` VALUES (17105702,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,NULL,1); @@ -9191,6 +9192,11 @@ INSERT INTO `npc_list` VALUES (17126194,'blank',' ',0,0.000,0.000,0.000,0,50 -- ------------------------------------------------------------ -- Everbloom Hollow (Zone 86) -- ------------------------------------------------------------ +INSERT INTO `npc_list` VALUES (17129688,'_kec','_kec',0,-240.000,6.649,-220.246,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129689,'_ked','_ked',0,40.000,-3.350,-100.246,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129690,'_kee','_kee',0,80.000,-3.350,-60.246,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129691,'_kef','_kef',0,120.000,6.649,-20.246,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129692,'_keg','_keg',0,139.753,6.649,-160.000,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,NULL,1); INSERT INTO `npc_list` VALUES (17129709,'Moogle','Moogle',0,0.000,0.000,0.000,0,40,40,0,0,0,2,4194307,0x0000520000000000000000000000000000000000,0,'WOTG',0); INSERT INTO `npc_list` VALUES (17129710,'Moogle','Moogle',0,0.000,0.000,0.000,0,40,40,0,0,0,2,4194307,0x0000520000000000000000000000000000000000,0,'WOTG',0); @@ -9202,54 +9208,54 @@ INSERT INTO `npc_list` VALUES (17129715,'Moogle','Moogle',0,0.000,0.000,0.000,0, INSERT INTO `npc_list` VALUES (17129716,'Moogle','Moogle',0,0.000,0.000,0.000,0,40,40,0,0,0,2,4194307,0x0000520000000000000000000000000000000000,0,'WOTG',0); -- NC: INSERT INTO `npc_list` VALUES (17129717,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -- NC: INSERT INTO `npc_list` VALUES (17129718,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129719,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129720,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129721,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129722,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129723,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); +INSERT INTO `npc_list` VALUES (17129719,'???','???',0,60.677,10.241,116.643,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129720,'???','???',0,59.804,9.976,123.262,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129721,'???','???',0,122.256,9.976,99.679,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129722,'???','???',0,116.615,10.116,99.563,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129723,'???','???',0,42.370,0.204,-20.218,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); INSERT INTO `npc_list` VALUES (17129724,'???','???',0,36.640,0.292,-19.936,1,50,50,0,0,0,2,3,0x0000340000000000000000000000000000000000,0,NULL,1); --- NC: INSERT INTO `npc_list` VALUES (17129725,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129726,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129727,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129728,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129729,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129730,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129731,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129732,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129733,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129734,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129735,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129736,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129737,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129738,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129739,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129740,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); +INSERT INTO `npc_list` VALUES (17129725,'???','???',0,59.999,9.998,36.603,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129726,'???','???',0,60.263,9.983,43.361,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129727,'???','???',0,116.677,10.121,59.649,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129728,'???','???',0,123.359,10.031,60.690,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129729,'???','???',0,140.272,10.045,43.289,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129730,'???','???',0,140.268,10.129,36.647,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129731,'???','???',0,180.227,0.516,76.727,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129732,'???','???',0,236.593,9.351,59.964,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129733,'???','???',0,243.313,10.086,59.343,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129734,'???','???',0,316.704,9.910,99.106,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129735,'???','???',0,323.311,8.638,100.431,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129736,'???','???',0,356.621,9.999,59.178,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129737,'???','???',0,76.641,-0.183,-61.312,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129738,'???','???',0,83.275,0.727,-60.249,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129739,'???','???',0,116.656,10.033,-20.291,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129740,'???','???',0,123.414,9.997,-19.985,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); -- NC: INSERT INTO `npc_list` VALUES (17129741,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -- NC: INSERT INTO `npc_list` VALUES (17129742,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -- NC: INSERT INTO `npc_list` VALUES (17129743,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129744,'NOT_CAPTURED','Switch',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129745,'NOT_CAPTURED','Switch',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129746,'NOT_CAPTURED','Switch',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); +INSERT INTO `npc_list` VALUES (17129744,'Switch','Switch',0,92.199,8.999,10.961,21,50,50,0,0,32,0,27,0x00001F0900000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17129745,'Switch','Switch',0,87.883,9.000,90.529,14,50,50,0,0,32,0,27,0x00001F0900000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17129746,'Switch','Switch',0,131.166,8.769,5.677,8,50,50,0,0,32,0,27,0x00001F0900000000000000000000000000000000,32,NULL,1); -- NC: INSERT INTO `npc_list` VALUES (17129747,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129748,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129749,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129750,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129751,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129752,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129753,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129754,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129755,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129756,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129757,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129758,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); +INSERT INTO `npc_list` VALUES (17129748,'blank',' ',0,59.952,9.967,120.069,21,50,50,0,4,80,0,2075,0x0000FC0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17129749,'blank',' ',0,119.999,9.980,100.364,14,50,50,0,4,80,0,2075,0x0000FC0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17129750,'blank',' ',0,40.020,-0.017,-20.163,8,50,50,0,4,80,0,2075,0x0000FC0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17129751,'blank',' ',0,60.198,9.999,39.837,1,50,50,0,4,80,0,2075,0x0000FC0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17129752,'blank',' ',0,119.885,9.999,59.317,21,50,50,0,4,80,0,2075,0x0000FC0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17129753,'blank',' ',0,140.489,9.919,39.922,14,50,50,0,4,80,0,2075,0x0000FC0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17129754,'blank',' ',0,239.839,9.999,59.582,8,50,50,0,4,80,0,2075,0x0000FC0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17129755,'blank',' ',0,319.959,9.999,99.642,1,50,50,0,4,80,0,2075,0x0000FC0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17129756,'blank',' ',0,359.874,9.999,59.888,21,50,50,0,4,80,0,2075,0x0000FC0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17129757,'blank',' ',0,80.231,0.205,-60.698,14,50,50,0,4,80,0,2075,0x0000FC0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17129758,'blank',' ',0,119.947,9.999,-20.467,8,50,50,0,4,80,0,2075,0x0000FC0800000000000000000000000000000000,32,NULL,1); -- NC: INSERT INTO `npc_list` VALUES (17129759,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -- NC: INSERT INTO `npc_list` VALUES (17129760,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129761,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); +INSERT INTO `npc_list` VALUES (17129761,'blank',' ',0,180.016,0.000,80.163,14,50,50,0,4,80,0,2075,0x0000FC0800000000000000000000000000000000,32,NULL,1); -- NC: INSERT INTO `npc_list` VALUES (17129762,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129763,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129764,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129765,'NOT_CAPTURED','Cait Sith Naoi',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17129766,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); +INSERT INTO `npc_list` VALUES (17129763,'???','???',240,385.009,10.125,48.010,1,50,50,0,0,0,0,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17129764,'blank',' ',240,385.009,10.125,48.010,21,50,50,0,0,0,0,2075,0x00000E0900000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17129765,'CaitSithNaoi','Cait Sith Naoi',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000CF0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17129766,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); INSERT INTO `npc_list` VALUES (17129767,'Zogbog','Zogbog',224,391.199,-2.260,390.060,1,50,50,0,0,64,2,2075,0x0000700200000000000000000000000000000000,32,NULL,1); -- ------------------------------------------------------------ @@ -11663,33 +11669,33 @@ INSERT INTO `npc_list` VALUES (17179457,'blank',' ',0,0.000,0.000,0.000,0,40 INSERT INTO `npc_list` VALUES (17179458,'_6rb',' ',0,24.991,0.503,64.000,1,40,40,9,0,0,2,4099,0x0200000000000000000000000000000000000000,0,'WOTG',0); INSERT INTO `npc_list` VALUES (17179459,'Brandolf','Brandolf',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01001A0114101920193019401950206100700000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17179460,'Nagmolada','Nag\'molada',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000D90300000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179461,'Ragelise','Ragelise',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000B031B10D920D930D940D950FA601B700000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179462,'Kamlanaut','Kam\'lanaut',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x00008C0500000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179463,'csnpc','Maximilian Berger',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01001A010010DA20DA300D400D50BE6080710000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179464,'csnpc','Ludwig Eichberg',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000301DA10DA20DA300D400D50896100700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179465,'csnpc','Bartholomaus',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010000014910A220A230A240A250B5602C700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179466,'csnpc','Adelheid',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000002D610D620D630D640D650676100700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179467,'csnpc','Vestillet',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010002030010D9200D300C40DD50FA601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179468,'csnpc','Rongelouts N Distaud',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000F0338102920D9300C400C501F6100700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179469,'csnpc','Ashmea B Greinner',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000204DD10D920D930D940D950FA600A710000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179470,'csnpc','Leonoyne',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010002033A103A203A303A403A50976100700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179471,'csnpc','Cousseraux',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000E03A410D920D930D940D950726100700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179472,'csnpc','Zolku-Azolku',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000D05CD10BA20943194409450316100700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179473,'csnpc','Gariri',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0100050647102D20473047404750496100700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179474,'csnpc','Haja Zhwan',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01001A07001023203630DB400050716100700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179475,'csnpc','Vhino Delkahngo',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010006078610862086300F4086505B6032700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179476,'csnpc','Atori-Tutori',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0100020500101120003000400050006000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179477,'csnpc','Putori-Tutori',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010003054B104B204B304B404B504E6100700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179478,'csnpc','Terounalivet',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0100020353105320533053405350006000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179479,'csnpc','Fonove',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010000044F104F204F304F404F50526100700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179480,'csnpc','Capacucu',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000006431043204330434043500060FF710000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179481,'csnpc','Dzhau Yaam',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010000075B105B205B305B405B50D96000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179482,'csnpc','Kupalu-Harupalu',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000C0559105920593059405950586100700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179483,'csnpc','Xonia',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0100070241104120413041404150536100700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179484,'csnpc','Festauve',0,0.000,0.000,0.000,0,50,50,0,0,0,6,29,0x010000030010DD200C30DD400D50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179485,'csnpc','Raiclace',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x0100020300100D20DD300D40DD50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179486,'csnpc','Gallauciond',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010005030010DD200C30DD400D50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17179487,'csnpc','Merfanont',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0100080300100D20DD300D40DD50FB601B700000,32,'WOTG',1); +INSERT INTO `npc_list` VALUES (17179461,'Ragelise','Ragelise',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000B031B10D920D930D940D950FA601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179462,'Kamlanaut','Kam\'lanaut',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x00008C0500000000000000000000000000000000,32,'WOTG',1); +INSERT INTO `npc_list` VALUES (17179463,'Maximilian_Berger','Maximilian Berger',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01001A010010DA20DA300D400D50BE6080710000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179464,'Ludwig_Eichberg','Ludwig Eichberg',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000301DA10DA20DA300D400D50896100700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179465,'Bartholomaus','Bartholomaus',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010000014910A220A230A240A250B5602C700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179466,'Adelheid','Adelheid',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000002D610D620D630D640D650676100700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179467,'Vestillet','Vestillet',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010002030010D9200D300C40DD50FA601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179468,'Rongelouts_N_Distaud','Rongelouts N Distaud',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x01000F0338102920D9300C400C501F6100700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179469,'Ashmea_B_Greinner','Ashmea B Greinner',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000204DD10D920D930D940D950FA600A710000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179470,'Leonoyne','Leonoyne',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010002033A103A203A303A403A50976100700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179471,'Cousseraux','Cousseraux',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000E03A410D920D930D940D950726100700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179472,'Zolku-Azolku','Zolku-Azolku',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000D05CD10BA20943094409450316100700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179473,'Gariri','Gariri',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0100050647102D20473047404750496100700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179474,'Haja_Zhwan','Haja Zhwan',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01001A07001023203630DB400050716100700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179475,'Vhino_Delkahngo','Vhino Delkahngo',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010006078610862086300F4086505B6032700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179476,'Atori-Tutori','Atori-Tutori',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0100020500101120003000400050006000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179477,'Putori-Tutori','Putori-Tutori',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010003054B104B204B304B404B504E6100700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179478,'Terounalivet','Terounalivet',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0100020353105320533053405350006000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179479,'Fonove','Fonove',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010000044F104F204F304F404F50526100700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179480,'Capacucu','Capacucu',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000006431043204330434043500060FF710000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179481,'Dzhau_Yaam','Dzhau Yaam',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010000075B105B205B305B405B50D96000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179482,'Kupalu-Harupalu','Kupalu-Harupalu',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000C0559105920593059405950586100700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179483,'Xonia','Xonia',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0100070241104120413041404150536100700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179484,'Festauve','Festauve',0,0.000,0.000,0.000,0,50,50,0,0,0,6,29,0x010000030010DD200C30DD400D50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179485,'Raiclace','Raiclace',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x0100020300100D20DD300D40DD50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179486,'Gallauciond','Gallauciond',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010005030010DD200C30DD400D50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17179487,'Merfanont','Merfanont',0,0.000,0.000,0.000,0,50,50,0,0,0,6,29,0x0100080300100D20DD300D40DD50FB601B700000,32,NULL,1); INSERT INTO `npc_list` VALUES (17179488,'_6r9',' ',0,0.000,-6.748,71.000,1,50,50,9,0,0,2,4099,0x0200000000000000000000000000000000000000,0,'WOTG',0); INSERT INTO `npc_list` VALUES (17179489,'csnpc',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000F00500000000000000000000000000000000,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17179490,'csnpc','Portia',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01001B020010D320D330D340D3507B6100700000,32,'WOTG',1); @@ -16338,7 +16344,7 @@ INSERT INTO `npc_list` VALUES (17305956,'_ll1','_ll1',0,-280.000,-2.000,-140.000 INSERT INTO `npc_list` VALUES (17305957,'_ll2','_ll2',0,-220.000,-2.000,-160.000,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,NULL,0); INSERT INTO `npc_list` VALUES (17305958,'_ll3','_ll3',0,-200.000,-2.000,-100.000,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,NULL,0); INSERT INTO `npc_list` VALUES (17305959,'_ll4','_ll4',0,-160.000,-2.000,-60.000,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17305960,'NOT_CAPTURED','_ll5',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); +INSERT INTO `npc_list` VALUES (17305960,'_ll5','_ll5',0,-120.000,-2.000,-180.000,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,NULL,1); INSERT INTO `npc_list` VALUES (17305961,'_ll6','_ll6',0,-80.000,-2.000,-140.000,1,50,50,8,0,0,0,6147,0x0200000000000000000000000000000000000000,0,NULL,0); INSERT INTO `npc_list` VALUES (17305962,'_ll7','_ll7',0,-20.000,-2.000,-80.000,1,50,50,8,0,0,0,6147,0x0200000000000000000000000000000000000000,0,NULL,0); INSERT INTO `npc_list` VALUES (17305963,'_ll8','_ll8',0,0.000,-2.000,-100.000,1,50,50,8,0,0,0,6147,0x0200000000000000000000000000000000000000,0,NULL,0); @@ -16356,7 +16362,7 @@ INSERT INTO `npc_list` VALUES (17305967,'_llc','_llc',0,120.000,-2.000,-140.000, -- NC: INSERT INTO `npc_list` VALUES (17305975,'NOT_CAPTURED','_llk',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -- NC: INSERT INTO `npc_list` VALUES (17305976,'NOT_CAPTURED','_lll',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); INSERT INTO `npc_list` VALUES (17305977,'_llm','_llm',0,-100.000,-2.000,-280.000,1,50,50,8,0,0,0,6147,0x0200000000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17305978,'NOT_CAPTURED','_lln',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); +INSERT INTO `npc_list` VALUES (17305978,'_lln','_lln',0,0.000,-2.000,-340.000,1,50,50,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,NULL,1); -- NC: INSERT INTO `npc_list` VALUES (17305979,'NOT_CAPTURED','_llo',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -- NC: INSERT INTO `npc_list` VALUES (17305980,'NOT_CAPTURED','_llp',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -- NC: INSERT INTO `npc_list` VALUES (17305981,'NOT_CAPTURED','_llq',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); @@ -16881,10 +16887,10 @@ INSERT INTO `npc_list` VALUES (17335008,'csnpc','Five Moons',0,0.000,0.000,0.000 INSERT INTO `npc_list` VALUES (17335009,'csnpc','Rainer',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000A0194109420643064406450BA6000700000,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17335010,'csnpc',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010003080E10012001302B402B50006000700000,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17335011,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); --- NC: INSERT INTO `npc_list` VALUES (17335012,'NOT_CAPTURED','Scraggy Gigas',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -INSERT INTO `npc_list` VALUES (17335013,'gian02','gian02',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x00000F0100000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17335014,'gian03','gian03',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x00000F0100000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17335015,'gian04','gian04',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x00000F0100000000000000000000000000000000,0,'WOTG',1); +INSERT INTO `npc_list` VALUES (17335012,'ScraggyGigas','Scraggy Gigas',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000820200000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335013,'gian02','gian02',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x00000F0100000000000000000000000000000000,0,'WOTG',1); +INSERT INTO `npc_list` VALUES (17335014,'gian03','gian03',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x00000F0100000000000000000000000000000000,0,'WOTG',1); +INSERT INTO `npc_list` VALUES (17335015,'gian04','gian04',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x00000F0100000000000000000000000000000000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17335016,'qm5','???',0,0.000,0.000,0.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'WOTG',0); INSERT INTO `npc_list` VALUES (17335017,'Louvairausse','Louvairausse',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010004030D10DD200D300C40DD50FB601B700000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17335018,'hei02','hei02',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010004030D10DD200D300C40DD50FB601B700000,0,'WOTG',1); @@ -16924,22 +16930,23 @@ INSERT INTO `npc_list` VALUES (17335051,'csnpc',' ',0,0.000,0.000,0.000,0,50 INSERT INTO `npc_list` VALUES (17335052,'nohei01','nohei01',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000504971028209730974097505C6100700000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17335053,'nohei02','nohei02',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000504971028209730974097505C6100700000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17335054,'nohei03','nohei03',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000504971028209730974097505C6100700000,0,'WOTG',1); --- NC: INSERT INTO `npc_list` VALUES (17335055,'NOT_CAPTURED','Gyari1',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335056,'NOT_CAPTURED','Gyari2',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335057,'NOT_CAPTURED','Gyari3',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335058,'NOT_CAPTURED','Gyari4',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335059,'NOT_CAPTURED','Gken1',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335060,'NOT_CAPTURED','Gken2',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335061,'NOT_CAPTURED','Gken3',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335062,'NOT_CAPTURED','Gken4',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335063,'NOT_CAPTURED','Zogbog',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335064,'NOT_CAPTURED','Leuonard',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335065,'NOT_CAPTURED','Gsibou1',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335066,'NOT_CAPTURED','Gsibou2',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335067,'NOT_CAPTURED','Gsibou3',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335068,'NOT_CAPTURED','Gsibou4',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -INSERT INTO `npc_list` VALUES (17335070,'Excenmille','Excenmille',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000CD0700000000000000000000000000000000,0,'WOTG',1); --- NC: INSERT INTO `npc_list` VALUES (17335071,'NOT_CAPTURED','sensya',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); +INSERT INTO `npc_list` VALUES (17335055,'Gyari1','Gyari1',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000FE0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335056,'Gyari2','Gyari2',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000FE0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335057,'Gyari3','Gyari3',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000FE0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335058,'Gyari4','Gyari4',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000FE0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335059,'Gken1','Gken1',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000FF0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335060,'Gken2','Gken2',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000FF0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335061,'Gken3','Gken3',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000FF0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335062,'Gken4','Gken4',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000FF0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335063,'Zogbog','Zogbog',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000700200000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335064,'Leuonard','Leuonard',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x01000A030C100C200C300C400C50D26000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335065,'Gsibou1','Gsibou1',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010006041D1021201A301D400D50CA6000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335066,'Gsibou2','Gsibou2',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010006041D1021201A301D400D500F611B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335067,'Gsibou3','Gsibou3',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010006041D1021201A301D400D50CA6000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335068,'Gsibou4','Gsibou4',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010006041D1021201A301D400D500F611B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335069,'NPC','NPC',0,0.000,0.000,0.000,0,50,50,0,0,0,2,25,0x0700210001000000010001000100000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335070,'Excenmille','Excenmille',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000CE0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335071,'sensya','sensya',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000720800000000000000000000000000000000,32,NULL,1); INSERT INTO `npc_list` VALUES (17335072,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17335073,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); -- NC: INSERT INTO `npc_list` VALUES (17335074,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); @@ -16957,31 +16964,32 @@ INSERT INTO `npc_list` VALUES (17335073,'blank',' ',0,0.000,0.000,0.000,0,50 -- NC: INSERT INTO `npc_list` VALUES (17335086,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -- NC: INSERT INTO `npc_list` VALUES (17335087,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); INSERT INTO `npc_list` VALUES (17335088,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); --- NC: INSERT INTO `npc_list` VALUES (17335089,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); +INSERT INTO `npc_list` VALUES (17335089,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000340000000000000000000000000000000000,0,NULL,1); INSERT INTO `npc_list` VALUES (17335090,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000340000000000000000000000000000000000,32,'WOTG',1); --- NC: INSERT INTO `npc_list` VALUES (17335091,'NOT_CAPTURED','Altennia',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335092,'NOT_CAPTURED','Phillieulais',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335093,'NOT_CAPTURED','Gissenne',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335094,'NOT_CAPTURED','01',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335095,'NOT_CAPTURED','02',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -INSERT INTO `npc_list` VALUES (17335096,'03','03',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0100000100100020003000400050006000700000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17335097,'04','04',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0100000100100020003000400050006000700000,0,'WOTG',1); --- NC: INSERT INTO `npc_list` VALUES (17335098,'NOT_CAPTURED','03',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335099,'NOT_CAPTURED','04',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335100,'NOT_CAPTURED','Excenmille',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335101,'NOT_CAPTURED','Excenmille',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335102,'NOT_CAPTURED','Klythios',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335103,'NOT_CAPTURED','Scraggy Gigas',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -INSERT INTO `npc_list` VALUES (17335104,'Ungainly_Gigas','Ungainly Gigas',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0100000100100020003000400050006000700000,0,'WOTG',1); --- NC: INSERT INTO `npc_list` VALUES (17335105,'NOT_CAPTURED','03',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); +INSERT INTO `npc_list` VALUES (17335091,'Altennia','Altennia',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000D60800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335092,'Phillieulais','Phillieulais',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010005034C104C20D9304C404C5019611D700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335093,'Gissenne','Gissenne',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000104141021203E301D400D50516100700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335094,'01','01',0,0.000,0.000,0.000,0,50,50,0,0,0,6,29,0x010003041D1021201A301D400D50CA6000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335095,'02','02',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x010007041D1021201A301D400D50CA6000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335096,'03','03',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010009041D1021201A301D400D50CA6000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335097,'04','04',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x010000041D1021201A301D400D50CA6000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335098,'03','03',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010002041D1021201A301D400D500F611B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335099,'04','04',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x010006041D1021201A301D400D500F611B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335100,'Excenmille','Excenmille',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000CE0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335101,'Excenmille','Excenmille',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000CE0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335102,'Klythios','Klythios',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000830200000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335103,'Scraggy_Gigas','Scraggy Gigas',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000820200000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335104,'Ungainly_Gigas','Ungainly Gigas',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000820200000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335105,'03','03',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000820200000000000000000000000000000000,32,NULL,1); -- NC: INSERT INTO `npc_list` VALUES (17335106,'NOT_CAPTURED','04',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335107,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -INSERT INTO `npc_list` VALUES (17335108,'A','A',0,74.179,-59.763,-50.774,1,40,40,0,0,8,2,2073,0x0700210000000000000001000000000000000000,0,'WOTG',1); --- NC: INSERT INTO `npc_list` VALUES (17335109,'NOT_CAPTURED','Orcish Bloodletter',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); +INSERT INTO `npc_list` VALUES (17335107,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2051,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17335108,'A','A',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000160400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335109,'Orcish_Bloodletter','Orcish Bloodletter',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17335110,'NPC','NPC',0,0.000,0.000,0.000,0,50,50,0,0,0,2,25,0x0700210001000000010001000100000000000000,32,NULL,1); INSERT INTO `npc_list` VALUES (17335111,'Compressed_Snow','Compressed Snow',76,46.437,-0.762,-370.178,1,50,50,0,0,0,0,515,0x0000340000000000000000000000000000000000,0,NULL,1); INSERT INTO `npc_list` VALUES (17335112,'Colossal_Footprint','Colossal Footprint',186,82.144,-19.038,139.249,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); --- NC: INSERT INTO `npc_list` VALUES (17335113,'NOT_CAPTURED','Charred Firewood',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335114,'NOT_CAPTURED','Rocky Perch',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); +INSERT INTO `npc_list` VALUES (17335113,'Charred_Firewood','Charred Firewood',140,83.296,-58.472,175.200,1,50,50,0,16,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17335114,'Rocky_Perch','Rocky Perch',51,-106.321,0.282,-365.035,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); INSERT INTO `npc_list` VALUES (17335115,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17335116,'Regal_Pawprints_1','Regal Pawprints',70,53.812,0.307,-299.136,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17335117,'Regal_Pawprints_2','Regal Pawprints',176,-15.066,-40.249,-217.276,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'WOTG',1); @@ -17022,7 +17030,7 @@ INSERT INTO `npc_list` VALUES (17335151,'Lady_Lilith','Lady Lilith',0,0.000,0.00 INSERT INTO `npc_list` VALUES (17335152,'Regal_Pawprints_8','Regal Pawprints',219,-145.266,-61.851,-174.171,32769,40,40,0,0,112,0,3,0x0000340000000000000000000000000000000000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17335153,'Regal_Pawprints_9','Regal Pawprints',243,54.437,-41.904,104.974,32769,40,40,0,0,112,0,3,0x0000340000000000000000000000000000000000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17335154,'Gate_Sentry','Gate Sentry',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',1); --- NC: INSERT INTO `npc_list` VALUES (17335155,'NOT_CAPTURED','???',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); +INSERT INTO `npc_list` VALUES (17335155,'???','???',0,121.607,-60.000,198.080,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); -- NC: INSERT INTO `npc_list` VALUES (17335156,'NOT_CAPTURED','Reinforcement',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -- NC: INSERT INTO `npc_list` VALUES (17335157,'NOT_CAPTURED','Reinforcement',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); INSERT INTO `npc_list` VALUES (17335158,'Allied_Commissary','Allied Commissary',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0100000500100020003000400050006000700000,0,'WOTG',1); @@ -17031,7 +17039,7 @@ INSERT INTO `npc_list` VALUES (17335159,'blank',' ',0,72.977,-59.913,-48.774 -- NC: INSERT INTO `npc_list` VALUES (17335161,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -- NC: INSERT INTO `npc_list` VALUES (17335162,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); -- NC: INSERT INTO `npc_list` VALUES (17335163,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); --- NC: INSERT INTO `npc_list` VALUES (17335164,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); +INSERT INTO `npc_list` VALUES (17335164,'csnpc',' ',0,74.179,-59.763,-50.774,1,50,50,0,0,8,2,2073,0x0700210000000000000001000000000000000000,32,NULL,1); INSERT INTO `npc_list` VALUES (17335165,'Watchful_Pixie','Watchful Pixie',96,-56.000,-0.300,-392.000,6,40,40,0,8,0,0,515,0x0000EE0700000000000000000000000000000000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17335166,'Jubilant_Pixie','Jubilant Pixie',32,-52.000,-0.700,-392.000,1,40,40,0,8,8,2,2563,0x0000EE0700000000000000000000000000000000,0,'WOTG',1); -- NC: INSERT INTO `npc_list` VALUES (17335167,'NOT_CAPTURED',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); @@ -17081,7 +17089,7 @@ INSERT INTO `npc_list` VALUES (17339016,'blank',' ',0,133.000,-22.165,-117.8 INSERT INTO `npc_list` VALUES (17339017,'Sleiney_CA','Sleiney, C.A.',32,203.461,-24.142,-202.764,23,40,40,0,0,0,0,27,0x01000D0196103920963096409650006000700000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17339018,'_3t0','_3t0',0,600.000,-2.250,-260.000,1,40,40,8,0,0,0,6147,0x0200000000000000000000000000000000000000,0,'WOTG',0); INSERT INTO `npc_list` VALUES (17339019,'_3t1','Zvahl Portcullis',0,-422.000,-46.250,20.000,1,40,40,9,0,0,0,4099,0x0200000000000000000000000000000000000000,0,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339020,'Forbidding_Portal','Forbidding Portal',0,320.000,-10.835,158.699,1,40,40,0,0,112,0,3,0x0000340000000000000000000000000000000000,0,'WOTG',1); +INSERT INTO `npc_list` VALUES (17339020,'Forbidding_Portal','Forbidding Portal',0,320.000,-10.835,158.699,32769,50,50,0,0,112,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); INSERT INTO `npc_list` VALUES (17339021,'NPC[8c]','',0,0.000,0.000,0.000,0,40,40,0,0,0,2,3,0x0000320000000000000000000000000000000000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17339022,'Moogle','Moogle',0,0.000,0.000,0.000,0,40,40,0,0,0,2,4194307,0x0000520000000000000000000000000000000000,0,'WOTG',0); INSERT INTO `npc_list` VALUES (17339023,'Moogle','Moogle',0,0.000,0.000,0.000,0,40,40,0,0,0,2,4194307,0x0000520000000000000000000000000000000000,0,'WOTG',0); @@ -17097,7 +17105,7 @@ INSERT INTO `npc_list` VALUES (17339032,'Ramblix','Ramblix',195,625.895,-0.720,- INSERT INTO `npc_list` VALUES (17339033,'Goblin_Footprint','Goblin Footprint',195,625.895,-0.720,-297.307,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'WOTG',0); INSERT INTO `npc_list` VALUES (17339034,'qm3','???',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',0); INSERT INTO `npc_list` VALUES (17339035,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339036,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); +INSERT INTO `npc_list` VALUES (17339036,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,NULL,1); INSERT INTO `npc_list` VALUES (17339037,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17339038,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17339039,'Nicolaus','Nicolaus',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0100070110832000308340835000600070000000,32,'WOTG',1); @@ -17118,24 +17126,24 @@ INSERT INTO `npc_list` VALUES (17339053,'blank',' ',0,0.000,0.000,0.000,0,40 INSERT INTO `npc_list` VALUES (17339054,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000F00200000000000000000000000000000000,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17339055,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,6,25,0x0700220001000000010001000100000000000000,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17339056,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0700220001000000010001000100000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339057,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,2,3,0x0000340000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339058,'qm','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000340000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339059,'Leuonard','Leuonard',0,0.000,0.000,0.000,0,40,40,0,0,0,6,2051,0x01000A030C100C200C300C400C50D26000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339060,'Oliverain','Oliverain',0,0.000,0.000,0.000,0,40,40,0,0,0,6,2051,0x010002030C100C200C300C400C50D26000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339061,'kisiC','kisiC',0,0.000,0.000,0.000,0,40,40,0,0,0,6,2051,0x010001030C100C200C300C400C50D26000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339062,'Dissaud','Dissaud',0,0.000,0.000,0.000,0,40,40,0,0,0,6,2051,0x010004030C100C200C300C400C50D26000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339063,'Ganathein','Ganathein',0,0.000,0.000,0.000,0,40,40,0,0,0,6,2051,0x010002030C100C200C300C400C50D26000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339064,'onoA','onoA',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339065,'Gorakbok','Gorakbok',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339066,'Voshekglok','Voshekglok',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339067,'tueA','tueA',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339068,'tueB','tueB',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339069,'tueC','tueC',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339070,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,6,2075,0x0000470500000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339071,'qm5','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000340000000000000000000000000000000000,0,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339072,'Rongelouts_N_Distaud','Rongelouts N Distaud',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000F0338102920D9300C40501F610070000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339073,'Kingslayer_Doggvdegg','Kingslayer Doggvdegg',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x00001B0800000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339074,'Phillieulais','Phillieulais',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010005034C104C20D9304C404C5049611D700000,32,'WOTG',1); +INSERT INTO `npc_list` VALUES (17339057,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339058,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339059,'Leuonard','Leuonard',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x01000A030C100C200C300C400C50D26000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339060,'Oliverain','Oliverain',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010002030C100C200C300C400C50D26000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339061,'kisiC','kisiC',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010001030C100C200C300C400C50D26000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339062,'Dissaud','Dissaud',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010004030C100C200C300C400C50D26000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339063,'Ganathein','Ganathein',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010002030C100C200C300C400C50D26000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339064,'onoA','onoA',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339065,'Gorakbok','Gorakbok',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339066,'Voshekglok','Voshekglok',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339067,'tueA','tueA',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339068,'tueB','tueB',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339069,'tueC','tueC',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339070,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2075,0x0000470500000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339071,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339072,'Rongelouts_N_Distaud','Rongelouts N Distaud',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000F0338102920D9300C400C501F6100700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339073,'Kingslayer_Doggvdegg','Kingslayer Doggvdegg',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x00001B0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339074,'Phillieulais','Phillieulais',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010005034C104C20D9304C404C5019611D700000,32,NULL,1); INSERT INTO `npc_list` VALUES (17339075,'Enguerrand','Enguerrand',0,0.000,0.000,0.000,0,40,40,0,0,0,6,2075,0x010009030C100C200C300C400C50D26000700000,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17339076,'Alpho2','Alpho2',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010002033C103C20D930D940D950D16000700000,32,'WOTG',1); -- NC: INSERT INTO `npc_list` VALUES (17339077,'NOT_CAPTURED','Cavernous Maw',0,0.000,0.000,0.000,0,50,50,0,0,0,0,0,0x0000320000000000000000000000000000000000,0,NULL,0); @@ -17153,78 +17161,78 @@ INSERT INTO `npc_list` VALUES (17339088,'akaG','akaG',0,0.000,0.000,0.000,0,40,4 INSERT INTO `npc_list` VALUES (17339089,'akaH','akaH',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000E030C100C200C300C400C50D26000700000,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17339090,'akaI','akaI',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010010030C100C200C300C400C50D26000700000,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17339091,'akaJ','akaJ',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010005030C100C200C300C400C50D26000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339092,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339093,'Excenmille','Excenmille',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000CE0800000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339094,'Phillieulais','Phillieulais',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010005034C104C20D9304C404C5019611D700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339095,'Jayramus','Jayramus',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000603051028200C300C400C50D26000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339096,'Kingslayer_Doggvdegg','Kingslayer Doggvdegg',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x00001B0800000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339097,'Rahal','Rahal',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000D30800000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339098,'Cyranuce','Cyranuce',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000EF0800000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339099,'Bistillot','Bistillot',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000AC0100000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339100,'Gissenne','Gissenne',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000104141021203E301D400D50516100700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339101,'Animal_Spoor','Animal Spoor',206,543.954,-0.522,-290.313,1,40,40,0,0,0,0,1027,0x0000340000000000000000000000000000000000,32,'WOTG',1); +INSERT INTO `npc_list` VALUES (17339092,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339093,'Excenmille','Excenmille',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000CE0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339094,'Phillieulais','Phillieulais',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010005034C104C20D9304C404C5019611D700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339095,'Jayramus','Jayramus',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x01000603051028200C300C400C50D26000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339096,'Kingslayer_Doggvdegg','Kingslayer Doggvdegg',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x00001B0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339097,'Rahal','Rahal',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000D30800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339098,'Cyranuce','Cyranuce',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x0000EF0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339099,'Bistillot','Bistillot',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x0000AC0100000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339100,'Gissenne','Gissenne',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000104141021203E301D400D50516100700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339101,'Animal_Spoor','Animal Spoor',206,543.954,-0.522,-290.313,1,50,50,0,8,0,0,1027,0x0000340000000000000000000000000000000000,0,NULL,1); INSERT INTO `npc_list` VALUES (17339102,'Wheel_Rut','Wheel Rut',36,345.162,-0.743,-309.161,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339103,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339104,'Alainasion','Alainasion',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010009033810DD200C300C400C50FB6000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339105,'Hersaume','Hersaume',0,0.000,0.000,0.000,0,40,40,0,0,0,6,25,0x01000B033810DD200C300C400C50FB6000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339106,'Alphonimile','Alphonimile',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0100020300103C200030D940D950006000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339107,'Altennia','Altennia',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000D60800000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339108,'Leuonard','Leuonard',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000A030C100C200C300C400C50D26000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339109,'kisiB','kisiB',0,0.000,0.000,0.000,0,40,40,0,0,0,6,2075,0x010002030C100C200C300C400C50D26000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339110,'kisiC','kisiC',0,0.000,0.000,0.000,0,40,40,0,0,0,6,2075,0x010004030C100C200C300C400C50D26000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339111,'kisiD','kisiD',0,0.000,0.000,0.000,0,40,40,0,0,0,6,2075,0x010006030C100C200C300C400C50D26000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339112,'kisiE','kisiE',0,0.000,0.000,0.000,0,40,40,0,0,0,6,2075,0x010008030C100C200C300C400C50D26000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339113,'kisi01','kisi01',0,0.000,0.000,0.000,0,40,40,0,0,0,6,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339114,'kisi02','kisi02',0,0.000,0.000,0.000,0,40,40,0,0,0,0,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339115,'kisi03','kisi03',0,0.000,0.000,0.000,0,40,40,0,0,0,0,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339116,'kisi04','kisi04',0,0.000,0.000,0.000,0,40,40,0,0,0,0,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339117,'kisi05','kisi05',0,0.000,0.000,0.000,0,40,40,0,0,0,0,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339118,'kisi06','kisi06',0,0.000,0.000,0.000,0,40,40,0,0,0,0,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339119,'kisi07','kisi07',0,0.000,0.000,0.000,0,40,40,0,0,0,0,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339120,'kisi08','kisi08',0,0.000,0.000,0.000,0,40,40,0,0,0,0,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339121,'kisi09','kisi09',0,0.000,0.000,0.000,0,40,40,0,0,0,0,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339122,'01','01',0,0.000,0.000,0.000,0,40,40,0,0,0,6,29,0x010003041D1021201A301D400D50CA6000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339123,'02','02',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010007041D1021201A301D400D50CA6000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339124,'03','03',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010009041D1021201A301D400D50CA6000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339125,'04','04',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010006041D1021201A301D400D50CA6000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339126,'NPC[f1]','',0,0.000,0.000,0.000,0,40,40,0,0,0,2,25,0x0700210001000000010001000100000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339127,'NPC[f2]','',0,0.000,0.000,0.000,0,40,40,0,0,0,2,25,0x0700210001000000010001000100000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339128,'NPC[f3]','',0,0.000,0.000,0.000,0,40,40,0,0,0,2,25,0x0700210001000000010001000100000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339129,'NPC[f4]','',0,0.000,0.000,0.000,0,40,40,0,0,0,2,25,0x0700210001000000010001000100000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339130,'Zogbog','Zogbog',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000700200000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339131,'Rivetpounder_Mekglok','Rivetpounder Mekglok',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000660200000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339132,'qm6','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339133,'qm8','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339134,'qm9','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339135,'qm10','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339136,'qm11','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339137,'qm12','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339138,'qm13','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339139,'qm14','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339140,'qm15','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339141,'qm16','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339142,'qm17','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339143,'qm18','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339144,'qm19','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339145,'qm20','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339146,'qm21','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339147,'02','02',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339148,'03','03',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339149,'04','04',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339150,'05','05',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339151,'06','06',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339152,'07','07',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339153,'08','08',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339154,'09','09',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339155,'10','10',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339156,'11','11',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339157,'12','12',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339158,'13','13',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339159,'14','14',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339160,'15','15',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339161,'qm22','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339162,'qm23','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',0); -INSERT INTO `npc_list` VALUES (17339163,'qm24','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000032000000000000000000000000000000000,0,'WOTG',0); +INSERT INTO `npc_list` VALUES (17339103,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339104,'Alainasion','Alainasion',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010009033810DD200C300C400C50FB6000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339105,'Hersaume','Hersaume',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x01000B033810DD200C300C400C50FB6000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339106,'Alphonimile','Alphonimile',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0100020300103C200030D940D950006000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339107,'Altennia','Altennia',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000D60800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339108,'Leuonard','Leuonard',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x01000A030C100C200C300C400C50D26000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339109,'kisiB','kisiB',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010002030C100C200C300C400C50D26000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339110,'kisiC','kisiC',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010004030C100C200C300C400C50D26000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339111,'kisiD','kisiD',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010006030C100C200C300C400C50D26000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339112,'kisiE','kisiE',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010008030C100C200C300C400C50D26000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339113,'kisi01','kisi01',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339114,'kisi02','kisi02',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339115,'kisi03','kisi03',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339116,'kisi04','kisi04',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339117,'kisi05','kisi05',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339118,'kisi06','kisi06',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339119,'kisi07','kisi07',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339120,'kisi08','kisi08',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339121,'kisi09','kisi09',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010008030D10DD200D300C40DD50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339122,'01','01',0,0.000,0.000,0.000,0,50,50,0,0,0,6,29,0x010003041D1021201A301D400D50CA6000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339123,'02','02',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x010007041D1021201A301D400D50CA6000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339124,'03','03',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010009041D1021201A301D400D50CA6000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339125,'04','04',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x010006041D1021201A301D400D50CA6000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339126,'NPC','NPC',0,0.000,0.000,0.000,0,50,50,0,0,0,2,25,0x0700210001000000010001000100000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339127,'NPC','NPC',0,0.000,0.000,0.000,0,50,50,0,0,0,2,25,0x0700210001000000010001000100000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339128,'NPC','NPC',0,0.000,0.000,0.000,0,50,50,0,0,0,2,25,0x0700210001000000010001000100000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339129,'NPC','NPC',0,0.000,0.000,0.000,0,50,50,0,0,0,2,25,0x0700210001000000010001000100000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339130,'Zogbog','Zogbog',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000700200000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339131,'Rivetpounder_Mekglok','Rivetpounder Mekglok',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000660200000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339132,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339133,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339134,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339135,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339136,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339137,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339138,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339139,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339140,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339141,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339142,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339143,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000170400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339144,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000190400000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339145,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339146,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339147,'02','02',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339148,'03','03',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339149,'04','04',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339150,'05','05',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339151,'06','06',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339152,'07','07',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339153,'08','08',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339154,'09','09',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339155,'10','10',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339156,'11','11',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339157,'12','12',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339158,'13','13',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339159,'14','14',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339160,'15','15',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339161,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339162,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339163,'???','???',0,0.000,0.000,0.000,0,50,50,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,NULL,1); INSERT INTO `npc_list` VALUES (17339164,'qm25','???',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',0); INSERT INTO `npc_list` VALUES (17339165,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17339166,'Gate_Sentry','Gate Sentry',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000320000000000000000000000000000000000,0,'WOTG',1); @@ -17238,23 +17246,23 @@ INSERT INTO `npc_list` VALUES (17339173,'blank',' ',0,0.000,0.000,0.000,0,40 INSERT INTO `npc_list` VALUES (17339174,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0100000100100020003000400050006000700000,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17339175,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0100000100100020003000400050006000700000,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17339176,'blank',' ',128,137.152,-22.066,-114.424,1,40,40,0,0,8,2,2073,0x0700210000000000000001000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339177,'Watchful_Pixie','Watchful Pixie',128,440.000,-0.100,-28.000,6,40,40,0,8,0,0,515,0x0000EE0700000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339178,'Jubilant_Pixie','Jubilant Pixie',32,434.000,-0.300,-30.000,1,40,40,0,8,8,2,2563,0x0000EE0700000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339179,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339180,'Vinairy','Vinairy',0,0.000,0.000,0.000,0,40,40,0,0,0,6,2051,0x010000030C100C200C300C400C50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339181,'kisiB','kisiB',0,0.000,0.000,0.000,0,40,40,0,0,0,6,2051,0x010002030C100C200C300C400C50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339182,'kisiC','kisiC',0,0.000,0.000,0.000,0,40,40,0,0,0,6,2051,0x010004030C100C200C300C400C50FB6000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339183,'kisiD','kisiD',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); +INSERT INTO `npc_list` VALUES (17339177,'Watchful_Pixie','Watchful Pixie',212,440.000,-0.100,-28.000,6,50,50,0,8,0,0,515,0x0000EE0700000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339178,'Jubilant_Pixie','Jubilant Pixie',32,434.000,-0.300,-30.000,1,50,50,0,8,8,2,2563,0x0000EE0700000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339179,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339180,'Vinairy','Vinairy',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010000030C100C200C300C400C50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339181,'kisiB','kisiB',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010002030C100C200C300C400C50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339182,'kisiC','kisiC',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010004030C100C200C300C400C50FB6000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339183,'kisiD','kisiD',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010006030C100C200C300C400C50FB601B700000,32,NULL,1); INSERT INTO `npc_list` VALUES (17339184,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339185,'Ironcretht_Hawk_01','Ironcretht Hawk 01',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000FA0800000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339186,'ex05','ex05',0,0.000,0.000,0.000,0,40,40,0,0,0,6,25,0x01000503DD10DD20DD30DD40DD50FA601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339187,'ex06','ex06',0,0.000,0.000,0.000,0,40,40,0,0,0,6,25,0x010004030D10DD200D300C40DD50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339188,'ex07','ex07',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000C0315100D20DD30DD40DD50D36000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339189,'ex08','ex08',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000103DD100D20DD30DD40DD50D36000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339190,'ex01','ex01',0,0.000,0.000,0.000,0,40,40,0,0,0,6,25,0x01000303DD10DD20DD30DD40DD50FA601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339191,'ex02','ex02',0,0.000,0.000,0.000,0,40,40,0,0,0,6,25,0x01000D030D10DD200D300C40DD50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339192,'ex03','ex03',0,0.000,0.000,0.000,0,40,40,0,0,0,6,25,0x0100080415100D20DD30DD40DD50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339193,'ex04','ex04',0,0.000,0.000,0.000,0,40,40,0,0,0,6,25,0x01000203DD10DD200D30DD40DD50FB601B700000,32,'WOTG',1); +INSERT INTO `npc_list` VALUES (17339185,'Ironcretht_Hawk_01','Ironcretht Hawk 01',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000FA0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339186,'ex05','ex05',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x01000503DD10DD20DD30DD40DD50FA601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339187,'ex06','ex06',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x010004030D10DD200D300C40DD50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339188,'ex07','ex07',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000C0315100D20DD30DD40DD50D36000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339189,'ex08','ex08',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000103DD100D20DD30DD40DD50D36000700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339190,'ex01','ex01',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x01000303DD10DD20DD30DD40DD50FA601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339191,'ex02','ex02',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x01000D030D10DD200D300C40DD50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339192,'ex03','ex03',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x0100080415100D20DD30DD40DD50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339193,'ex04','ex04',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x01000203DD10DD200D30DD40DD50FB601B700000,32,NULL,1); INSERT INTO `npc_list` VALUES (17339194,'Irin_01','Irin 01',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010004019510A220A230A240A250BC6000700000,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17339195,'Irin_02','Irin 02',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010002019510A220A230A240A250BC6019700000,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17339196,'Irin_03','Irin 03',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010005019510A220A230A240A250BC60B7700000,32,'WOTG',1); @@ -17279,23 +17287,23 @@ INSERT INTO `npc_list` VALUES (17339214,'blank',' ',0,0.000,0.000,0.000,0,40 INSERT INTO `npc_list` VALUES (17339215,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17339216,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17339217,'blank',' ',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339218,'Rally_Point_Red','Rally Point: Red',187,-106.070,-25.500,-52.841,32769,40,40,0,0,0,0,515,0x0000340000000000000000000000000000000000,0,'WOTG',1); +INSERT INTO `npc_list` VALUES (17339218,'Rally_Point_Red','Rally Point: Red',187,-106.071,-25.500,-52.841,32769,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,NULL,1); INSERT INTO `npc_list` VALUES (17339219,'Rally_Point_Blue','Rally Point: Blue',202,135.783,-17.151,-23.819,32769,40,40,0,0,0,0,515,0x0000340000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339220,'Rally_Point_Green','Rally Point: Green',57,54.013,-23.402,-203.103,32769,40,40,0,0,0,0,515,0x0000340000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339221,'Lilisette','Lilisette',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000E70800000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339222,'Lady_Lilith','Lady Lilith',0,0.000,0.000,0.000,0,40,40,0,0,0,6,3,0x0000F10800000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339223,'Cait_Sith','Cait Sith',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000CF0800000000000000000000000000000000,32,'WOTG',1); +INSERT INTO `npc_list` VALUES (17339220,'Rally_Point_Green','Rally Point: Green',57,54.013,-23.402,-203.103,32769,50,50,0,0,0,0,515,0x0000340000000000000000000000000000000000,0,NULL,1); +INSERT INTO `npc_list` VALUES (17339221,'Lilisette','Lilisette',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000E70800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339222,'Lady_Lilith','Lady Lilith',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000F10800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339223,'Cait_Sith','Cait Sith',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000CF0800000000000000000000000000000000,32,NULL,1); INSERT INTO `npc_list` VALUES (17339224,'Cavernous_Maw','Cavernous Maw',0,0.000,0.000,0.000,32768,40,40,0,0,0,6,3,0x0000340000000000000000000000000000000000,0,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339225,'Ragelise','Ragelise',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000B031B10D920D930D940D950FA601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339226,'Cousseraux','Cousseraux',0,0.000,0.000,0.000,0,40,40,0,0,0,6,29,0x01000E03A410D920D930D940D950726100700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339227,'Vestillet','Vestillet',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010002030010D9200D300C40DD50FA601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339228,'Mayakov','Mayakov',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000201D210D220D230D240D250006000700000,32,'WOTG',1); +INSERT INTO `npc_list` VALUES (17339225,'Ragelise','Ragelise',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000B031B10D920D930D940D950FA601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339226,'Cousseraux','Cousseraux',0,0.000,0.000,0.000,0,50,50,0,0,0,6,29,0x01000E03A410D920D930D940D950726100700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339227,'Vestillet','Vestillet',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010002030010D9200D300C40DD50FA601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339228,'Mayakov','Mayakov',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x01000201D210D220D230D240D250006000700000,32,NULL,1); INSERT INTO `npc_list` VALUES (17339229,'Portia','Portia',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01001B020010D320D330D340D3507B6100700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339230,'Clovis','Clovis',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010003030C100C200C300C400C50FB601B700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339231,'Gregoirion','Gregoirion',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010008030C100C200C300C400C50FB601B700000,32,'WOTG',1); +INSERT INTO `npc_list` VALUES (17339230,'Clovis','Clovis',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x010003030C100C200C300C400C50FB601B700000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339231,'Gregoirion','Gregoirion',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x010008030C100C200C300C400C50FB601B700000,32,NULL,1); INSERT INTO `npc_list` VALUES (17339232,'Henrinaud','Henrinaud',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000D030C100C200C300C400C50FB601B700000,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17339233,'Larzos','Larzos',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000B08A110DE20013006400150B96100700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339234,'Ethelbert','Ethelbert',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010005039610DD20DD30DD40DD50FA601B700000,32,'WOTG',1); +INSERT INTO `npc_list` VALUES (17339234,'Ethelbert','Ethelbert',0,0.000,0.000,0.000,0,50,50,0,0,0,6,2075,0x010005039610DD20DD30DD40DD50FA601B700000,32,NULL,1); INSERT INTO `npc_list` VALUES (17339235,'Bartholomaus','Bartholomaus',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010000014910A220A230A240A250B5602C700000,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17339236,'Elivira_Gogol','Elivira Gogol',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01001A0200104920493049404950B96000705580,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17339237,'Adelheid','Adelheid',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000002D610D620D630D640D650676100700000,32,'WOTG',1); @@ -17312,11 +17320,11 @@ INSERT INTO `npc_list` VALUES (17339247,'Lutete','Lutete',0,0.000,0.000,0.000,0, INSERT INTO `npc_list` VALUES (17339248,'Ghyo_Molkot','Ghyo Molkot',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000107B7108920B7300F40AC50286000700000,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17339249,'Putori-Tutori','Putori-Tutori',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x010003054B104B204B304B404B504E6100700000,32,'WOTG',1); INSERT INTO `npc_list` VALUES (17339250,'Atori-Tutori','Atori-Tutori',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0100020500101120003000400050006000700000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339251,'Shadow_Lord','Shadow Lord',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x00007C0800000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339252,'Haudrale','Haudrale',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000E50800000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339253,'Aquila','Aquila',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000E60800000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339254,'Larzos','Larzos',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000FB0800000000000000000000000000000000,32,'WOTG',1); -INSERT INTO `npc_list` VALUES (17339255,'Flit','Flit',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000BC0800000000000000000000000000000000,32,'WOTG',1); +INSERT INTO `npc_list` VALUES (17339251,'Shadow_Lord','Shadow Lord',0,0.000,0.000,0.000,0,50,60,0,0,0,6,27,0x00007C0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339252,'Haudrale','Haudrale',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000E50800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339253,'Aquila','Aquila',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000E60800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339254,'Larzos','Larzos',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000FB0800000000000000000000000000000000,32,NULL,1); +INSERT INTO `npc_list` VALUES (17339255,'Flit','Flit',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000BC0800000000000000000000000000000000,32,NULL,1); INSERT INTO `npc_list` VALUES (17339256,'Veridical_Conflux','Veridical Conflux',199,239.183,-8.337,-248.447,1,40,40,0,0,96,0,3,0x0000110900000000000000000000000000000000,2,'WOTG',1); INSERT INTO `npc_list` VALUES (17339257,'blank',' ',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'WOTG',1); INSERT INTO `npc_list` VALUES (17339258,'Kupofried','Kupofried',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2075,0x0000610900000000000000000000000000000000,32,'WOTG',1); @@ -23957,31 +23965,31 @@ INSERT INTO `npc_list` VALUES (17649909,'Ethereal_Junction','Ethereal Junction', -- INSERT INTO `npc_list` VALUES (17658296,'Sturdy_Pyxis_Mimic','Sturdy Pyxis',0,-513.952,-4.649,193.686,9,40,40,0,12,100,2,4737,0x00000B0100000000000000000000000000000000,0,'ABYSSEA',1); -- INSERT INTO `npc_list` VALUES (17658297,'Sturdy_Pyxis_Mimic','Sturdy Pyxis',0,-102.380,-11.568,166.505,10,40,40,0,12,100,2,4737,0x00000B0100000000000000000000000000000000,0,'ABYSSEA',1); -- End mimics -INSERT INTO `npc_list` VALUES (17658351,'qm1','???',0,401.489,19.730,-282.864,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658352,'qm2','???',0,233.162,19.720,-243.255,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658353,'qm3','???',0,281.063,20.376,174.011,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658354,'qm4','???',0,-132.253,0.015,0.753,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658355,'qm5','???',0,-403.909,-4.234,200.832,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658356,'qm6','???',0,-158.000,-0.340,220.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658357,'qm7','???',0,-545.043,-12.410,-72.175,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658358,'qm8','???',0,-401.612,3.738,-200.972,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658359,'qm9','???',0,-280.000,-4.000,-38.516,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658360,'qm10','???',0,214.107,19.970,-93.816,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658361,'qm11','???',0,410.304,19.500,13.227,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658362,'qm12','???',0,198.045,20.122,108.705,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658363,'qm13','???',0,481.096,20.000,39.549,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658364,'qm14','???',0,-538.207,-6.640,-25.722,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658365,'qm15','???',0,-404.436,-4.000,246.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658366,'qm16','???',0,350.692,19.455,209.839,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658367,'qm17','???',0,439.939,19.820,-194.226,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658368,'qm18','???',0,-530.208,-5.460,-39.323,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658369,'qm19','???',0,-389.437,-4.000,246.001,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658370,'qm20','???',0,361.193,20.005,199.340,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658371,'qm21','???',0,424.940,20.220,-194.227,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658372,'qm22','???',0,-546.908,-4.640,-12.633,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658373,'qm23','???',0,-396.937,-3.000,259.001,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658374,'qm24','???',0,340.193,20.005,220.340,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17658375,'qm25','???',0,439.940,21.020,-179.227,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658351,'qm_granite_borer','???',0,401.489,19.730,-282.864,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658352,'qm_blazing_eruca','???',0,233.162,19.720,-243.255,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658353,'qm_pallid_percy','???',0,281.063,20.376,174.011,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658354,'qm_gaizkin','???',0,-132.253,0.015,0.753,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658355,'qm_kharon','???',0,-403.909,-4.234,200.832,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658356,'qm_drekavac','???',0,-158.000,-0.340,220.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658357,'qm_svarbhanu','???',0,-545.043,-12.410,-72.175,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658358,'qm_kampe','???',0,-401.612,3.738,-200.972,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658359,'qm_berstuk','???',0,-280.000,-4.000,-38.516,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658360,'qm_maahes','???',0,214.107,19.970,-93.816,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658361,'qm_nightshade','???',0,410.304,19.500,13.227,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658362,'qm_wherwetrice','???',0,198.045,20.122,108.705,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658363,'qm_mielikki','???',0,481.096,20.000,39.549,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658364,'qm_smok_1','???',0,-538.207,-6.640,-25.722,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658365,'qm_titlacauan_1','???',0,-404.436,-4.000,246.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658366,'qm_ulhuadshi_1','???',0,350.692,19.455,209.839,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658367,'qm_itzpapalotl_1','???',0,439.939,19.820,-194.226,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658368,'qm_smok_2','???',0,-530.208,-5.460,-39.323,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658369,'qm_titlacauan_2','???',0,-389.437,-4.000,246.001,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658370,'qm_ulhuadshi_2','???',0,361.193,20.005,199.340,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658371,'qm_itzpapalotl_2','???',0,424.940,20.220,-194.227,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658372,'qm_smok_3','???',0,-546.908,-4.640,-12.633,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658373,'qm_titlacauan_3','???',0,-396.937,-3.000,259.001,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658374,'qm_ulhuadshi_3','???',0,340.193,20.005,220.340,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17658375,'qm_itzpapalotl_3','???',0,439.940,21.020,-179.227,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); INSERT INTO `npc_list` VALUES (17658376,'Achieve_Master','Achieve Master',0,0.000,0.000,0.000,0,50,50,0,0,0,2,3,0x0000320000000000000000000000000000000000,0,'SOA',0); INSERT INTO `npc_list` VALUES (17658377,'Unity_Master','Unity Master',0,0.000,0.000,0.000,0,50,50,0,0,96,2,2051,0x0000340000000000000000000000000000000000,0,'SOA',0); @@ -24784,28 +24792,28 @@ INSERT INTO `npc_list` VALUES (17666804,'Moogle','Moogle',0,0.000,0.000,0.000,0, -- INSERT INTO `npc_list` VALUES (17670549,'Sturdy_Pyxis_Mimic','Sturdy Pyxis',0,-234.350,0.303,-378.859,10,40,40,0,12,100,2,4739,0x00000B0100000000000000000000000000000000,0,'ABYSSEA',0); -- INSERT INTO `npc_list` VALUES (17670550,'Sturdy_Pyxis_Mimic','Sturdy Pyxis',0,-60.361,-0.074,-204.559,8,40,40,0,12,100,2,4739,0x00000B0100000000000000000000000000000000,0,'ABYSSEA',0); -- End mimics -INSERT INTO `npc_list` VALUES (17670591,'qm1','???',0,-744.000,-17.000,-696.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670592,'qm2','???',0,-558.000,0.000,161.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670593,'qm3','???',0,-71.000,0.000,408.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670594,'qm4','???',0,-491.000,0.000,-611.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670595,'qm5','???',0,-877.000,-8.000,-524.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670596,'qm6','???',0,-314.000,0.001,308.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670597,'qm7','???',0,-408.000,1.000,-299.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670598,'qm8','???',0,36.000,0.000,-240.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670599,'qm9','???',0,-56.000,1.000,123.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670600,'qm10','???',0,-608.000,-1.000,-397.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670601,'qm11','???',0,-812.000,-9.000,-379.000,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670602,'qm12','???',0,-400.000,0.000,112.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670603,'qm13','???',0,-221.000,1.000,-335.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670604,'qm14','???',0,91.000,-1.000,-140.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670605,'qm15','???',0,-801.000,-7.800,-368.000,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670606,'qm16','???',0,-400.000,0.900,97.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670607,'qm17','???',0,-221.000,0.800,-350.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670608,'qm18','???',0,102.000,0.000,-151.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670609,'qm19','???',0,-823.000,-8.400,-390.000,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670610,'qm20','???',0,-400.000,0.150,127.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670611,'qm21','???',0,-221.000,0.950,-320.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); -INSERT INTO `npc_list` VALUES (17670612,'qm22','???',0,80.000,0.250,-129.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670591,'qm_ironclad_smiter','???',0,-744.000,-17.000,-696.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670592,'qm_amarok','???',0,-558.000,0.000,161.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670593,'qm_shaula','???',0,-71.000,0.000,408.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670594,'qm_emperador_de_altepa','???',0,-491.000,0.000,-611.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670595,'qm_tablilla','???',0,-877.000,-8.000,-524.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670596,'qm_sharabha','???',0,-314.000,0.001,308.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670597,'qm_waugyl','???',0,-408.000,1.000,-299.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670598,'qm_chickcharney','???',0,36.000,0.000,-240.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670599,'qm_vadleany','???',0,-56.000,1.000,123.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670600,'qm_bugul_noz','???',0,-608.000,-1.000,-397.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670601,'qm_rani_1','???',0,-812.000,-9.000,-379.000,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670602,'qm_orthus_1','???',0,-400.000,0.000,112.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670603,'qm_dragua_1','???',0,-221.000,1.000,-335.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670604,'qm_bennu_1','???',0,91.000,-1.000,-140.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670605,'qm_rani_2','???',0,-801.000,-7.800,-368.000,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670606,'qm_orthus_2','???',0,-400.000,0.900,97.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670607,'qm_dragua_2','???',0,-221.000,0.800,-350.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670608,'qm_bennu_2','???',0,102.000,0.000,-151.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670609,'qm_rani_3','???',0,-823.000,-8.400,-390.000,1,50,50,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670610,'qm_orthus_3','???',0,-400.000,0.150,127.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670611,'qm_dragua_3','???',0,-221.000,0.950,-320.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); +INSERT INTO `npc_list` VALUES (17670612,'qm_bennu_3','???',0,80.000,0.250,-129.000,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'ABYSSEA',0); INSERT INTO `npc_list` VALUES (17670613,'Achieve_Master','Achieve Master',0,0.000,0.000,0.000,0,50,50,0,0,0,2,3,0x0000320000000000000000000000000000000000,0,'SOA',0); INSERT INTO `npc_list` VALUES (17670614,'Unity_Master','Unity Master',0,0.000,0.000,0.000,0,50,50,0,0,96,2,2051,0x0000340000000000000000000000000000000000,0,'SOA',0); INSERT INTO `npc_list` VALUES (17670616,'NPC[1d8]','',0,0.000,-0.500,0.000,0,50,50,0,0,0,2,1,0x0000320000000000000000000000000000000000,0,'ABYSSEA',0); diff --git a/sql/pet_list.sql b/sql/pet_list.sql index 666aa053ef0..b45091082b7 100644 --- a/sql/pet_list.sql +++ b/sql/pet_list.sql @@ -101,3 +101,4 @@ INSERT INTO `pet_list` VALUES (72, 'StormwakerFrame', 5127, 1, 99, 0, 0); -- INSERT INTO `pet_list` VALUES (73, 'AdventuringFellow', 0, 1, 99, 0, 0); -- 74 is Chocobo in the enum.. INSERT INTO `pet_list` VALUES (75, 'Luopan', 6040, 1, 99, 0, 0); +INSERT INTO `pet_list` VALUES (76, 'Siren', 7041, 1, 99, 0, 0); diff --git a/sql/pet_skills.sql b/sql/pet_skills.sql new file mode 100644 index 00000000000..869a6c61702 --- /dev/null +++ b/sql/pet_skills.sql @@ -0,0 +1,39 @@ +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; + +-- +-- Table structure for `pet_skills` +-- + +--- pet_skill_id is intended to map 1:1 with a real player id, i.e. "Welt" on this table would have the same id as "Welt" on abilities.sql +DROP TABLE IF EXISTS `pet_skills`; +CREATE TABLE `pet_skills` ( + `pet_skill_id` smallint(4) unsigned NOT NULL, + `pet_anim_id` smallint(4) unsigned NOT NULL, + `pet_skill_name` varchar(40) CHARACTER SET latin1 NOT NULL, + `pet_skill_aoe` tinyint(1) unsigned NOT NULL DEFAULT 0, + `pet_skill_distance` float(3,1) NOT NULL DEFAULT 6.0, + `pet_anim_time` smallint(4) unsigned NOT NULL DEFAULT 2000, + `pet_prepare_time` smallint(4) unsigned NOT NULL DEFAULT 1000, + `pet_valid_targets` smallint(4) unsigned NOT NULL DEFAULT 4, + `pet_message` smallint(5) unsigned NOT NULL DEFAULT 0, + `pet_skill_flag` tinyint(1) unsigned NOT NULL DEFAULT 0, + `pet_skill_param` smallint(5) NOT NULL DEFAULT 0, + `pet_skill_finish_category` smallint(5) NOT NULL DEFAULT 11, + `knockback` tinyint(1) NOT NULL DEFAULT 0, + `primary_sc` tinyint(4) NOT NULL DEFAULT 0, + `secondary_sc` tinyint(4) NOT NULL DEFAULT 0, + `tertiary_sc` tinyint(4) NOT NULL DEFAULT 0, + PRIMARY KEY (`pet_skill_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Table contents for `pet_skills` +-- + +-- Siren +INSERT INTO `pet_skills` VALUES (961,176,'welt',0,6.0,2000,1000,4,317,68,0,13,0,0,0,0); diff --git a/sql/spell_list.sql b/sql/spell_list.sql index 663476f5acc..67e605bb7b9 100644 --- a/sql/spell_list.sql +++ b/sql/spell_list.sql @@ -404,7 +404,7 @@ INSERT INTO `spell_list` VALUES (351,'dokumori_ni',0x000000000000000000000000000 INSERT INTO `spell_list` VALUES (352,'dokumori_san',0x00000000000000000000000000000000000000000000,4,100,6,0,4,39,1191,2500,60000,237,267,352,2000,0,105,1.00,20,100,0,164,NULL); INSERT INTO `spell_list` VALUES (353,'tonko_ichi',0x00000000000000000000000009000000000000000000,4,101,3,0,1,39,1194,1500,30000,0,0,353,2000,0,10,1.00,1,0,0,0,NULL); INSERT INTO `spell_list` VALUES (354,'tonko_ni',0x00000000000000000000000022000000000000000000,4,101,3,0,1,39,1194,1500,45000,0,0,354,2000,0,78,1.00,1,0,0,0,NULL); -INSERT INTO `spell_list` VALUES (355,'tonko_san',0x00000000000000000000000000000000000000000000,4,101,3,0,1,39,1194,2500,60000,0,0,355,2000,0,105,1.00,0,0,0,0,NULL); +INSERT INTO `spell_list` VALUES (355,'siren',0x00000000000000000000000000000100000000000000,5,86,3,128,1,38,7,5000,5000,0,0,288,2000,0,0,1.00,50,165,0,0,NULL); INSERT INTO `spell_list` VALUES (356,'paralyga',0x00000000000000000000000000000000000000000000,6,102,2,0,4,35,12,4000,20000,0,0,488,2000,1,0,1.00,0,0,0,204,NULL); INSERT INTO `spell_list` VALUES (357,'slowga',0x00000000000000000000000000000000000000000000,6,102,4,0,4,35,30,2500,30000,0,0,489,2000,1,0,1.00,0,0,0,204,NULL); INSERT INTO `spell_list` VALUES (358,'hastega',0x00000000000000000000000000000000000000000000,6,0,5,0,1,34,80,4000,30000,0,0,490,2000,1,0,1.00,0,0,0,204,NULL); diff --git a/sql/status_effects.sql b/sql/status_effects.sql index ae9de4aa48f..a89d623e84f 100644 --- a/sql/status_effects.sql +++ b/sql/status_effects.sql @@ -102,7 +102,7 @@ INSERT INTO `status_effects` VALUES (64,'last_resort',41,0,0,0,0,0,0,0,0); INSERT INTO `status_effects` VALUES (65,'sneak_attack',36,0,0,0,0,0,0,0,0); INSERT INTO `status_effects` VALUES (66,'copy_image',33,0,0,0,0,36,3,0,50); INSERT INTO `status_effects` VALUES (67,'third_eye',41,0,0,0,0,0,0,0,0); -INSERT INTO `status_effects` VALUES (68,'warcry',41,0,0,0,0,0,0,0,400); +INSERT INTO `status_effects` VALUES (68,'warcry',41,0,0,0,0,460,0,0,400); INSERT INTO `status_effects` VALUES (69,'invisible',3429,0,0,2,0,0,3,0,850); INSERT INTO `status_effects` VALUES (70,'deodorize',2341,0,0,2,0,0,3,0,1100); INSERT INTO `status_effects` VALUES (71,'sneak',2341,0,0,2,0,0,3,0,1150); @@ -461,7 +461,7 @@ INSERT INTO `status_effects` VALUES (431,'avatars_favor',171966753,0,0,0,0,0,0,0 INSERT INTO `status_effects` VALUES (432,'multi_strikes',32,0,0,0,0,0,0,0,0); INSERT INTO `status_effects` VALUES (433,'double_shot',32,0,0,0,0,0,0,0,0); INSERT INTO `status_effects` VALUES (434,'transcendency',256,0,0,0,0,0,0,0,0); -INSERT INTO `status_effects` VALUES (435,'restraint',32,0,0,0,0,0,0,0,0); +INSERT INTO `status_effects` VALUES (435,'restraint',5243168,0,0,0,0,0,0,0,0); INSERT INTO `status_effects` VALUES (436,'perfect_counter',32,0,0,0,0,0,0,0,0); INSERT INTO `status_effects` VALUES (437,'mana_wall',32,0,0,0,0,0,0,0,0); INSERT INTO `status_effects` VALUES (438,'divine_emblem',32,0,0,0,0,0,0,0,0); @@ -486,7 +486,7 @@ INSERT INTO `status_effects` VALUES (456,'spur',32,0,0,0,0,0,0,0,0); INSERT INTO `status_effects` VALUES (457,'efflux',32,0,0,0,0,0,0,0,0); INSERT INTO `status_effects` VALUES (458,'earthen_armor',32,0,0,0,0,0,0,0,0); INSERT INTO `status_effects` VALUES (459,'divine_caress',32,0,0,0,0,0,0,0,0); -INSERT INTO `status_effects` VALUES (460,'blood_rage',32,0,0,0,0,0,0,0,0); +INSERT INTO `status_effects` VALUES (460,'blood_rage',32,0,0,0,0,68,0,0,0); INSERT INTO `status_effects` VALUES (461,'impetus',32,0,0,0,0,0,0,0,0); INSERT INTO `status_effects` VALUES (462,'conspirator',33,0,0,0,0,0,0,0,0); INSERT INTO `status_effects` VALUES (463,'sepulcher',32,0,0,0,0,0,0,0,0); @@ -633,6 +633,7 @@ INSERT INTO `status_effects` VALUES (610,'negate_charm',289,0,0,0,0,0,0,0,0); INSERT INTO `status_effects` VALUES (611,'magic_evasion_boost_ii',32,0,0,0,0,0,0,0,0); INSERT INTO `status_effects` VALUES (612,'colure_active',9437440,0,0,3,0,0,0,0,0); INSERT INTO `status_effects` VALUES (623,'rampart',5243168,0,0,0,0,0,0,0,0); +INSERT INTO `status_effects` VALUES (625,'sirens_favor',32,0,0,0,0,0,0,0,0); INSERT INTO `status_effects` VALUES (768,'abyssea_str',256,0,0,0,0,0,1,0,0); INSERT INTO `status_effects` VALUES (769,'abyssea_dex',256,0,0,0,0,0,5,0,0); INSERT INTO `status_effects` VALUES (770,'abyssea_vit',256,0,0,0,0,0,4,0,0); @@ -669,6 +670,7 @@ INSERT INTO `status_effects` VALUES (800,'dynamis',33554432,0,0,0,0,0,0,0,0); INSERT INTO `status_effects` VALUES (801,'meditate',32,0,0,0,0,0,7,0,0); INSERT INTO `status_effects` VALUES (802,'elemental_resistance_down',8389408,0,0,0,0,0,0,0,0); INSERT INTO `status_effects` VALUES (803,'full_speed_ahead',768,0,0,0,0,0,0,0,0); +INSERT INTO `status_effects` VALUES (805,'tomahawk',544,0,0,0,0,0,0,0,0); /*!40000 ALTER TABLE `status_effects` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/synth_recipes.sql b/sql/synth_recipes.sql index f1eb39c6dd1..07e5bef8a68 100644 --- a/sql/synth_recipes.sql +++ b/sql/synth_recipes.sql @@ -2538,7 +2538,7 @@ INSERT INTO `synth_recipes` VALUES (34509,0,0,0,0,0,92,0,0,0,0,4100,4242,1712,17 INSERT INTO `synth_recipes` VALUES (34510,0,0,0,0,0,92,0,0,0,0,4099,4241,9130,10312,0,0,0,0,0,0,27131,27132,27132,27132,1,1,1,1,'Vexed Cuffs'); -- INSERT INTO `synth_recipes` VALUES (34511,0,0,0,0,51,92,31,0,0,0,4099,4241,728,745,823,823,829,830,1271,1409,185,185,185,185,1,1,1,1,'Rook Banner'); INSERT INTO `synth_recipes` VALUES (34512,0,0,0,0,0,92,0,0,0,0,4099,4241,1369,9130,0,0,0,0,0,0,27040,27041,27041,27041,1,1,1,1,'Bewitched Mitts'); --- INSERT INTO `synth_recipes` VALUES (34513,0,0,0,0,0,93,255,0,0,0,4099,4241,823,828,828,828,855,1279,0,0,14315,14316,14316,14316,1,1,1,1,'Sha\'ir Seraweels'); +INSERT INTO `synth_recipes` VALUES (34513,0,0,0,0,0,93,51,0,0,0,4099,4241,823,828,828,828,855,1279,0,0,14315,14316,14316,14316,1,1,1,1,'Sha\'ir Seraweels'); -- BG Wiki and JP Wiki -- INSERT INTO `synth_recipes` VALUES (34514,0,2011,0,0,0,93,0,0,0,0,4098,4240,843,843,843,843,843,843,2145,2145,2145,2145,2145,2145,1417,1417,1417,1417,18,24,30,36,'Giant Bird Fletchings'); INSERT INTO `synth_recipes` VALUES (34515,0,0,0,48,0,93,0,0,0,0,4099,4241,682,682,823,828,1699,1764,0,0,15392,15394,15394,15394,1,1,1,1,'Hachiman Hakama'); -- wiki, BG, JPwiki, AH checked 25/Nov/2021 INSERT INTO `synth_recipes` VALUES (34516,0,0,0,0,0,93,0,0,0,0,4098,4240,843,843,0,0,0,0,0,0,1417,1417,1417,1417,6,8,10,12,'Giant Bird Fletchings'); @@ -4740,6 +4740,7 @@ INSERT INTO `synth_recipes` VALUES (75518,1,0,0,98,60,0,0,0,0,0,4100,4242,13941, INSERT INTO `synth_recipes` VALUES (75519,1,0,0,91,0,0,0,0,0,0,4100,4242,18406,0,0,0,0,0,0,0,2302,2302,2302,2302,1,1,2,2,'Jadagna_+1_Desynth'); INSERT INTO `synth_recipes` VALUES (75520,1,0,0,0,85,0,0,0,0,0,4100,4242,13414,0,0,0,0,0,0,0,813,813,746,746,1,1,1,2,'Heavens_Earring_Desynth'); INSERT INTO `synth_recipes` VALUES (75521,1,0,0,0,85,0,0,0,0,0,4100,4242,14719,0,0,0,0,0,0,0,813,813,746,746,1,1,1,2,'Heavens_Earring_+1_Desynth'); +INSERT INTO `synth_recipes` VALUES (75522,0,0,70,0,0,0,0,0,0,0,4102,4244,9091,0,0,0,0,0,0,0,19320,19320,19320,19320,1,1,1,1,'Lu Shang\'s Fishing Rod +1'); -- BGWiki and JP Wiki -- ----------- -- RECIPES END diff --git a/src/common/logging.h b/src/common/logging.h index 10376eac240..505aab98ecb 100644 --- a/src/common/logging.h +++ b/src/common/logging.h @@ -61,10 +61,11 @@ namespace logging #define ShowCritical(...) { auto _msgStr = fmt::sprintf(__VA_ARGS__); TracyMessageStr(_msgStr); SPDLOG_LOGGER_CRITICAL(spdlog::get("critical"), _msgStr); } // Debug Loggers -#define DebugNavmesh(...) { if (settings::get("logging.DEBUG_NAVMESH")) { ShowDebug(__VA_ARGS__); } } -#define DebugPackets(...) { if (settings::get("logging.DEBUG_PACKETS")) { ShowDebug(__VA_ARGS__); } } -#define DebugActions(...) { if (settings::get("logging.DEBUG_ACTIONS")) { ShowDebug(__VA_ARGS__); } } -#define DebugSQL(...) { if (settings::get("logging.DEBUG_SQL")) { ShowDebug(__VA_ARGS__); } } +#define DebugNavmesh(...) { if (settings::get("logging.DEBUG_NAVMESH")) { ShowDebug(__VA_ARGS__); } } +#define DebugPackets(...) { if (settings::get("logging.DEBUG_PACKETS")) { ShowDebug(__VA_ARGS__); } } +#define DebugActions(...) { if (settings::get("logging.DEBUG_ACTIONS")) { ShowDebug(__VA_ARGS__); } } +#define DebugSQL(...) { if (settings::get("logging.DEBUG_SQL")) { ShowDebug(__VA_ARGS__); } } +#define DebugIDLookup(...) { if (settings::get("logging.DEBUG_ID_LOOKUP")) { ShowDebug(__VA_ARGS__); } } // Special Loggers (different patterns) #define ShowLua(...) { auto _msgStr = fmt::sprintf(__VA_ARGS__); TracyMessageStr(_msgStr); SPDLOG_LOGGER_INFO(spdlog::get("lua"), _msgStr); } diff --git a/src/common/packet_tcp.conf b/src/common/packet_tcp.conf deleted file mode 100644 index ec0f2a2bd27..00000000000 --- a/src/common/packet_tcp.conf +++ /dev/null @@ -1,55 +0,0 @@ -// tcp sockets Configuration file - -// Display debug reports (When something goes wrong during the report, the report is saved.) -debug: no - -// How long can a socket stall before closing the connection (in seconds) -stall_time: 60 - -//----- IP Rules Settings ----- - -// If IP's are checked when connecting. -// This also enables DDoS protection. -enable_ip_rules: yes - -// Order of the checks -// deny,allow : Checks deny rules, then allow rules. Allows if no rules match. -// allow,deny : Checks allow rules, then deny rules. Allows if no rules match. -// mutual-failure : Allows only if an allow rule matches and no deny rules match. -// (default is deny,allow) - -order: deny,allow -// order: allow,deny -// order: mutual-failture - -// IP rules -// allow : Accepts connections from the ip range (even if flagged as DDoS) -// deny : Rejects connections from the ip range -// The rules are processed in order, the first matching rule of each list (allow and deny) is used - -// allow: 127.0.0.1 -// allow: 192.168.0.0/16 -// allow: 10.0.0.0/255.0.0.0 -// allow: all - -// deny: 127.0.0.1 - - -//---- Connection Limit Settings ---- -// If connect_count connection request are made within connect_interval msec, it blocks it - -// Consecutive attempts interval (msec) -// (default is 3000 msecs, 3 seconds) -connect_interval: 3000 - -// Consecutive attempts trigger -// (default is 10 attempts) -connect_count: 10 - -// The time interval after which the connection lockout is lifted. (msec) -// After this amount of time, the connection restrictions are lifted. -// (default is 600000 msecs, 10 minutes) -connect_lockout: 600000 - - -//import: conf/import/packet_conf.txt diff --git a/src/common/packet_udp.conf b/src/common/packet_udp.conf deleted file mode 100644 index ca213d71e8d..00000000000 --- a/src/common/packet_udp.conf +++ /dev/null @@ -1,4 +0,0 @@ -// tcp sockets Configuration file - -// Display debug reports (When something goes wrong during the report, the report is saved.) -debug: no diff --git a/src/common/settings.cpp b/src/common/settings.cpp index 577f0fe3097..2c0386dde48 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp @@ -35,16 +35,19 @@ namespace settings { std::unordered_map settingsMap; - void network_settings_from_env() + // We need this to figure out which environment variables are numbers + // so we can pass them to the lua settings properly typed. + bool isNumber(const std::string& stringValue) { - lua["xi"]["settings"]["network"]["SQL_HOST"] = std::getenv("XI_DB_HOST") ? std::getenv("XI_DB_HOST") : get("network.SQL_HOST"); - lua["xi"]["settings"]["network"]["SQL_PORT"] = std::getenv("XI_DB_PORT") ? std::stoi(std::getenv("XI_DB_PORT")) : get("network.SQL_PORT"); - lua["xi"]["settings"]["network"]["SQL_LOGIN"] = std::getenv("XI_DB_USER") ? std::getenv("XI_DB_USER") : get("network.SQL_LOGIN"); - lua["xi"]["settings"]["network"]["SQL_PASSWORD"] = std::getenv("XI_DB_USER_PASSWD") ? std::getenv("XI_DB_USER_PASSWD") : get("network.SQL_PASSWORD"); - lua["xi"]["settings"]["network"]["SQL_DATABASE"] = std::getenv("XI_DB_NAME") ? std::getenv("XI_DB_NAME") : get("network.SQL_DATABASE"); - - lua["xi"]["settings"]["network"]["ZMQ_IP"] = std::getenv("XI_MSG_IP") ? std::getenv("XI_MSG_IP") : get("network.ZMQ_IP"); - lua["xi"]["settings"]["network"]["ZMQ_PORT"] = std::getenv("XI_MSG_PORT") ? std::stoi(std::getenv("XI_MSG_PORT")) : get("network.ZMQ_PORT"); + for (char const c : stringValue) + { + if (std::isdigit(c) == 0) + { + return false; + } + } + + return true; } /** @@ -67,7 +70,7 @@ namespace settings if (isLua) { { - auto res = lua.safe_script_file(filename, &sol::script_pass_on_error); + auto res = lua.safe_script_file(filename); if (!res.valid()) { sol::error err = res; @@ -130,7 +133,7 @@ namespace settings if (isLua) { { - auto res = lua.safe_script_file(filename, &sol::script_pass_on_error); + auto res = lua.safe_script_file(filename); if (!res.valid()) { sol::error err = res; @@ -181,6 +184,30 @@ namespace settings { settingsMap[key] = innerValObj.as(); } + + // Apply any environment variables over the default/user settings. + auto envKey = fmt::format("XI_{}_{}", to_upper(outerKey), to_upper(innerKey)); + + // If we try to assign this value in the if() statement, it will + // come back as a bool, so we have to check only then assign in the + // block. + if (std::getenv(envKey.c_str())) + { + auto value = std::string(std::getenv(envKey.c_str())); + ShowInfo(fmt::format("Applying ENV VAR {}: {} -> {}", envKey, key, value)); + + // If we don't convert the PORTS to doubles (or ints), then the LUA + // doesn't interpret them correctly and it breaks everything. + // Therefor we need to check if the value is a number. + if (isNumber(value)) + { + settingsMap[key] = std::stod(value); + } + else + { + settingsMap[key] = value; + } + } } } @@ -189,7 +216,7 @@ namespace settings { auto parts = split(key, "."); auto outer = to_lower(parts[0]); - auto inner = to_lower(parts[1]); + auto inner = to_upper(parts[1]); lua["xi"]["settings"][outer][inner] = value; } @@ -197,7 +224,5 @@ namespace settings // to the defaults: // // lua.safe_script("require('settings/main'); require('settings/default/main'); print(xi.settings)"); - - network_settings_from_env(); } } // namespace settings diff --git a/src/common/socket.cpp b/src/common/socket.cpp index 5abf7628327..5a80f595cb4 100644 --- a/src/common/socket.cpp +++ b/src/common/socket.cpp @@ -8,6 +8,7 @@ #include "../common/timer.h" #include "../common/utils.h" +#include "settings.h" #include "socket.h" #include @@ -357,6 +358,8 @@ static std::vector access_allow; static std::vector access_deny; static int access_order = ACO_DENY_ALLOW; static int access_debug = 0; +static bool udp_debug = false; +static bool tcp_debug = false; //-- static int connect_count = 10; static duration connect_interval = 3s; @@ -387,35 +390,40 @@ static int connect_check(uint32 ip) static int connect_check_(uint32 ip) { TracyZoneScoped; - ConnectHistory* hist = connect_history[ip & 0xFFFF]; - size_t i; + ConnectHistory* hist = connect_history[ip & 0xFFFF]; int is_allowip = 0; int is_denyip = 0; int connect_ok = 0; // Search the allow list - for (i = 0; i < access_allow.size(); ++i) + for (auto const& entry : access_allow) { - if ((ip & access_allow[i].mask) == (access_allow[i].ip & access_allow[i].mask)) + if ((ip & entry.mask) == (entry.ip & entry.mask)) { if (access_debug) { - ShowInfo("connect_check: Found match from allow list:%d.%d.%d.%d IP:%d.%d.%d.%d Mask:%d.%d.%d.%d", CONVIP(ip), CONVIP(access_allow[i].ip), - CONVIP(access_allow[i].mask)); + ShowInfo( + "connect_check: Found match from allow list:%d.%d.%d.%d IP:%d.%d.%d.%d Mask:%d.%d.%d.%d", + CONVIP(ip), + CONVIP(entry.ip), + CONVIP(entry.mask)); } is_allowip = 1; break; } } // Search the deny list - for (i = 0; i < access_deny.size(); ++i) + for (auto const& entry : access_deny) { - if ((ip & access_deny[i].mask) == (access_deny[i].ip & access_deny[i].mask)) + if ((ip & entry.mask) == (entry.ip & entry.mask)) { if (access_debug) { - ShowInfo("connect_check: Found match from deny list:%d.%d.%d.%d IP:%d.%d.%d.%d Mask:%d.%d.%d.%d", CONVIP(ip), CONVIP(access_deny[i].ip), - CONVIP(access_deny[i].mask)); + ShowInfo( + "connect_check: Found match from deny list:%d.%d.%d.%d IP:%d.%d.%d.%d Mask:%d.%d.%d.%d", + CONVIP(ip), + CONVIP(entry.ip), + CONVIP(entry.mask)); } is_denyip = 1; break; @@ -974,6 +982,139 @@ int socket_config_read(const char* cfgName) return 0; } +/// +/// +/// Get the access list object collection from the provided string. The string +/// provided is in the form of "127.0.0.1,192.168.0.0/16" where each entry is +/// separated by a comma. This will break apart all individual entries and then +/// for each entry that is validated will be pushed into our result collection, +/// otherwise an error will be displayed. +/// +/// +/// The access list that we are parsing for individual entries. +/// std::vector collection that contains all AccessControl entries. +/// +std::vector get_access_list(std::string access_list) +{ + // with the provided comma delimited access list, we will convert into a + // vector of string entries + std::vector result; + + std::stringstream ss(access_list); + while (ss.good()) + { + std::string entry; + // get string delimited by comma character + getline(ss, entry, ','); + + if (entry == "") + { + // skip + continue; + } + + // validate our entry before pushing it into our results list + AccessControl acc{}; + if (access_ipmask(entry.c_str(), &acc)) + { + result.push_back(acc); + } + else + { + ShowError("socket_config_read: Invalid ip or ip range '%s'!", entry); + } + } + + return result; +} + +/// +/// +/// Setting up the UDP settings, currently just has a debug flag. +/// +/// @NOTE I've added a UDP debug flag, the access debug flag is shared between +/// both UDP and TCP. Can be confusing if you believe you are setting the +/// flag and then it gets overwritten by the other setting. The new flags +/// are just not being leveraged just yet (not sure where they would go). +/// +/// +void socket_udp_setup() +{ + // debug setting + udp_debug = settings::get("network.UDP_DEBUG"); + access_debug = settings::get("network.UDP_DEBUG"); +} + +/// +/// +/// Handling the TCP setup properties for the socket. All leveraging the new +/// settings handling of LUA files. The only issue I had was related to the +/// allow and deny lists. There would need to be an extension to the get() +/// method in order to allow LUA lists { "a", "b" }. To allieviate this I've +/// implemented a get_access_list() method in order to parse a string that +/// splits entries with commas. All other settings are straight forward using +/// the settings get() method. Added all "packet_tcp.conf" settings to the +/// new "settings/default/network.lua" file. +/// +/// +void socket_tcp_setup() +{ + // debug setting (shared?) + access_debug = settings::get("network.TCP_DEBUG"); + + // sockets configuration + tcp_debug = settings::get("network.TCP_DEBUG"); + stall_time = settings::get("network.TCP_STALL_TIME"); + + // IP rules settings + ip_rules = settings::get("network.TCP_ENABLE_IP_RULES"); + + // ordering of the checks + auto ordering = settings::get("network.TCP_ORDER"); + if (ordering == "deny,allow") + { + access_order = ACO_DENY_ALLOW; + } + else if (ordering == "allow,deny") + { + access_order = ACO_ALLOW_DENY; + } + else if (ordering == "mutual-failure") + { + access_order = ACO_MUTUAL_FAILURE; + } + + // get the allow and deny list + if (access_debug) + { + ShowInfo("Loading allow access list..."); + } + auto allow_list_str = settings::get("network.TCP_ALLOW"); + access_allow = get_access_list(allow_list_str); + if (access_debug) + { + ShowInfo("Size of allow access list: %d", access_allow.size()); + } + + if (access_debug) + { + ShowInfo("Loading deny access list..."); + } + auto deny_list_str = settings::get("network.TCP_DENY"); + access_deny = get_access_list(deny_list_str); + if (access_debug) + { + ShowInfo("Size of deny access list: %d", access_deny.size()); + } + + // connection limit settings + connect_interval = std::chrono::milliseconds( + settings::get("network.TCP_CONNECT_INTERVAL")); + connect_count = settings::get("network.TCP_CONNECT_COUNT"); + connect_lockout = std::chrono::milliseconds( + settings::get("network.TCP_CONNECT_LOCKOUT")); +} + void socket_init_tcp() { TracyZoneScoped; @@ -982,15 +1123,23 @@ void socket_init_tcp() return; } - const char* SOCKET_CONF_FILENAME = "./src/common/packet_tcp.conf"; - socket_config_read(SOCKET_CONF_FILENAME); - // sessions[0] is now currently used for disconnected sessions of the map server, and as such, - // should hold enough buffer (it is a vacuum so to speak) as it is never flushed. [Skotlex] + // setup our socket + socket_tcp_setup(); + + // sessions[0] is now currently used for disconnected sessions of the map + // server, and as such, should hold enough buffer (it is a vacuum so to + // speak) as it is never flushed. [Skotlex] create_session(0, null_recv, null_send, null_parse); // Delete old connection history every 5 minutes memset(connect_history, 0, sizeof(connect_history)); - CTaskMgr::getInstance()->AddTask("connect_check_clear", server_clock::now() + 1s, NULL, CTaskMgr::TASK_INTERVAL, connect_check_clear, 5min); + CTaskMgr::getInstance()->AddTask( + "connect_check_clear", + server_clock::now() + 1s, + NULL, + CTaskMgr::TASK_INTERVAL, + connect_check_clear, + 5min); } void socket_final_tcp() @@ -1185,8 +1334,9 @@ void socket_init_udp() { return; } - const char* SOCKET_CONF_FILENAME = "./src/common/packet_udp.conf"; - socket_config_read(SOCKET_CONF_FILENAME); + + // setup our socket + socket_udp_setup(); } void do_close_udp(int32 fd) diff --git a/src/map/CMakeLists.txt b/src/map/CMakeLists.txt index a11c78b1fd3..152f106c0aa 100644 --- a/src/map/CMakeLists.txt +++ b/src/map/CMakeLists.txt @@ -92,6 +92,8 @@ set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/packet_system.h ${CMAKE_CURRENT_SOURCE_DIR}/party.cpp ${CMAKE_CURRENT_SOURCE_DIR}/party.h + ${CMAKE_CURRENT_SOURCE_DIR}/petskill.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/petskill.h ${CMAKE_CURRENT_SOURCE_DIR}/recast_container.cpp ${CMAKE_CURRENT_SOURCE_DIR}/recast_container.h ${CMAKE_CURRENT_SOURCE_DIR}/region.cpp diff --git a/src/map/ai/ai_container.cpp b/src/map/ai/ai_container.cpp index a55fcda2aa9..7a0a220a5d0 100644 --- a/src/map/ai/ai_container.cpp +++ b/src/map/ai/ai_container.cpp @@ -27,6 +27,7 @@ along with this program. If not, see http://www.gnu.org/licenses/ #include "../entities/mobentity.h" #include "../packets/entity_animation.h" #include "controllers/mob_controller.h" +#include "controllers/pet_controller.h" #include "controllers/player_controller.h" #include "states/ability_state.h" #include "states/attack_state.h" @@ -36,6 +37,7 @@ along with this program. If not, see http://www.gnu.org/licenses/ #include "states/item_state.h" #include "states/magic_state.h" #include "states/mobskill_state.h" +#include "states/petskill_state.h" #include "states/raise_state.h" #include "states/range_state.h" #include "states/respawn_state.h" @@ -114,6 +116,16 @@ bool CAIContainer::MobSkill(uint16 targid, uint16 wsid) return false; } +bool CAIContainer::PetSkill(uint16 targid, uint16 wsid) +{ + auto* AIController = dynamic_cast(Controller.get()); + if (AIController) + { + return AIController->PetSkill(targid, wsid); + } + return false; +} + bool CAIContainer::Ability(uint16 targid, uint16 abilityid) { if (Controller) @@ -167,7 +179,7 @@ bool CAIContainer::Inactive(duration _duration, bool canChangeState) bool CAIContainer::Internal_Engage(uint16 targetid) { //#TODO: pet engage/disengage - auto* entity{ dynamic_cast(PEntity) }; + auto* entity = dynamic_cast(PEntity); if (entity && entity->PAI->IsEngaged()) { @@ -196,7 +208,7 @@ bool CAIContainer::Internal_Engage(uint16 targetid) bool CAIContainer::Internal_Cast(uint16 targetid, SpellID spellid) { - auto* entity{ dynamic_cast(PEntity) }; + auto* entity = dynamic_cast(PEntity); if (entity) { return ChangeState(entity, targetid, spellid); @@ -206,7 +218,7 @@ bool CAIContainer::Internal_Cast(uint16 targetid, SpellID spellid) bool CAIContainer::Internal_ChangeTarget(uint16 targetid) { - auto* entity{ dynamic_cast(PEntity) }; + auto* entity = dynamic_cast(PEntity); if (entity) { if (IsEngaged() || targetid == 0) @@ -224,7 +236,7 @@ bool CAIContainer::Internal_ChangeTarget(uint16 targetid) bool CAIContainer::Internal_Disengage() { - auto* entity{ dynamic_cast(PEntity) }; + auto* entity = dynamic_cast(PEntity); if (entity) { entity->SetBattleTargetID(0); @@ -235,7 +247,7 @@ bool CAIContainer::Internal_Disengage() bool CAIContainer::Internal_WeaponSkill(uint16 targid, uint16 wsid) { - auto* entity{ dynamic_cast(PEntity) }; + auto* entity = dynamic_cast(PEntity); if (entity) { return ChangeState(entity, targid, wsid); @@ -245,7 +257,7 @@ bool CAIContainer::Internal_WeaponSkill(uint16 targid, uint16 wsid) bool CAIContainer::Internal_MobSkill(uint16 targid, uint16 wsid) { - auto* entity{ dynamic_cast(PEntity) }; + auto* entity = dynamic_cast(PEntity); if (entity) { return ChangeState(entity, targid, wsid); @@ -253,9 +265,19 @@ bool CAIContainer::Internal_MobSkill(uint16 targid, uint16 wsid) return false; } +bool CAIContainer::Internal_PetSkill(uint16 targid, uint16 abilityid) +{ + auto* entity = dynamic_cast(PEntity); + if (entity) + { + return ChangeState(entity, targid, abilityid); + } + return false; +} + bool CAIContainer::Internal_Ability(uint16 targetid, uint16 abilityid) { - auto* entity{ dynamic_cast(PEntity) }; + auto* entity = dynamic_cast(PEntity); if (entity) { return ChangeState(entity, targetid, abilityid); @@ -265,7 +287,7 @@ bool CAIContainer::Internal_Ability(uint16 targetid, uint16 abilityid) bool CAIContainer::Internal_RangedAttack(uint16 targetid) { - auto* entity{ dynamic_cast(PEntity) }; + auto* entity = dynamic_cast(PEntity); if (entity) { return ChangeState(entity, targetid); @@ -275,7 +297,7 @@ bool CAIContainer::Internal_RangedAttack(uint16 targetid) bool CAIContainer::Internal_Die(duration deathTime) { - auto* entity{ dynamic_cast(PEntity) }; + auto* entity = dynamic_cast(PEntity); if (entity) { return ChangeState(entity, deathTime); @@ -285,7 +307,7 @@ bool CAIContainer::Internal_Die(duration deathTime) bool CAIContainer::Internal_Raise() { - auto* entity{ dynamic_cast(PEntity) }; + auto* entity = dynamic_cast(PEntity); if (entity) { return ForceChangeState(entity); @@ -295,7 +317,7 @@ bool CAIContainer::Internal_Raise() bool CAIContainer::Internal_UseItem(uint16 targetid, uint8 loc, uint8 slotid) { - auto* entity{ dynamic_cast(PEntity) }; + auto* entity = dynamic_cast(PEntity); if (entity) { return ChangeState(entity, targetid, loc, slotid); diff --git a/src/map/ai/ai_container.h b/src/map/ai/ai_container.h index 1b16b182c5e..eeb2205d217 100644 --- a/src/map/ai/ai_container.h +++ b/src/map/ai/ai_container.h @@ -56,6 +56,7 @@ class CAIContainer bool Disengage(); bool WeaponSkill(uint16 targid, uint16 wsid); bool MobSkill(uint16 targid, uint16 wsid); + bool PetSkill(uint16 targid, uint16 wsid); bool Ability(uint16 targid, uint16 abilityid); bool RangedAttack(uint16 targid); bool Trigger(CCharEntity* player); @@ -69,6 +70,7 @@ class CAIContainer bool Internal_Disengage(); bool Internal_WeaponSkill(uint16 targid, uint16 wsid); bool Internal_MobSkill(uint16 targid, uint16 wsid); + bool Internal_PetSkill(uint16 targid, uint16 abilityid); bool Internal_Ability(uint16 targetid, uint16 abilityid); bool Internal_RangedAttack(uint16 targetid); bool Internal_Die(duration); diff --git a/src/map/ai/controllers/pet_controller.cpp b/src/map/ai/controllers/pet_controller.cpp index 84a85ac512e..ab8d18071f0 100644 --- a/src/map/ai/controllers/pet_controller.cpp +++ b/src/map/ai/controllers/pet_controller.cpp @@ -132,3 +132,16 @@ bool CPetController::Ability(uint16 targid, uint16 abilityid) } return false; } + +bool CPetController::PetSkill(uint16 targid, uint16 abilityid) +{ + TracyZoneScoped; + if (POwner) + { + FaceTarget(targid); + PPet->PAI->EventHandler.triggerListener("WEAPONSKILL_BEFORE_USE", PPet, abilityid); + return POwner->PAI->Internal_PetSkill(targid, abilityid); + } + + return false; +} diff --git a/src/map/ai/controllers/pet_controller.h b/src/map/ai/controllers/pet_controller.h index 7733656db0f..109478c2c3e 100644 --- a/src/map/ai/controllers/pet_controller.h +++ b/src/map/ai/controllers/pet_controller.h @@ -32,6 +32,7 @@ class CPetController : public CMobController static constexpr float PetRoamDistance{ 2.1f }; virtual void DoRoamTick(time_point tick) override; + bool PetSkill(uint16 targid, uint16 abilityid); protected: bool PetIsHealing(); diff --git a/src/map/ai/helpers/gambits_container.cpp b/src/map/ai/helpers/gambits_container.cpp index 38934f77f9c..66164a4e12f 100644 --- a/src/map/ai/helpers/gambits_container.cpp +++ b/src/map/ai/helpers/gambits_container.cpp @@ -4,6 +4,7 @@ #include "../../ai/states/ability_state.h" #include "../../ai/states/magic_state.h" #include "../../ai/states/mobskill_state.h" +#include "../../ai/states/petskill_state.h" #include "../../ai/states/range_state.h" #include "../../ai/states/weaponskill_state.h" #include "../../enmity_container.h" @@ -58,7 +59,8 @@ namespace gambits // TODO: Is this necessary? // Not already doing something if (POwner->PAI->IsCurrentState() || POwner->PAI->IsCurrentState() || POwner->PAI->IsCurrentState() || - POwner->PAI->IsCurrentState() || POwner->PAI->IsCurrentState()) + POwner->PAI->IsCurrentState() || POwner->PAI->IsCurrentState() || + POwner->PAI->IsCurrentState()) { return; } diff --git a/src/map/ai/states/CMakeLists.txt b/src/map/ai/states/CMakeLists.txt index 64e681fdd41..5338ff945d6 100644 --- a/src/map/ai/states/CMakeLists.txt +++ b/src/map/ai/states/CMakeLists.txt @@ -15,6 +15,8 @@ set(AI_STATE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/magic_state.h ${CMAKE_CURRENT_SOURCE_DIR}/mobskill_state.cpp ${CMAKE_CURRENT_SOURCE_DIR}/mobskill_state.h + ${CMAKE_CURRENT_SOURCE_DIR}/petskill_state.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/petskill_state.h ${CMAKE_CURRENT_SOURCE_DIR}/raise_state.cpp ${CMAKE_CURRENT_SOURCE_DIR}/raise_state.h ${CMAKE_CURRENT_SOURCE_DIR}/range_state.cpp diff --git a/src/map/ai/states/petskill_state.cpp b/src/map/ai/states/petskill_state.cpp new file mode 100644 index 00000000000..9c747cefcd1 --- /dev/null +++ b/src/map/ai/states/petskill_state.cpp @@ -0,0 +1,146 @@ +/* +=========================================================================== + +Copyright (c) 2022 LandSandBoat Dev Team + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see http://www.gnu.org/licenses/ + +=========================================================================== +*/ + +#include "petskill_state.h" +#include "../../enmity_container.h" +#include "../../entities/petentity.h" +#include "../../packets/action.h" +#include "../../petskill.h" +#include "../../status_effect_container.h" +#include "../../utils/battleutils.h" +#include "../ai_container.h" + +CPetSkillState::CPetSkillState(CPetEntity* PEntity, uint16 targid, uint16 wsid) +: CState(PEntity, targid) +, m_PEntity(PEntity) +{ + auto* skill = battleutils::GetPetSkill(wsid); + if (!skill) + { + throw CStateInitException(nullptr); + } + + if (m_PEntity->StatusEffectContainer->HasStatusEffect({ EFFECT_AMNESIA, EFFECT_IMPAIRMENT })) + { + throw CStateInitException(nullptr); + } + + auto* PTarget = m_PEntity->IsValidTarget(m_targid, skill->getValidTargets(), m_errorMsg); + + if (!PTarget || m_errorMsg) + { + throw CStateInitException(std::move(m_errorMsg)); + } + + m_PSkill = std::make_unique(*skill); + + m_castTime = std::chrono::milliseconds(m_PSkill->getActivationTime()); + + if (m_castTime > 0s) + { + action_t action; + action.id = m_PEntity->id; + action.actiontype = ACTION_WEAPONSKILL_START; + + actionList_t& actionList = action.getNewActionList(); + actionList.ActionTargetID = PTarget->id; + + actionTarget_t& actionTarget = actionList.getNewActionTarget(); + + actionTarget.reaction = REACTION::NONE; + actionTarget.speceffect = SPECEFFECT::NONE; + actionTarget.animation = 0; + actionTarget.param = m_PSkill->getID(); + actionTarget.messageID = 326; // Seems hardcoded? TODO: Verify on more pet actions. Tested on Wyvern and SMN BPs. + m_PEntity->loc.zone->PushPacket(m_PEntity, CHAR_INRANGE, new CActionPacket(action)); + } + m_PEntity->PAI->EventHandler.triggerListener("WEAPONSKILL_STATE_ENTER", CLuaBaseEntity(m_PEntity), m_PSkill->getID()); + SpendCost(); +} + +CPetSkill* CPetSkillState::GetPetSkill() +{ + return m_PSkill.get(); +} + +void CPetSkillState::SpendCost() +{ + if (m_PSkill->isTpSkill()) + { + m_spentTP = m_PEntity->health.tp; + m_PEntity->health.tp = 0; + } +} + +bool CPetSkillState::Update(time_point tick) +{ + if (tick > GetEntryTime() + m_castTime && !IsCompleted()) + { + action_t action; + m_PEntity->OnPetSkillFinished(*this, action); + m_PEntity->loc.zone->PushPacket(m_PEntity, CHAR_INRANGE_SELF, new CActionPacket(action)); + auto delay = std::chrono::milliseconds(m_PSkill->getAnimationTime()); + m_finishTime = tick + delay; + Complete(); + } + if (IsCompleted() && tick > m_finishTime) + { + auto* PTarget = GetTarget(); + if (PTarget && PTarget->objtype == TYPE_MOB && PTarget != m_PEntity && m_PEntity->allegiance == ALLEGIANCE_TYPE::PLAYER) + { + static_cast(PTarget)->PEnmityContainer->UpdateEnmity(m_PEntity, 0, 0); + } + m_PEntity->PAI->EventHandler.triggerListener("WEAPONSKILL_STATE_EXIT", CLuaBaseEntity(m_PEntity), m_PSkill->getID()); + + if (m_PEntity->objtype == TYPE_PET && m_PEntity->PMaster && m_PEntity->PMaster->objtype == TYPE_PC && (m_PSkill->isBloodPactRage() || m_PSkill->isBloodPactWard())) + { + CCharEntity* PSummoner = dynamic_cast(m_PEntity->PMaster); + if (PSummoner && PSummoner->StatusEffectContainer->HasStatusEffect(EFFECT_AVATARS_FAVOR)) + { + auto power = PSummoner->StatusEffectContainer->GetStatusEffect(EFFECT_AVATARS_FAVOR)->GetPower(); + // Retail: Power is gained for BP use + auto levelGained = m_PSkill->isBloodPactRage() ? 3 : 2; + power += levelGained; + PSummoner->StatusEffectContainer->GetStatusEffect(EFFECT_AVATARS_FAVOR)->SetPower(power > 11 ? power : 11); + } + } + return true; + } + return false; +} + +void CPetSkillState::Cleanup(time_point tick) +{ + if (!IsCompleted()) + { + action_t action; + action.id = m_PEntity->id; + action.actiontype = ACTION_MOBABILITY_INTERRUPT; + + actionList_t& actionList = action.getNewActionList(); + actionList.ActionTargetID = m_PEntity->id; + + actionTarget_t& actionTarget = actionList.getNewActionTarget(); + actionTarget.animation = m_PSkill->getID(); + + m_PEntity->loc.zone->PushPacket(m_PEntity, CHAR_INRANGE, new CActionPacket(action)); + } +} diff --git a/src/map/ai/states/petskill_state.h b/src/map/ai/states/petskill_state.h new file mode 100644 index 00000000000..d9122dfab79 --- /dev/null +++ b/src/map/ai/states/petskill_state.h @@ -0,0 +1,67 @@ +/* +=========================================================================== + +Copyright (c) LandSandBoat Dev Team 2022 + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see http://www.gnu.org/licenses/ + +=========================================================================== +*/ + +#ifndef _CPETSKILL_TATE_H +#define _CPETSKILL_TATE_H + +#include "../../petskill.h" +#include "state.h" + +class CPetEntity; + +class CPetSkillState : public CState +{ +public: + CPetSkillState(CPetEntity* PEntity, uint16 targid, uint16 wsid); + + CPetSkill* GetPetSkill(); + + int16 GetSpentTP() + { + return m_spentTP; + } + +protected: + virtual bool CanChangeState() override + { + return false; + } + virtual bool CanFollowPath() override + { + return false; + } + virtual bool CanInterrupt() override + { + return true; + } + virtual bool Update(time_point tick) override; + virtual void Cleanup(time_point tick) override; + void SpendCost(); + +private: + CPetEntity* const m_PEntity; + std::unique_ptr m_PSkill; + time_point m_finishTime; + duration m_castTime; + int16 m_spentTP; +}; + +#endif diff --git a/src/map/ai/states/weaponskill_state.cpp b/src/map/ai/states/weaponskill_state.cpp index 80bc514a943..787df968406 100644 --- a/src/map/ai/states/weaponskill_state.cpp +++ b/src/map/ai/states/weaponskill_state.cpp @@ -116,6 +116,15 @@ bool CWeaponSkillState::Update(time_point tick) auto* PTarget{ GetTarget() }; + // Reset Restraint bonus and trackers on weaponskill use + if (m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_RESTRAINT)) + { + uint16 WSBonus = m_PEntity->StatusEffectContainer->GetStatusEffect(EFFECT_RESTRAINT)->GetPower(); + m_PEntity->StatusEffectContainer->GetStatusEffect(EFFECT_RESTRAINT)->SetPower(0); + m_PEntity->StatusEffectContainer->GetStatusEffect(EFFECT_RESTRAINT)->SetSubPower(0); + m_PEntity->delModifier(Mod::ALL_WSDMG_FIRST_HIT, WSBonus); + } + if (action.actiontype == ACTION_WEAPONSKILL_FINISH) // category changes upon being out of range. This does not count for RoE and delay is not increased beyond the normal delay. { // only send lua the WS events if we are in range diff --git a/src/map/attack.cpp b/src/map/attack.cpp index 197c4645d35..e0a89dd28f8 100644 --- a/src/map/attack.cpp +++ b/src/map/attack.cpp @@ -24,6 +24,7 @@ #include "attackround.h" #include "entities/battleentity.h" #include "items/item_weapon.h" +#include "job_points.h" #include "status_effect_container.h" #include "utils/puppetutils.h" @@ -573,4 +574,47 @@ void CAttack::ProcessDamage() } } m_isBlocked = attackutils::IsBlocked(m_attacker, m_victim); + + // Apply Restraint Weaponskill Damage Modifier + // Effect power tracks the total bonus + // Effect sub power tracks remainder left over from whole percentage flooring + if (m_isFirstSwing && m_attacker->StatusEffectContainer->HasStatusEffect(EFFECT_RESTRAINT)) + { + CStatusEffect* effect = m_attacker->StatusEffectContainer->GetStatusEffect(EFFECT_RESTRAINT); + + if (effect->GetPower() < 30) + { + uint8 jpBonus = 0; + + if (m_attacker->objtype == TYPE_PC) + { + jpBonus = static_cast(m_attacker)->PJobPoints->GetJobPointValue(JP_RESTRAINT_EFFECT) * 2; + } + + // Convert weapon delay and divide + // Pull remainder of previous hit's value from Effect sub Power + float boostPerRound = ((m_attacker->GetWeaponDelay(false) / 1000.0f) * 60.0f) / 385.0f; + float remainder = effect->GetSubPower() / 100.0f; + + // Cap floor at 1 WSD per hit + // Calculate bonuses from Enhances Restraint, Job Point upgrades, and remainder from previous hit + boostPerRound = std::clamp(boostPerRound, 1, boostPerRound); + boostPerRound = (boostPerRound * (1 + m_attacker->getMod(Mod::ENHANCES_RESTRAINT) / 100.0f) * (1 + jpBonus / 100.0f)) + remainder; + + // Calculate new remainder and multiply by 100 so significant digits aren't lost + // Floor Boost per Round + remainder = (1 - (std::ceil(boostPerRound) - boostPerRound)) * 100; + boostPerRound = std::floor(boostPerRound); + + // Cap total power to +30% WSD + if (effect->GetPower() + boostPerRound > 30) + { + boostPerRound = 30 - effect->GetPower(); + } + + effect->SetPower(effect->GetPower() + boostPerRound); + effect->SetSubPower(remainder); + m_attacker->addModifier(Mod::ALL_WSDMG_FIRST_HIT, boostPerRound); + } + } } diff --git a/src/map/command_handler.cpp b/src/map/command_handler.cpp index edb2e9070bc..3cae16a4303 100644 --- a/src/map/command_handler.cpp +++ b/src/map/command_handler.cpp @@ -195,7 +195,7 @@ int32 CCommandHandler::call(sol::state& lua, CCharEntity* PChar, const int8* com filename = (*maybeRegisteredCommand).second; } - auto loadResult = lua.safe_script_file(filename, &sol::script_pass_on_error); + auto loadResult = lua.safe_script_file(filename); if (!loadResult.valid()) { sol::error err = loadResult; diff --git a/src/map/entities/charentity.cpp b/src/map/entities/charentity.cpp index d3e9d93dd64..59ad629e0c6 100644 --- a/src/map/entities/charentity.cpp +++ b/src/map/entities/charentity.cpp @@ -70,6 +70,7 @@ #include "../modifier.h" #include "../packets/char_job_extra.h" #include "../packets/status_effects.h" +#include "../petskill.h" #include "../spell.h" #include "../status_effect_container.h" #include "../trade_container.h" @@ -1301,7 +1302,25 @@ void CCharEntity::OnAbility(CAbilityState& state, action_t& action) // #TODO: get rid of this to script, too if (PAbility->isPetAbility()) { - if (PPet) // is a bp - don't display msg and notify pet + CPetEntity* PPetEntity = dynamic_cast(PPet); + CPetSkill* PPetSkill = battleutils::GetPetSkill(PAbility->getID()); + + if (PPetEntity && PPetSkill) // is a real pet (not charmed) and has pet ability - don't display msg and notify pet + { + actionList_t& actionList = action.getNewActionList(); + actionList.ActionTargetID = PTarget->id; + actionTarget_t& actionTarget = actionList.getNewActionTarget(); + actionTarget.animation = 94; // assault anim + actionTarget.reaction = REACTION::NONE; + actionTarget.speceffect = SPECEFFECT::RECOIL; + actionTarget.param = 0; + actionTarget.messageID = 0; + + auto PPetTarget = PTarget->targid; + + PPetEntity->PAI->PetSkill(PPetTarget, PPetSkill->getID()); + } + else if (PPet) // may be a bp, fallback - don't display msg and notify pet { actionList_t& actionList = action.getNewActionList(); actionList.ActionTargetID = PTarget->id; @@ -1792,25 +1811,25 @@ void CCharEntity::OnRaise() { actionTarget.animation = 511; hpReturned = (uint16)((GetLocalVar("MijinGakure") != 0) ? GetMaxHP() * 0.5 : GetMaxHP() * 0.1); - ratioReturned = 0.50f * (1 - settings::get("map.EXP_RETAIN")); + ratioReturned = 0.50f * static_cast(1 - settings::get("map.EXP_RETAIN")); } else if (m_hasRaise == 2) { actionTarget.animation = 512; hpReturned = (uint16)((GetLocalVar("MijinGakure") != 0) ? GetMaxHP() * 0.5 : GetMaxHP() * 0.25); - ratioReturned = ((GetMLevel() <= 50) ? 0.50f : 0.75f) * (1 - settings::get("map.EXP_RETAIN")); + ratioReturned = ((GetMLevel() <= 50) ? 0.50f : 0.75f) * static_cast(1 - settings::get("map.EXP_RETAIN")); } else if (m_hasRaise == 3) { actionTarget.animation = 496; hpReturned = (uint16)(GetMaxHP() * 0.5); - ratioReturned = ((GetMLevel() <= 50) ? 0.50f : 0.90f) * (1 - settings::get("map.EXP_RETAIN")); + ratioReturned = ((GetMLevel() <= 50) ? 0.50f : 0.90f) * static_cast(1 - settings::get("map.EXP_RETAIN")); } else if (m_hasRaise == 4) // Used for spell "Arise" and Arise from the spell "Reraise IV" { actionTarget.animation = 496; hpReturned = (uint16)GetMaxHP(); - ratioReturned = ((GetMLevel() <= 50) ? 0.50f : 0.90f) * (1 - settings::get("map.EXP_RETAIN")); + ratioReturned = ((GetMLevel() <= 50) ? 0.50f : 0.90f) * static_cast(1 - settings::get("map.EXP_RETAIN")); } addHP(((hpReturned < 1) ? 1 : hpReturned)); diff --git a/src/map/entities/charentity.h b/src/map/entities/charentity.h index 51c5c52bee3..58725a8860e 100644 --- a/src/map/entities/charentity.h +++ b/src/map/entities/charentity.h @@ -309,11 +309,11 @@ class CCharEntity : public CBattleEntity uint8 m_ZonesList[36]; // List of visited zone character std::bitset<1024> m_SpellList; // List of studied spells uint8 m_TitleList[143]; // List of obtained titles - uint8 m_Abilities[62]; // List of current abilities + uint8 m_Abilities[64]; // List of current abilities uint8 m_LearnedAbilities[49]; // LearnableAbilities (corsairRolls) std::bitset<50> m_LearnedWeaponskills; // LearnableWeaponskills uint8 m_TraitList[16]; // List of advance active abilities in the form of a bit mask - uint8 m_PetCommands[32]; // List of available pet commands + uint8 m_PetCommands[57]; // List of available pet commands uint8 m_WeaponSkills[32]; questlog_t m_questLog[MAX_QUESTAREA]; // список всех квестов missionlog_t m_missionLog[MAX_MISSIONAREA]; // список миссий diff --git a/src/map/entities/petentity.cpp b/src/map/entities/petentity.cpp index 803817597ce..4dcbaa65b6b 100644 --- a/src/map/entities/petentity.cpp +++ b/src/map/entities/petentity.cpp @@ -26,14 +26,17 @@ #include "../ai/helpers/pathfind.h" #include "../ai/helpers/targetfind.h" #include "../ai/states/ability_state.h" +#include "../ai/states/petskill_state.h" #include "../mob_modifier.h" #include "../mob_spell_container.h" #include "../mob_spell_list.h" #include "../packets/entity_update.h" #include "../packets/pet_sync.h" +#include "../status_effect_container.h" #include "../utils/battleutils.h" #include "../utils/mobutils.h" #include "../utils/petutils.h" + #include "common/utils.h" #include "petentity.h" @@ -244,3 +247,204 @@ bool CPetEntity::ValidTarget(CBattleEntity* PInitiator, uint16 targetFlags) } return CMobEntity::ValidTarget(PInitiator, targetFlags); } + +void CPetEntity::OnPetSkillFinished(CPetSkillState& state, action_t& action) +{ + TracyZoneScoped; + auto* PSkill = state.GetPetSkill(); + auto* PTarget = dynamic_cast(state.GetTarget()); + + if (PTarget == nullptr) + { + ShowWarning("CMobEntity::OnMobSkillFinished: PTarget is null"); + return; + } + + PAI->TargetFind->reset(); + + float distance = PSkill->getDistance(); + uint8 findFlags = 0; + + /* // TODO: do pet skills need this? + if (PSkill->getFlag() & SKILLFLAG_HIT_ALL) + { + findFlags |= FINDFLAGS_HIT_ALL; + } + */ + + // Mob buff abilities also hit monster's pets + if (PSkill->getValidTargets() == TARGET_SELF) + { + findFlags |= FINDFLAGS_PET; + } + + action.id = id; + action.actiontype = (ACTIONTYPE)PSkill->getSkillFinishCategory(); + action.actionid = PSkill->getID(); + + if (PAI->TargetFind->isWithinRange(&PTarget->loc.p, distance)) + { + if (PSkill->isAoE()) + { + PAI->TargetFind->findWithinArea(PTarget, static_cast(PSkill->getAoe()), PSkill->getRadius(), findFlags); + } + else if (PSkill->isConal()) + { + float angle = 45.0f; + PAI->TargetFind->findWithinCone(PTarget, distance, angle, findFlags); + } + else + { + if (this->objtype == TYPE_MOB && PTarget->objtype == TYPE_PC) + { + CBattleEntity* PCoverAbilityUser = battleutils::GetCoverAbilityUser(PTarget, this); + if (PCoverAbilityUser != nullptr) + { + PTarget = PCoverAbilityUser; + } + } + + PAI->TargetFind->findSingleTarget(PTarget, findFlags); + } + } + + uint16 targets = (uint16)PAI->TargetFind->m_targets.size(); + + if (targets == 0) // TODO: Is this "too far away?" + { + action.actiontype = ACTION_MOBABILITY_INTERRUPT; + actionList_t& actionList = action.getNewActionList(); + actionList.ActionTargetID = id; + + actionTarget_t& actionTarget = actionList.getNewActionTarget(); + actionTarget.animation = PSkill->getID(); + return; + } + + PSkill->setTotalTargets(targets); + PSkill->setTP(state.GetSpentTP()); + PSkill->setHPP(GetHPP()); + + uint16 msg = 0; + uint16 defaultMessage = PSkill->getMsg(); + + bool first{ true }; + for (auto&& PTarget : PAI->TargetFind->m_targets) + { + actionList_t& list = action.getNewActionList(); + + list.ActionTargetID = PTarget->id; + + actionTarget_t& target = list.getNewActionTarget(); + + list.ActionTargetID = PTarget->id; + target.reaction = REACTION::HIT; + target.speceffect = SPECEFFECT::HIT; + target.animation = PSkill->getAnimationID(); + target.messageID = PSkill->getMsg(); + + // reset the skill's message back to default + PSkill->setMsg(defaultMessage); + int32 damage = 0; + + target.animation = PSkill->getAnimationID(); + + /* if (petType == PET_TYPE::AUTOMATON) // TODO: figure out Automaton + { + damage = luautils::OnAutomatonAbility(PTarget, this, PSkill, PMaster, &action); + } + else*/ + { + damage = luautils::OnPetAbility(PTarget, this, PSkill, PMaster, &action); + } + + if (msg == 0) + { + if (PSkill->getMsg() == 185) // TODO: remove when we rip out the original SMN implementation, this is xi.msg.basic.DAMAGE (not in .h) + { + msg = defaultMessage; + } + else + { + msg = PSkill->getMsg(); + } + } + else + { + msg = PSkill->getAoEMsg(); + } + + if (damage < 0) + { + msg = MSGBASIC_SKILL_RECOVERS_HP; // TODO: verify this message does/does not vary depending on mob/avatar/automaton use + target.param = std::clamp(-damage, 0, PTarget->GetMaxHP() - PTarget->health.hp); + } + else + { + target.param = damage; + } + + target.messageID = msg; + + if (PSkill->hasMissMsg()) + { + target.reaction = REACTION::MISS; + target.speceffect = SPECEFFECT::NONE; + if (msg == PSkill->getAoEMsg()) + { + msg = 282; + } + } + else + { + target.reaction = REACTION::HIT; + target.speceffect = SPECEFFECT::HIT; + } + + // TODO: Should this be reaction and not speceffect? + if (target.speceffect == SPECEFFECT::HIT) // Formerly bitwise and, though nothing in this function adds additional bits to the field + { + target.speceffect = SPECEFFECT::RECOIL; + target.knockback = PSkill->getKnockback(); + if (first && (PSkill->getPrimarySkillchain() != 0)) + { + SUBEFFECT effect = battleutils::GetSkillChainEffect(PTarget, PSkill->getPrimarySkillchain(), PSkill->getSecondarySkillchain(), + PSkill->getTertiarySkillchain()); + if (effect != SUBEFFECT_NONE) + { + int32 skillChainDamage = battleutils::TakeSkillchainDamage(this, PTarget, target.param, nullptr); + if (skillChainDamage < 0) + { + target.addEffectParam = -skillChainDamage; + target.addEffectMessage = 384 + effect; + } + else + { + target.addEffectParam = skillChainDamage; + target.addEffectMessage = 287 + effect; + } + target.additionalEffect = effect; + } + + first = false; + } + } + PTarget->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DETECTABLE); + if (PTarget->isDead()) + { + battleutils::ClaimMob(PTarget, this); + } + battleutils::DirtyExp(PTarget, this); + } + + PTarget = dynamic_cast(state.GetTarget()); // TODO: why is this recast here? can state change between now and the original cast? + + if (PTarget) + { + if (PTarget->objtype == TYPE_MOB && (PTarget->isDead() || (this->getPetType() == PET_TYPE::AVATAR))) + { + battleutils::ClaimMob(PTarget, this); + } + battleutils::DirtyExp(PTarget, this); + } +} diff --git a/src/map/entities/petentity.h b/src/map/entities/petentity.h index 8686f6fc7da..74072afd8ab 100644 --- a/src/map/entities/petentity.h +++ b/src/map/entities/petentity.h @@ -24,6 +24,8 @@ #include "mobentity.h" +class CPetSkillState; + enum class PET_TYPE : uint8 { AVATAR = 0, @@ -61,6 +63,7 @@ class CPetEntity : public CMobEntity virtual void Spawn() override; virtual void OnAbility(CAbilityState&, action_t&) override; virtual bool ValidTarget(CBattleEntity* PInitiator, uint16 targetFlags) override; + void OnPetSkillFinished(CPetSkillState& state, action_t& action); private: PET_TYPE m_PetType; // the type of pet e.g. avatar/wyvern/jugpet etc diff --git a/src/map/job_points.cpp b/src/map/job_points.cpp index 9d73fc0f809..660f25279d3 100644 --- a/src/map/job_points.cpp +++ b/src/map/job_points.cpp @@ -324,7 +324,7 @@ namespace jobpointutils break; case JOB_GEO: - if (totalJpSpent >= 100 && !charutils::hasSpell(PChar, (uint16)SpellID::Fire_V)) + if (totalJpSpent >= 100) { for (const SpellID elementalSpell : { SpellID::Fire_V, SpellID::Blizzard_V, @@ -333,8 +333,13 @@ namespace jobpointutils SpellID::Thunder_V, SpellID::Water_V }) { - charutils::addSpell(PChar, (uint16)elementalSpell); - charutils::SaveSpell(PChar, (uint16)elementalSpell); + uint16 spellIdNum = static_cast(elementalSpell); + + if (!charutils::hasSpell(PChar, spellIdNum)) + { + charutils::addSpell(PChar, spellIdNum); + charutils::SaveSpell(PChar, spellIdNum); + } } sendUpdate = true; @@ -386,7 +391,7 @@ namespace jobpointutils break; case JOB_RDM: - if (totalJpSpent >= 100 && !charutils::hasSpell(PChar, (uint16)SpellID::Fire_V)) + if (totalJpSpent >= 100) { for (const SpellID elementalSpell : { SpellID::Fire_V, SpellID::Blizzard_V, @@ -395,8 +400,13 @@ namespace jobpointutils SpellID::Thunder_V, SpellID::Water_V }) { - charutils::addSpell(PChar, (uint16)elementalSpell); - charutils::SaveSpell(PChar, (uint16)elementalSpell); + uint16 spellIdNum = static_cast(elementalSpell); + + if (!charutils::hasSpell(PChar, spellIdNum)) + { + charutils::addSpell(PChar, spellIdNum); + charutils::SaveSpell(PChar, spellIdNum); + } } sendUpdate = true; diff --git a/src/map/linkshell.cpp b/src/map/linkshell.cpp index 3648460b012..8b3ab6868f8 100644 --- a/src/map/linkshell.cpp +++ b/src/map/linkshell.cpp @@ -44,12 +44,6 @@ #include "utils/jailutils.h" #include "utils/zoneutils.h" -/************************************************************************ - * * - * Реализация класса CLinkshell * - * * - ************************************************************************/ - CLinkshell::CLinkshell(uint32 id) : m_postRights(0) , m_id(id) @@ -106,15 +100,22 @@ void CLinkshell::setMessage(const int8* message, const int8* poster) } } -/************************************************************************ - * * - * Добавляем персонажа в список активных участников Linkshells * - * * - ************************************************************************/ - +// add a character to the list of online members void CLinkshell::AddMember(CCharEntity* PChar, int8 type, uint8 lsNum) { + if (PChar == nullptr) + { + return; + } + + if (std::find(members.begin(), members.end(), PChar) != members.end()) + { + ShowWarning("CLinkshell::AddMember attempted to add member '%s' who is already in the online member list.", PChar->GetName()); + return; + } + members.push_back(PChar); + if (lsNum == 1) { sql->Query("UPDATE accounts_sessions SET linkshellid1 = %u , linkshellrank1 = %u WHERE charid = %u", this->getID(), type, PChar->id); @@ -127,12 +128,7 @@ void CLinkshell::AddMember(CCharEntity* PChar, int8 type, uint8 lsNum) } } -/************************************************************************ - * * - * Удаляем персонажа из списка активных участников Linkshells * - * * - ************************************************************************/ - +// delete a character to the list of online members bool CLinkshell::DelMember(CCharEntity* PChar) { for (uint32 i = 0; i < members.size(); ++i) @@ -156,12 +152,7 @@ bool CLinkshell::DelMember(CCharEntity* PChar) return !members.empty(); } -/************************************************************************ - * * - * Promotes or demotes the target member (linkshell) * - * * - ************************************************************************/ - +// Promotes or demotes the target member (pearlsack/linkpearl) void CLinkshell::ChangeMemberRank(int8* MemberName, uint8 toSack) { // topearl = 3 @@ -234,13 +225,8 @@ void CLinkshell::ChangeMemberRank(int8* MemberName, uint8 toSack) } } -/************************************************************************ - * * - * Remove a character from Linkshell by name. Breaks all pearls/sacks if * - * kicked by shell holder, otherwise equipped pearl only. * - * * - ************************************************************************/ - +// Remove a character from Linkshell by name. +// Breaks all pearls/sacks if, kicked by shell holder, otherwise equipped pearl only. void CLinkshell::RemoveMemberByName(int8* MemberName, uint8 kickerRank, bool breakLinkshell) { uint32 lsid = m_id; @@ -321,12 +307,7 @@ void CLinkshell::RemoveMemberByName(int8* MemberName, uint8 kickerRank, bool bre } } -/************************************************************************ - * * - * Break and unequip all affiliated pearlsacks and linkpearls * - * * - ************************************************************************/ - +// Break and unequip all affiliated pearlsacks and linkpearls void CLinkshell::BreakLinkshell(int8* lsname, bool gm) { uint32 lsid = m_id; @@ -342,12 +323,7 @@ void CLinkshell::BreakLinkshell(int8* lsname, bool gm) sql->Query("UPDATE linkshells SET broken = 1 WHERE linkshellid = %u LIMIT 1", lsid); } -/************************************************************************ - * * - * Отправляем пакет всем членам Linkshells, за исключением PChar * - * * - ************************************************************************/ - +// send linkshell message to all online members void CLinkshell::PushPacket(uint32 senderID, CBasicPacket* packet) { for (auto& member : members) @@ -383,22 +359,10 @@ void CLinkshell::PushLinkshellMessage(CCharEntity* PChar, bool ls1) } } -/************************************************************************ - * * - * Реализация namespase для работы с Linkshells * - * * - ************************************************************************/ - namespace linkshell { std::map> LinkshellList; - /************************************************************************ - * * - * Загружаем список зарегистрированных Linkshells * - * * - ************************************************************************/ - CLinkshell* LoadLinkshell(uint32 id) { int32 ret = sql->Query("SELECT linkshellid, color, name, postrights FROM linkshells WHERE linkshellid = %d", id); @@ -428,12 +392,7 @@ namespace linkshell return nullptr; } - /************************************************************************ - * * - * Unloads a loaded linkshell, only used after all members are removed * - * * - ************************************************************************/ - + // Unloads a loaded linkshell, only used after all members are removed void UnloadLinkshell(uint32 id) { if (auto PLinkshell = LinkshellList.find(id); PLinkshell != LinkshellList.end()) @@ -442,12 +401,7 @@ namespace linkshell } } - /************************************************************************ - * * - * Добавляем персонажа в список Linkshell * - * * - ************************************************************************/ - + // add character to online linkshell list, used to send messages bool AddOnlineMember(CCharEntity* PChar, CItemLinkshell* PItemLinkshell, uint8 lsNum) { XI_DEBUG_BREAK_IF(PChar == nullptr); @@ -470,12 +424,7 @@ namespace linkshell return false; } - /************************************************************************ - * * - * Удаляем персонажа из списка Lilkshell * - * * - ************************************************************************/ - + // remove online member so we don't try to send messages to them bool DelOnlineMember(CCharEntity* PChar, CItemLinkshell* PItemLinkshell) { XI_DEBUG_BREAK_IF(PChar == nullptr); @@ -497,24 +446,12 @@ namespace linkshell return false; } - /************************************************************************ - * * - * Проверяем строку на возможность использования в качестве имени LS * - * * - ************************************************************************/ - bool IsValidLinkshellName(const int8* name) { auto ret = sql->Query("SELECT linkshellid FROM linkshells WHERE name = '%s' AND broken != 1;", name); return ret == SQL_ERROR || sql->NumRows() == 0; } - /************************************************************************ - * * - * Регистрируем новую linkshell * - * * - ************************************************************************/ - uint32 RegisterNewLinkshell(const int8* name, uint16 color) { if (IsValidLinkshellName(name)) diff --git a/src/map/lua/CMakeLists.txt b/src/map/lua/CMakeLists.txt index fdc42a3a06c..7dca8ac8ac4 100644 --- a/src/map/lua/CMakeLists.txt +++ b/src/map/lua/CMakeLists.txt @@ -13,6 +13,8 @@ set(LUA_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/lua_item.h ${CMAKE_CURRENT_SOURCE_DIR}/lua_mobskill.cpp ${CMAKE_CURRENT_SOURCE_DIR}/lua_mobskill.h + ${CMAKE_CURRENT_SOURCE_DIR}/lua_petskill.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/lua_petskill.h ${CMAKE_CURRENT_SOURCE_DIR}/lua_region.cpp ${CMAKE_CURRENT_SOURCE_DIR}/lua_region.h ${CMAKE_CURRENT_SOURCE_DIR}/lua_spell.cpp diff --git a/src/map/lua/lua_ability.cpp b/src/map/lua/lua_ability.cpp index 0ef8ffd2542..8c6e7036560 100644 --- a/src/map/lua/lua_ability.cpp +++ b/src/map/lua/lua_ability.cpp @@ -52,6 +52,11 @@ uint16 CLuaAbility::getRecast() return m_PLuaAbility->getRecastTime(); } +uint16 CLuaAbility::getRecastID() +{ + return m_PLuaAbility->getRecastId(); +} + uint16 CLuaAbility::getRange() { return static_cast(m_PLuaAbility->getRange()); @@ -68,6 +73,11 @@ uint16 CLuaAbility::getAnimation() return m_PLuaAbility->getAnimationID(); } +uint16 CLuaAbility::getAddType() +{ + return m_PLuaAbility->getAddType(); +} + void CLuaAbility::setMsg(uint16 messageID) { m_PLuaAbility->setMessage(messageID); @@ -116,9 +126,11 @@ void CLuaAbility::Register() SOL_REGISTER("getID", CLuaAbility::getID); SOL_REGISTER("getMsg", CLuaAbility::getMsg); SOL_REGISTER("getRecast", CLuaAbility::getRecast); + SOL_REGISTER("getRecastID", CLuaAbility::getRecastID); SOL_REGISTER("getRange", CLuaAbility::getRange); SOL_REGISTER("getName", CLuaAbility::getName); SOL_REGISTER("getAnimation", CLuaAbility::getAnimation); + SOL_REGISTER("getAddType", CLuaAbility::getAddType); SOL_REGISTER("setMsg", CLuaAbility::setMsg); SOL_REGISTER("setAnimation", CLuaAbility::setAnimation); SOL_REGISTER("setRecast", CLuaAbility::setRecast); diff --git a/src/map/lua/lua_ability.h b/src/map/lua/lua_ability.h index d5431481154..59d64992455 100644 --- a/src/map/lua/lua_ability.h +++ b/src/map/lua/lua_ability.h @@ -44,9 +44,11 @@ class CLuaAbility uint16 getID(); int16 getMsg(); uint16 getRecast(); + uint16 getRecastID(); uint16 getRange(); auto getName() -> const char*; uint16 getAnimation(); + uint16 getAddType(); // see map/ability.h for definitions. These can tell if the ability is a Merit ability, Astral Flow only ability, etc void setMsg(uint16 messageID); void setAnimation(uint16 animationID); diff --git a/src/map/lua/lua_baseentity.cpp b/src/map/lua/lua_baseentity.cpp index 9c87996a2b0..5fa5b5e37b2 100644 --- a/src/map/lua/lua_baseentity.cpp +++ b/src/map/lua/lua_baseentity.cpp @@ -71,6 +71,7 @@ #include "../ai/states/item_state.h" #include "../ai/states/magic_state.h" #include "../ai/states/mobskill_state.h" +#include "../ai/states/petskill_state.h" #include "../ai/states/raise_state.h" #include "../ai/states/range_state.h" #include "../ai/states/respawn_state.h" @@ -1527,6 +1528,15 @@ uint8 CLuaBaseEntity::getCurrentAction() { action = 34; } + else if (m_PBaseEntity->PAI->IsCurrentState()) + { + CPetSkillState* PPetSkillState = dynamic_cast(m_PBaseEntity->PAI->GetCurrentState()); + + if (PPetSkillState) + { + action = PPetSkillState->GetPetSkill()->getSkillFinishCategory(); + } + } else { ShowWarning("getCurrentAction: Unhandled State for %s, defaulting to NONE (0).", m_PBaseEntity->GetName()); diff --git a/src/map/lua/lua_petskill.cpp b/src/map/lua/lua_petskill.cpp new file mode 100644 index 00000000000..a58428db356 --- /dev/null +++ b/src/map/lua/lua_petskill.cpp @@ -0,0 +1,134 @@ +/* +=========================================================================== + + Copyright (c) 2022 LandSandBoat Dev Team + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see http://www.gnu.org/licenses/ + +=========================================================================== +*/ + +#include "common/logging.h" + +#include "../petskill.h" +#include "lua_petskill.h" + +/************************************************************************ + * * + * Constructor * + * * + ************************************************************************/ + +CLuaPetSkill::CLuaPetSkill(CPetSkill* PSkill) +: m_PLuaPetSkill(PSkill) +{ + if (PSkill == nullptr) + { + ShowError("CLuaPetSkill created with nullptr instead of valid CPetSkill*!"); + } +} + +/************************************************************************ + * * + * Set the tp skill message to be displayed (cure/damage/enfeeb) * + * * + ************************************************************************/ + +void CLuaPetSkill::setMsg(uint16 message) +{ + m_PLuaPetSkill->setMsg(message); +} + +bool CLuaPetSkill::hasMissMsg() +{ + return m_PLuaPetSkill->hasMissMsg(); +} + +bool CLuaPetSkill::isSingle() +{ + return m_PLuaPetSkill->isSingle(); +} + +bool CLuaPetSkill::isAoE() +{ + return m_PLuaPetSkill->isAoE(); +} + +bool CLuaPetSkill::isConal() +{ + return m_PLuaPetSkill->isConal(); +} + +uint16 CLuaPetSkill::getTotalTargets() +{ + return m_PLuaPetSkill->getTotalTargets(); +} + +uint16 CLuaPetSkill::getMsg() +{ + return m_PLuaPetSkill->getMsg(); +} + +uint16 CLuaPetSkill::getID() +{ + return m_PLuaPetSkill->getID(); +} + +int16 CLuaPetSkill::getParam() +{ + return m_PLuaPetSkill->getParam(); +} + +/************************************************************************* + + get the TP for calculations + +**************************************************************************/ + +float CLuaPetSkill::getTP() +{ + return static_cast(m_PLuaPetSkill->getTP()); +} + +// Retrieves the Monsters HP% as it was at the start of mobskill +uint8 CLuaPetSkill::getMobHPP() +{ + return m_PLuaPetSkill->getHPP(); +} + +//======================================================// + +void CLuaPetSkill::Register() +{ + SOL_USERTYPE("CPetSkill", CLuaPetSkill); + SOL_REGISTER("setMsg", CLuaPetSkill::setMsg); + SOL_REGISTER("getMsg", CLuaPetSkill::getMsg); + SOL_REGISTER("hasMissMsg", CLuaPetSkill::hasMissMsg); + SOL_REGISTER("isAoE", CLuaPetSkill::isAoE); + SOL_REGISTER("isConal", CLuaPetSkill::isConal); + SOL_REGISTER("isSingle", CLuaPetSkill::isSingle); + SOL_REGISTER("getParam", CLuaPetSkill::getParam); + SOL_REGISTER("getID", CLuaPetSkill::getID); + SOL_REGISTER("getTotalTargets", CLuaPetSkill::getTotalTargets); + SOL_REGISTER("getTP", CLuaPetSkill::getTP); + SOL_REGISTER("getMobHPP", CLuaPetSkill::getMobHPP); +} + +std::ostream& operator<<(std::ostream& os, const CLuaPetSkill& petskill) +{ + std::string id = petskill.m_PLuaPetSkill ? std::to_string(petskill.m_PLuaPetSkill->getID()) : "nullptr"; + return os << "CLuaPetSkill(" << id << ")"; +} + +//======================================================// diff --git a/src/map/lua/lua_petskill.h b/src/map/lua/lua_petskill.h new file mode 100644 index 00000000000..8bbdcdb84d3 --- /dev/null +++ b/src/map/lua/lua_petskill.h @@ -0,0 +1,59 @@ +/* +=========================================================================== + + Copyright (c) 2022 LandSandBoat Dev Team + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see http://www.gnu.org/licenses/ + +=========================================================================== +*/ + +#ifndef _LUAPETSKILL_H +#define _LUAPETSKILL_H + +#include "common/cbasetypes.h" +#include "luautils.h" + +class CPetSkill; + +class CLuaPetSkill +{ + CPetSkill* m_PLuaPetSkill; + +public: + CLuaPetSkill(CPetSkill*); + + CPetSkill* GetMobSkill() const + { + return m_PLuaPetSkill; + } + + friend std::ostream& operator<<(std::ostream& out, const CLuaPetSkill& mobskill); + + float getTP(); + uint8 getMobHPP(); + uint16 getID(); + int16 getParam(); + bool isAoE(); + bool isConal(); + bool isSingle(); + bool hasMissMsg(); + void setMsg(uint16 message); + uint16 getMsg(); + uint16 getTotalTargets(); + + static void Register(); +}; + +#endif diff --git a/src/map/lua/luautils.cpp b/src/map/lua/luautils.cpp index 64d008ce9bc..0d21b9890d2 100644 --- a/src/map/lua/luautils.cpp +++ b/src/map/lua/luautils.cpp @@ -36,6 +36,7 @@ #include "lua_instance.h" #include "lua_item.h" #include "lua_mobskill.h" +#include "lua_petskill.h" #include "lua_region.h" #include "lua_spell.h" #include "lua_statuseffect.h" @@ -77,6 +78,7 @@ #include "../packets/entity_visual.h" #include "../packets/menu_raisetractor.h" #include "../party.h" +#include "../petskill.h" #include "../roe.h" #include "../spell.h" #include "../status_effect_container.h" @@ -204,6 +206,7 @@ namespace luautils CLuaBattlefield::Register(); CLuaInstance::Register(); CLuaMobSkill::Register(); + CLuaPetSkill::Register(); CLuaRegion::Register(); CLuaSpell::Register(); CLuaStatusEffect::Register(); @@ -213,7 +216,7 @@ namespace luautils // Load globals // Truly global files first - lua.safe_script_file("./scripts/globals/common.lua", &sol::script_pass_on_error); + lua.safe_script_file("./scripts/globals/common.lua"); roeutils::init(); // TODO: Get rid of the need to do this // Then the rest... @@ -225,7 +228,7 @@ namespace luautils auto relative_path_string = entry.path().relative_path().generic_string(); // auto lua_path = std::filesystem::relative(entry.path(), "./").replace_extension("").generic_string(); // ShowInfo("Loading global script %s", lua_path); - auto result = lua.safe_script_file(relative_path_string, &sol::script_pass_on_error); + auto result = lua.safe_script_file(relative_path_string); if (!result.valid()) { sol::error err = result; @@ -245,7 +248,7 @@ namespace luautils { if (entry.path().extension() == ".lua") { - auto result = lua.safe_script_file(entry.path().relative_path().generic_string(), &sol::script_pass_on_error); + auto result = lua.safe_script_file(entry.path().relative_path().generic_string()); if (!result.valid()) { sol::error err = result; @@ -505,7 +508,7 @@ namespace luautils // Handle Lua module files, then return if (!parts.empty() && parts[0] == "modules") { - auto result = lua.safe_script_file(filename, &sol::script_pass_on_error); + auto result = lua.safe_script_file(filename); if (!result.valid()) { sol::error err = result; @@ -548,7 +551,7 @@ namespace luautils // Handle Commands then return if (parts.size() == 2 && parts[0] == "commands") { - auto result = lua.safe_script_file(filename, &sol::script_pass_on_error); + auto result = lua.safe_script_file(filename); if (!result.valid()) { sol::error err = result; @@ -560,6 +563,22 @@ namespace luautils return; } + // Handle IDs then return + if (parts.size() == 3 && parts[2] == "IDs") + { + auto result = lua.safe_script_file(filename, &sol::script_pass_on_error); + if (!result.valid()) + { + sol::error err = result; + ShowError("luautils::CacheLuaObjectFromFile: Load command error: %s: %s", filename, err.what()); + return; + } + + PopulateIDLookups(); + ShowInfo("[FileWatcher] IDs %s", filename); + return; + } + // Handle Quests and Missions then return if (parts.size() == 3 && (parts[0] == "quests" || parts[0] == "missions")) @@ -621,7 +640,7 @@ namespace luautils } // Try and load script - auto file_result = lua.safe_script_file(filename, &sol::script_pass_on_error); + auto file_result = lua.safe_script_file(filename); if (!file_result.valid()) { sol::error err = file_result; @@ -732,6 +751,91 @@ namespace luautils CacheLuaObjectFromFile(filename); } + void PopulateIDLookups(std::optional maybeZoneId) + { + // clang-format off + auto handleZone = [&](CZone* PZone) + { + auto zoneName = std::string((const char*)PZone->GetName()); + auto result = lua.safe_script_file(fmt::format("scripts/zones/{}/IDs.lua", zoneName)); + if (result.valid() && zoneName != "Residential_Area") + { + auto table = lua["zones"][PZone->GetID()].get(); + for (auto [outerKey, outerValue] : table) + { + auto outerName = outerKey.as(); + if (outerName == "mob" || outerName == "npc") + { + for (auto [innerKey, innerValue] : outerValue.as()) + { + if (innerKey.get_type() == sol::type::string && innerValue.get_type() == sol::type::number) + { + auto name = innerKey.as(); + auto num = innerValue.as(); + if (num == -1) + { + bool found = false; + if (outerName == "mob") + { + PZone->ForEachMob([&](CMobEntity* PMob) + { + if (!found) + { + auto keyName = to_upper(std::string((const char*)PMob->GetName())); + if (keyName == name) + { + lua["zones"][PZone->GetID()][outerName][keyName] = PMob->id; + found = true; + DebugIDLookup(fmt::format("New value for {}.ID.{}.{} = {}", + zoneName, outerName, name, lua["zones"][PZone->GetID()][outerName][keyName].get())); + } + } + }); + } + else if (outerName == "npc") + { + bool found = false; + PZone->ForEachNpc([&](CNpcEntity* PNpc) + { + if (!found) + { + auto keyName = to_upper(std::string((const char*)PNpc->GetName())); + if (keyName == name) + { + lua["zones"][PZone->GetID()][outerName][keyName] = PNpc->id; + found = true; + DebugIDLookup(fmt::format("New value for {}.ID.{}.{} = {}", + zoneName, outerName, name, lua["zones"][PZone->GetID()][outerName][keyName].get())); + } + } + }); + } + if (!found) + { + ShowError(fmt::format("Could not complete id lookup for {}.ID.{}.{}", zoneName, outerName, name)) + } + } + } + } + } + } + } + }; + + if (!maybeZoneId.has_value()) + { + zoneutils::ForEachZone([&](CZone* PZone) + { + handleZone(PZone); + }); + } + else + { + handleZone(zoneutils::GetZone(maybeZoneId.value())); + } + // clang-format on + } + // temporary solution for geysers in Dangruf_Wadi void SendEntityVisualPacket(uint32 npcid, const char* command) { @@ -1828,6 +1932,12 @@ namespace luautils { TracyZoneScoped; + // Clicking objects does nothing if the player is mid synthesis + if (PChar->animation == ANIMATION_SYNTH) + { + return 0; + } + auto zone = (const char*)PChar->loc.zone->GetName(); auto name = (const char*)PNpc->GetName(); auto filename = fmt::format("./scripts/zones/{}/npcs/{}.lua", zone, name); @@ -2630,7 +2740,7 @@ namespace luautils auto filename = fmt::format("./scripts/zones/{}/mobs/{}.lua", zone_name, name); - auto script_result = lua.safe_script_file(filename, &sol::script_pass_on_error); + auto script_result = lua.safe_script_file(filename); if (!script_result.valid()) { return -1; @@ -2679,7 +2789,7 @@ namespace luautils auto filename = fmt::format("./scripts/mixins/zones/{}.lua", PMob->loc.zone->GetName()); - auto script_result = lua.safe_script_file(filename, &sol::script_pass_on_error); + auto script_result = lua.safe_script_file(filename); if (!script_result.valid()) { return -1; @@ -3682,6 +3792,38 @@ namespace luautils return result.get_type(0) == sol::type::number ? result.get(0) : 0; } + int32 OnPetAbility(CBaseEntity* PTarget, CPetEntity* PPet, CPetSkill* PPetSkill, CBaseEntity* PMobMaster, action_t* action) + { + TracyZoneScoped; + + std::string filename = fmt::format("./scripts/globals/abilities/pets/{}.lua", PPetSkill->getName()); + + sol::function onPetAbility = GetCacheEntryFromFilename(filename)["onPetAbility"]; + if (!onPetAbility.valid()) + { + return 0; + } + + auto result = onPetAbility(CLuaBaseEntity(PTarget), CLuaBaseEntity(PPet), CLuaPetSkill(PPetSkill), CLuaBaseEntity(PMobMaster), CLuaAction(action)); + if (!result.valid()) + { + sol::error err = result; + ShowError("luautils::onPetAbility: %s", err.what()); + return 0; + } + + if (PPet->getPetType() == PET_TYPE::AVATAR && PPet->PMaster->objtype == TYPE_PC) + { + CCharEntity* PMaster = (CCharEntity*)PPet->PMaster; + if (PMaster->GetMJob() == JOB_SMN) + { + charutils::TrySkillUP(PMaster, SKILL_SUMMONING_MAGIC, PMaster->GetMLevel()); + } + } + + return result.get_type(0) == sol::type::number ? result.get(0) : 0; + } + int32 OnUseAbility(CBattleEntity* PUser, CBattleEntity* PTarget, CAbility* PAbility, action_t* action) { TracyZoneScoped; diff --git a/src/map/lua/luautils.h b/src/map/lua/luautils.h index 3f88d4f3c4a..1cd63a8b5db 100644 --- a/src/map/lua/luautils.h +++ b/src/map/lua/luautils.h @@ -59,6 +59,7 @@ extern sol::state lua; #include "lua_instance.h" #include "lua_item.h" #include "lua_mobskill.h" +#include "lua_petskill.h" #include "lua_region.h" #include "lua_spell.h" #include "lua_statuseffect.h" @@ -76,10 +77,12 @@ class CSpell; class CBaseEntity; class CBattleEntity; class CAutomatonEntity; +class CPetEntity; class CCharEntity; class CBattlefield; class CItem; class CMobSkill; +class CPetSkill; class CRegion; class CStatusEffect; class CTradeContainer; @@ -98,6 +101,7 @@ class CLuaBattlefield; class CLuaInstance; class CLuaItem; class CLuaMobSkill; +class CLuaPetSkill; class CLuaRegion; class CLuaSpell; class CLuaStatusEffect; @@ -129,6 +133,8 @@ namespace luautils auto GetCacheEntryFromFilename(std::string filename) -> sol::table; void OnEntityLoad(CBaseEntity* PEntity); + void PopulateIDLookups(std::optional maybeZoneId = std::nullopt); + void SendEntityVisualPacket(uint32 npcid, const char* command); void InitInteractionGlobal(); auto GetZone(uint16 zoneId) -> std::optional; @@ -272,7 +278,8 @@ namespace luautils int32 OnAutomatonAbility(CBaseEntity* PTarget, CBaseEntity* PMob, CMobSkill* PMobSkill, CBaseEntity* PMobMaster, action_t* action); int32 OnAbilityCheck(CBaseEntity* PChar, CBaseEntity* PTarget, CAbility* PAbility, CBaseEntity** PMsgTarget); // triggers when a player attempts to use a job ability or roll - int32 OnPetAbility(CBaseEntity* PPet, CBaseEntity* PMob, CMobSkill* PMobSkill, CBaseEntity* PPetMaster, action_t* action); // triggers when pet uses an ability + int32 OnPetAbility(CBaseEntity* PTarget, CBaseEntity* PMob, CMobSkill* PMobSkill, CBaseEntity* PPetMaster, action_t* action); // triggers when pet uses an ability + int32 OnPetAbility(CBaseEntity* PTarget, CPetEntity* PPet, CPetSkill* PMobSkill, CBaseEntity* PPetMaster, action_t* action); // triggers when pet uses an ability, specialized for pets auto OnUseWeaponSkill(CBattleEntity* PUser, CBaseEntity* PMob, CWeaponSkill* wskill, uint16 tp, bool primary, action_t& action, CBattleEntity* taChar) -> std::tuple; // returns: damage, tphits landed, extra hits landed int32 OnUseAbility(CBattleEntity* PUser, CBattleEntity* PTarget, CAbility* PAbility, action_t* action); // triggers when job ability is used diff --git a/src/map/map.cpp b/src/map/map.cpp index 018d34f56f8..e827c8c45c1 100755 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -245,6 +245,7 @@ int32 do_init(int32 argc, char** argv) ability::LoadAbilitiesList(); battleutils::LoadWeaponSkillsList(); battleutils::LoadMobSkillsList(); + battleutils::LoadPetSkillsList(); battleutils::LoadSkillChainDamageModifiers(); petutils::LoadPetList(); trustutils::LoadTrustList(); @@ -259,6 +260,8 @@ int32 do_init(int32 argc, char** argv) fishingutils::InitializeFishingSystem(); instanceutils::LoadInstanceList(); + luautils::PopulateIDLookups(); + ShowInfo("do_init: server is binding with port %u", map_port == 0 ? settings::get("network.MAP_PORT") : map_port); map_fd = makeBind_udp(INADDR_ANY, map_port == 0 ? settings::get("network.MAP_PORT") : map_port); @@ -347,6 +350,7 @@ void do_final(int code) itemutils::FreeItemList(); battleutils::FreeWeaponSkillsList(); battleutils::FreeMobSkillList(); + battleutils::FreePetSkillList(); petutils::FreePetList(); trustutils::FreeTrustList(); @@ -810,7 +814,7 @@ int32 send_parse(int8* buff, size_t* buffsize, sockaddr_in* from, map_session_da PacketList_t packetList = PChar->getPacketList(); packets = 0; - while (!packetList.empty() && *buffsize + packetList.front()->getSize() < MAX_BUFFER_SIZE && packets < PacketCount) + while (!packetList.empty() && *buffsize + packetList.front()->getSize() < MAX_BUFFER_SIZE && static_cast(packets) < PacketCount) { PSmallPacket = packetList.front(); packetList.pop_front(); diff --git a/src/map/modifier.h b/src/map/modifier.h index cc2f2b960b4..347299368b0 100644 --- a/src/map/modifier.h +++ b/src/map/modifier.h @@ -304,13 +304,15 @@ enum class Mod DUAL_WIELD = 259, // Percent reduction in dual wield delay. // Warrior - DOUBLE_ATTACK = 288, // Percent chance to proc - DOUBLE_ATTACK_DMG = 1038, // Increases "Double Attack" damage/"Double Attack" damage + (in percents, e.g. +20 = +20% damage) - WARCRY_DURATION = 483, // Warcy duration bonus from gear - BERSERK_EFFECT = 948, // Conqueror Berserk Effect - BERSERK_DURATION = 954, // Berserk Duration - AGGRESSOR_DURATION = 955, // Aggressor Duration - DEFENDER_DURATION = 956, // Defender Duration + DOUBLE_ATTACK = 288, // Percent chance to proc + DOUBLE_ATTACK_DMG = 1038, // Increases "Double Attack" damage/"Double Attack" damage + (in percents, e.g. +20 = +20% damage) + WARCRY_DURATION = 483, // Warcy duration bonus from gear + BERSERK_EFFECT = 948, // Conqueror Berserk Effect + BERSERK_DURATION = 954, // Berserk Duration + AGGRESSOR_DURATION = 955, // Aggressor Duration + DEFENDER_DURATION = 956, // Defender Duration + ENHANCES_RESTRAINT = 1045, // Enhances "Restraint" effect/"Restraint" + (Increases the damage bonus of Restraint by XXX%) + ENHANCES_BLOOD_RAGE = 1046, // Enhances "Blood Rage" effect/"Blood Rage" duration + // Monk BOOST_EFFECT = 97, // Boost power in tenths @@ -901,7 +903,7 @@ enum class Mod // 888 // 936 // - // SPARE = 1045, and onward + // SPARE = 1047, and onward }; // temporary workaround for using enum class as unordered_map key until compilers support it diff --git a/src/map/navmesh.cpp b/src/map/navmesh.cpp index fb9a8437fb1..406e73e8199 100644 --- a/src/map/navmesh.cpp +++ b/src/map/navmesh.cpp @@ -1,4 +1,4 @@ -/* +/* =========================================================================== Copyright (c) 2010-2015 Darkstar Dev Teams @@ -435,10 +435,10 @@ bool CNavMesh::findClosestValidPoint(const position_t& position, float* validPoi float spos[3]; CNavMesh::ToDetourPos(&position, spos); - float polyPickExt[3]; - polyPickExt[0] = 30; - polyPickExt[1] = 60; - polyPickExt[2] = 30; + float closestPolyPickExt[3]; + closestPolyPickExt[0] = 30; + closestPolyPickExt[1] = 60; + closestPolyPickExt[2] = 30; dtQueryFilter filter; filter.setIncludeFlags(0xffff); @@ -446,7 +446,7 @@ bool CNavMesh::findClosestValidPoint(const position_t& position, float* validPoi dtPolyRef startRef; - dtStatus status = m_navMeshQuery.findNearestPoly(spos, polyPickExt, &filter, &startRef, validPoint); + dtStatus status = m_navMeshQuery.findNearestPoly(spos, closestPolyPickExt, &filter, &startRef, validPoint); if (dtStatusFailed(status)) { @@ -462,10 +462,10 @@ bool CNavMesh::findFurthestValidPoint(const position_t& startPosition, const pos float spos[3]; CNavMesh::ToDetourPos(&startPosition, spos); - float polyPickExt[3]; - polyPickExt[0] = 30; - polyPickExt[1] = 60; - polyPickExt[2] = 30; + float furthestPolyPickExt[3]; + furthestPolyPickExt[0] = 30; + furthestPolyPickExt[1] = 60; + furthestPolyPickExt[2] = 30; dtQueryFilter filter; filter.setIncludeFlags(0xffff); @@ -474,7 +474,7 @@ bool CNavMesh::findFurthestValidPoint(const position_t& startPosition, const pos dtPolyRef startRef; float validStartPoint[3]; - dtStatus status = m_navMeshQuery.findNearestPoly(spos, polyPickExt, &filter, &startRef, validStartPoint); + dtStatus status = m_navMeshQuery.findNearestPoly(spos, furthestPolyPickExt, &filter, &startRef, validStartPoint); if (dtStatusFailed(status)) { return false; diff --git a/src/map/packet_guard.cpp b/src/map/packet_guard.cpp index 3c046746125..8062aed30cd 100644 --- a/src/map/packet_guard.cpp +++ b/src/map/packet_guard.cpp @@ -36,6 +36,7 @@ namespace PacketGuard allowList[SUBSTATE_IN_CS][0x01A] = true; // Player Action allowList[SUBSTATE_IN_CS][0x03A] = true; // Sort Inventory allowList[SUBSTATE_IN_CS][0x053] = true; // LockStyleSet + allowList[SUBSTATE_IN_CS][0x058] = true; // Synthesis Suggestion allowList[SUBSTATE_IN_CS][0x05A] = true; // Map Update (Conquest, Besieged, Campaign) allowList[SUBSTATE_IN_CS][0x05B] = true; // Event Update (Completion or Update) allowList[SUBSTATE_IN_CS][0x05C] = true; // Event Update (Update Player Position) diff --git a/src/map/packet_system.cpp b/src/map/packet_system.cpp index 3e7e93ab8b8..538226785e3 100644 --- a/src/map/packet_system.cpp +++ b/src/map/packet_system.cpp @@ -2198,7 +2198,16 @@ void SmallPacket0x04B(map_session_data_t* const PSession, CCharEntity* const PCh if (msg_language == 0x02) { - PChar->pushPacket(new CServerMessagePacket(settings::get("main.SERVER_MESSAGE"), msg_language, msg_timestamp, msg_offset)); + std::string login_message = settings::get("main.SERVER_MESSAGE"); + if (settings::get("main.ENABLE_TRUST_ALTER_EGO_EXTRAVAGANZA_ANNOUNCE")) + { + login_message = login_message + (settings::get("main.TRUST_ALTER_EGO_EXTRAVAGANZA_MESSAGE")); + } + if (settings::get("main.ENABLE_TRUST_ALTER_EGO_EXPO_ANNOUNCE")) + { + login_message = login_message + (settings::get("main.TRUST_ALTER_EGO_EXPO_MESSAGE")); + } + PChar->pushPacket(new CServerMessagePacket(login_message, msg_language, msg_timestamp, msg_offset)); } PChar->pushPacket(new CCharSyncPacket(PChar)); @@ -4224,10 +4233,10 @@ void SmallPacket0x071(map_session_data_t* const PSession, CCharEntity* const PCh sql->AffectedRows()) { ShowDebug("%s has removed %s from party", PChar->GetName(), data[0x0C]); - uint8 data[8]{}; - ref(data, 0) = PChar->PParty->GetPartyID(); - ref(data, 4) = id; - message::send(MSG_PT_RELOAD, data, sizeof data, nullptr); + uint8 removeData[8]{}; + ref(removeData, 0) = PChar->PParty->GetPartyID(); + ref(removeData, 4) = id; + message::send(MSG_PT_RELOAD, removeData, sizeof removeData, nullptr); } } } @@ -4310,10 +4319,10 @@ void SmallPacket0x071(map_session_data_t* const PSession, CCharEntity* const PCh sql->AffectedRows()) { ShowDebug("%s has removed %s party from alliance", PChar->GetName(), data[0x0C]); - uint8 data[8]{}; - ref(data, 0) = PChar->PParty->GetPartyID(); - ref(data, 4) = id; - message::send(MSG_PT_RELOAD, data, sizeof data, nullptr); + uint8 removeData[8]{}; + ref(removeData, 0) = PChar->PParty->GetPartyID(); + ref(removeData, 4) = id; + message::send(MSG_PT_RELOAD, removeData, sizeof removeData, nullptr); } } } @@ -4516,9 +4525,9 @@ void SmallPacket0x077(map_session_data_t* const PSession, CCharEntity* const PCh { ShowDebug("(Alliance)Changing leader to %s", data[0x04]); PChar->PParty->m_PAlliance->assignAllianceLeader((const char*)data[0x04]); - uint8 data[4]{}; - ref(data, 0) = PChar->PParty->m_PAlliance->m_AllianceID; - message::send(MSG_PT_RELOAD, data, sizeof data, nullptr); + uint8 leaderData[4]{}; + ref(leaderData, 0) = PChar->PParty->m_PAlliance->m_AllianceID; + message::send(MSG_PT_RELOAD, leaderData, sizeof leaderData, nullptr); } } break; diff --git a/src/map/packets/char_abilities.cpp b/src/map/packets/char_abilities.cpp index ac3ecb91cc6..13b71c6e0fe 100644 --- a/src/map/packets/char_abilities.cpp +++ b/src/map/packets/char_abilities.cpp @@ -33,7 +33,7 @@ CCharAbilitiesPacket::CCharAbilitiesPacket(CCharEntity* PChar) this->setSize(0xE4); memcpy(data + (0x04), PChar->m_WeaponSkills, 32); - memcpy(data + (0x44), PChar->m_Abilities, 62); - memcpy(data + (0x84), PChar->m_PetCommands, 32); + memcpy(data + (0x44), PChar->m_Abilities, 64); + memcpy(data + (0x84), PChar->m_PetCommands, 57); memcpy(data + (0xC4), PChar->m_TraitList, 16); } diff --git a/src/map/packets/char_recast.cpp b/src/map/packets/char_recast.cpp index 8ec02b0e2b0..e735ee294f3 100644 --- a/src/map/packets/char_recast.cpp +++ b/src/map/packets/char_recast.cpp @@ -57,5 +57,14 @@ CCharRecastPacket::CCharRecastPacket(CCharEntity* PChar) { ref(0x04) = recasttime; // 2h ability (recast id is 0) } + + // Retail currently only allows 31 distinct recasts to be sent in the packet + // Reject 32 abilities and higher (zero-indexed) + // This may change with Master Levels, as there is some padding that appears to be not used for each recast that could be removed to add more abilities. + if (count > 30) + { + ShowDebug("CCharRecastPacket constructor attempting to send recast packet to player '%s' with > 31 abilities. This is unsupported.", PChar->GetName()); + break; + } } } diff --git a/src/map/petskill.cpp b/src/map/petskill.cpp new file mode 100644 index 00000000000..7171f5d6f49 --- /dev/null +++ b/src/map/petskill.cpp @@ -0,0 +1,355 @@ +/* +=========================================================================== + + Copyright (c) 2022 LandSandBoat Dev Team + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see http://www.gnu.org/licenses/ + +=========================================================================== +*/ + +#include "petskill.h" +#include "mobskill.h" // used for skillflags + +CPetSkill::CPetSkill(uint16 id) +{ + m_ID = id; + m_AnimID = 0; + m_Aoe = 0; + m_Distance = 0; + m_TotalTargets = 1; + m_Flag = 0; + m_ValidTarget = 0; + m_AnimationTime = 0; + m_ActivationTime = 0; + m_Message = 0; + m_Param = 0; + m_primarySkillchain = 0; + m_secondarySkillchain = 0; + m_tertiarySkillchain = 0; + m_TP = 0; + m_HPP = 0; + m_knockback = 0; + m_SkillFinishCategory = 0; +} + +bool CPetSkill::hasMissMsg() const +{ + return m_Message == 158 || m_Message == 188 || m_Message == 31 || m_Message == 30; +} + +bool CPetSkill::isAoE() const +{ + return m_Aoe > 0 && m_Aoe < 4; +} + +bool CPetSkill::isConal() const +{ + return m_Aoe == 4; +} + +bool CPetSkill::isSingle() const +{ + return m_Aoe == 0; +} + +bool CPetSkill::isTwoHour() const +{ + // flag means this skill is a real two hour + return m_Flag & SKILLFLAG_TWO_HOUR; +} + +bool CPetSkill::isAttackReplacement() const +{ + return m_Flag & SKILLFLAG_REPLACE_ATTACK; +} + +bool CPetSkill::isTpSkill() const +{ + return !isSpecial() && !isAttackReplacement(); +} + +bool CPetSkill::isSpecial() const +{ + // means it is a ranged attack or call beast, etc.. + return m_Flag & SKILLFLAG_SPECIAL; +} + +bool CPetSkill::isBloodPactRage() const +{ + // means it is a BP Rage + return m_Flag & SKILLFLAG_BLOODPACT_RAGE; +} + +bool CPetSkill::isBloodPactWard() const +{ + // means it is a BP Ward + return m_Flag & SKILLFLAG_BLOODPACT_WARD; +} + +void CPetSkill::setID(uint16 id) +{ + m_ID = id; +} + +void CPetSkill::setMsg(uint16 msg) +{ + m_Message = msg; +} + +void CPetSkill::setSkillFinishCategory(uint8 category) +{ + m_SkillFinishCategory = category; +} + +void CPetSkill::setTotalTargets(uint16 targets) +{ + m_TotalTargets = targets; +} + +void CPetSkill::setAnimationID(uint16 animID) +{ + m_AnimID = animID; +} + +const std::string CPetSkill::getName() const +{ + return m_name; +} + +void CPetSkill::setName(const std::string& name) +{ + m_name = name; +} + +void CPetSkill::setAoe(uint8 aoe) +{ + m_Aoe = aoe; +} + +void CPetSkill::setDistance(float distance) +{ + m_Distance = distance; +} + +void CPetSkill::setFlag(uint8 flag) +{ + m_Flag = flag; +} + +void CPetSkill::setTP(int16 tp) +{ + m_TP = tp; +} + +// Stores the Monsters HP% as it was at the start of mobskill +void CPetSkill::setHPP(uint8 hpp) +{ + m_HPP = hpp; +} + +void CPetSkill::setAnimationTime(uint16 AnimationTime) +{ + m_AnimationTime = AnimationTime; +} + +void CPetSkill::setActivationTime(uint16 ActivationTime) +{ + m_ActivationTime = ActivationTime; +} + +void CPetSkill::setValidTargets(uint16 targ) +{ + m_ValidTarget = targ; +} + +uint16 CPetSkill::getID() const +{ + return m_ID; +} + +uint16 CPetSkill::getAnimationID() const +{ + return m_AnimID; +} + +int16 CPetSkill::getTP() const +{ + return m_TP; +} + +// Retrieves the Pet's HP% as it was at the start of mobskill +uint8 CPetSkill::getHPP() const +{ + return m_HPP; +} + +uint16 CPetSkill::getTotalTargets() const +{ + return m_TotalTargets; +} + +uint16 CPetSkill::getMsg() const +{ + return m_Message; +} + +uint8 CPetSkill::getSkillFinishCategory() const +{ + return m_SkillFinishCategory; +} + +uint16 CPetSkill::getMsgForAction() const +{ + return getID(); +} + +uint16 CPetSkill::getAoEMsg() const // TODO: put this in parent class? +{ + switch (m_Message) + { + case 185: + return 264; + case 186: + return 266; + case 187: + return 281; + case 188: + return 282; + case 189: + return 283; + case 225: + return 366; + case 226: + return 226; // no message for this... I guess there is no aoe TP drain move + case 103: // recover hp + case 102: // recover hp + case 238: // recover hp + case 306: // recover hp + case 318: // recover hp + return 24; + case 242: + return 277; + case 243: + return 278; + case 284: + return 284; // already the aoe message + case 370: + return 404; + case 362: + return 363; + case 378: + return 343; + case 224: // recovers mp + return 276; + default: + return m_Message; + } +} + +uint8 CPetSkill::getFlag() const +{ + return m_Flag; +} + +uint8 CPetSkill::getAoe() const +{ + return m_Aoe; +} + +float CPetSkill::getDistance() const +{ + return m_Distance; +} + +float CPetSkill::getRadius() const +{ + if (m_Aoe == 2) + { + // centered around target, usually 8' // TODO: AoE range setter? + return 8.0f; + } + + return m_Distance; +} + +int16 CPetSkill::getParam() const +{ + return m_Param; +} + +uint8 CPetSkill::getKnockback() const +{ + return m_knockback; +} + +bool CPetSkill::isDamageMsg() const +{ + return m_Message == 110 || m_Message == 185 || m_Message == 197 || m_Message == 264 || m_Message == 187 || m_Message == 225 || m_Message == 226 || m_Message == 317; +} + +void CPetSkill::setParam(int16 value) +{ + m_Param = value; +} + +void CPetSkill::setKnockback(uint8 knockback) +{ + m_knockback = knockback; +} + +uint16 CPetSkill::getValidTargets() const +{ + return m_ValidTarget; +} + +uint16 CPetSkill::getAnimationTime() const +{ + return m_AnimationTime; +} + +uint16 CPetSkill::getActivationTime() const +{ + return m_ActivationTime; +} + +uint8 CPetSkill::getPrimarySkillchain() const +{ + return m_primarySkillchain; +} + +uint8 CPetSkill::getSecondarySkillchain() const +{ + return m_secondarySkillchain; +} + +uint8 CPetSkill::getTertiarySkillchain() const +{ + return m_tertiarySkillchain; +} + +void CPetSkill::setPrimarySkillchain(uint8 skillchain) +{ + m_primarySkillchain = skillchain; +} + +void CPetSkill::setSecondarySkillchain(uint8 skillchain) +{ + m_secondarySkillchain = skillchain; +} + +void CPetSkill::setTertiarySkillchain(uint8 skillchain) +{ + m_tertiarySkillchain = skillchain; +} diff --git a/src/map/petskill.h b/src/map/petskill.h new file mode 100644 index 00000000000..fec756de9ee --- /dev/null +++ b/src/map/petskill.h @@ -0,0 +1,113 @@ +/* +=========================================================================== + + Copyright (c) 2022 LandSandBoat Dev Team + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see http://www.gnu.org/licenses/ + +=========================================================================== +*/ + +#ifndef _CPETSKILL_H +#define _CPETSKILL_H + +#include "../common/cbasetypes.h" +#include "../common/mmo.h" + +class CPetSkill +{ +public: + CPetSkill(uint16 id); + + bool hasMissMsg() const; + bool isAoE() const; + bool isConal() const; + bool isSingle() const; + bool isTwoHour() const; + bool isSpecial() const; + bool isBloodPactWard() const; + bool isBloodPactRage() const; + bool isAttackReplacement() const; + bool isTpSkill() const; + + uint16 getID() const; + uint16 getAnimationID() const; + uint8 getAoe() const; + float getDistance() const; + uint8 getFlag() const; + uint16 getAnimationTime() const; + uint16 getActivationTime() const; + uint16 getMsg() const; + uint8 getSkillFinishCategory() const; + uint16 getAoEMsg() const; + uint16 getValidTargets() const; + int16 getTP() const; + uint8 getHPP() const; + uint16 getTotalTargets() const; + uint16 getMsgForAction() const; + float getRadius() const; + int16 getParam() const; + uint8 getKnockback() const; + uint8 getPrimarySkillchain() const; + uint8 getSecondarySkillchain() const; + uint8 getTertiarySkillchain() const; + + bool isDamageMsg() const; + + void setID(uint16 id); + void setAnimationID(uint16 aid); + void setAoe(uint8 aoe); + void setDistance(float distance); + void setFlag(uint8 flag); + void setAnimationTime(uint16 AnimationTime); + void setActivationTime(uint16 ActivationTime); + void setMsg(uint16 msg); + void setSkillFinishCategory(uint8 category); + void setValidTargets(uint16 targ); + void setTP(int16 tp); + void setHPP(uint8 hpp); + void setTotalTargets(uint16 targets); + void setParam(int16 value); + void setKnockback(uint8 knockback); + void setPrimarySkillchain(uint8 skillchain); + void setSecondarySkillchain(uint8 skillchain); + void setTertiarySkillchain(uint8 skillchain); + + const std::string getName() const; + void setName(const std::string& name); + +private: + uint16 m_ID; + uint16 m_AnimID; // animation id + std::string m_name; + uint8 m_Aoe; + float m_Distance; + uint16 m_AnimationTime; // how long the tp animation lasts for in ms + uint16 m_ActivationTime; // how long the pet prepares the tp move for + uint16 m_ValidTarget; + uint16 m_Message; // message param, scripters can edit this depending on self/resist/etc. + uint8 m_Flag; + int16 m_Param; + uint8 m_SkillFinishCategory; + uint8 m_knockback; // knockback value (0-7) + uint8 m_primarySkillchain; // weaponskill ID of skillchain properties + uint8 m_secondarySkillchain; + uint8 m_tertiarySkillchain; + + int16 m_TP; // the tp at the time of finish readying (for scripts) + uint8 m_HPP; // HPP at the time of using mob skill (for scripts) + uint16 m_TotalTargets; +}; + +#endif diff --git a/src/map/status_effect.h b/src/map/status_effect.h index a69bd964e6d..c40ef23cb18 100644 --- a/src/map/status_effect.h +++ b/src/map/status_effect.h @@ -740,12 +740,13 @@ enum EFFECT EFFECT_ELEMENTALRES_DOWN = 802, // Elemental resistance down EFFECT_FULL_SPEED_AHEAD = 803, // Used to track Full Speed Ahead quest minigame EFFECT_HYSTERIA = 804, // Used for Hysteroanima to stop after readying a weaponskill with no msg. - // EFFECT_PLACEHOLDER = 805 // Description - // 805-1022 + EFFECT_TOMAHAWK = 805, // Silent status effect inflicted by a Warrior using the "Tomahawk" job ability + // EFFECT_PLACEHOLDER = 806 // Description + // 806-1022 // EFFECT_PLACEHOLDER = 1023 // The client dat file seems to have only this many "slots", results of exceeding that are untested. }; -#define MAX_EFFECTID 805 // 768 real + 32 custom +#define MAX_EFFECTID 806 // 768 real + 38 custom /************************************************************************ * * diff --git a/src/map/status_effect_container.cpp b/src/map/status_effect_container.cpp index 06b1fcece8f..a44d534590e 100644 --- a/src/map/status_effect_container.cpp +++ b/src/map/status_effect_container.cpp @@ -1461,7 +1461,7 @@ void CStatusEffectContainer::RemoveAllStatusEffectsInIDRange(EFFECT start, EFFEC /************************************************************************ * * - * Устанавливаем имя эффекта для работы со скриптами * + * Install the name of the effect to work with scripts * * * ************************************************************************/ @@ -1475,8 +1475,15 @@ void CStatusEffectContainer::SetEffectParams(CStatusEffect* StatusEffect) EFFECT effect = StatusEffect->GetStatusID(); // Determine if this is a BRD Song or COR Effect. - if (StatusEffect->GetSubID() == 0 || StatusEffect->GetSubID() > 20000 || (effect >= EFFECT_REQUIEM && effect <= EFFECT_NOCTURNE) || - (effect >= EFFECT_DOUBLE_UP_CHANCE && effect <= EFFECT_NATURALISTS_ROLL) || effect == EFFECT_RUNEISTS_ROLL) + if (StatusEffect->GetSubID() == 0 || + StatusEffect->GetSubID() > 20000 || + (effect >= EFFECT_REQUIEM && effect <= EFFECT_NOCTURNE) || + (effect >= EFFECT_DOUBLE_UP_CHANCE && effect <= EFFECT_NATURALISTS_ROLL) || + effect == EFFECT_RUNEISTS_ROLL || + effect == EFFECT_DRAIN_DAZE || + effect == EFFECT_ASPIR_DAZE || + effect == EFFECT_HASTE_DAZE || + effect == EFFECT_BATTLEFIELD) { name.insert(0, "globals/effects/"); name.insert(name.size(), effects::EffectsParams[effect].Name); @@ -1490,6 +1497,7 @@ void CStatusEffectContainer::SetEffectParams(CStatusEffect* StatusEffect) name.insert(name.size(), (const char*)Ptem->getName()); } } + StatusEffect->SetName(name); StatusEffect->SetFlag(effects::EffectsParams[effect].Flag); StatusEffect->SetType(effects::EffectsParams[effect].Type); @@ -1906,13 +1914,13 @@ void CStatusEffectContainer::TickRegen(time_point tick) CItem* hands = PChar->getEquip(SLOT_HANDS); if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_AVATARS_FAVOR) && - PPet->m_PetID >= PETID_CARBUNCLE && PPet->m_PetID <= PETID_CAIT_SITH) + ((PPet->m_PetID >= PETID_CARBUNCLE && PPet->m_PetID <= PETID_CAIT_SITH) || PPet->m_PetID == PETID_SIREN)) { perpetuation = static_cast(perpetuation * 1.2); } // carbuncle mitts only work on carbuncle - if (hands && hands->getID() == 14062 && PPet->name == "Carbuncle") + if (hands && hands->getID() == 14062 && PPet->m_PetID == PETID_CARBUNCLE) { perpetuation /= 2; } diff --git a/src/map/utils/battleutils.cpp b/src/map/utils/battleutils.cpp index e3686161746..e7dbf19ab1c 100644 --- a/src/map/utils/battleutils.cpp +++ b/src/map/utils/battleutils.cpp @@ -64,6 +64,7 @@ #include "../packets/pet_sync.h" #include "../packets/position.h" #include "../party.h" +#include "../petskill.h" #include "../recast_container.h" #include "../spell.h" #include "../status_effect_container.h" @@ -85,6 +86,7 @@ std::array, MAX_SKILLCHAIN_LEVEL + std::array g_PWeaponSkillList; // Holds all Weapon skills std::array g_PMobSkillList; // List of mob skills +std::unordered_map g_PPetSkillList; // List of pet skills std::array, MAX_SKILLTYPE> g_PWeaponSkillsList; std::unordered_map> g_PMobSkillLists; // List of mob skills defined from mob_skill_lists.sql @@ -245,6 +247,50 @@ namespace battleutils } } + /************************************************************************ + * * + * Load Pet Skills from database * + * * + ************************************************************************/ + + void LoadPetSkillsList() + { + // Load all pet skills + const char* specialQuery = "SELECT pet_skill_id, pet_anim_id, pet_skill_name, \ + pet_skill_aoe, pet_skill_distance, pet_anim_time, pet_prepare_time, \ + pet_valid_targets, pet_message, pet_skill_flag, pet_skill_param, pet_skill_finish_category, knockback, primary_sc, secondary_sc, tertiary_sc \ + FROM pet_skills;"; + + int32 ret = sql->Query(specialQuery); + + if (ret != SQL_ERROR && sql->NumRows() != 0) + { + while (sql->NextRow() == SQL_SUCCESS) + { + CPetSkill* PPetSkill = new CPetSkill(sql->GetIntData(0)); + PPetSkill->setAnimationID(sql->GetIntData(1)); + PPetSkill->setName(sql->GetStringData(2)); + PPetSkill->setAoe(sql->GetIntData(3)); + PPetSkill->setDistance(sql->GetFloatData(4)); + PPetSkill->setAnimationTime(sql->GetIntData(5)); + PPetSkill->setActivationTime(sql->GetIntData(6)); + PPetSkill->setValidTargets(sql->GetIntData(7)); + PPetSkill->setMsg(sql->GetIntData(8)); + PPetSkill->setFlag(sql->GetIntData(9)); + PPetSkill->setParam(sql->GetIntData(10)); + PPetSkill->setSkillFinishCategory(sql->GetIntData(11)); + PPetSkill->setKnockback(sql->GetUIntData(12)); + PPetSkill->setPrimarySkillchain(sql->GetUIntData(13)); + PPetSkill->setSecondarySkillchain(sql->GetUIntData(14)); + PPetSkill->setTertiarySkillchain(sql->GetUIntData(15)); + g_PPetSkillList[PPetSkill->getID()] = PPetSkill; + + auto filename = fmt::format("./scripts/globals/abilities/pet/{}.lua", PPetSkill->getName()); + luautils::CacheLuaObjectFromFile(filename); + } + } + } + void LoadSkillChainDamageModifiers() { const char* fmtQuery = "SELECT chain_level, chain_count, initial_modifier, magic_burst_modifier \ @@ -290,6 +336,17 @@ namespace battleutils } } + /************************************************************************ + * Clear Pet Skills List * + ************************************************************************/ + void FreePetSkillList() + { + for (auto iter = g_PPetSkillList.begin(); iter != g_PPetSkillList.end();) + { + g_PPetSkillList.erase(iter); + } + } + /************************************************************************ * Get Skill Rank By SkillId and JobId * ************************************************************************/ @@ -427,6 +484,24 @@ namespace battleutils } } + /************************************************************************ + * * + * Get Pet Skill by Id * + * * + ************************************************************************/ + + CPetSkill* GetPetSkill(uint16 SkillID) + { + if (g_PPetSkillList.find(SkillID) != g_PPetSkillList.end()) + { + return g_PPetSkillList[SkillID]; + } + else + { + return nullptr; + } + } + /************************************************************************ * * * Get Mob Skills by list id * @@ -870,10 +945,8 @@ namespace battleutils // Deal with spikesEffect effect gear else if (PDefender->getMod(Mod::ITEM_SUBEFFECT) > 0) { - if (PDefender->objtype == TYPE_PC) + if (CCharEntity* PCharDef = dynamic_cast(PDefender)) { - CCharEntity* PCharDef = (CCharEntity*)PDefender; - for (auto&& slot : { SLOT_SUB, SLOT_BODY, SLOT_LEGS, SLOT_HEAD, SLOT_HANDS, SLOT_FEET }) { CItemEquipment* PItem = PCharDef->getEquip(slot); @@ -891,10 +964,11 @@ namespace battleutils Action->spikesParam = battleutils::GetScaledItemModifier(PDefender, PItem, Mod::ITEM_ADDEFFECT_DMG); chance = battleutils::GetScaledItemModifier(PDefender, PItem, Mod::ITEM_ADDEFFECT_CHANCE); - if (((CMobEntity*)PDefender)->m_HiPCLvl < PAttacker->GetMLevel()) + if (CMobEntity* PMobAtt = dynamic_cast(PDefender)) { - ((CMobEntity*)PDefender)->m_HiPCLvl = PAttacker->GetMLevel(); + PMobAtt->m_HiPCLvl = std::max(PMobAtt->m_HiPCLvl, PDefender->GetMLevel()); } + if (Action->spikesEffect && HandleSpikesEquip(PAttacker, PDefender, Action, (uint8)Action->spikesParam, Action->spikesEffect, chance)) { return true; @@ -1780,7 +1854,7 @@ namespace battleutils base = 55; break; case 2: // round - case 5: // aegis + case 5: // aegis and srivatsa base = 50; break; case 3: // kite @@ -4907,7 +4981,7 @@ namespace battleutils charmerBSTlevel = charmerLvl; } - // FIXME: Level and CHR ratios are complete guesses + // TODO: Obtain and adjust with accurate Level and CHR data. const float levelRatio = (charmerBSTlevel - targetLvl) / 100.f; charmChance *= (1.f + levelRatio); @@ -4942,6 +5016,12 @@ namespace battleutils void ClaimMob(CBattleEntity* PDefender, CBattleEntity* PAttacker, bool passing) { TracyZoneScoped; + + if (PDefender == nullptr || (PDefender && PDefender->objtype != ENTITYTYPE::TYPE_MOB)) // Do not try to claim anything but mobs (trusts, pets, players don't count) + { + return; + } + if (auto* mob = dynamic_cast(PDefender)) { CBattleEntity* original = PAttacker; diff --git a/src/map/utils/battleutils.h b/src/map/utils/battleutils.h index 726c2eecfc9..bdfd75e4b1d 100644 --- a/src/map/utils/battleutils.h +++ b/src/map/utils/battleutils.h @@ -34,6 +34,7 @@ class CAbility; class CItemWeapon; class CMobSkill; +class CPetSkill; class CSpell; class CTrait; class CWeaponSkill; @@ -100,6 +101,7 @@ namespace battleutils void LoadSkillTable(); void LoadWeaponSkillsList(); void LoadMobSkillsList(); + void LoadPetSkillsList(); void LoadSkillChainDamageModifiers(); uint8 CheckMultiHits(CBattleEntity* PEntity, CItemWeapon* PWeapon); @@ -117,12 +119,14 @@ namespace battleutils CWeaponSkill* GetWeaponSkill(uint16 WSkillID); CMobSkill* GetMobSkill(uint16 SkillID); + CPetSkill* GetPetSkill(uint16 SkillID); const std::list& GetWeaponSkills(uint8 skill); const std::vector& GetMobSkillList(uint16 ListID); void FreeWeaponSkillsList(); void FreeMobSkillList(); + void FreePetSkillList(); SUBEFFECT GetSkillChainEffect(CBattleEntity* PDefender, uint8 primary, uint8 secondary, uint8 tertiary); SKILLCHAIN_ELEMENT FormSkillchain(const std::list& resonance, const std::list& skill); diff --git a/src/map/utils/charutils.cpp b/src/map/utils/charutils.cpp index 75087b9f974..70bd996bbbc 100644 --- a/src/map/utils/charutils.cpp +++ b/src/map/utils/charutils.cpp @@ -2600,36 +2600,45 @@ namespace charutils for (auto PAbility : AbilitiesList) { - if (PPet->GetMLevel() >= PAbility->getLevel() && PetID >= 8 && PetID <= 20 && CheckAbilityAddtype(PChar, PAbility)) + if (PPet->GetMLevel() >= PAbility->getLevel() && ((PetID >= PETID_CARBUNCLE && PetID <= PETID_CAIT_SITH) || PetID == PETID_SIREN) && CheckAbilityAddtype(PChar, PAbility)) { - if (PetID == 8) + if (PetID == PETID_CARBUNCLE) { if (PAbility->getID() >= ABILITY_HEALING_RUBY && PAbility->getID() <= ABILITY_SOOTHING_RUBY) { addPetAbility(PChar, PAbility->getID() - ABILITY_HEALING_RUBY); } } - else if (PetID >= 9 && PetID <= 15) + else if (PetID >= PETID_FENRIR && PetID <= PETID_RAMUH) { if (PAbility->getID() >= (ABILITY_HEALING_RUBY + ((PetID - 8) * 16)) && PAbility->getID() < (ABILITY_HEALING_RUBY + ((PetID - 7) * 16))) { addPetAbility(PChar, PAbility->getID() - ABILITY_HEALING_RUBY); } } - else if (PetID == 16) + else if (PetID == PETID_DIABOLOS) { if (PAbility->getID() >= ABILITY_CAMISADO && PAbility->getID() <= ABILITY_PERFECT_DEFENSE) { addPetAbility(PChar, PAbility->getID() - ABILITY_HEALING_RUBY); } } - else if (PetID == 20) + else if (PetID == PETID_CAIT_SITH) { if (PAbility->getID() > ABILITY_SOOTHING_RUBY && PAbility->getID() <= ABILITY_MOONLIT_CHARGE) { addPetAbility(PChar, PAbility->getID() - ABILITY_HEALING_RUBY); } } + else if (PetID == PETID_SIREN) + { + if (PAbility->getID() >= ABILITY_CLARSACH_CALL && PAbility->getID() <= ABILITY_HYSTERIC_ASSAULT) + { + uint16 sirenAbilltyPacketOffset = 0x1C0; + uint16 sirenAbilityPacketBit = (PAbility->getID() - ABILITY_CLARSACH_CALL) + sirenAbilltyPacketOffset; + addPetAbility(PChar, sirenAbilityPacketBit); + } + } } } } diff --git a/src/map/utils/fishingutils.cpp b/src/map/utils/fishingutils.cpp index 3cd17401ed2..e713c091464 100644 --- a/src/map/utils/fishingutils.cpp +++ b/src/map/utils/fishingutils.cpp @@ -2038,7 +2038,9 @@ namespace fishingutils break; case FISHINGCATCHTYPE_CHEST: PChar->hookedFish->successtype = FISHINGSUCCESSTYPE_CATCHCHEST; - CatchChest(PChar, PChar->hookedFish->catchid, PChar->hookedFish->distance, PChar->hookedFish->angle); + + // TODO: Below function is currently not implemented. + // CatchChest(PChar, PChar->hookedFish->catchid, PChar->hookedFish->distance, PChar->hookedFish->angle); break; } } diff --git a/src/map/utils/gardenutils.cpp b/src/map/utils/gardenutils.cpp index fc172e02708..29ecd07eb57 100644 --- a/src/map/utils/gardenutils.cpp +++ b/src/map/utils/gardenutils.cpp @@ -251,10 +251,10 @@ namespace gardenutils CItemContainer* PContainer = PChar->getStorage(containerID); for (int slotID = 0; slotID < PContainer->GetSize(); ++slotID) { - CItem* PItem = PContainer->GetItem(slotID); - if (PItem != nullptr && PItem->isType(ITEM_FURNISHING)) + CItem* PItemContained = PContainer->GetItem(slotID); + if (PItemContained != nullptr && PItemContained->isType(ITEM_FURNISHING)) { - CItemFurnishing* PFurniture = static_cast(PItem); + CItemFurnishing* PFurniture = static_cast(PItemContained); if (PFurniture->isInstalled()) { auras[PFurniture->getElement()] += PFurniture->getAura(); diff --git a/src/map/utils/moduleutils.cpp b/src/map/utils/moduleutils.cpp index 0def3b98d89..3f28d52dce0 100644 --- a/src/map/utils/moduleutils.cpp +++ b/src/map/utils/moduleutils.cpp @@ -124,7 +124,7 @@ namespace moduleutils void LoadLuaModules() { // Load the helper file - lua.safe_script_file("./modules/module_utils.lua", &sol::script_pass_on_error); + lua.safe_script_file("./modules/module_utils.lua"); // Read lines from init.txt std::vector list; @@ -166,7 +166,7 @@ namespace moduleutils std::string filename = path.filename().generic_string(); std::string relPath = path.relative_path().generic_string(); - auto res = lua.safe_script_file(relPath, &sol::script_pass_on_error); + auto res = lua.safe_script_file(relPath); if (!res.valid()) { sol::error err = res; diff --git a/src/map/utils/petutils.cpp b/src/map/utils/petutils.cpp index 9e750639850..a04fa83ae7b 100644 --- a/src/map/utils/petutils.cpp +++ b/src/map/utils/petutils.cpp @@ -1137,7 +1137,9 @@ namespace petutils int16 PerpetuationCost(uint32 id, uint8 level) { int16 cost = 0; - if (id <= 7) + + // Fire Spirit through Dark Spirit + if (id <= PETID_DARKSPIRIT) { if (level < 19) { @@ -1168,7 +1170,7 @@ namespace petutils cost = 7; } } - else if (id == 8) + else if (id == PETID_CARBUNCLE) { if (level < 10) { @@ -1215,7 +1217,7 @@ namespace petutils cost = 11; } } - else if (id == 9) + else if (id == PETID_FENRIR) { if (level < 8) { @@ -1270,7 +1272,8 @@ namespace petutils cost = 13; } } - else if (id <= 16) + // NOTE: This condition covers PETID_IFRIT through the below conditions + else if (id <= PETID_DIABOLOS || id == PETID_SIREN) { if (level < 10) { @@ -1386,7 +1389,7 @@ namespace petutils PET_TYPE petType = PET_TYPE::JUG_PET; - if (PetID <= PETID_CAIT_SITH) + if (PetID <= PETID_CAIT_SITH || PetID == PETID_SIREN) { petType = PET_TYPE::AVATAR; } diff --git a/src/map/utils/petutils.h b/src/map/utils/petutils.h index f0a07399f65..d83a54796f7 100644 --- a/src/map/utils/petutils.h +++ b/src/map/utils/petutils.h @@ -57,7 +57,8 @@ enum PETID PETID_ADVENTURING_FELLOW = 73, PETID_CHOCOBO = 74, PETID_LUOPAN = 75, - MAX_PETID = 76, + PETID_SIREN = 76, + MAX_PETID = 77, }; class CBattleEntity; diff --git a/src/map/utils/serverutils.cpp b/src/map/utils/serverutils.cpp index 6e0b9838434..d9e0a21c541 100644 --- a/src/map/utils/serverutils.cpp +++ b/src/map/utils/serverutils.cpp @@ -1,4 +1,4 @@ -/* +/* =========================================================================== Copyright (c) 2010-2015 Darkstar Dev Teams @@ -106,8 +106,7 @@ namespace serverutils int32 tries = 0; int32 verify = INT_MIN; - // TODO: Move into new-style settings - auto SETVAR_RETRY_MAX = 3; + auto setVarMaxRetry = settings::get("map.SETVAR_RETRY_MAX"); do { @@ -123,7 +122,7 @@ namespace serverutils sql->Query("INSERT INTO server_variables VALUES ('%s', %i) ON DUPLICATE KEY UPDATE value = %i;", name, value, value); } - if (SETVAR_RETRY_MAX > 0) + if (setVarMaxRetry > 0) { // Cannot usleep(microseconds) or use std::this_thread::sleep_for(std::chrono::microseconds(usec)) // because, you guessed it, DSP design. Close inspection of other DSP code shows sleeping is not @@ -155,6 +154,6 @@ namespace serverutils { break; } - } while (verify != value && tries < SETVAR_RETRY_MAX); + } while (verify != value && tries < setVarMaxRetry); } } // namespace serverutils diff --git a/src/map/utils/trustutils.cpp b/src/map/utils/trustutils.cpp index 1b0f311cab4..68b261e3cfb 100644 --- a/src/map/utils/trustutils.cpp +++ b/src/map/utils/trustutils.cpp @@ -473,6 +473,13 @@ namespace trustutils void LoadTrustStatsAndSkills(CTrustEntity* PTrust) { + if (settings::get("main.ENABLE_TRUST_ALTER_EGO_EXPO") > 0) // Alter Ego Expo HPP/MPP +50%, All Status Resistance +25% + { + PTrust->addModifier(Mod::HPP, 50); + PTrust->addModifier(Mod::MPP, 50); + PTrust->addModifier(Mod::STATUSRES, 25); + } + JOBTYPE mJob = PTrust->GetMJob(); JOBTYPE sJob = PTrust->GetSJob(); uint8 mLvl = PTrust->GetMLevel(); diff --git a/src/map/zone.cpp b/src/map/zone.cpp index 036efab81a7..bf567961b36 100644 --- a/src/map/zone.cpp +++ b/src/map/zone.cpp @@ -427,6 +427,7 @@ void CZone::LoadNavMesh() if (!m_navMesh->load(file)) { + DebugNavmesh("CZone::LoadNavMesh: Cannot load navmesh file (%s)", file); delete m_navMesh; m_navMesh = nullptr; } diff --git a/src/search/data_loader.cpp b/src/search/data_loader.cpp index 6b3b049929e..81d8b188e15 100644 --- a/src/search/data_loader.cpp +++ b/src/search/data_loader.cpp @@ -371,7 +371,7 @@ std::list CDataLoader::GetPlayersList(search_req sr, int* count) { continue; } - if (visibleResults < 20) + if (visibleResults < 40) { PlayersList.push_back(PPlayer); visibleResults++; @@ -408,7 +408,7 @@ std::list CDataLoader::GetPartyList(uint16 PartyID, uint16 Allian "LEFT JOIN char_profile USING(charid) " "WHERE IF (allianceid <> 0, allianceid IN (SELECT allianceid FROM accounts_parties WHERE charid = %u) , partyid = %u) " "ORDER BY charname ASC " - "LIMIT 18"; + "LIMIT 64"; int32 ret = sql->Query(Query, (!AllianceID ? PartyID : AllianceID), (!PartyID ? AllianceID : PartyID)); diff --git a/src/search/packets/linkshell_list.cpp b/src/search/packets/linkshell_list.cpp index 58454c35d14..347c1ef5465 100644 --- a/src/search/packets/linkshell_list.cpp +++ b/src/search/packets/linkshell_list.cpp @@ -36,11 +36,10 @@ CLinkshellListPacket::CLinkshellListPacket(uint32 linkshellid, uint32 Total) { memset(m_data, 0, sizeof(m_data)); - ref(m_data, (0x0A)) = 0x80; + ref(m_data, (0x0A)) = 0x00; // is final packet ref(m_data, (0x0B)) = 0x82; // packet type - // ref(m_data,(0x0E)) = 0x00; // Number of characters per packet - ref(m_data, (0x0E)) = Total; + ref(m_data, (0x0E)) = Total; // // Total overall results } /************************************************************************ @@ -49,9 +48,14 @@ CLinkshellListPacket::CLinkshellListPacket(uint32 linkshellid, uint32 Total) * * ************************************************************************/ -void CLinkshellListPacket::AddPlayer(SearchEntity* PPlayer) +bool CLinkshellListPacket::AddPlayer(SearchEntity* PPlayer) { uint32 size_offset = m_offset / 8; + if ((sizeof(m_data) - size_offset) < (20 + 67)) + { + return false; // not enough space available, worst case. + } + m_offset += 8; m_offset = packBitsLE(m_data, SEARCH_NAME, m_offset, 5); @@ -123,7 +127,21 @@ void CLinkshellListPacket::AddPlayer(SearchEntity* PPlayer) ref(m_data, size_offset) = m_offset / 8 - size_offset - 1; // Entity data size ref(m_data, (0x08)) = m_offset / 8; // Size of the data to send + delete PPlayer; + + return true; +} + +/************************************************************************ + * * + * Set the packet as final in the results * + * * + ************************************************************************/ + +void CLinkshellListPacket::SetFinal() +{ + ref(m_data, (0x0A)) = 0x80; // is final packet } /************************************************************************ diff --git a/src/search/packets/linkshell_list.h b/src/search/packets/linkshell_list.h index 0d3933e360d..fe18a7b1f29 100644 --- a/src/search/packets/linkshell_list.h +++ b/src/search/packets/linkshell_list.h @@ -31,7 +31,8 @@ class CLinkshellListPacket CLinkshellListPacket(uint32 linkshellid, uint32 Total); ~CLinkshellListPacket() = default; - void AddPlayer(SearchEntity* PPlayer); + bool AddPlayer(SearchEntity* PPlayer); + void SetFinal(); uint8* GetData(); uint16 GetSize() const; diff --git a/src/search/packets/search_list.cpp b/src/search/packets/search_list.cpp index 82afa85fdd0..2c817683c48 100644 --- a/src/search/packets/search_list.cpp +++ b/src/search/packets/search_list.cpp @@ -34,17 +34,21 @@ CSearchListPacket::CSearchListPacket(uint32 Total) { memset(m_data, 0, sizeof(m_data)); - ref(m_data, (0x0A)) = 0x80; + ref(m_data, (0x0A)) = 0x00; ref(m_data, (0x0B)) = 0x80; ref(m_data, (0x0E)) = Total; // The total number of character found (may differ from the amount that gets sent) } // A maximum of 20 characters can be added to a single packet. - -void CSearchListPacket::AddPlayer(SearchEntity* PPlayer) +bool CSearchListPacket::AddPlayer(SearchEntity* PPlayer) { uint32 size_offset = m_offset / 8; + if ((sizeof(m_data) - size_offset) < (20 + 67)) + { + return false; // not enough space available, worst case. + } + m_offset += 8; m_offset = packBitsLE(m_data, SEARCH_NAME, m_offset, 5); @@ -110,7 +114,21 @@ void CSearchListPacket::AddPlayer(SearchEntity* PPlayer) ref(m_data, size_offset) = m_offset / 8 - size_offset - 1; // Entity data size ref(m_data, (0x08)) = m_offset / 8; // Size of the data to send + delete PPlayer; + + return true; +} + +/************************************************************************ + * * + * Set the packet as final in the results * + * * + ************************************************************************/ + +void CSearchListPacket::SetFinal() +{ + ref(m_data, (0x0A)) = 0x80; // is final packet } /************************************************************************ diff --git a/src/search/packets/search_list.h b/src/search/packets/search_list.h index 5475bb04830..b6885181ad7 100644 --- a/src/search/packets/search_list.h +++ b/src/search/packets/search_list.h @@ -51,7 +51,8 @@ class CSearchListPacket public: CSearchListPacket(uint32 Total); - void AddPlayer(SearchEntity* PPlayer); + bool AddPlayer(SearchEntity* PPlayer); + void SetFinal(); uint8* GetData(); uint16 GetSize() const; diff --git a/src/search/search.cpp b/src/search/search.cpp index 81738ce5f43..eda2020923a 100755 --- a/src/search/search.cpp +++ b/src/search/search.cpp @@ -1,4 +1,4 @@ -/* +/* =========================================================================== Copyright (c) 2010-2015 Darkstar Dev Teams @@ -417,15 +417,34 @@ void HandleGroupListRequest(CTCPRequestPacket& PTCPRequest) uint32 linkshellid = linkshellid1 == 0 ? linkshellid2 : linkshellid1; std::list LinkshellList = PDataLoader.GetLinkshellList(linkshellid); - CLinkshellListPacket PLinkshellPacket(linkshellid, (uint32)LinkshellList.size()); + uint32 totalResults = (uint32)LinkshellList.size(); + uint32 currentResult = 0; - for (auto& it : LinkshellList) + // Iterate through the linkshell list, splitting up the results into + // smaller chunks. + std::list::iterator it = LinkshellList.begin(); + + do { - PLinkshellPacket.AddPlayer(it); - } + CLinkshellListPacket PLinkshellPacket(linkshellid, totalResults); - PrintPacket((char*)PLinkshellPacket.GetData(), PLinkshellPacket.GetSize()); - PTCPRequest.SendToSocket(PLinkshellPacket.GetData(), PLinkshellPacket.GetSize()); + while (currentResult < totalResults) + { + bool success = PLinkshellPacket.AddPlayer(*it); + if (!success) + break; + + currentResult++; + ++it; + } + + if (currentResult == totalResults) + PLinkshellPacket.SetFinal(); + + auto ret = PTCPRequest.SendToSocket(PLinkshellPacket.GetData(), PLinkshellPacket.GetSize()); + if (ret <= 0) + break; + } while (currentResult < totalResults); } } @@ -452,16 +471,36 @@ void HandleSearchRequest(CTCPRequestPacket& PTCPRequest) CDataLoader PDataLoader; std::list SearchList = PDataLoader.GetPlayersList(sr, &totalCount); - // PDataLoader->GetPlayersCount(sr) - CSearchListPacket PSearchPacket(totalCount); - for (auto& it : SearchList) + uint32 totalResults = (uint32)SearchList.size(); + uint32 currentResult = 0; + + // Iterate through the search list, splitting up the results into + // smaller chunks. + std::list::iterator it = SearchList.begin(); + + do { - PSearchPacket.AddPlayer(it); - } + CSearchListPacket PSearchPacket(totalCount); + + while (currentResult < totalResults) + { + bool success = PSearchPacket.AddPlayer(*it); + if (!success) + break; - // PrintPacket((int8*)PSearchPacket->GetData(), PSearchPacket->GetSize()); - PTCPRequest.SendToSocket(PSearchPacket.GetData(), PSearchPacket.GetSize()); + currentResult++; + ++it; + } + + if (currentResult == totalResults) + PSearchPacket.SetFinal(); + + // PrintPacket((int8*)PSearchPacket->GetData(), PSearchPacket->GetSize()); + auto ret = PTCPRequest.SendToSocket(PSearchPacket.GetData(), PSearchPacket.GetSize()); + if (ret <= 0) + break; + } while (currentResult < totalResults); } void HandleAuctionHouseRequest(CTCPRequestPacket& PTCPRequest) @@ -511,10 +550,11 @@ void HandleAuctionHouseRequest(CTCPRequestPacket& PTCPRequest) for (uint8 i = 0; i < PacketsCount; ++i) { CAHItemsListPacket PAHPacket(20 * i); + uint16 itemListSize = static_cast(ItemList.size()); - PAHPacket.SetItemCount((uint16)ItemList.size()); + PAHPacket.SetItemCount(itemListSize); - for (uint16 y = 20 * i; (y != 20 * (i + 1)) && (y < ItemList.size()); ++y) + for (uint16 y = 20 * i; (y != 20 * (i + 1)) && (y < itemListSize); ++y) { PAHPacket.AddItem(ItemList.at(y)); } diff --git a/tools/ci/lua.sh b/tools/ci/lua.sh index f0132b6806e..ae9f3f4a10e 100755 --- a/tools/ci/lua.sh +++ b/tools/ci/lua.sh @@ -212,6 +212,8 @@ global_objects=( ForceCrash BuildString + + DYNAMIC_LOOKUP ) ignores=( diff --git a/tools/dbtool.py b/tools/dbtool.py index 4775fee8154..debd6274035 100644 --- a/tools/dbtool.py +++ b/tools/dbtool.py @@ -289,7 +289,6 @@ def fetch_files(express=False): def write_version(silent=False): global db_ver - success = False update_client = auto_update_client if not silent and current_client != release_client: update_client = input('Update client version? [y/N] ').lower() == 'y' diff --git a/tools/headlessxi/hxiclient.py b/tools/headlessxi/hxiclient.py index c64c10d5b62..9395a03a3e4 100644 --- a/tools/headlessxi/hxiclient.py +++ b/tools/headlessxi/hxiclient.py @@ -17,8 +17,9 @@ def __init__(self, username, password, server, slot=1, client_str=''): # Read from version.conf default if client_str == '': - with open('conf/default/version.conf') as f: - client_str = f.readlines()[1].split(":")[1].strip() + with open('settings/default/login.lua') as f: + settings_file = f.read() + client_str = re.search(r'CLIENT_VER = "(.*?)"', settings_file)[1] print("Client version:", client_str) self.client_str = client_str diff --git a/tools/wait_for_db_then_launch.sh b/tools/wait_for_db_then_launch.sh index 47ab1484319..06ecb9f357a 100644 --- a/tools/wait_for_db_then_launch.sh +++ b/tools/wait_for_db_then_launch.sh @@ -1,6 +1,6 @@ #!/bin/bash -while ! mysql --host=$XI_DB_HOST --port=$XI_DB_PORT --user=$XI_DB_USER --password=$XI_DB_USER_PASSWD $XI_DB_NAME -e "SELECT 1 FROM zone_weather LIMIT 1"; do +while ! mysql --host=$XI_NETWORK_SQL_HOST --port=$XI_NETWORK_SQL_PORT --user=$XI_NETWORK_SQL_LOGIN --password=$XI_NETWORK_SQL_PASSWORD $XI_NETWORK_SQL_DATABASE -e "SELECT 1 FROM zone_weather LIMIT 1"; do sleep 5 done sleep 5